{"version":3,"file":"RoverGeometry6.Cmc3FJfk.mjs","names":["nVertexUniforms","chunk","chunk","chunk","chunk","chunk"],"sources":["https:/cdn.jsdelivr.net/npm/three@0.128.0/build/three.module.js","https:/framerusercontent.com/modules/Xlz7RckeJuYLK8gwkczk/u6aNeiXg40I7aMI2InaP/RoverGeometry1.js","https:/framerusercontent.com/modules/O5L1aPf705UKSBESpIMO/pRG1qAVnHMK71q00Db5y/RoverGeometry2.js","https:/framerusercontent.com/modules/Kj78RfuVOkIaUx1z1ZqG/etrfqefbKlRfdh9OuJba/RoverGeometry3.js","https:/framerusercontent.com/modules/cWXB150b7AzFmLCHnCg3/GuRfVeCB11MxmUnbn4TA/RoverGeometry4.js","https:/framerusercontent.com/modules/oFyKWERfg3zsGJ924txa/76V7ebi5s9qNjtLieACz/RoverGeometry5.js","https:/framerusercontent.com/modules/2TkD8qtoD16cd4K4VmC6/xLhgE46N6LaPvf0BvcmL/RoverGeometry6.js"],"sourcesContent":["/**\n * @license\n * Copyright 2010-2021 Three.js Authors\n * SPDX-License-Identifier: MIT\n */\nconst REVISION = '128';\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\nconst GLSL1 = '100';\nconst GLSL3 = '300 es';\n\n/**\n * https://github.com/mrdoob/eventdispatcher.js/\n */\n\nclass EventDispatcher {\n\n\taddEventListener( 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( 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( 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( 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\tevent.target = null;\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\n\nconst DEG2RAD = Math.PI / 180;\nconst RAD2DEG = 180 / Math.PI;\n\n// http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/21963136#21963136\nfunction generateUUID() {\n\n\tconst d0 = Math.random() * 0xffffffff | 0;\n\tconst d1 = Math.random() * 0xffffffff | 0;\n\tconst d2 = Math.random() * 0xffffffff | 0;\n\tconst d3 = Math.random() * 0xffffffff | 0;\n\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// .toUpperCase() here flattens concatenated strings to save heap memory space.\n\treturn uuid.toUpperCase();\n\n}\n\nfunction clamp( value, min, max ) {\n\n\treturn Math.max( min, Math.min( max, value ) );\n\n}\n\n// compute euclidian modulo of m % n\n// https://en.wikipedia.org/wiki/Modulo_operation\nfunction euclideanModulo( n, m ) {\n\n\treturn ( ( n % m ) + m ) % m;\n\n}\n\n// Linear mapping from range <a1, a2> to range <b1, b2>\nfunction mapLinear( x, a1, a2, b1, b2 ) {\n\n\treturn b1 + ( x - a1 ) * ( b2 - b1 ) / ( a2 - a1 );\n\n}\n\n// https://www.gamedev.net/tutorials/programming/general-and-gameplay-programming/inverse-lerp-a-super-useful-yet-often-overlooked-function-r5230/\nfunction inverseLerp( x, y, value ) {\n\n\tif ( x !== y ) {\n\n\t\treturn ( value - x ) / ( y - x );\n\n\t\t } else {\n\n\t\treturn 0;\n\n\t\t }\n\n}\n\n// https://en.wikipedia.org/wiki/Linear_interpolation\nfunction lerp( x, y, t ) {\n\n\treturn ( 1 - t ) * x + t * y;\n\n}\n\n// http://www.rorydriscoll.com/2016/03/07/frame-rate-independent-damping-using-lerp/\nfunction damp( x, y, lambda, dt ) {\n\n\treturn lerp( x, y, 1 - Math.exp( - lambda * dt ) );\n\n}\n\n// https://www.desmos.com/calculator/vcsjnyz7x4\nfunction pingpong( x, length = 1 ) {\n\n\treturn length - Math.abs( euclideanModulo( x, length * 2 ) - length );\n\n}\n\n// http://en.wikipedia.org/wiki/Smoothstep\nfunction smoothstep( x, min, max ) {\n\n\tif ( x <= min ) return 0;\n\tif ( x >= max ) return 1;\n\n\tx = ( x - min ) / ( max - min );\n\n\treturn x * x * ( 3 - 2 * x );\n\n}\n\nfunction smootherstep( x, min, max ) {\n\n\tif ( x <= min ) return 0;\n\tif ( x >= max ) return 1;\n\n\tx = ( x - min ) / ( max - min );\n\n\treturn x * x * x * ( x * ( x * 6 - 15 ) + 10 );\n\n}\n\n// Random integer from <low, high> interval\nfunction randInt( low, high ) {\n\n\treturn low + Math.floor( Math.random() * ( high - low + 1 ) );\n\n}\n\n// Random float from <low, high> interval\nfunction randFloat( low, high ) {\n\n\treturn low + Math.random() * ( high - low );\n\n}\n\n// Random float from <-range/2, range/2> interval\nfunction randFloatSpread( range ) {\n\n\treturn range * ( 0.5 - Math.random() );\n\n}\n\n// Deterministic pseudo-random float in the interval [ 0, 1 ]\nfunction seededRandom( s ) {\n\n\tif ( s !== undefined ) _seed = s % 2147483647;\n\n\t// Park-Miller algorithm\n\n\t_seed = _seed * 16807 % 2147483647;\n\n\treturn ( _seed - 1 ) / 2147483646;\n\n}\n\nfunction degToRad( degrees ) {\n\n\treturn degrees * DEG2RAD;\n\n}\n\nfunction radToDeg( radians ) {\n\n\treturn radians * RAD2DEG;\n\n}\n\nfunction isPowerOfTwo( value ) {\n\n\treturn ( value & ( value - 1 ) ) === 0 && value !== 0;\n\n}\n\nfunction ceilPowerOfTwo( value ) {\n\n\treturn Math.pow( 2, Math.ceil( Math.log( value ) / Math.LN2 ) );\n\n}\n\nfunction floorPowerOfTwo( value ) {\n\n\treturn Math.pow( 2, Math.floor( Math.log( value ) / Math.LN2 ) );\n\n}\n\nfunction setQuaternionFromProperEuler( q, a, b, c, order ) {\n\n\t// Intrinsic Proper Euler Angles - see https://en.wikipedia.org/wiki/Euler_angles\n\n\t// rotations are applied to the axes in the order specified by 'order'\n\t// rotation by angle 'a' is applied first, then by angle 'b', then by angle 'c'\n\t// angles are in radians\n\n\tconst cos = Math.cos;\n\tconst sin = Math.sin;\n\n\tconst c2 = cos( b / 2 );\n\tconst s2 = sin( b / 2 );\n\n\tconst c13 = cos( ( a + c ) / 2 );\n\tconst s13 = sin( ( a + c ) / 2 );\n\n\tconst c1_3 = cos( ( a - c ) / 2 );\n\tconst s1_3 = sin( ( a - c ) / 2 );\n\n\tconst c3_1 = cos( ( c - a ) / 2 );\n\tconst s3_1 = sin( ( c - a ) / 2 );\n\n\tswitch ( order ) {\n\n\t\tcase 'XYX':\n\t\t\tq.set( c2 * s13, s2 * c1_3, s2 * s1_3, c2 * c13 );\n\t\t\tbreak;\n\n\t\tcase 'YZY':\n\t\t\tq.set( s2 * s1_3, c2 * s13, s2 * c1_3, c2 * c13 );\n\t\t\tbreak;\n\n\t\tcase 'ZXZ':\n\t\t\tq.set( s2 * c1_3, s2 * s1_3, c2 * s13, c2 * c13 );\n\t\t\tbreak;\n\n\t\tcase 'XZX':\n\t\t\tq.set( c2 * s13, s2 * s3_1, s2 * c3_1, c2 * c13 );\n\t\t\tbreak;\n\n\t\tcase 'YXY':\n\t\t\tq.set( s2 * c3_1, c2 * s13, s2 * s3_1, c2 * c13 );\n\t\t\tbreak;\n\n\t\tcase 'ZYZ':\n\t\t\tq.set( s2 * s3_1, s2 * c3_1, c2 * s13, c2 * c13 );\n\t\t\tbreak;\n\n\t\tdefault:\n\t\t\tconsole.warn( 'THREE.MathUtils: .setQuaternionFromProperEuler() encountered an unknown order: ' + order );\n\n\t}\n\n}\n\nvar MathUtils = /*#__PURE__*/Object.freeze({\n\t__proto__: null,\n\tDEG2RAD: DEG2RAD,\n\tRAD2DEG: RAD2DEG,\n\tgenerateUUID: generateUUID,\n\tclamp: clamp,\n\teuclideanModulo: euclideanModulo,\n\tmapLinear: mapLinear,\n\tinverseLerp: inverseLerp,\n\tlerp: lerp,\n\tdamp: damp,\n\tpingpong: pingpong,\n\tsmoothstep: smoothstep,\n\tsmootherstep: smootherstep,\n\trandInt: randInt,\n\trandFloat: randFloat,\n\trandFloatSpread: randFloatSpread,\n\tseededRandom: seededRandom,\n\tdegToRad: degToRad,\n\tradToDeg: radToDeg,\n\tisPowerOfTwo: isPowerOfTwo,\n\tceilPowerOfTwo: ceilPowerOfTwo,\n\tfloorPowerOfTwo: floorPowerOfTwo,\n\tsetQuaternionFromProperEuler: setQuaternionFromProperEuler\n});\n\nclass Vector2 {\n\n\tconstructor( x = 0, y = 0 ) {\n\n\t\tthis.x = x;\n\t\tthis.y = y;\n\n\t}\n\n\tget width() {\n\n\t\treturn this.x;\n\n\t}\n\n\tset width( value ) {\n\n\t\tthis.x = value;\n\n\t}\n\n\tget height() {\n\n\t\treturn this.y;\n\n\t}\n\n\tset height( value ) {\n\n\t\tthis.y = value;\n\n\t}\n\n\tset( x, y ) {\n\n\t\tthis.x = x;\n\t\tthis.y = y;\n\n\t\treturn this;\n\n\t}\n\n\tsetScalar( scalar ) {\n\n\t\tthis.x = scalar;\n\t\tthis.y = scalar;\n\n\t\treturn this;\n\n\t}\n\n\tsetX( x ) {\n\n\t\tthis.x = x;\n\n\t\treturn this;\n\n\t}\n\n\tsetY( y ) {\n\n\t\tthis.y = y;\n\n\t\treturn this;\n\n\t}\n\n\tsetComponent( 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( 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() {\n\n\t\treturn new this.constructor( this.x, this.y );\n\n\t}\n\n\tcopy( 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( 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( s ) {\n\n\t\tthis.x += s;\n\t\tthis.y += s;\n\n\t\treturn this;\n\n\t}\n\n\taddVectors( 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( 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( 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( s ) {\n\n\t\tthis.x -= s;\n\t\tthis.y -= s;\n\n\t\treturn this;\n\n\t}\n\n\tsubVectors( 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( 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( scalar ) {\n\n\t\tthis.x *= scalar;\n\t\tthis.y *= scalar;\n\n\t\treturn this;\n\n\t}\n\n\tdivide( 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( scalar ) {\n\n\t\treturn this.multiplyScalar( 1 / scalar );\n\n\t}\n\n\tapplyMatrix3( 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( 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( 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( 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( 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( 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() {\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() {\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() {\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() {\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() {\n\n\t\tthis.x = - this.x;\n\t\tthis.y = - this.y;\n\n\t\treturn this;\n\n\t}\n\n\tdot( v ) {\n\n\t\treturn this.x * v.x + this.y * v.y;\n\n\t}\n\n\tcross( v ) {\n\n\t\treturn this.x * v.y - this.y * v.x;\n\n\t}\n\n\tlengthSq() {\n\n\t\treturn this.x * this.x + this.y * this.y;\n\n\t}\n\n\tlength() {\n\n\t\treturn Math.sqrt( this.x * this.x + this.y * this.y );\n\n\t}\n\n\tmanhattanLength() {\n\n\t\treturn Math.abs( this.x ) + Math.abs( this.y );\n\n\t}\n\n\tnormalize() {\n\n\t\treturn this.divideScalar( this.length() || 1 );\n\n\t}\n\n\tangle() {\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( v ) {\n\n\t\treturn Math.sqrt( this.distanceToSquared( v ) );\n\n\t}\n\n\tdistanceToSquared( 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( v ) {\n\n\t\treturn Math.abs( this.x - v.x ) + Math.abs( this.y - v.y );\n\n\t}\n\n\tsetLength( length ) {\n\n\t\treturn this.normalize().multiplyScalar( length );\n\n\t}\n\n\tlerp( 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( 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( v ) {\n\n\t\treturn ( ( v.x === this.x ) && ( v.y === this.y ) );\n\n\t}\n\n\tfromArray( array, 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( array = [], 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( 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( 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() {\n\n\t\tthis.x = Math.random();\n\t\tthis.y = Math.random();\n\n\t\treturn this;\n\n\t}\n\n}\n\nVector2.prototype.isVector2 = true;\n\nclass Matrix3 {\n\n\tconstructor() {\n\n\t\tthis.elements = [\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\tif ( arguments.length > 0 ) {\n\n\t\t\tconsole.error( 'THREE.Matrix3: the constructor no longer reads arguments. use .set() instead.' );\n\n\t\t}\n\n\t}\n\n\tset( 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() {\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\tcopy( 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( 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( 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( m ) {\n\n\t\treturn this.multiplyMatrices( this, m );\n\n\t}\n\n\tpremultiply( m ) {\n\n\t\treturn this.multiplyMatrices( m, this );\n\n\t}\n\n\tmultiplyMatrices( 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( 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() {\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\tinvert() {\n\n\t\tconst te = this.elements,\n\n\t\t\tn11 = te[ 0 ], n21 = te[ 1 ], n31 = te[ 2 ],\n\t\t\tn12 = te[ 3 ], n22 = te[ 4 ], n32 = te[ 5 ],\n\t\t\tn13 = te[ 6 ], n23 = te[ 7 ], n33 = te[ 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() {\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( matrix4 ) {\n\n\t\treturn this.setFromMatrix4( matrix4 ).invert().transpose();\n\n\t}\n\n\ttransposeIntoArray( 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( 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\treturn this;\n\n\t}\n\n\tscale( 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( 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( 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( 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( array, 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( array = [], 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\tclone() {\n\n\t\treturn new this.constructor().fromArray( this.elements );\n\n\t}\n\n}\n\nMatrix3.prototype.isMatrix3 = true;\n\nlet _canvas;\n\nclass ImageUtils {\n\n\tstatic getDataURL( 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\tconsole.warn( 'THREE.ImageUtils.getDataURL: Image converted to jpg for performance reasons', image );\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\nclass Texture extends EventDispatcher {\n\n\tconstructor( image = Texture.DEFAULT_IMAGE, mapping = Texture.DEFAULT_MAPPING, wrapS = ClampToEdgeWrapping, wrapT = ClampToEdgeWrapping, magFilter = LinearFilter, minFilter = LinearMipmapLinearFilter, format = RGBAFormat, type = UnsignedByteType, anisotropy = 1, encoding = LinearEncoding ) {\n\n\t\tsuper();\n\n\t\tObject.defineProperty( this, 'id', { value: textureId ++ } );\n\n\t\tthis.uuid = generateUUID();\n\n\t\tthis.name = '';\n\n\t\tthis.image = image;\n\t\tthis.mipmaps = [];\n\n\t\tthis.mapping = mapping;\n\n\t\tthis.wrapS = wrapS;\n\t\tthis.wrapT = wrapT;\n\n\t\tthis.magFilter = magFilter;\n\t\tthis.minFilter = minFilter;\n\n\t\tthis.anisotropy = anisotropy;\n\n\t\tthis.format = format;\n\t\tthis.internalFormat = null;\n\t\tthis.type = type;\n\n\t\tthis.offset = new Vector2( 0, 0 );\n\t\tthis.repeat = new Vector2( 1, 1 );\n\t\tthis.center = new Vector2( 0, 0 );\n\t\tthis.rotation = 0;\n\n\t\tthis.matrixAutoUpdate = true;\n\t\tthis.matrix = new Matrix3();\n\n\t\tthis.generateMipmaps = true;\n\t\tthis.premultiplyAlpha = false;\n\t\tthis.flipY = true;\n\t\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\t// Values of encoding !== THREE.LinearEncoding only supported on map, envMap and emissiveMap.\n\t\t//\n\t\t// Also changing the encoding after already used by a Material will not automatically make the Material\n\t\t// update. You need to explicitly call Material.needsUpdate to trigger it to recompile.\n\t\tthis.encoding = encoding;\n\n\t\tthis.version = 0;\n\t\tthis.onUpdate = null;\n\n\t}\n\n\tupdateMatrix() {\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() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tcopy( 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( 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 = 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\t// check cube texture with data textures\n\n\t\t\t\t\t\tif ( image[ i ].isDataTexture ) {\n\n\t\t\t\t\t\t\turl.push( serializeImage( image[ i ].image ) );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\turl.push( serializeImage( image[ i ] ) );\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\t// process single image\n\n\t\t\t\t\turl = serializeImage( 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() {\n\n\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t}\n\n\ttransformUv( 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\tset needsUpdate( value ) {\n\n\t\tif ( value === true ) this.version ++;\n\n\t}\n\n}\n\nTexture.DEFAULT_IMAGE = undefined;\nTexture.DEFAULT_MAPPING = UVMapping;\n\nTexture.prototype.isTexture = true;\n\nfunction serializeImage( image ) {\n\n\tif ( ( typeof HTMLImageElement !== 'undefined' && image instanceof HTMLImageElement ) ||\n\t\t( typeof HTMLCanvasElement !== 'undefined' && image instanceof HTMLCanvasElement ) ||\n\t\t( typeof ImageBitmap !== 'undefined' && image instanceof ImageBitmap ) ) {\n\n\t\t// default images\n\n\t\treturn ImageUtils.getDataURL( image );\n\n\t} else {\n\n\t\tif ( image.data ) {\n\n\t\t\t// images of DataTexture\n\n\t\t\treturn {\n\t\t\t\tdata: Array.prototype.slice.call( image.data ),\n\t\t\t\twidth: image.width,\n\t\t\t\theight: image.height,\n\t\t\t\ttype: image.data.constructor.name\n\t\t\t};\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'THREE.Texture: Unable to serialize Texture.' );\n\t\t\treturn {};\n\n\t\t}\n\n\t}\n\n}\n\nclass Vector4 {\n\n\tconstructor( x = 0, y = 0, z = 0, w = 1 ) {\n\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t\tthis.z = z;\n\t\tthis.w = w;\n\n\t}\n\n\tget width() {\n\n\t\treturn this.z;\n\n\t}\n\n\tset width( value ) {\n\n\t\tthis.z = value;\n\n\t}\n\n\tget height() {\n\n\t\treturn this.w;\n\n\t}\n\n\tset height( value ) {\n\n\t\tthis.w = value;\n\n\t}\n\n\tset( 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( 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( x ) {\n\n\t\tthis.x = x;\n\n\t\treturn this;\n\n\t}\n\n\tsetY( y ) {\n\n\t\tthis.y = y;\n\n\t\treturn this;\n\n\t}\n\n\tsetZ( z ) {\n\n\t\tthis.z = z;\n\n\t\treturn this;\n\n\t}\n\n\tsetW( w ) {\n\n\t\tthis.w = w;\n\n\t\treturn this;\n\n\t}\n\n\tsetComponent( 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( 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() {\n\n\t\treturn new this.constructor( this.x, this.y, this.z, this.w );\n\n\t}\n\n\tcopy( 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( 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( 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( 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( 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( 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( 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( 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\tmultiply( 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;\n\n\t\treturn this;\n\n\t}\n\n\tmultiplyScalar( 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( 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( scalar ) {\n\n\t\treturn this.multiplyScalar( 1 / scalar );\n\n\t}\n\n\tsetAxisAngleFromQuaternion( 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( 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( 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( 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( 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( 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( 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() {\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() {\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() {\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() {\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() {\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( 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() {\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() {\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() {\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() {\n\n\t\treturn this.divideScalar( this.length() || 1 );\n\n\t}\n\n\tsetLength( length ) {\n\n\t\treturn this.normalize().multiplyScalar( length );\n\n\t}\n\n\tlerp( 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( 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( 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( array, 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( array = [], 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( 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() {\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\nVector4.prototype.isVector4 = true;\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*/\nclass WebGLRenderTarget extends EventDispatcher {\n\n\tconstructor( width, height, options ) {\n\n\t\tsuper();\n\n\t\tthis.width = width;\n\t\tthis.height = height;\n\t\tthis.depth = 1;\n\n\t\tthis.scissor = new Vector4( 0, 0, width, height );\n\t\tthis.scissorTest = false;\n\n\t\tthis.viewport = new Vector4( 0, 0, width, height );\n\n\t\toptions = options || {};\n\n\t\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\t\tthis.texture.image = {};\n\t\tthis.texture.image.width = width;\n\t\tthis.texture.image.height = height;\n\t\tthis.texture.image.depth = 1;\n\n\t\tthis.texture.generateMipmaps = options.generateMipmaps !== undefined ? options.generateMipmaps : false;\n\t\tthis.texture.minFilter = options.minFilter !== undefined ? options.minFilter : LinearFilter;\n\n\t\tthis.depthBuffer = options.depthBuffer !== undefined ? options.depthBuffer : true;\n\t\tthis.stencilBuffer = options.stencilBuffer !== undefined ? options.stencilBuffer : false;\n\t\tthis.depthTexture = options.depthTexture !== undefined ? options.depthTexture : null;\n\n\t}\n\n\tsetTexture( texture ) {\n\n\t\ttexture.image = {\n\t\t\twidth: this.width,\n\t\t\theight: this.height,\n\t\t\tdepth: this.depth\n\t\t};\n\n\t\tthis.texture = texture;\n\n\t}\n\n\tsetSize( width, height, depth = 1 ) {\n\n\t\tif ( this.width !== width || this.height !== height || this.depth !== depth ) {\n\n\t\t\tthis.width = width;\n\t\t\tthis.height = height;\n\t\t\tthis.depth = depth;\n\n\t\t\tthis.texture.image.width = width;\n\t\t\tthis.texture.image.height = height;\n\t\t\tthis.texture.image.depth = depth;\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() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tthis.width = source.width;\n\t\tthis.height = source.height;\n\t\tthis.depth = source.depth;\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() {\n\n\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t}\n\n}\n\nWebGLRenderTarget.prototype.isWebGLRenderTarget = true;\n\nclass WebGLMultisampleRenderTarget extends WebGLRenderTarget {\n\n\tconstructor( width, height, options ) {\n\n\t\tsuper( width, height, options );\n\n\t\tthis.samples = 4;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy.call( this, source );\n\n\t\tthis.samples = source.samples;\n\n\t\treturn this;\n\n\t}\n\n}\n\nWebGLMultisampleRenderTarget.prototype.isWebGLMultisampleRenderTarget = true;\n\nclass Quaternion {\n\n\tconstructor( x = 0, y = 0, z = 0, w = 1 ) {\n\n\t\tthis._x = x;\n\t\tthis._y = y;\n\t\tthis._z = z;\n\t\tthis._w = w;\n\n\t}\n\n\tstatic slerp( qa, qb, qm, t ) {\n\n\t\tconsole.warn( 'THREE.Quaternion: Static .slerp() has been deprecated. Use qm.slerpQuaternions( qa, qb, t ) instead.' );\n\t\treturn qm.slerpQuaternions( qa, qb, t );\n\n\t}\n\n\tstatic slerpFlat( 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 ( t === 0 ) {\n\n\t\t\tdst[ dstOffset + 0 ] = x0;\n\t\t\tdst[ dstOffset + 1 ] = y0;\n\t\t\tdst[ dstOffset + 2 ] = z0;\n\t\t\tdst[ dstOffset + 3 ] = w0;\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( t === 1 ) {\n\n\t\t\tdst[ dstOffset + 0 ] = x1;\n\t\t\tdst[ dstOffset + 1 ] = y1;\n\t\t\tdst[ dstOffset + 2 ] = z1;\n\t\t\tdst[ dstOffset + 3 ] = w1;\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( w0 !== w1 || x0 !== x1 || y0 !== y1 || z0 !== z1 ) {\n\n\t\t\tlet s = 1 - t;\n\t\t\tconst cos = x0 * x1 + y0 * y1 + z0 * z1 + w0 * w1,\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\tstatic multiplyQuaternionsFlat( 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\tget x() {\n\n\t\treturn this._x;\n\n\t}\n\n\tset x( value ) {\n\n\t\tthis._x = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\tget y() {\n\n\t\treturn this._y;\n\n\t}\n\n\tset y( value ) {\n\n\t\tthis._y = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\tget z() {\n\n\t\treturn this._z;\n\n\t}\n\n\tset z( value ) {\n\n\t\tthis._z = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\tget w() {\n\n\t\treturn this._w;\n\n\t}\n\n\tset w( value ) {\n\n\t\tthis._w = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\tset( 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() {\n\n\t\treturn new this.constructor( this._x, this._y, this._z, this._w );\n\n\t}\n\n\tcopy( 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( 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( 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( 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( vFrom, vTo ) {\n\n\t\t// assumes direction vectors vFrom and vTo are normalized\n\n\t\tlet r = vFrom.dot( vTo ) + 1;\n\n\t\tif ( r < Number.EPSILON ) {\n\n\t\t\t// vFrom and vTo point in opposite directions\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( q ) {\n\n\t\treturn 2 * Math.acos( Math.abs( clamp( this.dot( q ), - 1, 1 ) ) );\n\n\t}\n\n\trotateTowards( 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() {\n\n\t\treturn this.set( 0, 0, 0, 1 );\n\n\t}\n\n\tinvert() {\n\n\t\t// quaternion is assumed to have unit length\n\n\t\treturn this.conjugate();\n\n\t}\n\n\tconjugate() {\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( 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() {\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() {\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() {\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( 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( q ) {\n\n\t\treturn this.multiplyQuaternions( q, this );\n\n\t}\n\n\tmultiplyQuaternions( 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( 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\tslerpQuaternions( qa, qb, t ) {\n\n\t\tthis.copy( qa ).slerp( qb, t );\n\n\t}\n\n\tequals( 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( array, 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( array = [], 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( 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( callback ) {\n\n\t\tthis._onChangeCallback = callback;\n\n\t\treturn this;\n\n\t}\n\n\t_onChangeCallback() {}\n\n}\n\nQuaternion.prototype.isQuaternion = true;\n\nclass Vector3 {\n\n\tconstructor( x = 0, y = 0, z = 0 ) {\n\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t\tthis.z = z;\n\n\t}\n\n\tset( 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( 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( x ) {\n\n\t\tthis.x = x;\n\n\t\treturn this;\n\n\t}\n\n\tsetY( y ) {\n\n\t\tthis.y = y;\n\n\t\treturn this;\n\n\t}\n\n\tsetZ( z ) {\n\n\t\tthis.z = z;\n\n\t\treturn this;\n\n\t}\n\n\tsetComponent( 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( 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() {\n\n\t\treturn new this.constructor( this.x, this.y, this.z );\n\n\t}\n\n\tcopy( 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( 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( 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( 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( 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( 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( 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( 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( 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( 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( 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( 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$4.setFromEuler( euler ) );\n\n\t}\n\n\tapplyAxisAngle( axis, angle ) {\n\n\t\treturn this.applyQuaternion( _quaternion$4.setFromAxisAngle( axis, angle ) );\n\n\t}\n\n\tapplyMatrix3( 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( m ) {\n\n\t\treturn this.applyMatrix3( m ).normalize();\n\n\t}\n\n\tapplyMatrix4( 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( 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( camera ) {\n\n\t\treturn this.applyMatrix4( camera.matrixWorldInverse ).applyMatrix4( camera.projectionMatrix );\n\n\t}\n\n\tunproject( camera ) {\n\n\t\treturn this.applyMatrix4( camera.projectionMatrixInverse ).applyMatrix4( camera.matrixWorld );\n\n\t}\n\n\ttransformDirection( 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( 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( scalar ) {\n\n\t\treturn this.multiplyScalar( 1 / scalar );\n\n\t}\n\n\tmin( 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( 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( 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( 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( 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() {\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() {\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() {\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() {\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() {\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( 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() {\n\n\t\treturn this.x * this.x + this.y * this.y + this.z * this.z;\n\n\t}\n\n\tlength() {\n\n\t\treturn Math.sqrt( this.x * this.x + this.y * this.y + this.z * this.z );\n\n\t}\n\n\tmanhattanLength() {\n\n\t\treturn Math.abs( this.x ) + Math.abs( this.y ) + Math.abs( this.z );\n\n\t}\n\n\tnormalize() {\n\n\t\treturn this.divideScalar( this.length() || 1 );\n\n\t}\n\n\tsetLength( length ) {\n\n\t\treturn this.normalize().multiplyScalar( length );\n\n\t}\n\n\tlerp( 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( 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( 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( 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( 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( planeNormal ) {\n\n\t\t_vector$c.copy( this ).projectOnVector( planeNormal );\n\n\t\treturn this.sub( _vector$c );\n\n\t}\n\n\treflect( 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$c.copy( normal ).multiplyScalar( 2 * this.dot( normal ) ) );\n\n\t}\n\n\tangleTo( 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( clamp( theta, - 1, 1 ) );\n\n\t}\n\n\tdistanceTo( v ) {\n\n\t\treturn Math.sqrt( this.distanceToSquared( v ) );\n\n\t}\n\n\tdistanceToSquared( 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( 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( s ) {\n\n\t\treturn this.setFromSphericalCoords( s.radius, s.phi, s.theta );\n\n\t}\n\n\tsetFromSphericalCoords( 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( c ) {\n\n\t\treturn this.setFromCylindricalCoords( c.radius, c.theta, c.y );\n\n\t}\n\n\tsetFromCylindricalCoords( 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( 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( 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( m, index ) {\n\n\t\treturn this.fromArray( m.elements, index * 4 );\n\n\t}\n\n\tsetFromMatrix3Column( m, index ) {\n\n\t\treturn this.fromArray( m.elements, index * 3 );\n\n\t}\n\n\tequals( v ) {\n\n\t\treturn ( ( v.x === this.x ) && ( v.y === this.y ) && ( v.z === this.z ) );\n\n\t}\n\n\tfromArray( array, 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( array = [], 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( 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() {\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\nVector3.prototype.isVector3 = true;\n\nconst _vector$c = /*@__PURE__*/ new Vector3();\nconst _quaternion$4 = /*@__PURE__*/ new Quaternion();\n\nclass Box3 {\n\n\tconstructor( min = new Vector3( + Infinity, + Infinity, + Infinity ), max = new Vector3( - Infinity, - Infinity, - Infinity ) ) {\n\n\t\tthis.min = min;\n\t\tthis.max = max;\n\n\t}\n\n\tset( 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( 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( 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( 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( center, size ) {\n\n\t\tconst halfSize = _vector$b.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( object ) {\n\n\t\tthis.makeEmpty();\n\n\t\treturn this.expandByObject( object );\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tcopy( 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() {\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() {\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( 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( 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( 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( 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( 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( 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$3.copy( geometry.boundingBox );\n\t\t\t_box$3.applyMatrix4( object.matrixWorld );\n\n\t\t\tthis.union( _box$3 );\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( 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( 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( 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( 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( sphere ) {\n\n\t\t// Find the point on the AABB closest to the sphere center.\n\t\tthis.clampPoint( sphere.center, _vector$b );\n\n\t\t// If that point is inside the sphere, the AABB and sphere intersect.\n\t\treturn _vector$b.distanceToSquared( sphere.center ) <= ( sphere.radius * sphere.radius );\n\n\t}\n\n\tintersectsPlane( 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( 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$2.subVectors( triangle.a, _center );\n\t\t_v1$7.subVectors( triangle.b, _center );\n\t\t_v2$3.subVectors( triangle.c, _center );\n\n\t\t// compute edge vectors for triangle\n\t\t_f0.subVectors( _v1$7, _v0$2 );\n\t\t_f1.subVectors( _v2$3, _v1$7 );\n\t\t_f2.subVectors( _v0$2, _v2$3 );\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$2, _v1$7, _v2$3, _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$2, _v1$7, _v2$3, _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$2, _v1$7, _v2$3, _extents );\n\n\t}\n\n\tclampPoint( 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( point ) {\n\n\t\tconst clampedPoint = _vector$b.copy( point ).clamp( this.min, this.max );\n\n\t\treturn clampedPoint.sub( point ).length();\n\n\t}\n\n\tgetBoundingSphere( 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$b ).length() * 0.5;\n\n\t\treturn target;\n\n\t}\n\n\tintersect( 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( 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( 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( 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( box ) {\n\n\t\treturn box.min.equals( this.min ) && box.max.equals( this.max );\n\n\t}\n\n}\n\nBox3.prototype.isBox3 = true;\n\nconst _points = [\n\t/*@__PURE__*/ new Vector3(),\n\t/*@__PURE__*/ new Vector3(),\n\t/*@__PURE__*/ new Vector3(),\n\t/*@__PURE__*/ new Vector3(),\n\t/*@__PURE__*/ new Vector3(),\n\t/*@__PURE__*/ new Vector3(),\n\t/*@__PURE__*/ new Vector3(),\n\t/*@__PURE__*/ new Vector3()\n];\n\nconst _vector$b = /*@__PURE__*/ new Vector3();\n\nconst _box$3 = /*@__PURE__*/ new Box3();\n\n// triangle centered vertices\n\nconst _v0$2 = /*@__PURE__*/ new Vector3();\nconst _v1$7 = /*@__PURE__*/ new Vector3();\nconst _v2$3 = /*@__PURE__*/ new Vector3();\n\n// triangle edge vectors\n\nconst _f0 = /*@__PURE__*/ new Vector3();\nconst _f1 = /*@__PURE__*/ new Vector3();\nconst _f2 = /*@__PURE__*/ new Vector3();\n\nconst _center = /*@__PURE__*/ new Vector3();\nconst _extents = /*@__PURE__*/ new Vector3();\nconst _triangleNormal = /*@__PURE__*/ new Vector3();\nconst _testAxis = /*@__PURE__*/ new Vector3();\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$2 = /*@__PURE__*/ new Box3();\nconst _v1$6 = /*@__PURE__*/ new Vector3();\nconst _toFarthestPoint = /*@__PURE__*/ new Vector3();\nconst _toPoint = /*@__PURE__*/ new Vector3();\n\nclass Sphere {\n\n\tconstructor( center = new Vector3(), radius = - 1 ) {\n\n\t\tthis.center = center;\n\t\tthis.radius = radius;\n\n\t}\n\n\tset( 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( 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$2.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\tcopy( 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() {\n\n\t\treturn ( this.radius < 0 );\n\n\t}\n\n\tmakeEmpty() {\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( point ) {\n\n\t\treturn ( point.distanceToSquared( this.center ) <= ( this.radius * this.radius ) );\n\n\t}\n\n\tdistanceToPoint( point ) {\n\n\t\treturn ( point.distanceTo( this.center ) - this.radius );\n\n\t}\n\n\tintersectsSphere( 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( box ) {\n\n\t\treturn box.intersectsSphere( this );\n\n\t}\n\n\tintersectsPlane( plane ) {\n\n\t\treturn Math.abs( plane.distanceToPoint( this.center ) ) <= this.radius;\n\n\t}\n\n\tclampPoint( 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( 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( 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( offset ) {\n\n\t\tthis.center.add( offset );\n\n\t\treturn this;\n\n\t}\n\n\texpandByPoint( point ) {\n\n\t\t// from https://github.com/juj/MathGeoLib/blob/2940b99b99cfe575dd45103ef20f4019dee15b54/src/Geometry/Sphere.cpp#L649-L671\n\n\t\t_toPoint.subVectors( point, this.center );\n\n\t\tconst lengthSq = _toPoint.lengthSq();\n\n\t\tif ( lengthSq > ( this.radius * this.radius ) ) {\n\n\t\t\tconst length = Math.sqrt( lengthSq );\n\t\t\tconst missingRadiusHalf = ( length - this.radius ) * 0.5;\n\n\t\t\t// Nudge this sphere towards the target point. Add half the missing distance to radius,\n\t\t\t// and the other half to position. This gives a tighter enclosure, instead of if\n\t\t\t// the whole missing distance were just added to radius.\n\n\t\t\tthis.center.add( _toPoint.multiplyScalar( missingRadiusHalf / length ) );\n\t\t\tthis.radius += missingRadiusHalf;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tunion( sphere ) {\n\n\t\t// from https://github.com/juj/MathGeoLib/blob/2940b99b99cfe575dd45103ef20f4019dee15b54/src/Geometry/Sphere.cpp#L759-L769\n\n\t\t// To enclose another sphere into this sphere, we only need to enclose two points:\n\t\t// 1) Enclose the farthest point on the other sphere into this sphere.\n\t\t// 2) Enclose the opposite point of the farthest point into this sphere.\n\n\t\t_toFarthestPoint.subVectors( sphere.center, this.center ).normalize().multiplyScalar( sphere.radius );\n\n\t\tthis.expandByPoint( _v1$6.copy( sphere.center ).add( _toFarthestPoint ) );\n\t\tthis.expandByPoint( _v1$6.copy( sphere.center ).sub( _toFarthestPoint ) );\n\n\t\treturn this;\n\n\t}\n\n\tequals( sphere ) {\n\n\t\treturn sphere.center.equals( this.center ) && ( sphere.radius === this.radius );\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n}\n\nconst _vector$a = /*@__PURE__*/ new Vector3();\nconst _segCenter = /*@__PURE__*/ new Vector3();\nconst _segDir = /*@__PURE__*/ new Vector3();\nconst _diff = /*@__PURE__*/ new Vector3();\n\nconst _edge1 = /*@__PURE__*/ new Vector3();\nconst _edge2 = /*@__PURE__*/ new Vector3();\nconst _normal$1 = /*@__PURE__*/ new Vector3();\n\nclass Ray {\n\n\tconstructor( origin = new Vector3(), direction = new Vector3( 0, 0, - 1 ) ) {\n\n\t\tthis.origin = origin;\n\t\tthis.direction = direction;\n\n\t}\n\n\tset( 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\tcopy( 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( 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( v ) {\n\n\t\tthis.direction.copy( v ).sub( this.origin ).normalize();\n\n\t\treturn this;\n\n\t}\n\n\trecast( t ) {\n\n\t\tthis.origin.copy( this.at( t, _vector$a ) );\n\n\t\treturn this;\n\n\t}\n\n\tclosestPointToPoint( 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( point ) {\n\n\t\treturn Math.sqrt( this.distanceSqToPoint( point ) );\n\n\t}\n\n\tdistanceSqToPoint( point ) {\n\n\t\tconst directionDistance = _vector$a.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$a.copy( this.direction ).multiplyScalar( directionDistance ).add( this.origin );\n\n\t\treturn _vector$a.distanceToSquared( point );\n\n\t}\n\n\tdistanceSqToSegment( 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( sphere, target ) {\n\n\t\t_vector$a.subVectors( sphere.center, this.origin );\n\t\tconst tca = _vector$a.dot( this.direction );\n\t\tconst d2 = _vector$a.dot( _vector$a ) - 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( sphere ) {\n\n\t\treturn this.distanceSqToPoint( sphere.center ) <= ( sphere.radius * sphere.radius );\n\n\t}\n\n\tdistanceToPlane( 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( 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( 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( 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( box ) {\n\n\t\treturn this.intersectBox( box, _vector$a ) !== null;\n\n\t}\n\n\tintersectTriangle( 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$1.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$1 );\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$1 );\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( 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( ray ) {\n\n\t\treturn ray.origin.equals( this.origin ) && ray.direction.equals( this.direction );\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n}\n\nclass Matrix4 {\n\n\tconstructor() {\n\n\t\tthis.elements = [\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\tif ( arguments.length > 0 ) {\n\n\t\t\tconsole.error( 'THREE.Matrix4: the constructor no longer reads arguments. use .set() instead.' );\n\n\t\t}\n\n\t}\n\n\tset( 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() {\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() {\n\n\t\treturn new Matrix4().fromArray( this.elements );\n\n\t}\n\n\tcopy( 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( 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\tsetFromMatrix3( m ) {\n\n\t\tconst me = m.elements;\n\n\t\tthis.set(\n\n\t\t\tme[ 0 ], me[ 3 ], me[ 6 ], 0,\n\t\t\tme[ 1 ], me[ 4 ], me[ 7 ], 0,\n\t\t\tme[ 2 ], me[ 5 ], me[ 8 ], 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\textractBasis( 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( 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( 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$5.setFromMatrixColumn( m, 0 ).length();\n\t\tconst scaleY = 1 / _v1$5.setFromMatrixColumn( m, 1 ).length();\n\t\tconst scaleZ = 1 / _v1$5.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( 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( q ) {\n\n\t\treturn this.compose( _zero, q, _one );\n\n\t}\n\n\tlookAt( 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( 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( m ) {\n\n\t\treturn this.multiplyMatrices( m, this );\n\n\t}\n\n\tmultiplyMatrices( 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( 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() {\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() {\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( 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\tinvert() {\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\n\t\t\tn11 = te[ 0 ], n21 = te[ 1 ], n31 = te[ 2 ], n41 = te[ 3 ],\n\t\t\tn12 = te[ 4 ], n22 = te[ 5 ], n32 = te[ 6 ], n42 = te[ 7 ],\n\t\t\tn13 = te[ 8 ], n23 = te[ 9 ], n33 = te[ 10 ], n43 = te[ 11 ],\n\t\t\tn14 = te[ 12 ], n24 = te[ 13 ], n34 = te[ 14 ], n44 = te[ 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( 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() {\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( 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( 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( 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( 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( 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\treturn this;\n\n\t}\n\n\tmakeScale( 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( 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( 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( position, quaternion, scale ) {\n\n\t\tconst te = this.elements;\n\n\t\tlet sx = _v1$5.set( te[ 0 ], te[ 1 ], te[ 2 ] ).length();\n\t\tconst sy = _v1$5.set( te[ 4 ], te[ 5 ], te[ 6 ] ).length();\n\t\tconst sz = _v1$5.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$2.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$2.elements[ 0 ] *= invSX;\n\t\t_m1$2.elements[ 1 ] *= invSX;\n\t\t_m1$2.elements[ 2 ] *= invSX;\n\n\t\t_m1$2.elements[ 4 ] *= invSY;\n\t\t_m1$2.elements[ 5 ] *= invSY;\n\t\t_m1$2.elements[ 6 ] *= invSY;\n\n\t\t_m1$2.elements[ 8 ] *= invSZ;\n\t\t_m1$2.elements[ 9 ] *= invSZ;\n\t\t_m1$2.elements[ 10 ] *= invSZ;\n\n\t\tquaternion.setFromRotationMatrix( _m1$2 );\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( 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( 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( 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( array, 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( array = [], 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\nMatrix4.prototype.isMatrix4 = true;\n\nconst _v1$5 = /*@__PURE__*/ new Vector3();\nconst _m1$2 = /*@__PURE__*/ new Matrix4();\nconst _zero = /*@__PURE__*/ new Vector3( 0, 0, 0 );\nconst _one = /*@__PURE__*/ new Vector3( 1, 1, 1 );\nconst _x = /*@__PURE__*/ new Vector3();\nconst _y = /*@__PURE__*/ new Vector3();\nconst _z = /*@__PURE__*/ new Vector3();\n\nconst _matrix$1 = /*@__PURE__*/ new Matrix4();\nconst _quaternion$3 = /*@__PURE__*/ new Quaternion();\n\nclass Euler {\n\n\tconstructor( x = 0, y = 0, z = 0, order = Euler.DefaultOrder ) {\n\n\t\tthis._x = x;\n\t\tthis._y = y;\n\t\tthis._z = z;\n\t\tthis._order = order;\n\n\t}\n\n\tget x() {\n\n\t\treturn this._x;\n\n\t}\n\n\tset x( value ) {\n\n\t\tthis._x = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\tget y() {\n\n\t\treturn this._y;\n\n\t}\n\n\tset y( value ) {\n\n\t\tthis._y = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\tget z() {\n\n\t\treturn this._z;\n\n\t}\n\n\tset z( value ) {\n\n\t\tthis._z = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\tget order() {\n\n\t\treturn this._order;\n\n\t}\n\n\tset order( value ) {\n\n\t\tthis._order = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\tset( 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() {\n\n\t\treturn new this.constructor( this._x, this._y, this._z, this._order );\n\n\t}\n\n\tcopy( 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( m, order, update ) {\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( q, order, update ) {\n\n\t\t_matrix$1.makeRotationFromQuaternion( q );\n\n\t\treturn this.setFromRotationMatrix( _matrix$1, order, update );\n\n\t}\n\n\tsetFromVector3( v, order ) {\n\n\t\treturn this.set( v.x, v.y, v.z, order || this._order );\n\n\t}\n\n\treorder( newOrder ) {\n\n\t\t// WARNING: this discards revolution information -bhouston\n\n\t\t_quaternion$3.setFromEuler( this );\n\n\t\treturn this.setFromQuaternion( _quaternion$3, newOrder );\n\n\t}\n\n\tequals( 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( 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( array = [], 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( 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( callback ) {\n\n\t\tthis._onChangeCallback = callback;\n\n\t\treturn this;\n\n\t}\n\n\t_onChangeCallback() {}\n\n}\n\nEuler.prototype.isEuler = true;\n\nEuler.DefaultOrder = 'XYZ';\nEuler.RotationOrders = [ 'XYZ', 'YZX', 'ZXY', 'XZY', 'YXZ', 'ZYX' ];\n\nclass Layers {\n\n\tconstructor() {\n\n\t\tthis.mask = 1 | 0;\n\n\t}\n\n\tset( channel ) {\n\n\t\tthis.mask = 1 << channel | 0;\n\n\t}\n\n\tenable( channel ) {\n\n\t\tthis.mask |= 1 << channel | 0;\n\n\t}\n\n\tenableAll() {\n\n\t\tthis.mask = 0xffffffff | 0;\n\n\t}\n\n\ttoggle( channel ) {\n\n\t\tthis.mask ^= 1 << channel | 0;\n\n\t}\n\n\tdisable( channel ) {\n\n\t\tthis.mask &= ~ ( 1 << channel | 0 );\n\n\t}\n\n\tdisableAll() {\n\n\t\tthis.mask = 0;\n\n\t}\n\n\ttest( layers ) {\n\n\t\treturn ( this.mask & layers.mask ) !== 0;\n\n\t}\n\n}\n\nlet _object3DId = 0;\n\nconst _v1$4 = new /*@__PURE__*/ Vector3();\nconst _q1 = new /*@__PURE__*/ Quaternion();\nconst _m1$1 = new /*@__PURE__*/ Matrix4();\nconst _target = new /*@__PURE__*/ Vector3();\n\nconst _position$3 = new /*@__PURE__*/ Vector3();\nconst _scale$2 = new /*@__PURE__*/ Vector3();\nconst _quaternion$2 = new /*@__PURE__*/ Quaternion();\n\nconst _xAxis = new /*@__PURE__*/ Vector3( 1, 0, 0 );\nconst _yAxis = new /*@__PURE__*/ Vector3( 0, 1, 0 );\nconst _zAxis = new /*@__PURE__*/ Vector3( 0, 0, 1 );\n\nconst _addedEvent = { type: 'added' };\nconst _removedEvent = { type: 'removed' };\n\nclass Object3D extends EventDispatcher {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tObject.defineProperty( this, 'id', { value: _object3DId ++ } );\n\n\t\tthis.uuid = generateUUID();\n\n\t\tthis.name = '';\n\t\tthis.type = 'Object3D';\n\n\t\tthis.parent = null;\n\t\tthis.children = [];\n\n\t\tthis.up = Object3D.DefaultUp.clone();\n\n\t\tconst position = new Vector3();\n\t\tconst rotation = new Euler();\n\t\tconst quaternion = new Quaternion();\n\t\tconst scale = new Vector3( 1, 1, 1 );\n\n\t\tfunction onRotationChange() {\n\n\t\t\tquaternion.setFromEuler( rotation, false );\n\n\t\t}\n\n\t\tfunction onQuaternionChange() {\n\n\t\t\trotation.setFromQuaternion( quaternion, undefined, false );\n\n\t\t}\n\n\t\trotation._onChange( onRotationChange );\n\t\tquaternion._onChange( onQuaternionChange );\n\n\t\tObject.defineProperties( this, {\n\t\t\tposition: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tenumerable: true,\n\t\t\t\tvalue: position\n\t\t\t},\n\t\t\trotation: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tenumerable: true,\n\t\t\t\tvalue: rotation\n\t\t\t},\n\t\t\tquaternion: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tenumerable: true,\n\t\t\t\tvalue: quaternion\n\t\t\t},\n\t\t\tscale: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tenumerable: true,\n\t\t\t\tvalue: scale\n\t\t\t},\n\t\t\tmodelViewMatrix: {\n\t\t\t\tvalue: new Matrix4()\n\t\t\t},\n\t\t\tnormalMatrix: {\n\t\t\t\tvalue: new Matrix3()\n\t\t\t}\n\t\t} );\n\n\t\tthis.matrix = new Matrix4();\n\t\tthis.matrixWorld = new Matrix4();\n\n\t\tthis.matrixAutoUpdate = Object3D.DefaultMatrixAutoUpdate;\n\t\tthis.matrixWorldNeedsUpdate = false;\n\n\t\tthis.layers = new Layers();\n\t\tthis.visible = true;\n\n\t\tthis.castShadow = false;\n\t\tthis.receiveShadow = false;\n\n\t\tthis.frustumCulled = true;\n\t\tthis.renderOrder = 0;\n\n\t\tthis.animations = [];\n\n\t\tthis.userData = {};\n\n\t}\n\n\tonBeforeRender() {}\n\tonAfterRender() {}\n\n\tapplyMatrix4( 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( q ) {\n\n\t\tthis.quaternion.premultiply( q );\n\n\t\treturn this;\n\n\t}\n\n\tsetRotationFromAxisAngle( axis, angle ) {\n\n\t\t// assumes axis is normalized\n\n\t\tthis.quaternion.setFromAxisAngle( axis, angle );\n\n\t}\n\n\tsetRotationFromEuler( euler ) {\n\n\t\tthis.quaternion.setFromEuler( euler, true );\n\n\t}\n\n\tsetRotationFromMatrix( 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( q ) {\n\n\t\t// assumes q is normalized\n\n\t\tthis.quaternion.copy( q );\n\n\t}\n\n\trotateOnAxis( 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( 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( angle ) {\n\n\t\treturn this.rotateOnAxis( _xAxis, angle );\n\n\t}\n\n\trotateY( angle ) {\n\n\t\treturn this.rotateOnAxis( _yAxis, angle );\n\n\t}\n\n\trotateZ( angle ) {\n\n\t\treturn this.rotateOnAxis( _zAxis, angle );\n\n\t}\n\n\ttranslateOnAxis( 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$4.copy( axis ).applyQuaternion( this.quaternion );\n\n\t\tthis.position.add( _v1$4.multiplyScalar( distance ) );\n\n\t\treturn this;\n\n\t}\n\n\ttranslateX( distance ) {\n\n\t\treturn this.translateOnAxis( _xAxis, distance );\n\n\t}\n\n\ttranslateY( distance ) {\n\n\t\treturn this.translateOnAxis( _yAxis, distance );\n\n\t}\n\n\ttranslateZ( distance ) {\n\n\t\treturn this.translateOnAxis( _zAxis, distance );\n\n\t}\n\n\tlocalToWorld( vector ) {\n\n\t\treturn vector.applyMatrix4( this.matrixWorld );\n\n\t}\n\n\tworldToLocal( vector ) {\n\n\t\treturn vector.applyMatrix4( _m1$1.copy( this.matrixWorld ).invert() );\n\n\t}\n\n\tlookAt( 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$3.setFromMatrixPosition( this.matrixWorld );\n\n\t\tif ( this.isCamera || this.isLight ) {\n\n\t\t\t_m1$1.lookAt( _position$3, _target, this.up );\n\n\t\t} else {\n\n\t\t\t_m1$1.lookAt( _target, _position$3, 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.invert() );\n\n\t\t}\n\n\t}\n\n\tadd( 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( 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\tclear() {\n\n\t\tfor ( let i = 0; i < this.children.length; i ++ ) {\n\n\t\t\tconst object = this.children[ i ];\n\n\t\t\tobject.parent = null;\n\n\t\t\tobject.dispatchEvent( _removedEvent );\n\n\t\t}\n\n\t\tthis.children.length = 0;\n\n\t\treturn this;\n\n\n\t}\n\n\tattach( 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.copy( this.matrixWorld ).invert();\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\tthis.add( object );\n\n\t\tobject.updateWorldMatrix( false, true );\n\n\t\treturn this;\n\n\t}\n\n\tgetObjectById( id ) {\n\n\t\treturn this.getObjectByProperty( 'id', id );\n\n\t}\n\n\tgetObjectByName( name ) {\n\n\t\treturn this.getObjectByProperty( 'name', name );\n\n\t}\n\n\tgetObjectByProperty( 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( 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.updateWorldMatrix( true, false );\n\n\t\treturn target.setFromMatrixPosition( this.matrixWorld );\n\n\t}\n\n\tgetWorldQuaternion( 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.updateWorldMatrix( true, false );\n\n\t\tthis.matrixWorld.decompose( _position$3, target, _scale$2 );\n\n\t\treturn target;\n\n\t}\n\n\tgetWorldScale( 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.updateWorldMatrix( true, false );\n\n\t\tthis.matrixWorld.decompose( _position$3, _quaternion$2, target );\n\n\t\treturn target;\n\n\t}\n\n\tgetWorldDirection( 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.updateWorldMatrix( true, false );\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() {}\n\n\ttraverse( 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( 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( 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() {\n\n\t\tthis.matrix.compose( this.position, this.quaternion, this.scale );\n\n\t\tthis.matrixWorldNeedsUpdate = true;\n\n\t}\n\n\tupdateMatrixWorld( 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( 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( 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\tskeletons: {},\n\t\t\t\tanimations: {}\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\t\t\tif ( this.instanceColor !== null ) object.instanceColor = this.instanceColor.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.isSkinnedMesh ) {\n\n\t\t\tobject.bindMode = this.bindMode;\n\t\t\tobject.bindMatrix = this.bindMatrix.toArray();\n\n\t\t\tif ( this.skeleton !== undefined ) {\n\n\t\t\t\tserialize( meta.skeletons, this.skeleton );\n\n\t\t\t\tobject.skeleton = this.skeleton.uuid;\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\t//\n\n\t\tif ( this.animations.length > 0 ) {\n\n\t\t\tobject.animations = [];\n\n\t\t\tfor ( let i = 0; i < this.animations.length; i ++ ) {\n\n\t\t\t\tconst animation = this.animations[ i ];\n\n\t\t\t\tobject.animations.push( serialize( meta.animations, animation ) );\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\t\t\tconst skeletons = extractFromCache( meta.skeletons );\n\t\t\tconst animations = extractFromCache( meta.animations );\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\t\t\tif ( skeletons.length > 0 ) output.skeletons = skeletons;\n\t\t\tif ( animations.length > 0 ) output.animations = animations;\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( recursive ) {\n\n\t\treturn new this.constructor().copy( this, recursive );\n\n\t}\n\n\tcopy( source, 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\nObject3D.DefaultUp = new Vector3( 0, 1, 0 );\nObject3D.DefaultMatrixAutoUpdate = true;\n\nObject3D.prototype.isObject3D = true;\n\nconst _vector1 = /*@__PURE__*/ new Vector3();\nconst _vector2$1 = /*@__PURE__*/ new Vector3();\nconst _normalMatrix = /*@__PURE__*/ new Matrix3();\n\nclass Plane {\n\n\tconstructor( normal = new Vector3( 1, 0, 0 ), constant = 0 ) {\n\n\t\t// normal is assumed to be normalized\n\n\t\tthis.normal = normal;\n\t\tthis.constant = constant;\n\n\t}\n\n\tset( 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( 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( 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( a, b, c ) {\n\n\t\tconst normal = _vector1.subVectors( c, b ).cross( _vector2$1.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\tcopy( 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() {\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() {\n\n\t\tthis.constant *= - 1;\n\t\tthis.normal.negate();\n\n\t\treturn this;\n\n\t}\n\n\tdistanceToPoint( point ) {\n\n\t\treturn this.normal.dot( point ) + this.constant;\n\n\t}\n\n\tdistanceToSphere( sphere ) {\n\n\t\treturn this.distanceToPoint( sphere.center ) - sphere.radius;\n\n\t}\n\n\tprojectPoint( 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( 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 null;\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 null;\n\n\t\t}\n\n\t\treturn target.copy( direction ).multiplyScalar( t ).add( line.start );\n\n\t}\n\n\tintersectsLine( 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( box ) {\n\n\t\treturn box.intersectsPlane( this );\n\n\t}\n\n\tintersectsSphere( sphere ) {\n\n\t\treturn sphere.intersectsPlane( this );\n\n\t}\n\n\tcoplanarPoint( 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( 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( offset ) {\n\n\t\tthis.constant -= offset.dot( this.normal );\n\n\t\treturn this;\n\n\t}\n\n\tequals( plane ) {\n\n\t\treturn plane.normal.equals( this.normal ) && ( plane.constant === this.constant );\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n}\n\nPlane.prototype.isPlane = true;\n\nconst _v0$1 = /*@__PURE__*/ new Vector3();\nconst _v1$3 = /*@__PURE__*/ new Vector3();\nconst _v2$2 = /*@__PURE__*/ new Vector3();\nconst _v3$1 = /*@__PURE__*/ new Vector3();\n\nconst _vab = /*@__PURE__*/ new Vector3();\nconst _vac = /*@__PURE__*/ new Vector3();\nconst _vbc = /*@__PURE__*/ new Vector3();\nconst _vap = /*@__PURE__*/ new Vector3();\nconst _vbp = /*@__PURE__*/ new Vector3();\nconst _vcp = /*@__PURE__*/ new Vector3();\n\nclass Triangle {\n\n\tconstructor( a = new Vector3(), b = new Vector3(), c = new Vector3() ) {\n\n\t\tthis.a = a;\n\t\tthis.b = b;\n\t\tthis.c = c;\n\n\t}\n\n\tstatic getNormal( 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\tstatic getBarycoord( 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$2.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$2 );\n\t\tconst dot11 = _v1$3.dot( _v1$3 );\n\t\tconst dot12 = _v1$3.dot( _v2$2 );\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\tstatic containsPoint( point, a, b, c ) {\n\n\t\tthis.getBarycoord( point, a, b, c, _v3$1 );\n\n\t\treturn ( _v3$1.x >= 0 ) && ( _v3$1.y >= 0 ) && ( ( _v3$1.x + _v3$1.y ) <= 1 );\n\n\t}\n\n\tstatic getUV( point, p1, p2, p3, uv1, uv2, uv3, target ) {\n\n\t\tthis.getBarycoord( point, p1, p2, p3, _v3$1 );\n\n\t\ttarget.set( 0, 0 );\n\t\ttarget.addScaledVector( uv1, _v3$1.x );\n\t\ttarget.addScaledVector( uv2, _v3$1.y );\n\t\ttarget.addScaledVector( uv3, _v3$1.z );\n\n\t\treturn target;\n\n\t}\n\n\tstatic isFrontFacing( 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\tset( 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( 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() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tcopy( 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() {\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( 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( target ) {\n\n\t\treturn Triangle.getNormal( this.a, this.b, this.c, target );\n\n\t}\n\n\tgetPlane( 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( point, target ) {\n\n\t\treturn Triangle.getBarycoord( point, this.a, this.b, this.c, target );\n\n\t}\n\n\tgetUV( 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( point ) {\n\n\t\treturn Triangle.containsPoint( point, this.a, this.b, this.c );\n\n\t}\n\n\tisFrontFacing( direction ) {\n\n\t\treturn Triangle.isFrontFacing( this.a, this.b, this.c, direction );\n\n\t}\n\n\tintersectsBox( box ) {\n\n\t\treturn box.intersectsTriangle( this );\n\n\t}\n\n\tclosestPointToPoint( 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( 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\nlet materialId = 0;\n\nfunction Material() {\n\n\tObject.defineProperty( this, 'id', { value: materialId ++ } );\n\n\tthis.uuid = 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.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.alphaToCoverage = false;\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\tonBuild: function ( /* shaderobject, renderer */ ) {},\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\n\t\tif ( this.lightMap && this.lightMap.isTexture ) {\n\n\t\t\tdata.lightMap = this.lightMap.toJSON( meta ).uuid;\n\t\t\tdata.lightMapIntensity = this.lightMapIntensity;\n\n\t\t}\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\n\t\t\tif ( this.combine !== undefined ) data.combine = this.combine;\n\n\t\t}\n\n\t\tif ( this.envMapIntensity !== undefined ) data.envMapIntensity = this.envMapIntensity;\n\t\tif ( this.reflectivity !== undefined ) data.reflectivity = this.reflectivity;\n\t\tif ( this.refractionRatio !== undefined ) data.refractionRatio = this.refractionRatio;\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.shadowSide !== null ) data.shadowSide = this.shadowSide;\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.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\t\tdata.colorWrite = this.colorWrite;\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.alphaToCoverage === true ) data.alphaToCoverage = this.alphaToCoverage;\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.flatShading === true ) data.flatShading = this.flatShading;\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.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.alphaToCoverage = source.alphaToCoverage;\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\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 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\nclass Color {\n\n\tconstructor( r, g, b ) {\n\n\t\tif ( g === undefined && b === undefined ) {\n\n\t\t\t// r is THREE.Color, hex or string\n\t\t\treturn this.set( r );\n\n\t\t}\n\n\t\treturn this.setRGB( r, g, b );\n\n\t}\n\n\tset( 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( 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( 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( 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( h, s, l ) {\n\n\t\t// h,s,l ranges are in 0.0 - 1.0\n\t\th = euclideanModulo( h, 1 );\n\t\ts = clamp( s, 0, 1 );\n\t\tl = 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( 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?)\\(([^\\)]*)\\)/.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 = /^\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*(?:,\\s*(\\d*\\.?\\d+)\\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[ 4 ] );\n\n\t\t\t\t\t\treturn this;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( color = /^\\s*(\\d+)\\%\\s*,\\s*(\\d+)\\%\\s*,\\s*(\\d+)\\%\\s*(?:,\\s*(\\d*\\.?\\d+)\\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[ 4 ] );\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 = /^\\s*(\\d*\\.?\\d+)\\s*,\\s*(\\d+)\\%\\s*,\\s*(\\d+)\\%\\s*(?:,\\s*(\\d*\\.?\\d+)\\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[ 4 ] );\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-f\\d]+)$/.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( style ) {\n\n\t\t// color keywords\n\t\tconst hex = _colorKeywords[ style.toLowerCase() ];\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() {\n\n\t\treturn new this.constructor( this.r, this.g, this.b );\n\n\t}\n\n\tcopy( 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( color, 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( color, 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( gammaFactor ) {\n\n\t\tthis.copyGammaToLinear( this, gammaFactor );\n\n\t\treturn this;\n\n\t}\n\n\tconvertLinearToGamma( gammaFactor ) {\n\n\t\tthis.copyLinearToGamma( this, gammaFactor );\n\n\t\treturn this;\n\n\t}\n\n\tcopySRGBToLinear( 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( 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() {\n\n\t\tthis.copySRGBToLinear( this );\n\n\t\treturn this;\n\n\t}\n\n\tconvertLinearToSRGB() {\n\n\t\tthis.copyLinearToSRGB( this );\n\n\t\treturn this;\n\n\t}\n\n\tgetHex() {\n\n\t\treturn ( this.r * 255 ) << 16 ^ ( this.g * 255 ) << 8 ^ ( this.b * 255 ) << 0;\n\n\t}\n\n\tgetHexString() {\n\n\t\treturn ( '000000' + this.getHex().toString( 16 ) ).slice( - 6 );\n\n\t}\n\n\tgetHSL( 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() {\n\n\t\treturn 'rgb(' + ( ( this.r * 255 ) | 0 ) + ',' + ( ( this.g * 255 ) | 0 ) + ',' + ( ( this.b * 255 ) | 0 ) + ')';\n\n\t}\n\n\toffsetHSL( 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( 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( 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( 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( 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( 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( 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( 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\tlerpColors( color1, color2, alpha ) {\n\n\t\tthis.r = color1.r + ( color2.r - color1.r ) * alpha;\n\t\tthis.g = color1.g + ( color2.g - color1.g ) * alpha;\n\t\tthis.b = color1.b + ( color2.b - color1.b ) * alpha;\n\n\t\treturn this;\n\n\t}\n\n\tlerpHSL( color, alpha ) {\n\n\t\tthis.getHSL( _hslA );\n\t\tcolor.getHSL( _hslB );\n\n\t\tconst h = lerp( _hslA.h, _hslB.h, alpha );\n\t\tconst s = lerp( _hslA.s, _hslB.s, alpha );\n\t\tconst l = 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( c ) {\n\n\t\treturn ( c.r === this.r ) && ( c.g === this.g ) && ( c.b === this.b );\n\n\t}\n\n\tfromArray( array, 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( array = [], 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( 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() {\n\n\t\treturn this.getHex();\n\n\t}\n\n}\n\nColor.NAMES = _colorKeywords;\n\nColor.prototype.isColor = true;\nColor.prototype.r = 1;\nColor.prototype.g = 1;\nColor.prototype.b = 1;\n\n/**\n * parameters = {\n *  color: <hex>,\n *  opacity: <float>,\n *  map: new THREE.Texture( <Image> ),\n *\n *  lightMap: new THREE.Texture( <Image> ),\n *  lightMapIntensity: <float>\n *\n *  aoMap: new THREE.Texture( <Image> ),\n *  aoMapIntensity: <float>\n *\n *  specularMap: new THREE.Texture( <Image> ),\n *\n *  alphaMap: new THREE.Texture( <Image> ),\n *\n *  envMap: new THREE.CubeTexture( [posx, negx, posy, negy, posz, negz] ),\n *  combine: THREE.Multiply,\n *  reflectivity: <float>,\n *  refractionRatio: <float>,\n *\n *  depthTest: <bool>,\n *  depthWrite: <bool>,\n *\n *  wireframe: <boolean>,\n *  wireframeLinewidth: <float>,\n *\n *  skinning: <bool>,\n *  morphTargets: <bool>\n * }\n */\n\nclass MeshBasicMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'MeshBasicMaterial';\n\n\t\tthis.color = new Color( 0xffffff ); // emissive\n\n\t\tthis.map = null;\n\n\t\tthis.lightMap = null;\n\t\tthis.lightMapIntensity = 1.0;\n\n\t\tthis.aoMap = null;\n\t\tthis.aoMapIntensity = 1.0;\n\n\t\tthis.specularMap = null;\n\n\t\tthis.alphaMap = null;\n\n\t\tthis.envMap = null;\n\t\tthis.combine = MultiplyOperation;\n\t\tthis.reflectivity = 1;\n\t\tthis.refractionRatio = 0.98;\n\n\t\tthis.wireframe = false;\n\t\tthis.wireframeLinewidth = 1;\n\t\tthis.wireframeLinecap = 'round';\n\t\tthis.wireframeLinejoin = 'round';\n\n\t\tthis.skinning = false;\n\t\tthis.morphTargets = false;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.color.copy( source.color );\n\n\t\tthis.map = source.map;\n\n\t\tthis.lightMap = source.lightMap;\n\t\tthis.lightMapIntensity = source.lightMapIntensity;\n\n\t\tthis.aoMap = source.aoMap;\n\t\tthis.aoMapIntensity = source.aoMapIntensity;\n\n\t\tthis.specularMap = source.specularMap;\n\n\t\tthis.alphaMap = source.alphaMap;\n\n\t\tthis.envMap = source.envMap;\n\t\tthis.combine = source.combine;\n\t\tthis.reflectivity = source.reflectivity;\n\t\tthis.refractionRatio = source.refractionRatio;\n\n\t\tthis.wireframe = source.wireframe;\n\t\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\t\tthis.wireframeLinecap = source.wireframeLinecap;\n\t\tthis.wireframeLinejoin = source.wireframeLinejoin;\n\n\t\tthis.skinning = source.skinning;\n\t\tthis.morphTargets = source.morphTargets;\n\n\t\treturn this;\n\n\t}\n\n}\n\nMeshBasicMaterial.prototype.isMeshBasicMaterial = true;\n\nconst _vector$9 = new /*@__PURE__*/ Vector3();\nconst _vector2 = new /*@__PURE__*/ Vector2();\n\nclass BufferAttribute {\n\n\tconstructor( array, itemSize, normalized ) {\n\n\t\tif ( Array.isArray( array ) ) {\n\n\t\t\tthrow new TypeError( 'THREE.BufferAttribute: array should be a Typed Array.' );\n\n\t\t}\n\n\t\tthis.name = '';\n\n\t\tthis.array = array;\n\t\tthis.itemSize = itemSize;\n\t\tthis.count = array !== undefined ? array.length / itemSize : 0;\n\t\tthis.normalized = normalized === true;\n\n\t\tthis.usage = StaticDrawUsage;\n\t\tthis.updateRange = { offset: 0, count: - 1 };\n\n\t\tthis.version = 0;\n\n\t\tthis.onUploadCallback = function () {};\n\n\t}\n\n\tset needsUpdate( value ) {\n\n\t\tif ( value === true ) this.version ++;\n\n\t}\n\n\tsetUsage( value ) {\n\n\t\tthis.usage = value;\n\n\t\treturn this;\n\n\t}\n\n\tcopy( 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( 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( array ) {\n\n\t\tthis.array.set( array );\n\n\t\treturn this;\n\n\t}\n\n\tcopyColorsArray( 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( 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( 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( 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( 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.fromBufferAttribute( this, i );\n\t\t\t\t_vector2.applyMatrix3( m );\n\n\t\t\t\tthis.setXY( i, _vector2.x, _vector2.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$9.fromBufferAttribute( this, i );\n\t\t\t\t_vector$9.applyMatrix3( m );\n\n\t\t\t\tthis.setXYZ( i, _vector$9.x, _vector$9.y, _vector$9.z );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tapplyMatrix4( m ) {\n\n\t\tfor ( let i = 0, l = this.count; i < l; i ++ ) {\n\n\t\t\t_vector$9.x = this.getX( i );\n\t\t\t_vector$9.y = this.getY( i );\n\t\t\t_vector$9.z = this.getZ( i );\n\n\t\t\t_vector$9.applyMatrix4( m );\n\n\t\t\tthis.setXYZ( i, _vector$9.x, _vector$9.y, _vector$9.z );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tapplyNormalMatrix( m ) {\n\n\t\tfor ( let i = 0, l = this.count; i < l; i ++ ) {\n\n\t\t\t_vector$9.x = this.getX( i );\n\t\t\t_vector$9.y = this.getY( i );\n\t\t\t_vector$9.z = this.getZ( i );\n\n\t\t\t_vector$9.applyNormalMatrix( m );\n\n\t\t\tthis.setXYZ( i, _vector$9.x, _vector$9.y, _vector$9.z );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\ttransformDirection( m ) {\n\n\t\tfor ( let i = 0, l = this.count; i < l; i ++ ) {\n\n\t\t\t_vector$9.x = this.getX( i );\n\t\t\t_vector$9.y = this.getY( i );\n\t\t\t_vector$9.z = this.getZ( i );\n\n\t\t\t_vector$9.transformDirection( m );\n\n\t\t\tthis.setXYZ( i, _vector$9.x, _vector$9.y, _vector$9.z );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tset( value, offset = 0 ) {\n\n\t\tthis.array.set( value, offset );\n\n\t\treturn this;\n\n\t}\n\n\tgetX( index ) {\n\n\t\treturn this.array[ index * this.itemSize ];\n\n\t}\n\n\tsetX( index, x ) {\n\n\t\tthis.array[ index * this.itemSize ] = x;\n\n\t\treturn this;\n\n\t}\n\n\tgetY( index ) {\n\n\t\treturn this.array[ index * this.itemSize + 1 ];\n\n\t}\n\n\tsetY( index, y ) {\n\n\t\tthis.array[ index * this.itemSize + 1 ] = y;\n\n\t\treturn this;\n\n\t}\n\n\tgetZ( index ) {\n\n\t\treturn this.array[ index * this.itemSize + 2 ];\n\n\t}\n\n\tsetZ( index, z ) {\n\n\t\tthis.array[ index * this.itemSize + 2 ] = z;\n\n\t\treturn this;\n\n\t}\n\n\tgetW( index ) {\n\n\t\treturn this.array[ index * this.itemSize + 3 ];\n\n\t}\n\n\tsetW( index, w ) {\n\n\t\tthis.array[ index * this.itemSize + 3 ] = w;\n\n\t\treturn this;\n\n\t}\n\n\tsetXY( 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( 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( 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( callback ) {\n\n\t\tthis.onUploadCallback = callback;\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor( this.array, this.itemSize ).copy( this );\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = {\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\tif ( this.name !== '' ) data.name = this.name;\n\t\tif ( this.usage !== StaticDrawUsage ) data.usage = this.usage;\n\t\tif ( this.updateRange.offset !== 0 || this.updateRange.count !== - 1 ) data.updateRange = this.updateRange;\n\n\t\treturn data;\n\n\t}\n\n}\n\nBufferAttribute.prototype.isBufferAttribute = true;\n\n//\n\nclass Int8BufferAttribute extends BufferAttribute {\n\n\tconstructor( array, itemSize, normalized ) {\n\n\t\tsuper( new Int8Array( array ), itemSize, normalized );\n\n\t}\n\n}\n\nclass Uint8BufferAttribute extends BufferAttribute {\n\n\tconstructor( array, itemSize, normalized ) {\n\n\t\tsuper( new Uint8Array( array ), itemSize, normalized );\n\n\t}\n\n}\n\nclass Uint8ClampedBufferAttribute extends BufferAttribute {\n\n\tconstructor( array, itemSize, normalized ) {\n\n\t\tsuper( new Uint8ClampedArray( array ), itemSize, normalized );\n\n\t}\n\n}\n\nclass Int16BufferAttribute extends BufferAttribute {\n\n\tconstructor( array, itemSize, normalized ) {\n\n\t\tsuper( new Int16Array( array ), itemSize, normalized );\n\n\t}\n\n}\n\nclass Uint16BufferAttribute extends BufferAttribute {\n\n\tconstructor( array, itemSize, normalized ) {\n\n\t\tsuper( new Uint16Array( array ), itemSize, normalized );\n\n\t}\n\n}\n\nclass Int32BufferAttribute extends BufferAttribute {\n\n\tconstructor( array, itemSize, normalized ) {\n\n\t\tsuper( new Int32Array( array ), itemSize, normalized );\n\n\t}\n\n}\n\nclass Uint32BufferAttribute extends BufferAttribute {\n\n\tconstructor( array, itemSize, normalized ) {\n\n\t\tsuper( new Uint32Array( array ), itemSize, normalized );\n\n\t}\n\n}\n\nclass Float16BufferAttribute extends BufferAttribute {\n\n\tconstructor( array, itemSize, normalized ) {\n\n\t\tsuper( new Uint16Array( array ), itemSize, normalized );\n\n\t}\n\n}\n\nFloat16BufferAttribute.prototype.isFloat16BufferAttribute = true;\n\nclass Float32BufferAttribute extends BufferAttribute {\n\n\tconstructor( array, itemSize, normalized ) {\n\n\t\tsuper( new Float32Array( array ), itemSize, normalized );\n\n\t}\n\n}\n\nclass Float64BufferAttribute extends BufferAttribute {\n\n\tconstructor( array, itemSize, normalized ) {\n\n\t\tsuper( new Float64Array( array ), itemSize, normalized );\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\nconst TYPED_ARRAYS = {\n\tInt8Array: Int8Array,\n\tUint8Array: Uint8Array,\n\tUint8ClampedArray: Uint8ClampedArray,\n\tInt16Array: Int16Array,\n\tUint16Array: Uint16Array,\n\tInt32Array: Int32Array,\n\tUint32Array: Uint32Array,\n\tFloat32Array: Float32Array,\n\tFloat64Array: Float64Array\n};\n\nfunction getTypedArray( type, buffer ) {\n\n\treturn new TYPED_ARRAYS[ type ]( buffer );\n\n}\n\nlet _id = 0;\n\nconst _m1 = new /*@__PURE__*/ Matrix4();\nconst _obj = new /*@__PURE__*/ Object3D();\nconst _offset = new /*@__PURE__*/ Vector3();\nconst _box$1 = new /*@__PURE__*/ Box3();\nconst _boxMorphTargets = new /*@__PURE__*/ Box3();\nconst _vector$8 = new /*@__PURE__*/ Vector3();\n\nclass BufferGeometry extends EventDispatcher {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tObject.defineProperty( this, 'id', { value: _id ++ } );\n\n\t\tthis.uuid = generateUUID();\n\n\t\tthis.name = '';\n\t\tthis.type = 'BufferGeometry';\n\n\t\tthis.index = null;\n\t\tthis.attributes = {};\n\n\t\tthis.morphAttributes = {};\n\t\tthis.morphTargetsRelative = false;\n\n\t\tthis.groups = [];\n\n\t\tthis.boundingBox = null;\n\t\tthis.boundingSphere = null;\n\n\t\tthis.drawRange = { start: 0, count: Infinity };\n\n\t\tthis.userData = {};\n\n\t}\n\n\tgetIndex() {\n\n\t\treturn this.index;\n\n\t}\n\n\tsetIndex( 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\treturn this;\n\n\t}\n\n\tgetAttribute( name ) {\n\n\t\treturn this.attributes[ name ];\n\n\t}\n\n\tsetAttribute( name, attribute ) {\n\n\t\tthis.attributes[ name ] = attribute;\n\n\t\treturn this;\n\n\t}\n\n\tdeleteAttribute( name ) {\n\n\t\tdelete this.attributes[ name ];\n\n\t\treturn this;\n\n\t}\n\n\thasAttribute( name ) {\n\n\t\treturn this.attributes[ name ] !== undefined;\n\n\t}\n\n\taddGroup( start, count, materialIndex = 0 ) {\n\n\t\tthis.groups.push( {\n\n\t\t\tstart: start,\n\t\t\tcount: count,\n\t\t\tmaterialIndex: materialIndex\n\n\t\t} );\n\n\t}\n\n\tclearGroups() {\n\n\t\tthis.groups = [];\n\n\t}\n\n\tsetDrawRange( start, count ) {\n\n\t\tthis.drawRange.start = start;\n\t\tthis.drawRange.count = count;\n\n\t}\n\n\tapplyMatrix4( 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( angle ) {\n\n\t\t// rotate geometry around world x-axis\n\n\t\t_m1.makeRotationX( angle );\n\n\t\tthis.applyMatrix4( _m1 );\n\n\t\treturn this;\n\n\t}\n\n\trotateY( angle ) {\n\n\t\t// rotate geometry around world y-axis\n\n\t\t_m1.makeRotationY( angle );\n\n\t\tthis.applyMatrix4( _m1 );\n\n\t\treturn this;\n\n\t}\n\n\trotateZ( angle ) {\n\n\t\t// rotate geometry around world z-axis\n\n\t\t_m1.makeRotationZ( angle );\n\n\t\tthis.applyMatrix4( _m1 );\n\n\t\treturn this;\n\n\t}\n\n\ttranslate( x, y, z ) {\n\n\t\t// translate geometry\n\n\t\t_m1.makeTranslation( x, y, z );\n\n\t\tthis.applyMatrix4( _m1 );\n\n\t\treturn this;\n\n\t}\n\n\tscale( x, y, z ) {\n\n\t\t// scale geometry\n\n\t\t_m1.makeScale( x, y, z );\n\n\t\tthis.applyMatrix4( _m1 );\n\n\t\treturn this;\n\n\t}\n\n\tlookAt( 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() {\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\tsetFromPoints( 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\tcomputeBoundingBox() {\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 && position.isGLBufferAttribute ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometry.computeBoundingBox(): GLBufferAttribute requires a manual bounding box. Alternatively set \"mesh.frustumCulled\" to \"false\".', this );\n\n\t\t\tthis.boundingBox.set(\n\t\t\t\tnew Vector3( - Infinity, - Infinity, - Infinity ),\n\t\t\t\tnew Vector3( + Infinity, + Infinity, + Infinity )\n\t\t\t);\n\n\t\t\treturn;\n\n\t\t}\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$1.setFromBufferAttribute( morphAttribute );\n\n\t\t\t\t\tif ( this.morphTargetsRelative ) {\n\n\t\t\t\t\t\t_vector$8.addVectors( this.boundingBox.min, _box$1.min );\n\t\t\t\t\t\tthis.boundingBox.expandByPoint( _vector$8 );\n\n\t\t\t\t\t\t_vector$8.addVectors( this.boundingBox.max, _box$1.max );\n\t\t\t\t\t\tthis.boundingBox.expandByPoint( _vector$8 );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tthis.boundingBox.expandByPoint( _box$1.min );\n\t\t\t\t\t\tthis.boundingBox.expandByPoint( _box$1.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() {\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 && position.isGLBufferAttribute ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometry.computeBoundingSphere(): GLBufferAttribute requires a manual bounding sphere. Alternatively set \"mesh.frustumCulled\" to \"false\".', this );\n\n\t\t\tthis.boundingSphere.set( new Vector3(), Infinity );\n\n\t\t\treturn;\n\n\t\t}\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$1.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$8.addVectors( _box$1.min, _boxMorphTargets.min );\n\t\t\t\t\t\t_box$1.expandByPoint( _vector$8 );\n\n\t\t\t\t\t\t_vector$8.addVectors( _box$1.max, _boxMorphTargets.max );\n\t\t\t\t\t\t_box$1.expandByPoint( _vector$8 );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t_box$1.expandByPoint( _boxMorphTargets.min );\n\t\t\t\t\t\t_box$1.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$1.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$8.fromBufferAttribute( position, i );\n\n\t\t\t\tmaxRadiusSq = Math.max( maxRadiusSq, center.distanceToSquared( _vector$8 ) );\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$8.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$8.add( _offset );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tmaxRadiusSq = Math.max( maxRadiusSq, center.distanceToSquared( _vector$8 ) );\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() {\n\n\t\t// backwards compatibility\n\n\t}\n\n\tcomputeTangents() {\n\n\t\tconst index = this.index;\n\t\tconst attributes = this.attributes;\n\n\t\t// based on http://www.terathon.com/code/tangent.html\n\t\t// (per vertex tangents)\n\n\t\tif ( index === null ||\n\t\t\t attributes.position === undefined ||\n\t\t\t attributes.normal === undefined ||\n\t\t\t attributes.uv === undefined ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometry: .computeTangents() failed. Missing required attributes (index, position, normal or uv)' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tconst indices = index.array;\n\t\tconst positions = attributes.position.array;\n\t\tconst normals = attributes.normal.array;\n\t\tconst uvs = attributes.uv.array;\n\n\t\tconst nVertices = positions.length / 3;\n\n\t\tif ( attributes.tangent === undefined ) {\n\n\t\t\tthis.setAttribute( 'tangent', new BufferAttribute( new Float32Array( 4 * nVertices ), 4 ) );\n\n\t\t}\n\n\t\tconst tangents = attributes.tangent.array;\n\n\t\tconst tan1 = [], tan2 = [];\n\n\t\tfor ( let i = 0; i < nVertices; i ++ ) {\n\n\t\t\ttan1[ i ] = new Vector3();\n\t\t\ttan2[ i ] = new Vector3();\n\n\t\t}\n\n\t\tconst vA = new Vector3(),\n\t\t\tvB = new Vector3(),\n\t\t\tvC = new Vector3(),\n\n\t\t\tuvA = new Vector2(),\n\t\t\tuvB = new Vector2(),\n\t\t\tuvC = new Vector2(),\n\n\t\t\tsdir = new Vector3(),\n\t\t\ttdir = new Vector3();\n\n\t\tfunction handleTriangle( a, b, c ) {\n\n\t\t\tvA.fromArray( positions, a * 3 );\n\t\t\tvB.fromArray( positions, b * 3 );\n\t\t\tvC.fromArray( positions, c * 3 );\n\n\t\t\tuvA.fromArray( uvs, a * 2 );\n\t\t\tuvB.fromArray( uvs, b * 2 );\n\t\t\tuvC.fromArray( uvs, c * 2 );\n\n\t\t\tvB.sub( vA );\n\t\t\tvC.sub( vA );\n\n\t\t\tuvB.sub( uvA );\n\t\t\tuvC.sub( uvA );\n\n\t\t\tconst r = 1.0 / ( uvB.x * uvC.y - uvC.x * uvB.y );\n\n\t\t\t// silently ignore degenerate uv triangles having coincident or colinear vertices\n\n\t\t\tif ( ! isFinite( r ) ) return;\n\n\t\t\tsdir.copy( vB ).multiplyScalar( uvC.y ).addScaledVector( vC, - uvB.y ).multiplyScalar( r );\n\t\t\ttdir.copy( vC ).multiplyScalar( uvB.x ).addScaledVector( vB, - uvC.x ).multiplyScalar( r );\n\n\t\t\ttan1[ a ].add( sdir );\n\t\t\ttan1[ b ].add( sdir );\n\t\t\ttan1[ c ].add( sdir );\n\n\t\t\ttan2[ a ].add( tdir );\n\t\t\ttan2[ b ].add( tdir );\n\t\t\ttan2[ c ].add( tdir );\n\n\t\t}\n\n\t\tlet groups = this.groups;\n\n\t\tif ( groups.length === 0 ) {\n\n\t\t\tgroups = [ {\n\t\t\t\tstart: 0,\n\t\t\t\tcount: indices.length\n\t\t\t} ];\n\n\t\t}\n\n\t\tfor ( let i = 0, il = groups.length; i < il; ++ i ) {\n\n\t\t\tconst group = groups[ i ];\n\n\t\t\tconst start = group.start;\n\t\t\tconst count = group.count;\n\n\t\t\tfor ( let j = start, jl = start + count; j < jl; j += 3 ) {\n\n\t\t\t\thandleTriangle(\n\t\t\t\t\tindices[ j + 0 ],\n\t\t\t\t\tindices[ j + 1 ],\n\t\t\t\t\tindices[ j + 2 ]\n\t\t\t\t);\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst tmp = new Vector3(), tmp2 = new Vector3();\n\t\tconst n = new Vector3(), n2 = new Vector3();\n\n\t\tfunction handleVertex( v ) {\n\n\t\t\tn.fromArray( normals, v * 3 );\n\t\t\tn2.copy( n );\n\n\t\t\tconst t = tan1[ v ];\n\n\t\t\t// Gram-Schmidt orthogonalize\n\n\t\t\ttmp.copy( t );\n\t\t\ttmp.sub( n.multiplyScalar( n.dot( t ) ) ).normalize();\n\n\t\t\t// Calculate handedness\n\n\t\t\ttmp2.crossVectors( n2, t );\n\t\t\tconst test = tmp2.dot( tan2[ v ] );\n\t\t\tconst w = ( test < 0.0 ) ? - 1.0 : 1.0;\n\n\t\t\ttangents[ v * 4 ] = tmp.x;\n\t\t\ttangents[ v * 4 + 1 ] = tmp.y;\n\t\t\ttangents[ v * 4 + 2 ] = tmp.z;\n\t\t\ttangents[ v * 4 + 3 ] = w;\n\n\t\t}\n\n\t\tfor ( let i = 0, il = groups.length; i < il; ++ i ) {\n\n\t\t\tconst group = groups[ i ];\n\n\t\t\tconst start = group.start;\n\t\t\tconst count = group.count;\n\n\t\t\tfor ( let j = start, jl = start + count; j < jl; j += 3 ) {\n\n\t\t\t\thandleVertex( indices[ j + 0 ] );\n\t\t\t\thandleVertex( indices[ j + 1 ] );\n\t\t\t\thandleVertex( indices[ j + 2 ] );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tcomputeVertexNormals() {\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( 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() {\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$8.fromBufferAttribute( normals, i );\n\n\t\t\t_vector$8.normalize();\n\n\t\t\tnormals.setXYZ( i, _vector$8.x, _vector$8.y, _vector$8.z );\n\n\t\t}\n\n\t}\n\n\ttoNonIndexed() {\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(): BufferGeometry 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() {\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\t// for simplicity the code assumes attributes are not shared across geometries, see #15811\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\tdata.data.attributes[ key ] = attribute.toJSON( data.data );\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\tarray.push( attribute.toJSON( data.data ) );\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() {\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( 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() {\n\n\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t}\n\n}\n\nBufferGeometry.prototype.isBufferGeometry = true;\n\nconst _inverseMatrix$2 = /*@__PURE__*/ new Matrix4();\nconst _ray$2 = /*@__PURE__*/ new Ray();\nconst _sphere$3 = /*@__PURE__*/ new Sphere();\n\nconst _vA$1 = /*@__PURE__*/ new Vector3();\nconst _vB$1 = /*@__PURE__*/ new Vector3();\nconst _vC$1 = /*@__PURE__*/ new Vector3();\n\nconst _tempA = /*@__PURE__*/ new Vector3();\nconst _tempB = /*@__PURE__*/ new Vector3();\nconst _tempC = /*@__PURE__*/ new Vector3();\n\nconst _morphA = /*@__PURE__*/ new Vector3();\nconst _morphB = /*@__PURE__*/ new Vector3();\nconst _morphC = /*@__PURE__*/ new Vector3();\n\nconst _uvA$1 = /*@__PURE__*/ new Vector2();\nconst _uvB$1 = /*@__PURE__*/ new Vector2();\nconst _uvC$1 = /*@__PURE__*/ new Vector2();\n\nconst _intersectionPoint = /*@__PURE__*/ new Vector3();\nconst _intersectionPointWorld = /*@__PURE__*/ new Vector3();\n\nclass Mesh extends Object3D {\n\n\tconstructor( geometry = new BufferGeometry(), material = new MeshBasicMaterial() ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'Mesh';\n\n\t\tthis.geometry = geometry;\n\t\tthis.material = material;\n\n\t\tthis.updateMorphTargets();\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( 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() {\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( 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$3.copy( geometry.boundingSphere );\n\t\t_sphere$3.applyMatrix4( matrixWorld );\n\n\t\tif ( raycaster.ray.intersectsSphere( _sphere$3 ) === false ) return;\n\n\t\t//\n\n\t\t_inverseMatrix$2.copy( matrixWorld ).invert();\n\t\t_ray$2.copy( raycaster.ray ).applyMatrix4( _inverseMatrix$2 );\n\n\t\t// Check boundingBox before continuing\n\n\t\tif ( geometry.boundingBox !== null ) {\n\n\t\t\tif ( _ray$2.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$2, 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$2, 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$2, 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$2, 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\tconsole.error( 'THREE.Mesh.raycast() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.' );\n\n\t\t}\n\n\t}\n\n}\n\nMesh.prototype.isMesh = true;\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$1.fromBufferAttribute( position, a );\n\t_vB$1.fromBufferAttribute( position, b );\n\t_vC$1.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$1 ), influence );\n\t\t\t\t_morphB.addScaledVector( _tempB.sub( _vB$1 ), influence );\n\t\t\t\t_morphC.addScaledVector( _tempC.sub( _vC$1 ), influence );\n\n\t\t\t}\n\n\t\t}\n\n\t\t_vA$1.add( _morphA );\n\t\t_vB$1.add( _morphB );\n\t\t_vC$1.add( _morphC );\n\n\t}\n\n\tif ( object.isSkinnedMesh && material.skinning ) {\n\n\t\tobject.boneTransform( a, _vA$1 );\n\t\tobject.boneTransform( b, _vB$1 );\n\t\tobject.boneTransform( c, _vC$1 );\n\n\t}\n\n\tconst intersection = checkIntersection( object, material, raycaster, ray, _vA$1, _vB$1, _vC$1, _intersectionPoint );\n\n\tif ( intersection ) {\n\n\t\tif ( uv ) {\n\n\t\t\t_uvA$1.fromBufferAttribute( uv, a );\n\t\t\t_uvB$1.fromBufferAttribute( uv, b );\n\t\t\t_uvC$1.fromBufferAttribute( uv, c );\n\n\t\t\tintersection.uv = Triangle.getUV( _intersectionPoint, _vA$1, _vB$1, _vC$1, _uvA$1, _uvB$1, _uvC$1, new Vector2() );\n\n\t\t}\n\n\t\tif ( uv2 ) {\n\n\t\t\t_uvA$1.fromBufferAttribute( uv2, a );\n\t\t\t_uvB$1.fromBufferAttribute( uv2, b );\n\t\t\t_uvC$1.fromBufferAttribute( uv2, c );\n\n\t\t\tintersection.uv2 = Triangle.getUV( _intersectionPoint, _vA$1, _vB$1, _vC$1, _uvA$1, _uvB$1, _uvC$1, new Vector2() );\n\n\t\t}\n\n\t\tconst face = {\n\t\t\ta: a,\n\t\t\tb: b,\n\t\t\tc: c,\n\t\t\tnormal: new Vector3(),\n\t\t\tmaterialIndex: 0\n\t\t};\n\n\t\tTriangle.getNormal( _vA$1, _vB$1, _vC$1, face.normal );\n\n\t\tintersection.face = face;\n\n\t}\n\n\treturn intersection;\n\n}\n\nclass BoxGeometry 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 = '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\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 || property.isQuaternion ) ) {\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: <string>,\n *  vertexShader: <string>,\n *\n *  wireframe: <boolean>,\n *  wireframeLinewidth: <float>,\n *\n *  lights: <bool>,\n *\n *  skinning: <bool>,\n *  morphTargets: <bool>,\n *  morphNormals: <bool>\n * }\n */\n\nclass ShaderMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'ShaderMaterial';\n\n\t\tthis.defines = {};\n\t\tthis.uniforms = {};\n\n\t\tthis.vertexShader = default_vertex;\n\t\tthis.fragmentShader = default_fragment;\n\n\t\tthis.linewidth = 1;\n\n\t\tthis.wireframe = false;\n\t\tthis.wireframeLinewidth = 1;\n\n\t\tthis.fog = false; // set to use scene fog\n\t\tthis.lights = false; // set to use scene lights\n\t\tthis.clipping = false; // set to use user-defined clipping planes\n\n\t\tthis.skinning = false; // set to use skinning attribute streams\n\t\tthis.morphTargets = false; // set to use morph targets\n\t\tthis.morphNormals = false; // set to use morph normals\n\n\t\tthis.extensions = {\n\t\t\tderivatives: false, // set to use derivatives\n\t\t\tfragDepth: false, // set to use fragment depth values\n\t\t\tdrawBuffers: false, // set to use draw buffers\n\t\t\tshaderTextureLOD: false // set to use shader texture LOD\n\t\t};\n\n\t\t// When rendered geometry doesn't include these attributes but the material does,\n\t\t// use these default values in WebGL. This avoids errors when buffer data is missing.\n\t\tthis.defaultAttributeValues = {\n\t\t\t'color': [ 1, 1, 1 ],\n\t\t\t'uv': [ 0, 0 ],\n\t\t\t'uv2': [ 0, 0 ]\n\t\t};\n\n\t\tthis.index0AttributeName = undefined;\n\t\tthis.uniformsNeedUpdate = false;\n\n\t\tthis.glslVersion = null;\n\n\t\tif ( parameters !== undefined ) {\n\n\t\t\tif ( parameters.attributes !== undefined ) {\n\n\t\t\t\tconsole.error( 'THREE.ShaderMaterial: attributes should now be defined in THREE.BufferGeometry instead.' );\n\n\t\t\t}\n\n\t\t\tthis.setValues( parameters );\n\n\t\t}\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.fragmentShader = source.fragmentShader;\n\t\tthis.vertexShader = source.vertexShader;\n\n\t\tthis.uniforms = cloneUniforms( source.uniforms );\n\n\t\tthis.defines = Object.assign( {}, source.defines );\n\n\t\tthis.wireframe = source.wireframe;\n\t\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\n\t\tthis.lights = source.lights;\n\t\tthis.clipping = source.clipping;\n\n\t\tthis.skinning = source.skinning;\n\n\t\tthis.morphTargets = source.morphTargets;\n\t\tthis.morphNormals = source.morphNormals;\n\n\t\tthis.extensions = Object.assign( {}, source.extensions );\n\n\t\tthis.glslVersion = source.glslVersion;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst data = super.toJSON( meta );\n\n\t\tdata.glslVersion = this.glslVersion;\n\t\tdata.uniforms = {};\n\n\t\tfor ( const name in this.uniforms ) {\n\n\t\t\tconst uniform = this.uniforms[ name ];\n\t\t\tconst value = uniform.value;\n\n\t\t\tif ( value && value.isTexture ) {\n\n\t\t\t\tdata.uniforms[ name ] = {\n\t\t\t\t\ttype: 't',\n\t\t\t\t\tvalue: value.toJSON( meta ).uuid\n\t\t\t\t};\n\n\t\t\t} else if ( value && value.isColor ) {\n\n\t\t\t\tdata.uniforms[ name ] = {\n\t\t\t\t\ttype: 'c',\n\t\t\t\t\tvalue: value.getHex()\n\t\t\t\t};\n\n\t\t\t} else if ( value && value.isVector2 ) {\n\n\t\t\t\tdata.uniforms[ name ] = {\n\t\t\t\t\ttype: 'v2',\n\t\t\t\t\tvalue: value.toArray()\n\t\t\t\t};\n\n\t\t\t} else if ( value && value.isVector3 ) {\n\n\t\t\t\tdata.uniforms[ name ] = {\n\t\t\t\t\ttype: 'v3',\n\t\t\t\t\tvalue: value.toArray()\n\t\t\t\t};\n\n\t\t\t} else if ( value && value.isVector4 ) {\n\n\t\t\t\tdata.uniforms[ name ] = {\n\t\t\t\t\ttype: 'v4',\n\t\t\t\t\tvalue: value.toArray()\n\t\t\t\t};\n\n\t\t\t} else if ( value && value.isMatrix3 ) {\n\n\t\t\t\tdata.uniforms[ name ] = {\n\t\t\t\t\ttype: 'm3',\n\t\t\t\t\tvalue: value.toArray()\n\t\t\t\t};\n\n\t\t\t} else if ( value && value.isMatrix4 ) {\n\n\t\t\t\tdata.uniforms[ name ] = {\n\t\t\t\t\ttype: 'm4',\n\t\t\t\t\tvalue: value.toArray()\n\t\t\t\t};\n\n\t\t\t} else {\n\n\t\t\t\tdata.uniforms[ name ] = {\n\t\t\t\t\tvalue: value\n\t\t\t\t};\n\n\t\t\t\t// note: the array variants v2v, v3v, v4v, m4v and tv are not supported so far\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( Object.keys( this.defines ).length > 0 ) data.defines = this.defines;\n\n\t\tdata.vertexShader = this.vertexShader;\n\t\tdata.fragmentShader = this.fragmentShader;\n\n\t\tconst extensions = {};\n\n\t\tfor ( const key in this.extensions ) {\n\n\t\t\tif ( this.extensions[ key ] === true ) extensions[ key ] = true;\n\n\t\t}\n\n\t\tif ( Object.keys( extensions ).length > 0 ) data.extensions = extensions;\n\n\t\treturn data;\n\n\t}\n\n}\n\nShaderMaterial.prototype.isShaderMaterial = true;\n\nclass Camera extends Object3D {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.type = 'Camera';\n\n\t\tthis.matrixWorldInverse = new Matrix4();\n\n\t\tthis.projectionMatrix = new Matrix4();\n\t\tthis.projectionMatrixInverse = new Matrix4();\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( 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( 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.updateWorldMatrix( true, false );\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( force ) {\n\n\t\tsuper.updateMatrixWorld( force );\n\n\t\tthis.matrixWorldInverse.copy( this.matrixWorld ).invert();\n\n\t}\n\n\tupdateWorldMatrix( updateParents, updateChildren ) {\n\n\t\tsuper.updateWorldMatrix( updateParents, updateChildren );\n\n\t\tthis.matrixWorldInverse.copy( this.matrixWorld ).invert();\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n}\n\nCamera.prototype.isCamera = true;\n\nclass PerspectiveCamera extends Camera {\n\n\tconstructor( fov = 50, aspect = 1, near = 0.1, far = 2000 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'PerspectiveCamera';\n\n\t\tthis.fov = fov;\n\t\tthis.zoom = 1;\n\n\t\tthis.near = near;\n\t\tthis.far = far;\n\t\tthis.focus = 10;\n\n\t\tthis.aspect = aspect;\n\t\tthis.view = null;\n\n\t\tthis.filmGauge = 35;\t// width of the film (default in millimeters)\n\t\tthis.filmOffset = 0;\t// horizontal film offset (same unit as gauge)\n\n\t\tthis.updateProjectionMatrix();\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( 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( focalLength ) {\n\n\t\t/** see {@link http://www.bobatkins.com/photography/technical/field_of_view.html} */\n\t\tconst vExtentSlope = 0.5 * this.getFilmHeight() / focalLength;\n\n\t\tthis.fov = 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() {\n\n\t\tconst vExtentSlope = Math.tan( DEG2RAD * 0.5 * this.fov );\n\n\t\treturn 0.5 * this.getFilmHeight() / vExtentSlope;\n\n\t}\n\n\tgetEffectiveFOV() {\n\n\t\treturn RAD2DEG * 2 * Math.atan(\n\t\t\tMath.tan( DEG2RAD * 0.5 * this.fov ) / this.zoom );\n\n\t}\n\n\tgetFilmWidth() {\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() {\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( 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() {\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() {\n\n\t\tconst near = this.near;\n\t\tlet top = near * Math.tan( DEG2RAD * 0.5 * this.fov ) / this.zoom;\n\t\tlet height = 2 * top;\n\t\tlet width = this.aspect * height;\n\t\tlet left = - 0.5 * width;\n\t\tconst view = 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.copy( this.projectionMatrix ).invert();\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst data = super.toJSON( 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\nPerspectiveCamera.prototype.isPerspectiveCamera = true;\n\nconst fov = 90, aspect = 1;\n\nclass CubeCamera extends Object3D {\n\n\tconstructor( near, far, renderTarget ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'CubeCamera';\n\n\t\tif ( renderTarget.isWebGLCubeRenderTarget !== true ) {\n\n\t\t\tconsole.error( 'THREE.CubeCamera: The constructor now expects an instance of WebGLCubeRenderTarget as third parameter.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tthis.renderTarget = renderTarget;\n\n\t\tconst cameraPX = new PerspectiveCamera( fov, aspect, near, far );\n\t\tcameraPX.layers = this.layers;\n\t\tcameraPX.up.set( 0, - 1, 0 );\n\t\tcameraPX.lookAt( new Vector3( 1, 0, 0 ) );\n\t\tthis.add( cameraPX );\n\n\t\tconst cameraNX = new PerspectiveCamera( fov, aspect, near, far );\n\t\tcameraNX.layers = this.layers;\n\t\tcameraNX.up.set( 0, - 1, 0 );\n\t\tcameraNX.lookAt( new Vector3( - 1, 0, 0 ) );\n\t\tthis.add( cameraNX );\n\n\t\tconst cameraPY = new PerspectiveCamera( fov, aspect, near, far );\n\t\tcameraPY.layers = this.layers;\n\t\tcameraPY.up.set( 0, 0, 1 );\n\t\tcameraPY.lookAt( new Vector3( 0, 1, 0 ) );\n\t\tthis.add( cameraPY );\n\n\t\tconst cameraNY = new PerspectiveCamera( fov, aspect, near, far );\n\t\tcameraNY.layers = this.layers;\n\t\tcameraNY.up.set( 0, 0, - 1 );\n\t\tcameraNY.lookAt( new Vector3( 0, - 1, 0 ) );\n\t\tthis.add( cameraNY );\n\n\t\tconst cameraPZ = new PerspectiveCamera( fov, aspect, near, far );\n\t\tcameraPZ.layers = this.layers;\n\t\tcameraPZ.up.set( 0, - 1, 0 );\n\t\tcameraPZ.lookAt( new Vector3( 0, 0, 1 ) );\n\t\tthis.add( cameraPZ );\n\n\t\tconst cameraNZ = new PerspectiveCamera( fov, aspect, near, far );\n\t\tcameraNZ.layers = this.layers;\n\t\tcameraNZ.up.set( 0, - 1, 0 );\n\t\tcameraNZ.lookAt( new Vector3( 0, 0, - 1 ) );\n\t\tthis.add( cameraNZ );\n\n\t}\n\n\tupdate( renderer, scene ) {\n\n\t\tif ( this.parent === null ) this.updateMatrixWorld();\n\n\t\tconst renderTarget = this.renderTarget;\n\n\t\tconst [ cameraPX, cameraNX, cameraPY, cameraNY, cameraPZ, cameraNZ ] = this.children;\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}\n\nclass CubeTexture extends Texture {\n\n\tconstructor( images, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding ) {\n\n\t\timages = images !== undefined ? images : [];\n\t\tmapping = mapping !== undefined ? mapping : CubeReflectionMapping;\n\t\tformat = format !== undefined ? format : RGBFormat;\n\n\t\tsuper( images, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding );\n\n\t\t// Why CubeTexture._needsFlipEnvMap is necessary:\n\t\t//\n\t\t// By convention -- likely based on the RenderMan spec from the 1990's -- cube maps are specified by WebGL (and three.js)\n\t\t// in a coordinate system in which positive-x is to the right when looking up the positive-z axis -- in other words,\n\t\t// in a left-handed coordinate system. By continuing this convention, preexisting cube maps continued to render correctly.\n\n\t\t// three.js uses a right-handed coordinate system. So environment maps used in three.js appear to have px and nx swapped\n\t\t// and the flag _needsFlipEnvMap controls this conversion. The flip is not required (and thus _needsFlipEnvMap is set to false)\n\t\t// when using WebGLCubeRenderTarget.texture as a cube texture.\n\n\t\tthis._needsFlipEnvMap = true;\n\n\t\tthis.flipY = false;\n\n\t}\n\n\tget images() {\n\n\t\treturn this.image;\n\n\t}\n\n\tset images( value ) {\n\n\t\tthis.image = value;\n\n\t}\n\n}\n\nCubeTexture.prototype.isCubeTexture = true;\n\nclass WebGLCubeRenderTarget extends WebGLRenderTarget {\n\n\tconstructor( size, options, dummy ) {\n\n\t\tif ( Number.isInteger( options ) ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLCubeRenderTarget: constructor signature is now WebGLCubeRenderTarget( size, options )' );\n\n\t\t\toptions = dummy;\n\n\t\t}\n\n\t\tsuper( size, size, options );\n\n\t\toptions = options || {};\n\n\t\tthis.texture = new CubeTexture( undefined, options.mapping, options.wrapS, options.wrapT, options.magFilter, options.minFilter, options.format, options.type, options.anisotropy, options.encoding );\n\n\t\tthis.texture.generateMipmaps = options.generateMipmaps !== undefined ? options.generateMipmaps : false;\n\t\tthis.texture.minFilter = options.minFilter !== undefined ? options.minFilter : LinearFilter;\n\n\t\tthis.texture._needsFlipEnvMap = false;\n\n\t}\n\n\tfromEquirectangularTexture( renderer, texture ) {\n\n\t\tthis.texture.type = texture.type;\n\t\tthis.texture.format = RGBAFormat; // see #18859\n\t\tthis.texture.encoding = texture.encoding;\n\n\t\tthis.texture.generateMipmaps = texture.generateMipmaps;\n\t\tthis.texture.minFilter = texture.minFilter;\n\t\tthis.texture.magFilter = texture.magFilter;\n\n\t\tconst shader = {\n\n\t\t\tuniforms: {\n\t\t\t\ttEquirect: { value: null },\n\t\t\t},\n\n\t\t\tvertexShader: /* glsl */`\n\n\t\t\t\tvarying vec3 vWorldDirection;\n\n\t\t\t\tvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n\n\t\t\t\t\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n\n\t\t\t\t}\n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\tvWorldDirection = transformDirection( position, modelMatrix );\n\n\t\t\t\t\t#include <begin_vertex>\n\t\t\t\t\t#include <project_vertex>\n\n\t\t\t\t}\n\t\t\t`,\n\n\t\t\tfragmentShader: /* glsl */`\n\n\t\t\t\tuniform sampler2D tEquirect;\n\n\t\t\t\tvarying vec3 vWorldDirection;\n\n\t\t\t\t#include <common>\n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\tvec3 direction = normalize( vWorldDirection );\n\n\t\t\t\t\tvec2 sampleUV = equirectUv( direction );\n\n\t\t\t\t\tgl_FragColor = texture2D( tEquirect, sampleUV );\n\n\t\t\t\t}\n\t\t\t`\n\t\t};\n\n\t\tconst geometry = new BoxGeometry( 5, 5, 5 );\n\n\t\tconst material = new ShaderMaterial( {\n\n\t\t\tname: 'CubemapFromEquirect',\n\n\t\t\tuniforms: cloneUniforms( shader.uniforms ),\n\t\t\tvertexShader: shader.vertexShader,\n\t\t\tfragmentShader: shader.fragmentShader,\n\t\t\tside: BackSide,\n\t\t\tblending: NoBlending\n\n\t\t} );\n\n\t\tmaterial.uniforms.tEquirect.value = texture;\n\n\t\tconst mesh = new Mesh( geometry, material );\n\n\t\tconst currentMinFilter = texture.minFilter;\n\n\t\t// Avoid blurred poles\n\t\tif ( texture.minFilter === LinearMipmapLinearFilter ) texture.minFilter = LinearFilter;\n\n\t\tconst camera = new CubeCamera( 1, 10, this );\n\t\tcamera.update( renderer, mesh );\n\n\t\ttexture.minFilter = currentMinFilter;\n\n\t\tmesh.geometry.dispose();\n\t\tmesh.material.dispose();\n\n\t\treturn this;\n\n\t}\n\n\tclear( 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( this, 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\nWebGLCubeRenderTarget.prototype.isWebGLCubeRenderTarget = true;\n\nclass DataTexture extends Texture {\n\n\tconstructor( data, width, height, format, type, mapping, wrapS, wrapT, magFilter, minFilter, anisotropy, encoding ) {\n\n\t\tsuper( null, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding );\n\n\t\tthis.image = { data: data || null, width: width || 1, height: height || 1 };\n\n\t\tthis.magFilter = magFilter !== undefined ? magFilter : NearestFilter;\n\t\tthis.minFilter = minFilter !== undefined ? minFilter : NearestFilter;\n\n\t\tthis.generateMipmaps = false;\n\t\tthis.flipY = false;\n\t\tthis.unpackAlignment = 1;\n\n\t\tthis.needsUpdate = true;\n\n\t}\n\n}\n\nDataTexture.prototype.isDataTexture = true;\n\nconst _sphere$2 = /*@__PURE__*/ new Sphere();\nconst _vector$7 = /*@__PURE__*/ new Vector3();\n\nclass Frustum {\n\n\tconstructor( p0 = new Plane(), p1 = new Plane(), p2 = new Plane(), p3 = new Plane(), p4 = new Plane(), p5 = new Plane() ) {\n\n\t\tthis.planes = [ p0, p1, p2, p3, p4, p5 ];\n\n\t}\n\n\tset( 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\tcopy( 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( 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( object ) {\n\n\t\tconst geometry = object.geometry;\n\n\t\tif ( geometry.boundingSphere === null ) geometry.computeBoundingSphere();\n\n\t\t_sphere$2.copy( geometry.boundingSphere ).applyMatrix4( object.matrixWorld );\n\n\t\treturn this.intersectsSphere( _sphere$2 );\n\n\t}\n\n\tintersectsSprite( sprite ) {\n\n\t\t_sphere$2.center.set( 0, 0, 0 );\n\t\t_sphere$2.radius = 0.7071067811865476;\n\t\t_sphere$2.applyMatrix4( sprite.matrixWorld );\n\n\t\treturn this.intersectsSphere( _sphere$2 );\n\n\t}\n\n\tintersectsSphere( 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( 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$7.x = plane.normal.x > 0 ? box.max.x : box.min.x;\n\t\t\t_vector$7.y = plane.normal.y > 0 ? box.max.y : box.min.y;\n\t\t\t_vector$7.z = plane.normal.z > 0 ? box.max.z : box.min.z;\n\n\t\t\tif ( plane.distanceToPoint( _vector$7 ) < 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( 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\tclone() {\n\n\t\treturn new this.constructor().copy( this );\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\tif ( attribute.isFloat16BufferAttribute ) {\n\n\t\t\t\tif ( isWebGL2 ) {\n\n\t\t\t\t\ttype = 5131;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.warn( 'THREE.WebGLAttributes: Usage of Float16BufferAttribute requires WebGL2.' );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\ttype = 5123;\n\n\t\t\t}\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.isGLBufferAttribute ) {\n\n\t\t\tconst cached = buffers.get( attribute );\n\n\t\t\tif ( ! cached || cached.version < attribute.version ) {\n\n\t\t\t\tbuffers.set( attribute, {\n\t\t\t\t\tbuffer: attribute.buffer,\n\t\t\t\t\ttype: attribute.type,\n\t\t\t\t\tbytesPerElement: attribute.elementSize,\n\t\t\t\t\tversion: attribute.version\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t\treturn;\n\n\t\t}\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\nclass PlaneGeometry extends BufferGeometry {\n\n\tconstructor( width = 1, height = 1, widthSegments = 1, heightSegments = 1 ) {\n\n\t\tsuper();\n\t\tthis.type = 'PlaneGeometry';\n\n\t\tthis.parameters = {\n\t\t\twidth: width,\n\t\t\theight: height,\n\t\t\twidthSegments: widthSegments,\n\t\t\theightSegments: heightSegments\n\t\t};\n\n\t\tconst width_half = width / 2;\n\t\tconst height_half = height / 2;\n\n\t\tconst gridX = Math.floor( widthSegments );\n\t\tconst gridY = Math.floor( heightSegments );\n\n\t\tconst gridX1 = gridX + 1;\n\t\tconst gridY1 = gridY + 1;\n\n\t\tconst segment_width = width / gridX;\n\t\tconst segment_height = height / gridY;\n\n\t\t//\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\n\t\tfor ( let iy = 0; iy < gridY1; iy ++ ) {\n\n\t\t\tconst y = iy * segment_height - height_half;\n\n\t\t\tfor ( let ix = 0; ix < gridX1; ix ++ ) {\n\n\t\t\t\tconst x = ix * segment_width - width_half;\n\n\t\t\t\tvertices.push( x, - y, 0 );\n\n\t\t\t\tnormals.push( 0, 0, 1 );\n\n\t\t\t\tuvs.push( ix / gridX );\n\t\t\t\tuvs.push( 1 - ( iy / gridY ) );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfor ( let iy = 0; iy < gridY; iy ++ ) {\n\n\t\t\tfor ( let ix = 0; ix < gridX; ix ++ ) {\n\n\t\t\t\tconst a = ix + gridX1 * iy;\n\t\t\t\tconst b = ix + gridX1 * ( iy + 1 );\n\t\t\t\tconst c = ( ix + 1 ) + gridX1 * ( iy + 1 );\n\t\t\t\tconst d = ( ix + 1 ) + gridX1 * iy;\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\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}\n\n}\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, float faceDirection ) {\\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 ) * faceDirection;\\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 = \"#if defined( USE_COLOR_ALPHA )\\n\\tdiffuseColor *= vColor;\\n#elif defined( USE_COLOR )\\n\\tdiffuseColor.rgb *= vColor;\\n#endif\";\n\nvar color_pars_fragment = \"#if defined( USE_COLOR_ALPHA )\\n\\tvarying vec4 vColor;\\n#elif defined( USE_COLOR )\\n\\tvarying vec3 vColor;\\n#endif\";\n\nvar color_pars_vertex = \"#if defined( USE_COLOR_ALPHA )\\n\\tvarying vec4 vColor;\\n#elif defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR )\\n\\tvarying vec3 vColor;\\n#endif\";\n\nvar color_vertex = \"#if defined( USE_COLOR_ALPHA )\\n\\tvColor = vec4( 1.0 );\\n#elif defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR )\\n\\tvColor = vec3( 1.0 );\\n#endif\\n#ifdef USE_COLOR\\n\\tvColor *= color;\\n#endif\\n#ifdef USE_INSTANCING_COLOR\\n\\tvColor.xyz *= instanceColor.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\\t#define cubeUV_maxMipLevel 8.0\\n\\t#define cubeUV_minMipLevel 4.0\\n\\t#define cubeUV_maxTileSize 256.0\\n\\t#define cubeUV_minTileSize 16.0\\n\\tfloat getFace( vec3 direction ) {\\n\\t\\tvec3 absDirection = abs( direction );\\n\\t\\tfloat face = - 1.0;\\n\\t\\tif ( absDirection.x > absDirection.z ) {\\n\\t\\t\\tif ( absDirection.x > absDirection.y )\\n\\t\\t\\t\\tface = direction.x > 0.0 ? 0.0 : 3.0;\\n\\t\\t\\telse\\n\\t\\t\\t\\tface = direction.y > 0.0 ? 1.0 : 4.0;\\n\\t\\t} else {\\n\\t\\t\\tif ( absDirection.z > absDirection.y )\\n\\t\\t\\t\\tface = direction.z > 0.0 ? 2.0 : 5.0;\\n\\t\\t\\telse\\n\\t\\t\\t\\tface = direction.y > 0.0 ? 1.0 : 4.0;\\n\\t\\t}\\n\\t\\treturn face;\\n\\t}\\n\\tvec2 getUV( vec3 direction, float face ) {\\n\\t\\tvec2 uv;\\n\\t\\tif ( face == 0.0 ) {\\n\\t\\t\\tuv = vec2( direction.z, direction.y ) / abs( direction.x );\\n\\t\\t} else if ( face == 1.0 ) {\\n\\t\\t\\tuv = vec2( - direction.x, - direction.z ) / abs( direction.y );\\n\\t\\t} else if ( face == 2.0 ) {\\n\\t\\t\\tuv = vec2( - direction.x, direction.y ) / abs( direction.z );\\n\\t\\t} else if ( face == 3.0 ) {\\n\\t\\t\\tuv = vec2( - direction.z, direction.y ) / abs( direction.x );\\n\\t\\t} else if ( face == 4.0 ) {\\n\\t\\t\\tuv = vec2( - direction.x, direction.z ) / abs( direction.y );\\n\\t\\t} else {\\n\\t\\t\\tuv = vec2( direction.x, direction.y ) / abs( direction.z );\\n\\t\\t}\\n\\t\\treturn 0.5 * ( uv + 1.0 );\\n\\t}\\n\\tvec3 bilinearCubeUV( sampler2D envMap, vec3 direction, float mipInt ) {\\n\\t\\tfloat face = getFace( direction );\\n\\t\\tfloat filterInt = max( cubeUV_minMipLevel - mipInt, 0.0 );\\n\\t\\tmipInt = max( mipInt, cubeUV_minMipLevel );\\n\\t\\tfloat faceSize = exp2( mipInt );\\n\\t\\tfloat texelSize = 1.0 / ( 3.0 * cubeUV_maxTileSize );\\n\\t\\tvec2 uv = getUV( direction, face ) * ( faceSize - 1.0 );\\n\\t\\tvec2 f = fract( uv );\\n\\t\\tuv += 0.5 - f;\\n\\t\\tif ( face > 2.0 ) {\\n\\t\\t\\tuv.y += faceSize;\\n\\t\\t\\tface -= 3.0;\\n\\t\\t}\\n\\t\\tuv.x += face * faceSize;\\n\\t\\tif ( mipInt < cubeUV_maxMipLevel ) {\\n\\t\\t\\tuv.y += 2.0 * cubeUV_maxTileSize;\\n\\t\\t}\\n\\t\\tuv.y += filterInt * 2.0 * cubeUV_minTileSize;\\n\\t\\tuv.x += 3.0 * max( 0.0, cubeUV_maxTileSize - 2.0 * faceSize );\\n\\t\\tuv *= texelSize;\\n\\t\\tvec3 tl = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\\n\\t\\tuv.x += texelSize;\\n\\t\\tvec3 tr = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\\n\\t\\tuv.y += texelSize;\\n\\t\\tvec3 br = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\\n\\t\\tuv.x -= texelSize;\\n\\t\\tvec3 bl = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\\n\\t\\tvec3 tm = mix( tl, tr, f.x );\\n\\t\\tvec3 bm = mix( bl, br, f.x );\\n\\t\\treturn mix( tm, bm, f.y );\\n\\t}\\n\\t#define r0 1.0\\n\\t#define v0 0.339\\n\\t#define m0 - 2.0\\n\\t#define r1 0.8\\n\\t#define v1 0.276\\n\\t#define m1 - 1.0\\n\\t#define r4 0.4\\n\\t#define v4 0.046\\n\\t#define m4 2.0\\n\\t#define r5 0.305\\n\\t#define v5 0.016\\n\\t#define m5 3.0\\n\\t#define r6 0.21\\n\\t#define v6 0.0038\\n\\t#define m6 4.0\\n\\tfloat roughnessToMip( float roughness ) {\\n\\t\\tfloat mip = 0.0;\\n\\t\\tif ( roughness >= r1 ) {\\n\\t\\t\\tmip = ( r0 - roughness ) * ( m1 - m0 ) / ( r0 - r1 ) + m0;\\n\\t\\t} else if ( roughness >= r4 ) {\\n\\t\\t\\tmip = ( r1 - roughness ) * ( m4 - m1 ) / ( r1 - r4 ) + m1;\\n\\t\\t} else if ( roughness >= r5 ) {\\n\\t\\t\\tmip = ( r4 - roughness ) * ( m5 - m4 ) / ( r4 - r5 ) + m4;\\n\\t\\t} else if ( roughness >= r6 ) {\\n\\t\\t\\tmip = ( r5 - roughness ) * ( m6 - m5 ) / ( r5 - r6 ) + m5;\\n\\t\\t} else {\\n\\t\\t\\tmip = - 2.0 * log2( 1.16 * roughness );\\t\\t}\\n\\t\\treturn mip;\\n\\t}\\n\\tvec4 textureCubeUV( sampler2D envMap, vec3 sampleDir, float roughness ) {\\n\\t\\tfloat mip = clamp( roughnessToMip( roughness ), m0, cubeUV_maxMipLevel );\\n\\t\\tfloat mipF = fract( mip );\\n\\t\\tfloat mipInt = floor( mip );\\n\\t\\tvec3 color0 = bilinearCubeUV( envMap, sampleDir, mipInt );\\n\\t\\tif ( mipF == 0.0 ) {\\n\\t\\t\\treturn vec4( color0, 1.0 );\\n\\t\\t} else {\\n\\t\\t\\tvec3 color1 = bilinearCubeUV( envMap, sampleDir, mipInt + 1.0 );\\n\\t\\t\\treturn vec4( mix( color0, color1, mipF ), 1.0 );\\n\\t\\t}\\n\\t}\\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\\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#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\\tvec3 reflectVec = reflect( -viewDir, normal );\\n\\t\\t\\treflectVec = normalize( mix( reflectVec, normal, roughness * roughness) );\\n\\t\\t#else\\n\\t\\t\\tvec3 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#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 = \"float faceDirection = gl_FrontFacing ? 1.0 : - 1.0;\\n#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 * faceDirection;\\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 * faceDirection;\\n\\t\\t\\tbitangent = bitangent * faceDirection;\\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 * faceDirection;\\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, faceDirection );\\n\\t#endif\\n#elif defined( USE_BUMPMAP )\\n\\tnormal = perturbNormalArb( -vViewPosition, normal, dHdxy_fwd(), faceDirection );\\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, float faceDirection ) {\\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\\tvec3 N = surf_norm;\\n\\t\\tvec3 q1perp = cross( q1, N );\\n\\t\\tvec3 q0perp = cross( N, q0 );\\n\\t\\tvec3 T = q1perp * st0.x + q0perp * st1.x;\\n\\t\\tvec3 B = q1perp * st0.y + q0perp * st1.y;\\n\\t\\tfloat det = max( dot( T, T ), dot( B, B ) );\\n\\t\\tfloat scale = ( det == 0.0 ) ? 0.0 : faceDirection * inversesqrt( det );\\n\\t\\treturn normalize( T * ( mapN.x * scale ) + B * ( mapN.y * scale ) + N * mapN.z );\\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, faceDirection );\\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 <tonemapping_fragment>\\n\\t#include <encodings_fragment>\\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 <envmap_common_pars_fragment>\\nuniform float opacity;\\nvarying vec3 vWorldDirection;\\n#include <cube_uv_reflection_fragment>\\nvoid main() {\\n\\tvec3 vReflect = vWorldDirection;\\n\\t#include <envmap_fragment>\\n\\tgl_FragColor = envColor;\\n\\tgl_FragColor.a *= opacity;\\n\\t#include <tonemapping_fragment>\\n\\t#include <encodings_fragment>\\n}\";\n\nvar cube_vert = \"varying vec3 vWorldDirection;\\n#include <common>\\nvoid main() {\\n\\tvWorldDirection = transformDirection( position, modelMatrix );\\n\\t#include <begin_vertex>\\n\\t#include <project_vertex>\\n\\tgl_Position.z = gl_Position.w;\\n}\";\n\nvar depth_frag = \"#if DEPTH_PACKING == 3200\\n\\tuniform float opacity;\\n#endif\\n#include <common>\\n#include <packing>\\n#include <uv_pars_fragment>\\n#include <map_pars_fragment>\\n#include <alphamap_pars_fragment>\\n#include <logdepthbuf_pars_fragment>\\n#include <clipping_planes_pars_fragment>\\nvarying vec2 vHighPrecisionZW;\\nvoid main() {\\n\\t#include <clipping_planes_fragment>\\n\\tvec4 diffuseColor = vec4( 1.0 );\\n\\t#if DEPTH_PACKING == 3200\\n\\t\\tdiffuseColor.a = opacity;\\n\\t#endif\\n\\t#include <map_fragment>\\n\\t#include <alphamap_fragment>\\n\\t#include <alphatest_fragment>\\n\\t#include <logdepthbuf_fragment>\\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 <common>\\n#include <uv_pars_vertex>\\n#include <displacementmap_pars_vertex>\\n#include <morphtarget_pars_vertex>\\n#include <skinning_pars_vertex>\\n#include <logdepthbuf_pars_vertex>\\n#include <clipping_planes_pars_vertex>\\nvarying vec2 vHighPrecisionZW;\\nvoid main() {\\n\\t#include <uv_vertex>\\n\\t#include <skinbase_vertex>\\n\\t#ifdef USE_DISPLACEMENTMAP\\n\\t\\t#include <beginnormal_vertex>\\n\\t\\t#include <morphnormal_vertex>\\n\\t\\t#include <skinnormal_vertex>\\n\\t#endif\\n\\t#include <begin_vertex>\\n\\t#include <morphtarget_vertex>\\n\\t#include <skinning_vertex>\\n\\t#include <displacementmap_vertex>\\n\\t#include <project_vertex>\\n\\t#include <logdepthbuf_vertex>\\n\\t#include <clipping_planes_vertex>\\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 <common>\\n#include <packing>\\n#include <uv_pars_fragment>\\n#include <map_pars_fragment>\\n#include <alphamap_pars_fragment>\\n#include <clipping_planes_pars_fragment>\\nvoid main () {\\n\\t#include <clipping_planes_fragment>\\n\\tvec4 diffuseColor = vec4( 1.0 );\\n\\t#include <map_fragment>\\n\\t#include <alphamap_fragment>\\n\\t#include <alphatest_fragment>\\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 <common>\\n#include <uv_pars_vertex>\\n#include <displacementmap_pars_vertex>\\n#include <morphtarget_pars_vertex>\\n#include <skinning_pars_vertex>\\n#include <clipping_planes_pars_vertex>\\nvoid main() {\\n\\t#include <uv_vertex>\\n\\t#include <skinbase_vertex>\\n\\t#ifdef USE_DISPLACEMENTMAP\\n\\t\\t#include <beginnormal_vertex>\\n\\t\\t#include <morphnormal_vertex>\\n\\t\\t#include <skinnormal_vertex>\\n\\t#endif\\n\\t#include <begin_vertex>\\n\\t#include <morphtarget_vertex>\\n\\t#include <skinning_vertex>\\n\\t#include <displacementmap_vertex>\\n\\t#include <project_vertex>\\n\\t#include <worldpos_vertex>\\n\\t#include <clipping_planes_vertex>\\n\\tvWorldPosition = worldPosition.xyz;\\n}\";\n\nvar equirect_frag = \"uniform sampler2D tEquirect;\\nvarying vec3 vWorldDirection;\\n#include <common>\\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 <tonemapping_fragment>\\n\\t#include <encodings_fragment>\\n}\";\n\nvar equirect_vert = \"varying vec3 vWorldDirection;\\n#include <common>\\nvoid main() {\\n\\tvWorldDirection = transformDirection( position, modelMatrix );\\n\\t#include <begin_vertex>\\n\\t#include <project_vertex>\\n}\";\n\nvar linedashed_frag = \"uniform vec3 diffuse;\\nuniform float opacity;\\nuniform float dashSize;\\nuniform float totalSize;\\nvarying float vLineDistance;\\n#include <common>\\n#include <color_pars_fragment>\\n#include <fog_pars_fragment>\\n#include <logdepthbuf_pars_fragment>\\n#include <clipping_planes_pars_fragment>\\nvoid main() {\\n\\t#include <clipping_planes_fragment>\\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 <logdepthbuf_fragment>\\n\\t#include <color_fragment>\\n\\toutgoingLight = diffuseColor.rgb;\\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include <tonemapping_fragment>\\n\\t#include <encodings_fragment>\\n\\t#include <fog_fragment>\\n\\t#include <premultiplied_alpha_fragment>\\n}\";\n\nvar linedashed_vert = \"uniform float scale;\\nattribute float lineDistance;\\nvarying float vLineDistance;\\n#include <common>\\n#include <color_pars_vertex>\\n#include <fog_pars_vertex>\\n#include <morphtarget_pars_vertex>\\n#include <logdepthbuf_pars_vertex>\\n#include <clipping_planes_pars_vertex>\\nvoid main() {\\n\\tvLineDistance = scale * lineDistance;\\n\\t#include <color_vertex>\\n\\t#include <begin_vertex>\\n\\t#include <morphtarget_vertex>\\n\\t#include <project_vertex>\\n\\t#include <logdepthbuf_vertex>\\n\\t#include <clipping_planes_vertex>\\n\\t#include <fog_vertex>\\n}\";\n\nvar meshbasic_frag = \"uniform vec3 diffuse;\\nuniform float opacity;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\n#include <common>\\n#include <dithering_pars_fragment>\\n#include <color_pars_fragment>\\n#include <uv_pars_fragment>\\n#include <uv2_pars_fragment>\\n#include <map_pars_fragment>\\n#include <alphamap_pars_fragment>\\n#include <aomap_pars_fragment>\\n#include <lightmap_pars_fragment>\\n#include <envmap_common_pars_fragment>\\n#include <envmap_pars_fragment>\\n#include <cube_uv_reflection_fragment>\\n#include <fog_pars_fragment>\\n#include <specularmap_pars_fragment>\\n#include <logdepthbuf_pars_fragment>\\n#include <clipping_planes_pars_fragment>\\nvoid main() {\\n\\t#include <clipping_planes_fragment>\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include <logdepthbuf_fragment>\\n\\t#include <map_fragment>\\n\\t#include <color_fragment>\\n\\t#include <alphamap_fragment>\\n\\t#include <alphatest_fragment>\\n\\t#include <specularmap_fragment>\\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 <aomap_fragment>\\n\\treflectedLight.indirectDiffuse *= diffuseColor.rgb;\\n\\tvec3 outgoingLight = reflectedLight.indirectDiffuse;\\n\\t#include <envmap_fragment>\\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include <tonemapping_fragment>\\n\\t#include <encodings_fragment>\\n\\t#include <fog_fragment>\\n\\t#include <premultiplied_alpha_fragment>\\n\\t#include <dithering_fragment>\\n}\";\n\nvar meshbasic_vert = \"#include <common>\\n#include <uv_pars_vertex>\\n#include <uv2_pars_vertex>\\n#include <envmap_pars_vertex>\\n#include <color_pars_vertex>\\n#include <fog_pars_vertex>\\n#include <morphtarget_pars_vertex>\\n#include <skinning_pars_vertex>\\n#include <logdepthbuf_pars_vertex>\\n#include <clipping_planes_pars_vertex>\\nvoid main() {\\n\\t#include <uv_vertex>\\n\\t#include <uv2_vertex>\\n\\t#include <color_vertex>\\n\\t#include <skinbase_vertex>\\n\\t#ifdef USE_ENVMAP\\n\\t#include <beginnormal_vertex>\\n\\t#include <morphnormal_vertex>\\n\\t#include <skinnormal_vertex>\\n\\t#include <defaultnormal_vertex>\\n\\t#endif\\n\\t#include <begin_vertex>\\n\\t#include <morphtarget_vertex>\\n\\t#include <skinning_vertex>\\n\\t#include <project_vertex>\\n\\t#include <logdepthbuf_vertex>\\n\\t#include <worldpos_vertex>\\n\\t#include <clipping_planes_vertex>\\n\\t#include <envmap_vertex>\\n\\t#include <fog_vertex>\\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 <common>\\n#include <packing>\\n#include <dithering_pars_fragment>\\n#include <color_pars_fragment>\\n#include <uv_pars_fragment>\\n#include <uv2_pars_fragment>\\n#include <map_pars_fragment>\\n#include <alphamap_pars_fragment>\\n#include <aomap_pars_fragment>\\n#include <lightmap_pars_fragment>\\n#include <emissivemap_pars_fragment>\\n#include <envmap_common_pars_fragment>\\n#include <envmap_pars_fragment>\\n#include <cube_uv_reflection_fragment>\\n#include <bsdfs>\\n#include <lights_pars_begin>\\n#include <fog_pars_fragment>\\n#include <shadowmap_pars_fragment>\\n#include <shadowmask_pars_fragment>\\n#include <specularmap_pars_fragment>\\n#include <logdepthbuf_pars_fragment>\\n#include <clipping_planes_pars_fragment>\\nvoid main() {\\n\\t#include <clipping_planes_fragment>\\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 <logdepthbuf_fragment>\\n\\t#include <map_fragment>\\n\\t#include <color_fragment>\\n\\t#include <alphamap_fragment>\\n\\t#include <alphatest_fragment>\\n\\t#include <specularmap_fragment>\\n\\t#include <emissivemap_fragment>\\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 <lightmap_fragment>\\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 <aomap_fragment>\\n\\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\\n\\t#include <envmap_fragment>\\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include <tonemapping_fragment>\\n\\t#include <encodings_fragment>\\n\\t#include <fog_fragment>\\n\\t#include <premultiplied_alpha_fragment>\\n\\t#include <dithering_fragment>\\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 <common>\\n#include <uv_pars_vertex>\\n#include <uv2_pars_vertex>\\n#include <envmap_pars_vertex>\\n#include <bsdfs>\\n#include <lights_pars_begin>\\n#include <color_pars_vertex>\\n#include <fog_pars_vertex>\\n#include <morphtarget_pars_vertex>\\n#include <skinning_pars_vertex>\\n#include <shadowmap_pars_vertex>\\n#include <logdepthbuf_pars_vertex>\\n#include <clipping_planes_pars_vertex>\\nvoid main() {\\n\\t#include <uv_vertex>\\n\\t#include <uv2_vertex>\\n\\t#include <color_vertex>\\n\\t#include <beginnormal_vertex>\\n\\t#include <morphnormal_vertex>\\n\\t#include <skinbase_vertex>\\n\\t#include <skinnormal_vertex>\\n\\t#include <defaultnormal_vertex>\\n\\t#include <begin_vertex>\\n\\t#include <morphtarget_vertex>\\n\\t#include <skinning_vertex>\\n\\t#include <project_vertex>\\n\\t#include <logdepthbuf_vertex>\\n\\t#include <clipping_planes_vertex>\\n\\t#include <worldpos_vertex>\\n\\t#include <envmap_vertex>\\n\\t#include <lights_lambert_vertex>\\n\\t#include <shadowmap_vertex>\\n\\t#include <fog_vertex>\\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 <common>\\n#include <dithering_pars_fragment>\\n#include <color_pars_fragment>\\n#include <uv_pars_fragment>\\n#include <map_pars_fragment>\\n#include <alphamap_pars_fragment>\\n#include <fog_pars_fragment>\\n#include <bumpmap_pars_fragment>\\n#include <normalmap_pars_fragment>\\n#include <logdepthbuf_pars_fragment>\\n#include <clipping_planes_pars_fragment>\\nvoid main() {\\n\\t#include <clipping_planes_fragment>\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include <logdepthbuf_fragment>\\n\\t#include <map_fragment>\\n\\t#include <color_fragment>\\n\\t#include <alphamap_fragment>\\n\\t#include <alphatest_fragment>\\n\\t#include <normal_fragment_begin>\\n\\t#include <normal_fragment_maps>\\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 <tonemapping_fragment>\\n\\t#include <encodings_fragment>\\n\\t#include <fog_fragment>\\n\\t#include <premultiplied_alpha_fragment>\\n\\t#include <dithering_fragment>\\n}\";\n\nvar meshmatcap_vert = \"#define MATCAP\\nvarying vec3 vViewPosition;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\n#include <common>\\n#include <uv_pars_vertex>\\n#include <color_pars_vertex>\\n#include <displacementmap_pars_vertex>\\n#include <fog_pars_vertex>\\n#include <morphtarget_pars_vertex>\\n#include <skinning_pars_vertex>\\n#include <logdepthbuf_pars_vertex>\\n#include <clipping_planes_pars_vertex>\\nvoid main() {\\n\\t#include <uv_vertex>\\n\\t#include <color_vertex>\\n\\t#include <beginnormal_vertex>\\n\\t#include <morphnormal_vertex>\\n\\t#include <skinbase_vertex>\\n\\t#include <skinnormal_vertex>\\n\\t#include <defaultnormal_vertex>\\n\\t#ifndef FLAT_SHADED\\n\\t\\tvNormal = normalize( transformedNormal );\\n\\t#endif\\n\\t#include <begin_vertex>\\n\\t#include <morphtarget_vertex>\\n\\t#include <skinning_vertex>\\n\\t#include <displacementmap_vertex>\\n\\t#include <project_vertex>\\n\\t#include <logdepthbuf_vertex>\\n\\t#include <clipping_planes_vertex>\\n\\t#include <fog_vertex>\\n\\tvViewPosition = - mvPosition.xyz;\\n}\";\n\nvar meshtoon_frag = \"#define TOON\\nuniform vec3 diffuse;\\nuniform vec3 emissive;\\nuniform float opacity;\\n#include <common>\\n#include <packing>\\n#include <dithering_pars_fragment>\\n#include <color_pars_fragment>\\n#include <uv_pars_fragment>\\n#include <uv2_pars_fragment>\\n#include <map_pars_fragment>\\n#include <alphamap_pars_fragment>\\n#include <aomap_pars_fragment>\\n#include <lightmap_pars_fragment>\\n#include <emissivemap_pars_fragment>\\n#include <gradientmap_pars_fragment>\\n#include <fog_pars_fragment>\\n#include <bsdfs>\\n#include <lights_pars_begin>\\n#include <lights_toon_pars_fragment>\\n#include <shadowmap_pars_fragment>\\n#include <bumpmap_pars_fragment>\\n#include <normalmap_pars_fragment>\\n#include <logdepthbuf_pars_fragment>\\n#include <clipping_planes_pars_fragment>\\nvoid main() {\\n\\t#include <clipping_planes_fragment>\\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 <logdepthbuf_fragment>\\n\\t#include <map_fragment>\\n\\t#include <color_fragment>\\n\\t#include <alphamap_fragment>\\n\\t#include <alphatest_fragment>\\n\\t#include <normal_fragment_begin>\\n\\t#include <normal_fragment_maps>\\n\\t#include <emissivemap_fragment>\\n\\t#include <lights_toon_fragment>\\n\\t#include <lights_fragment_begin>\\n\\t#include <lights_fragment_maps>\\n\\t#include <lights_fragment_end>\\n\\t#include <aomap_fragment>\\n\\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include <tonemapping_fragment>\\n\\t#include <encodings_fragment>\\n\\t#include <fog_fragment>\\n\\t#include <premultiplied_alpha_fragment>\\n\\t#include <dithering_fragment>\\n}\";\n\nvar meshtoon_vert = \"#define TOON\\nvarying vec3 vViewPosition;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\n#include <common>\\n#include <uv_pars_vertex>\\n#include <uv2_pars_vertex>\\n#include <displacementmap_pars_vertex>\\n#include <color_pars_vertex>\\n#include <fog_pars_vertex>\\n#include <morphtarget_pars_vertex>\\n#include <skinning_pars_vertex>\\n#include <shadowmap_pars_vertex>\\n#include <logdepthbuf_pars_vertex>\\n#include <clipping_planes_pars_vertex>\\nvoid main() {\\n\\t#include <uv_vertex>\\n\\t#include <uv2_vertex>\\n\\t#include <color_vertex>\\n\\t#include <beginnormal_vertex>\\n\\t#include <morphnormal_vertex>\\n\\t#include <skinbase_vertex>\\n\\t#include <skinnormal_vertex>\\n\\t#include <defaultnormal_vertex>\\n#ifndef FLAT_SHADED\\n\\tvNormal = normalize( transformedNormal );\\n#endif\\n\\t#include <begin_vertex>\\n\\t#include <morphtarget_vertex>\\n\\t#include <skinning_vertex>\\n\\t#include <displacementmap_vertex>\\n\\t#include <project_vertex>\\n\\t#include <logdepthbuf_vertex>\\n\\t#include <clipping_planes_vertex>\\n\\tvViewPosition = - mvPosition.xyz;\\n\\t#include <worldpos_vertex>\\n\\t#include <shadowmap_vertex>\\n\\t#include <fog_vertex>\\n}\";\n\nvar meshphong_frag = \"#define PHONG\\nuniform vec3 diffuse;\\nuniform vec3 emissive;\\nuniform vec3 specular;\\nuniform float shininess;\\nuniform float opacity;\\n#include <common>\\n#include <packing>\\n#include <dithering_pars_fragment>\\n#include <color_pars_fragment>\\n#include <uv_pars_fragment>\\n#include <uv2_pars_fragment>\\n#include <map_pars_fragment>\\n#include <alphamap_pars_fragment>\\n#include <aomap_pars_fragment>\\n#include <lightmap_pars_fragment>\\n#include <emissivemap_pars_fragment>\\n#include <envmap_common_pars_fragment>\\n#include <envmap_pars_fragment>\\n#include <cube_uv_reflection_fragment>\\n#include <fog_pars_fragment>\\n#include <bsdfs>\\n#include <lights_pars_begin>\\n#include <lights_phong_pars_fragment>\\n#include <shadowmap_pars_fragment>\\n#include <bumpmap_pars_fragment>\\n#include <normalmap_pars_fragment>\\n#include <specularmap_pars_fragment>\\n#include <logdepthbuf_pars_fragment>\\n#include <clipping_planes_pars_fragment>\\nvoid main() {\\n\\t#include <clipping_planes_fragment>\\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 <logdepthbuf_fragment>\\n\\t#include <map_fragment>\\n\\t#include <color_fragment>\\n\\t#include <alphamap_fragment>\\n\\t#include <alphatest_fragment>\\n\\t#include <specularmap_fragment>\\n\\t#include <normal_fragment_begin>\\n\\t#include <normal_fragment_maps>\\n\\t#include <emissivemap_fragment>\\n\\t#include <lights_phong_fragment>\\n\\t#include <lights_fragment_begin>\\n\\t#include <lights_fragment_maps>\\n\\t#include <lights_fragment_end>\\n\\t#include <aomap_fragment>\\n\\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\\n\\t#include <envmap_fragment>\\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include <tonemapping_fragment>\\n\\t#include <encodings_fragment>\\n\\t#include <fog_fragment>\\n\\t#include <premultiplied_alpha_fragment>\\n\\t#include <dithering_fragment>\\n}\";\n\nvar meshphong_vert = \"#define PHONG\\nvarying vec3 vViewPosition;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\n#include <common>\\n#include <uv_pars_vertex>\\n#include <uv2_pars_vertex>\\n#include <displacementmap_pars_vertex>\\n#include <envmap_pars_vertex>\\n#include <color_pars_vertex>\\n#include <fog_pars_vertex>\\n#include <morphtarget_pars_vertex>\\n#include <skinning_pars_vertex>\\n#include <shadowmap_pars_vertex>\\n#include <logdepthbuf_pars_vertex>\\n#include <clipping_planes_pars_vertex>\\nvoid main() {\\n\\t#include <uv_vertex>\\n\\t#include <uv2_vertex>\\n\\t#include <color_vertex>\\n\\t#include <beginnormal_vertex>\\n\\t#include <morphnormal_vertex>\\n\\t#include <skinbase_vertex>\\n\\t#include <skinnormal_vertex>\\n\\t#include <defaultnormal_vertex>\\n#ifndef FLAT_SHADED\\n\\tvNormal = normalize( transformedNormal );\\n#endif\\n\\t#include <begin_vertex>\\n\\t#include <morphtarget_vertex>\\n\\t#include <skinning_vertex>\\n\\t#include <displacementmap_vertex>\\n\\t#include <project_vertex>\\n\\t#include <logdepthbuf_vertex>\\n\\t#include <clipping_planes_vertex>\\n\\tvViewPosition = - mvPosition.xyz;\\n\\t#include <worldpos_vertex>\\n\\t#include <envmap_vertex>\\n\\t#include <shadowmap_vertex>\\n\\t#include <fog_vertex>\\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 <common>\\n#include <packing>\\n#include <dithering_pars_fragment>\\n#include <color_pars_fragment>\\n#include <uv_pars_fragment>\\n#include <uv2_pars_fragment>\\n#include <map_pars_fragment>\\n#include <alphamap_pars_fragment>\\n#include <aomap_pars_fragment>\\n#include <lightmap_pars_fragment>\\n#include <emissivemap_pars_fragment>\\n#include <transmissionmap_pars_fragment>\\n#include <bsdfs>\\n#include <cube_uv_reflection_fragment>\\n#include <envmap_common_pars_fragment>\\n#include <envmap_physical_pars_fragment>\\n#include <fog_pars_fragment>\\n#include <lights_pars_begin>\\n#include <lights_physical_pars_fragment>\\n#include <shadowmap_pars_fragment>\\n#include <bumpmap_pars_fragment>\\n#include <normalmap_pars_fragment>\\n#include <clearcoat_pars_fragment>\\n#include <roughnessmap_pars_fragment>\\n#include <metalnessmap_pars_fragment>\\n#include <logdepthbuf_pars_fragment>\\n#include <clipping_planes_pars_fragment>\\nvoid main() {\\n\\t#include <clipping_planes_fragment>\\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 <logdepthbuf_fragment>\\n\\t#include <map_fragment>\\n\\t#include <color_fragment>\\n\\t#include <alphamap_fragment>\\n\\t#include <alphatest_fragment>\\n\\t#include <roughnessmap_fragment>\\n\\t#include <metalnessmap_fragment>\\n\\t#include <normal_fragment_begin>\\n\\t#include <normal_fragment_maps>\\n\\t#include <clearcoat_normal_fragment_begin>\\n\\t#include <clearcoat_normal_fragment_maps>\\n\\t#include <emissivemap_fragment>\\n\\t#include <transmissionmap_fragment>\\n\\t#include <lights_physical_fragment>\\n\\t#include <lights_fragment_begin>\\n\\t#include <lights_fragment_maps>\\n\\t#include <lights_fragment_end>\\n\\t#include <aomap_fragment>\\n\\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\\n\\t#ifdef TRANSMISSION\\n\\t\\tdiffuseColor.a *= mix( saturate( 1. - totalTransmission + linearToRelativeLuminance( reflectedLight.directSpecular + reflectedLight.indirectSpecular ) ), 1.0, metalness );\\n\\t#endif\\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include <tonemapping_fragment>\\n\\t#include <encodings_fragment>\\n\\t#include <fog_fragment>\\n\\t#include <premultiplied_alpha_fragment>\\n\\t#include <dithering_fragment>\\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 <common>\\n#include <uv_pars_vertex>\\n#include <uv2_pars_vertex>\\n#include <displacementmap_pars_vertex>\\n#include <color_pars_vertex>\\n#include <fog_pars_vertex>\\n#include <morphtarget_pars_vertex>\\n#include <skinning_pars_vertex>\\n#include <shadowmap_pars_vertex>\\n#include <logdepthbuf_pars_vertex>\\n#include <clipping_planes_pars_vertex>\\nvoid main() {\\n\\t#include <uv_vertex>\\n\\t#include <uv2_vertex>\\n\\t#include <color_vertex>\\n\\t#include <beginnormal_vertex>\\n\\t#include <morphnormal_vertex>\\n\\t#include <skinbase_vertex>\\n\\t#include <skinnormal_vertex>\\n\\t#include <defaultnormal_vertex>\\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 <begin_vertex>\\n\\t#include <morphtarget_vertex>\\n\\t#include <skinning_vertex>\\n\\t#include <displacementmap_vertex>\\n\\t#include <project_vertex>\\n\\t#include <logdepthbuf_vertex>\\n\\t#include <clipping_planes_vertex>\\n\\tvViewPosition = - mvPosition.xyz;\\n\\t#include <worldpos_vertex>\\n\\t#include <shadowmap_vertex>\\n\\t#include <fog_vertex>\\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 <packing>\\n#include <uv_pars_fragment>\\n#include <bumpmap_pars_fragment>\\n#include <normalmap_pars_fragment>\\n#include <logdepthbuf_pars_fragment>\\n#include <clipping_planes_pars_fragment>\\nvoid main() {\\n\\t#include <clipping_planes_fragment>\\n\\t#include <logdepthbuf_fragment>\\n\\t#include <normal_fragment_begin>\\n\\t#include <normal_fragment_maps>\\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 <common>\\n#include <uv_pars_vertex>\\n#include <displacementmap_pars_vertex>\\n#include <morphtarget_pars_vertex>\\n#include <skinning_pars_vertex>\\n#include <logdepthbuf_pars_vertex>\\n#include <clipping_planes_pars_vertex>\\nvoid main() {\\n\\t#include <uv_vertex>\\n\\t#include <beginnormal_vertex>\\n\\t#include <morphnormal_vertex>\\n\\t#include <skinbase_vertex>\\n\\t#include <skinnormal_vertex>\\n\\t#include <defaultnormal_vertex>\\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 <begin_vertex>\\n\\t#include <morphtarget_vertex>\\n\\t#include <skinning_vertex>\\n\\t#include <displacementmap_vertex>\\n\\t#include <project_vertex>\\n\\t#include <logdepthbuf_vertex>\\n\\t#include <clipping_planes_vertex>\\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 <common>\\n#include <color_pars_fragment>\\n#include <map_particle_pars_fragment>\\n#include <fog_pars_fragment>\\n#include <logdepthbuf_pars_fragment>\\n#include <clipping_planes_pars_fragment>\\nvoid main() {\\n\\t#include <clipping_planes_fragment>\\n\\tvec3 outgoingLight = vec3( 0.0 );\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include <logdepthbuf_fragment>\\n\\t#include <map_particle_fragment>\\n\\t#include <color_fragment>\\n\\t#include <alphatest_fragment>\\n\\toutgoingLight = diffuseColor.rgb;\\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include <tonemapping_fragment>\\n\\t#include <encodings_fragment>\\n\\t#include <fog_fragment>\\n\\t#include <premultiplied_alpha_fragment>\\n}\";\n\nvar points_vert = \"uniform float size;\\nuniform float scale;\\n#include <common>\\n#include <color_pars_vertex>\\n#include <fog_pars_vertex>\\n#include <morphtarget_pars_vertex>\\n#include <logdepthbuf_pars_vertex>\\n#include <clipping_planes_pars_vertex>\\nvoid main() {\\n\\t#include <color_vertex>\\n\\t#include <begin_vertex>\\n\\t#include <morphtarget_vertex>\\n\\t#include <project_vertex>\\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 <logdepthbuf_vertex>\\n\\t#include <clipping_planes_vertex>\\n\\t#include <worldpos_vertex>\\n\\t#include <fog_vertex>\\n}\";\n\nvar shadow_frag = \"uniform vec3 color;\\nuniform float opacity;\\n#include <common>\\n#include <packing>\\n#include <fog_pars_fragment>\\n#include <bsdfs>\\n#include <lights_pars_begin>\\n#include <shadowmap_pars_fragment>\\n#include <shadowmask_pars_fragment>\\nvoid main() {\\n\\tgl_FragColor = vec4( color, opacity * ( 1.0 - getShadowMask() ) );\\n\\t#include <tonemapping_fragment>\\n\\t#include <encodings_fragment>\\n\\t#include <fog_fragment>\\n}\";\n\nvar shadow_vert = \"#include <common>\\n#include <fog_pars_vertex>\\n#include <shadowmap_pars_vertex>\\nvoid main() {\\n\\t#include <begin_vertex>\\n\\t#include <project_vertex>\\n\\t#include <worldpos_vertex>\\n\\t#include <beginnormal_vertex>\\n\\t#include <morphnormal_vertex>\\n\\t#include <skinbase_vertex>\\n\\t#include <skinnormal_vertex>\\n\\t#include <defaultnormal_vertex>\\n\\t#include <shadowmap_vertex>\\n\\t#include <fog_vertex>\\n}\";\n\nvar sprite_frag = \"uniform vec3 diffuse;\\nuniform float opacity;\\n#include <common>\\n#include <uv_pars_fragment>\\n#include <map_pars_fragment>\\n#include <alphamap_pars_fragment>\\n#include <fog_pars_fragment>\\n#include <logdepthbuf_pars_fragment>\\n#include <clipping_planes_pars_fragment>\\nvoid main() {\\n\\t#include <clipping_planes_fragment>\\n\\tvec3 outgoingLight = vec3( 0.0 );\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include <logdepthbuf_fragment>\\n\\t#include <map_fragment>\\n\\t#include <alphamap_fragment>\\n\\t#include <alphatest_fragment>\\n\\toutgoingLight = diffuseColor.rgb;\\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include <tonemapping_fragment>\\n\\t#include <encodings_fragment>\\n\\t#include <fog_fragment>\\n}\";\n\nvar sprite_vert = \"uniform float rotation;\\nuniform vec2 center;\\n#include <common>\\n#include <uv_pars_vertex>\\n#include <fog_pars_vertex>\\n#include <logdepthbuf_pars_vertex>\\n#include <clipping_planes_pars_vertex>\\nvoid main() {\\n\\t#include <uv_vertex>\\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 <logdepthbuf_vertex>\\n\\t#include <clipping_planes_vertex>\\n\\t#include <fog_vertex>\\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\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\tltc_1: { value: null },\n\t\tltc_2: { value: null }\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\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, cubemaps, 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\tif ( background && background.isTexture ) {\n\n\t\t\tbackground = cubemaps.get( background );\n\n\t\t}\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.mapping === CubeUVReflectionMapping ) ) {\n\n\t\t\tif ( boxMesh === undefined ) {\n\n\t\t\t\tboxMesh = new Mesh(\n\t\t\t\t\tnew BoxGeometry( 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\tboxMesh.material.uniforms.envMap.value = background;\n\t\t\tboxMesh.material.uniforms.flipEnvMap.value = ( background.isCubeTexture && background._needsFlipEnvMap ) ? - 1 : 1;\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\tboxMesh.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\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 PlaneGeometry( 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 = 1 ) {\n\n\t\t\tclearColor.set( color );\n\t\t\tclearAlpha = alpha;\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, index );\n\n\t\t\tif ( updateBuffers ) saveCache( geometry, index );\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\t\t\tindex: null\n\n\t\t};\n\n\t}\n\n\tfunction needsUpdate( geometry, index ) {\n\n\t\tconst cachedAttributes = currentState.attributes;\n\t\tconst geometryAttributes = geometry.attributes;\n\n\t\tlet attributesNum = 0;\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 === undefined ) return true;\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\tattributesNum ++;\n\n\t\t}\n\n\t\tif ( currentState.attributesNum !== attributesNum ) return true;\n\n\t\tif ( currentState.index !== index ) return true;\n\n\t\treturn false;\n\n\t}\n\n\tfunction saveCache( geometry, index ) {\n\n\t\tconst cache = {};\n\t\tconst attributes = geometry.attributes;\n\t\tlet attributesNum = 0;\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\tattributesNum ++;\n\n\t\t}\n\n\t\tcurrentState.attributes = cache;\n\t\tcurrentState.attributesNum = attributesNum;\n\n\t\tcurrentState.index = index;\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 ( name === 'instanceColor' ) {\n\n\t\t\t\t\tconst attribute = attributes.get( object.instanceColor );\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, 1 );\n\n\t\t\t\t\tgl.bindBuffer( 34962, buffer );\n\n\t\t\t\t\tgl.vertexAttribPointer( programAttribute, 3, type, false, 12, 0 );\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\tif ( extensions.has( 'EXT_texture_filter_anisotropic' ) === true ) {\n\n\t\t\tconst extension = extensions.get( 'EXT_texture_filter_anisotropic' );\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.has( '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( properties ) {\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 ( material, camera, useCache ) {\n\n\t\tconst planes = material.clippingPlanes,\n\t\t\tclipIntersection = material.clipIntersection,\n\t\t\tclipShadows = material.clipShadows;\n\n\t\tconst materialProperties = properties.get( material );\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 = materialProperties.clippingState || null;\n\n\t\t\tuniform.value = dstArray; // ensure unique state\n\n\t\t\tdstArray = projectPlanes( planes, camera, lGlobal, useCache );\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\tmaterialProperties.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\tconst nPlanes = planes !== null ? planes.length : 0;\n\t\tlet dstArray = 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 WebGLCubeMaps( renderer ) {\n\n\tlet cubemaps = new WeakMap();\n\n\tfunction mapTextureMapping( texture, mapping ) {\n\n\t\tif ( mapping === EquirectangularReflectionMapping ) {\n\n\t\t\ttexture.mapping = CubeReflectionMapping;\n\n\t\t} else if ( mapping === EquirectangularRefractionMapping ) {\n\n\t\t\ttexture.mapping = CubeRefractionMapping;\n\n\t\t}\n\n\t\treturn texture;\n\n\t}\n\n\tfunction get( texture ) {\n\n\t\tif ( texture && texture.isTexture ) {\n\n\t\t\tconst mapping = texture.mapping;\n\n\t\t\tif ( mapping === EquirectangularReflectionMapping || mapping === EquirectangularRefractionMapping ) {\n\n\t\t\t\tif ( cubemaps.has( texture ) ) {\n\n\t\t\t\t\tconst cubemap = cubemaps.get( texture ).texture;\n\t\t\t\t\treturn mapTextureMapping( cubemap, texture.mapping );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconst image = texture.image;\n\n\t\t\t\t\tif ( image && image.height > 0 ) {\n\n\t\t\t\t\t\tconst currentRenderTarget = renderer.getRenderTarget();\n\n\t\t\t\t\t\tconst renderTarget = new WebGLCubeRenderTarget( image.height / 2 );\n\t\t\t\t\t\trenderTarget.fromEquirectangularTexture( renderer, texture );\n\t\t\t\t\t\tcubemaps.set( texture, renderTarget );\n\n\t\t\t\t\t\trenderer.setRenderTarget( currentRenderTarget );\n\n\t\t\t\t\t\ttexture.addEventListener( 'dispose', onTextureDispose );\n\n\t\t\t\t\t\treturn mapTextureMapping( renderTarget.texture, texture.mapping );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// image not yet ready. try the conversion next frame\n\n\t\t\t\t\t\treturn 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\treturn texture;\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\tconst cubemap = cubemaps.get( texture );\n\n\t\tif ( cubemap !== undefined ) {\n\n\t\t\tcubemaps.delete( texture );\n\t\t\tcubemap.dispose();\n\n\t\t}\n\n\t}\n\n\tfunction dispose() {\n\n\t\tcubemaps = new WeakMap();\n\n\t}\n\n\treturn {\n\t\tget: get,\n\t\tdispose: dispose\n\t};\n\n}\n\nfunction WebGLExtensions( gl ) {\n\n\tconst extensions = {};\n\n\tfunction getExtension( name ) {\n\n\t\tif ( extensions[ name ] !== undefined ) {\n\n\t\t\treturn extensions[ name ];\n\n\t\t}\n\n\t\tlet extension;\n\n\t\tswitch ( name ) {\n\n\t\t\tcase 'WEBGL_depth_texture':\n\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\tbreak;\n\n\t\t\tcase 'EXT_texture_filter_anisotropic':\n\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\tbreak;\n\n\t\t\tcase 'WEBGL_compressed_texture_s3tc':\n\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\tbreak;\n\n\t\t\tcase 'WEBGL_compressed_texture_pvrtc':\n\t\t\t\textension = gl.getExtension( 'WEBGL_compressed_texture_pvrtc' ) || gl.getExtension( 'WEBKIT_WEBGL_compressed_texture_pvrtc' );\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\textension = gl.getExtension( name );\n\n\t\t}\n\n\t\textensions[ name ] = extension;\n\n\t\treturn extension;\n\n\t}\n\n\treturn {\n\n\t\thas: function ( name ) {\n\n\t\t\treturn getExtension( name ) !== null;\n\n\t\t},\n\n\t\tinit: function ( capabilities ) {\n\n\t\t\tif ( capabilities.isWebGL2 ) {\n\n\t\t\t\tgetExtension( 'EXT_color_buffer_float' );\n\n\t\t\t} else {\n\n\t\t\t\tgetExtension( 'WEBGL_depth_texture' );\n\t\t\t\tgetExtension( 'OES_texture_float' );\n\t\t\t\tgetExtension( 'OES_texture_half_float' );\n\t\t\t\tgetExtension( 'OES_texture_half_float_linear' );\n\t\t\t\tgetExtension( 'OES_standard_derivatives' );\n\t\t\t\tgetExtension( 'OES_element_index_uint' );\n\t\t\t\tgetExtension( 'OES_vertex_array_object' );\n\t\t\t\tgetExtension( 'ANGLE_instanced_arrays' );\n\n\t\t\t}\n\n\t\t\tgetExtension( 'OES_texture_float_linear' );\n\t\t\tgetExtension( 'EXT_color_buffer_half_float' );\n\n\t\t},\n\n\t\tget: function ( name ) {\n\n\t\t\tconst extension = getExtension( name );\n\n\t\t\tif ( extension === null ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: ' + name + ' extension not supported.' );\n\n\t\t\t}\n\n\t\t\treturn extension;\n\n\t\t}\n\n\t};\n\n}\n\nfunction WebGLGeometries( gl, attributes, info, bindingStates ) {\n\n\tconst geometries = {};\n\tconst wireframeAttributes = new WeakMap();\n\n\tfunction onGeometryDispose( event ) {\n\n\t\tconst geometry = event.target;\n\n\t\tif ( geometry.index !== null ) {\n\n\t\t\tattributes.remove( geometry.index );\n\n\t\t}\n\n\t\tfor ( const name in geometry.attributes ) {\n\n\t\t\tattributes.remove( geometry.attributes[ name ] );\n\n\t\t}\n\n\t\tgeometry.removeEventListener( 'dispose', onGeometryDispose );\n\n\t\tdelete geometries[ geometry.id ];\n\n\t\tconst attribute = wireframeAttributes.get( geometry );\n\n\t\tif ( attribute ) {\n\n\t\t\tattributes.remove( attribute );\n\t\t\twireframeAttributes.delete( geometry );\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\tif ( geometries[ geometry.id ] === true ) return geometry;\n\n\t\tgeometry.addEventListener( 'dispose', onGeometryDispose );\n\n\t\tgeometries[ geometry.id ] = true;\n\n\t\tinfo.memory.geometries ++;\n\n\t\treturn geometry;\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.hasAttribute( 'morphTarget' + i ) === true ) {\n\n\t\t\t\t\tgeometry.deleteAttribute( 'morphTarget' + i );\n\n\t\t\t\t}\n\n\t\t\t\tif ( morphNormals && geometry.hasAttribute( 'morphNormal' + i ) === true ) {\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\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\tif ( object.hasEventListener( 'dispose', onInstancedMeshDispose ) === false ) {\n\n\t\t\t\tobject.addEventListener( 'dispose', onInstancedMeshDispose );\n\n\t\t\t}\n\n\t\t\tattributes.update( object.instanceMatrix, 34962 );\n\n\t\t\tif ( object.instanceColor !== null ) {\n\n\t\t\t\tattributes.update( object.instanceColor, 34962 );\n\n\t\t\t}\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\tfunction onInstancedMeshDispose( event ) {\n\n\t\tconst instancedMesh = event.target;\n\n\t\tinstancedMesh.removeEventListener( 'dispose', onInstancedMeshDispose );\n\n\t\tattributes.remove( instancedMesh.instanceMatrix );\n\n\t\tif ( instancedMesh.instanceColor !== null ) attributes.remove( instancedMesh.instanceColor );\n\n\t}\n\n\treturn {\n\n\t\tupdate: update,\n\t\tdispose: dispose\n\n\t};\n\n}\n\nclass DataTexture2DArray extends Texture {\n\n\tconstructor( data = null, width = 1, height = 1, depth = 1 ) {\n\n\t\tsuper( null );\n\n\t\tthis.image = { data, width, height, depth };\n\n\t\tthis.magFilter = NearestFilter;\n\t\tthis.minFilter = NearestFilter;\n\n\t\tthis.wrapR = ClampToEdgeWrapping;\n\n\t\tthis.generateMipmaps = false;\n\t\tthis.flipY = false;\n\t\tthis.unpackAlignment = 1;\n\n\t\tthis.needsUpdate = true;\n\n\t}\n\n}\n\nDataTexture2DArray.prototype.isDataTexture2DArray = true;\n\nclass DataTexture3D extends Texture {\n\n\tconstructor( data = null, width = 1, height = 1, depth = 1 ) {\n\n\t\t// We're going to add .setXXX() methods for setting properties later.\n\t\t// Users can still set in DataTexture3D directly.\n\t\t//\n\t\t//\tconst texture = new THREE.DataTexture3D( data, width, height, depth );\n\t\t// \ttexture.anisotropy = 16;\n\t\t//\n\t\t// See #14839\n\n\t\tsuper( null );\n\n\t\tthis.image = { data, width, height, depth };\n\n\t\tthis.magFilter = NearestFilter;\n\t\tthis.minFilter = NearestFilter;\n\n\t\tthis.wrapR = ClampToEdgeWrapping;\n\n\t\tthis.generateMipmaps = false;\n\t\tthis.flipY = false;\n\t\tthis.unpackAlignment = 1;\n\n\t\tthis.needsUpdate = true;\n\n\t}\n\n}\n\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\tconst n = nBlocks * blockSize;\n\tlet r = 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 THREE.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 integer / boolean\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\n// Single integer / boolean vector (from flat array)\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// Single unsigned integer\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// Single unsigned integer vector (from flat array)\n\nfunction setValueV2ui( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( arraysEqual( cache, v ) ) return;\n\n\tgl.uniform2uiv( this.addr, v );\n\n\tcopyArray( cache, v );\n\n}\n\nfunction setValueV3ui( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( arraysEqual( cache, v ) ) return;\n\n\tgl.uniform3uiv( this.addr, v );\n\n\tcopyArray( cache, v );\n\n}\n\nfunction setValueV4ui( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( arraysEqual( cache, v ) ) return;\n\n\tgl.uniform4uiv( this.addr, v );\n\n\tcopyArray( cache, v );\n\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 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\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\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\t\tcase 0x8dc6: return setValueV2ui; // _VEC2\n\t\tcase 0x8dc7: return setValueV3ui; // _VEC3\n\t\tcase 0x8dc8: return setValueV4ui; // _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 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\n// Array of scalars\n\nfunction setValueV1fArray( gl, v ) {\n\n\tgl.uniform1fv( this.addr, v );\n\n}\n\n// Array of vectors (from flat array or array of THREE.VectorN)\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 (from flat array or array of THREE.MatrixN)\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 integer / boolean\n\nfunction setValueV1iArray( gl, v ) {\n\n\tgl.uniform1iv( this.addr, v );\n\n}\n\n// Array of integer / boolean vectors (from flat array)\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// Array of unsigned integer\n\nfunction setValueV1uiArray( gl, v ) {\n\n\tgl.uniform1uiv( this.addr, v );\n\n}\n\n// Array of unsigned integer vectors (from flat array)\n\nfunction setValueV2uiArray( gl, v ) {\n\n\tgl.uniform2uiv( this.addr, v );\n\n}\n\nfunction setValueV3uiArray( gl, v ) {\n\n\tgl.uniform3uiv( this.addr, v );\n\n}\n\nfunction setValueV4uiArray( gl, v ) {\n\n\tgl.uniform4uiv( this.addr, v );\n\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 0x1405: return setValueV1uiArray; // UINT\n\t\tcase 0x8dc6: return setValueV2uiArray; // _VEC2\n\t\tcase 0x8dc7: return setValueV3uiArray; // _VEC3\n\t\tcase 0x8dc8: return setValueV4uiArray; // _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\tconst 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+)(\\])?(\\[|\\.)?/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\tconst idIsIndex = 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\\s*\\(\\s*int\\s+i\\s*=\\s*(\\d+)\\s*;\\s*i\\s*<\\s*(\\d+)\\s*;\\s*i\\s*\\+\\+\\s*\\)\\s*{([\\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( /\\[\\s*i\\s*\\]/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}\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 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\tlet versionString = parameters.glslVersion ? '#version ' + parameters.glslVersion + '\\n' : '';\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.instancingColor ? '#define USE_INSTANCING_COLOR' : '',\n\n\t\t\tparameters.supportsVertexTextures ? '#define VERTEX_TEXTURES' : '',\n\n\t\t\t'#define GAMMA_FACTOR ' + gammaFactorDefine,\n\n\t\t\t'#define MAX_BONES ' + parameters.maxBones,\n\t\t\t( parameters.useFog && parameters.fog ) ? '#define USE_FOG' : '',\n\t\t\t( parameters.useFog && parameters.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.vertexAlphas ? '#define USE_COLOR_ALPHA' : '',\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'\tattribute mat4 instanceMatrix;',\n\n\t\t\t'#endif',\n\n\t\t\t'#ifdef USE_INSTANCING_COLOR',\n\n\t\t\t'\tattribute vec3 instanceColor;',\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'#if defined( USE_COLOR_ALPHA )',\n\n\t\t\t'\tattribute vec4 color;',\n\n\t\t\t'#elif defined( 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 || parameters.instancingColor ? '#define USE_COLOR' : '',\n\t\t\tparameters.vertexAlphas ? '#define USE_COLOR_ALPHA' : '',\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 !== true ) {\n\n\t\t// GLSL 3.0 conversion for built-in materials and ShaderMaterial\n\n\t\tversionString = '#version 300 es\\n';\n\n\t\tprefixVertex = [\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'#define varying in',\n\t\t\t( parameters.glslVersion === GLSL3 ) ? '' : 'out highp vec4 pc_fragColor;',\n\t\t\t( parameters.glslVersion === GLSL3 ) ? '' : '#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 = versionString + prefixVertex + vertexShader;\n\tconst fragmentGlsl = versionString + 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, cubemaps, extensions, capabilities, bindingStates, clipping ) {\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', 'instancingColor',\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', 'vertexAlphas', 'vertexTangents', 'vertexUvs', 'uvsVertexOnly', 'fog', 'useFog', 'fogExp2',\n\t\t'flatShading', 'sizeAttenuation', 'logarithmicDepthBuffer', 'skinning',\n\t\t'maxBones', 'useVertexTexture', 'morphTargets', 'morphNormals', '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 getMaxBones( 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 && map.isTexture ) {\n\n\t\t\tencoding = map.encoding;\n\n\t\t} else if ( map && 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} else {\n\n\t\t\tencoding = LinearEncoding;\n\n\t\t}\n\n\t\treturn encoding;\n\n\t}\n\n\tfunction getParameters( material, lights, shadows, scene, object ) {\n\n\t\tconst fog = scene.fog;\n\t\tconst environment = material.isMeshStandardMaterial ? scene.environment : null;\n\n\t\tconst envMap = cubemaps.get( 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 ? getMaxBones( 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 === true,\n\t\t\tglslVersion: material.glslVersion,\n\n\t\t\tprecision: precision,\n\n\t\t\tinstancing: object.isInstancedMesh === true,\n\t\t\tinstancingColor: object.isInstancedMesh === true && object.instanceColor !== null,\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\tvertexAlphas: material.vertexColors === true && object.geometry && object.geometry.attributes.color && object.geometry.attributes.color.itemSize === 4,\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\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: clipping.numPlanes,\n\t\t\tnumClipIntersection: clipping.numIntersection,\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.has( 'EXT_frag_depth' ),\n\t\t\trendererExtensionDrawBuffers: isWebGL2 || extensions.has( 'WEBGL_draw_buffers' ),\n\t\t\trendererExtensionShaderTextureLod: isWebGL2 || extensions.has( 'EXT_shader_texture_lod' ),\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 === false ) {\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 get( scene, renderCallDepth ) {\n\n\t\tlet list;\n\n\t\tif ( lists.has( scene ) === false ) {\n\n\t\t\tlist = new WebGLRenderList( properties );\n\t\t\tlists.set( scene, [ list ] );\n\n\t\t} else {\n\n\t\t\tif ( renderCallDepth >= lists.get( scene ).length ) {\n\n\t\t\t\tlist = new WebGLRenderList( properties );\n\t\t\t\tlists.get( scene ).push( list );\n\n\t\t\t} else {\n\n\t\t\t\tlist = lists.get( scene )[ renderCallDepth ];\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( extensions, capabilities ) {\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\trectAreaLTC1: null,\n\t\trectAreaLTC2: null,\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 ) {\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\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\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\n\t\t\t\tuniforms.color.copy( color ).multiplyScalar( intensity );\n\t\t\t\tuniforms.distance = distance;\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.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\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.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.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\tif ( rectAreaLength > 0 ) {\n\n\t\t\tif ( capabilities.isWebGL2 ) {\n\n\t\t\t\t// WebGL 2\n\n\t\t\t\tstate.rectAreaLTC1 = UniformsLib.LTC_FLOAT_1;\n\t\t\t\tstate.rectAreaLTC2 = UniformsLib.LTC_FLOAT_2;\n\n\t\t\t} else {\n\n\t\t\t\t// WebGL 1\n\n\t\t\t\tif ( extensions.has( 'OES_texture_float_linear' ) === true ) {\n\n\t\t\t\t\tstate.rectAreaLTC1 = UniformsLib.LTC_FLOAT_1;\n\t\t\t\t\tstate.rectAreaLTC2 = UniformsLib.LTC_FLOAT_2;\n\n\t\t\t\t} else if ( extensions.has( 'OES_texture_half_float_linear' ) === true ) {\n\n\t\t\t\t\tstate.rectAreaLTC1 = UniformsLib.LTC_HALF_1;\n\t\t\t\t\tstate.rectAreaLTC2 = UniformsLib.LTC_HALF_2;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( 'THREE.WebGLRenderer: Unable to use RectAreaLight. Missing WebGL extensions.' );\n\n\t\t\t\t}\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\tfunction setupView( lights, camera ) {\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\tconst viewMatrix = camera.matrixWorldInverse;\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\tif ( light.isDirectionalLight ) {\n\n\t\t\t\tconst uniforms = state.directional[ directionalLength ];\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\tdirectionalLength ++;\n\n\t\t\t} else if ( light.isSpotLight ) {\n\n\t\t\t\tconst uniforms = state.spot[ spotLength ];\n\n\t\t\t\tuniforms.position.setFromMatrixPosition( light.matrixWorld );\n\t\t\t\tuniforms.position.applyMatrix4( viewMatrix );\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\tspotLength ++;\n\n\t\t\t} else if ( light.isRectAreaLight ) {\n\n\t\t\t\tconst uniforms = state.rectArea[ rectAreaLength ];\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\trectAreaLength ++;\n\n\t\t\t} else if ( light.isPointLight ) {\n\n\t\t\t\tconst uniforms = state.point[ pointLength ];\n\n\t\t\t\tuniforms.position.setFromMatrixPosition( light.matrixWorld );\n\t\t\t\tuniforms.position.applyMatrix4( viewMatrix );\n\n\t\t\t\tpointLength ++;\n\n\t\t\t} else if ( light.isHemisphereLight ) {\n\n\t\t\t\tconst uniforms = state.hemi[ hemiLength ];\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\themiLength ++;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\treturn {\n\t\tsetup: setup,\n\t\tsetupView: setupView,\n\t\tstate: state\n\t};\n\n}\n\nfunction WebGLRenderState( extensions, capabilities ) {\n\n\tconst lights = new WebGLLights( extensions, capabilities );\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() {\n\n\t\tlights.setup( lightsArray );\n\n\t}\n\n\tfunction setupLightsView( camera ) {\n\n\t\tlights.setupView( lightsArray, 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\t\tsetupLightsView: setupLightsView,\n\n\t\tpushLight: pushLight,\n\t\tpushShadow: pushShadow\n\t};\n\n}\n\nfunction WebGLRenderStates( extensions, capabilities ) {\n\n\tlet renderStates = new WeakMap();\n\n\tfunction get( scene, renderCallDepth = 0 ) {\n\n\t\tlet renderState;\n\n\t\tif ( renderStates.has( scene ) === false ) {\n\n\t\t\trenderState = new WebGLRenderState( extensions, capabilities );\n\t\t\trenderStates.set( scene, [ renderState ] );\n\n\t\t} else {\n\n\t\t\tif ( renderCallDepth >= renderStates.get( scene ).length ) {\n\n\t\t\t\trenderState = new WebGLRenderState( extensions, capabilities );\n\t\t\t\trenderStates.get( scene ).push( renderState );\n\n\t\t\t} else {\n\n\t\t\t\trenderState = renderStates.get( scene )[ renderCallDepth ];\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: <float>,\n *\n *  map: new THREE.Texture( <Image> ),\n *\n *  alphaMap: new THREE.Texture( <Image> ),\n *\n *  displacementMap: new THREE.Texture( <Image> ),\n *  displacementScale: <float>,\n *  displacementBias: <float>,\n *\n *  wireframe: <boolean>,\n *  wireframeLinewidth: <float>\n * }\n */\n\nclass MeshDepthMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'MeshDepthMaterial';\n\n\t\tthis.depthPacking = BasicDepthPacking;\n\n\t\tthis.skinning = false;\n\t\tthis.morphTargets = false;\n\n\t\tthis.map = null;\n\n\t\tthis.alphaMap = null;\n\n\t\tthis.displacementMap = null;\n\t\tthis.displacementScale = 1;\n\t\tthis.displacementBias = 0;\n\n\t\tthis.wireframe = false;\n\t\tthis.wireframeLinewidth = 1;\n\n\t\tthis.fog = false;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.depthPacking = source.depthPacking;\n\n\t\tthis.skinning = source.skinning;\n\t\tthis.morphTargets = source.morphTargets;\n\n\t\tthis.map = source.map;\n\n\t\tthis.alphaMap = source.alphaMap;\n\n\t\tthis.displacementMap = source.displacementMap;\n\t\tthis.displacementScale = source.displacementScale;\n\t\tthis.displacementBias = source.displacementBias;\n\n\t\tthis.wireframe = source.wireframe;\n\t\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\n\t\treturn this;\n\n\t}\n\n}\n\nMeshDepthMaterial.prototype.isMeshDepthMaterial = true;\n\n/**\n * parameters = {\n *\n *  referencePosition: <float>,\n *  nearDistance: <float>,\n *  farDistance: <float>,\n *\n *  skinning: <bool>,\n *  morphTargets: <bool>,\n *\n *  map: new THREE.Texture( <Image> ),\n *\n *  alphaMap: new THREE.Texture( <Image> ),\n *\n *  displacementMap: new THREE.Texture( <Image> ),\n *  displacementScale: <float>,\n *  displacementBias: <float>\n *\n * }\n */\n\nclass MeshDistanceMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'MeshDistanceMaterial';\n\n\t\tthis.referencePosition = new Vector3();\n\t\tthis.nearDistance = 1;\n\t\tthis.farDistance = 1000;\n\n\t\tthis.skinning = false;\n\t\tthis.morphTargets = false;\n\n\t\tthis.map = null;\n\n\t\tthis.alphaMap = null;\n\n\t\tthis.displacementMap = null;\n\t\tthis.displacementScale = 1;\n\t\tthis.displacementBias = 0;\n\n\t\tthis.fog = false;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.referencePosition.copy( source.referencePosition );\n\t\tthis.nearDistance = source.nearDistance;\n\t\tthis.farDistance = source.farDistance;\n\n\t\tthis.skinning = source.skinning;\n\t\tthis.morphTargets = source.morphTargets;\n\n\t\tthis.map = source.map;\n\n\t\tthis.alphaMap = source.alphaMap;\n\n\t\tthis.displacementMap = source.displacementMap;\n\t\tthis.displacementScale = source.displacementScale;\n\t\tthis.displacementBias = source.displacementBias;\n\n\t\treturn this;\n\n\t}\n\n}\n\nMeshDistanceMaterial.prototype.isMeshDistanceMaterial = true;\n\nvar vsm_frag = \"uniform sampler2D shadow_pass;\\nuniform vec2 resolution;\\nuniform float radius;\\n#include <packing>\\nvoid main() {\\n\\tfloat mean = 0.0;\\n\\tfloat squared_mean = 0.0;\\n\\tfloat depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy ) / resolution ) );\\n\\tfor ( float i = -1.0; i < 1.0 ; i += SAMPLE_RATE) {\\n\\t\\t#ifdef HORIZONTAL_PASS\\n\\t\\t\\tvec2 distribution = unpackRGBATo2Half( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( i, 0.0 ) * radius ) / resolution ) );\\n\\t\\t\\tmean += distribution.x;\\n\\t\\t\\tsquared_mean += distribution.y * distribution.y + distribution.x * distribution.x;\\n\\t\\t#else\\n\\t\\t\\tfloat depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( 0.0, i ) * radius ) / resolution ) );\\n\\t\\t\\tmean += depth;\\n\\t\\t\\tsquared_mean += depth * depth;\\n\\t\\t#endif\\n\\t}\\n\\tmean = mean * HALF_SAMPLE_RATE;\\n\\tsquared_mean = squared_mean * HALF_SAMPLE_RATE;\\n\\tfloat std_dev = sqrt( squared_mean - mean * mean );\\n\\tgl_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, _capabilities ) {\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\t\t_maxTextureSize = _capabilities.maxTextureSize;\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 shadowMaterialHorizontal = shadowMaterialVertical.clone();\n\tshadowMaterialHorizontal.defines.HORIZONTAL_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 === 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\tif ( shadow.autoUpdate === false && shadow.needsUpdate === false ) continue;\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 };\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 };\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// horizontal pass\n\n\t\tshadowMaterialHorizontal.uniforms.shadow_pass.value = shadow.mapPass.texture;\n\t\tshadowMaterialHorizontal.uniforms.resolution.value = shadow.mapSize;\n\t\tshadowMaterialHorizontal.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, shadowMaterialHorizontal, 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 !== stencilRef ||\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 !== stencilFail ||\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 xrFramebuffer = null;\n\tlet currentBoundFramebuffers = {};\n\n\tlet currentProgram = null;\n\n\tlet currentBlendingEnabled = false;\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 (\\d)/.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 (\\d)/.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( 0, 0, gl.canvas.width, gl.canvas.height );\n\tconst currentViewport = new Vector4( 0, 0, gl.canvas.width, gl.canvas.height );\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 bindXRFramebuffer( framebuffer ) {\n\n\t\tif ( framebuffer !== xrFramebuffer ) {\n\n\t\t\tgl.bindFramebuffer( 36160, framebuffer );\n\n\t\t\txrFramebuffer = framebuffer;\n\n\t\t}\n\n\t}\n\n\tfunction bindFramebuffer( target, framebuffer ) {\n\n\t\tif ( framebuffer === null && xrFramebuffer !== null ) framebuffer = xrFramebuffer; // use active XR framebuffer if available\n\n\t\tif ( currentBoundFramebuffers[ target ] !== framebuffer ) {\n\n\t\t\tgl.bindFramebuffer( target, framebuffer );\n\n\t\t\tcurrentBoundFramebuffers[ target ] = framebuffer;\n\n\t\t\tif ( isWebGL2 ) {\n\n\t\t\t\t// 36009 is equivalent to 36160\n\n\t\t\t\tif ( target === 36009 ) {\n\n\t\t\t\t\tcurrentBoundFramebuffers[ 36160 ] = framebuffer;\n\n\t\t\t\t}\n\n\t\t\t\tif ( target === 36160 ) {\n\n\t\t\t\t\tcurrentBoundFramebuffers[ 36009 ] = framebuffer;\n\n\t\t\t\t}\n\n\t\t\t}\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 === true ) {\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 === false ) {\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\tmaterial.alphaToCoverage === true\n\t\t\t? enable( 32926 )\n\t\t\t: disable( 32926 );\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\t// reset state\n\n\t\tgl.disable( 3042 );\n\t\tgl.disable( 2884 );\n\t\tgl.disable( 2929 );\n\t\tgl.disable( 32823 );\n\t\tgl.disable( 3089 );\n\t\tgl.disable( 2960 );\n\t\tgl.disable( 32926 );\n\n\t\tgl.blendEquation( 32774 );\n\t\tgl.blendFunc( 1, 0 );\n\t\tgl.blendFuncSeparate( 1, 0, 1, 0 );\n\n\t\tgl.colorMask( true, true, true, true );\n\t\tgl.clearColor( 0, 0, 0, 0 );\n\n\t\tgl.depthMask( true );\n\t\tgl.depthFunc( 513 );\n\t\tgl.clearDepth( 1 );\n\n\t\tgl.stencilMask( 0xffffffff );\n\t\tgl.stencilFunc( 519, 0, 0xffffffff );\n\t\tgl.stencilOp( 7680, 7680, 7680 );\n\t\tgl.clearStencil( 0 );\n\n\t\tgl.cullFace( 1029 );\n\t\tgl.frontFace( 2305 );\n\n\t\tgl.polygonOffset( 0, 0 );\n\n\t\tgl.activeTexture( 33984 );\n\n\t\tgl.bindFramebuffer( 36160, null );\n\n\t\tif ( isWebGL2 === true ) {\n\n\t\t\tgl.bindFramebuffer( 36009, null );\n\t\t\tgl.bindFramebuffer( 36008, null );\n\n\t\t}\n\n\t\tgl.useProgram( null );\n\n\t\tgl.lineWidth( 1 );\n\n\t\tgl.scissor( 0, 0, gl.canvas.width, gl.canvas.height );\n\t\tgl.viewport( 0, 0, gl.canvas.width, gl.canvas.height );\n\n\t\t// reset internals\n\n\t\tenabledCapabilities = {};\n\n\t\tcurrentTextureSlot = null;\n\t\tcurrentBoundTextures = {};\n\n\t\txrFramebuffer = null;\n\t\tcurrentBoundFramebuffers = {};\n\n\t\tcurrentProgram = null;\n\n\t\tcurrentBlendingEnabled = false;\n\t\tcurrentBlending = null;\n\t\tcurrentBlendEquation = null;\n\t\tcurrentBlendSrc = null;\n\t\tcurrentBlendDst = null;\n\t\tcurrentBlendEquationAlpha = null;\n\t\tcurrentBlendSrcAlpha = null;\n\t\tcurrentBlendDstAlpha = null;\n\t\tcurrentPremultipledAlpha = false;\n\n\t\tcurrentFlipSided = null;\n\t\tcurrentCullFace = null;\n\n\t\tcurrentLineWidth = null;\n\n\t\tcurrentPolygonOffsetFactor = null;\n\t\tcurrentPolygonOffsetUnits = null;\n\n\t\tcurrentScissor.set( 0, 0, gl.canvas.width, gl.canvas.height );\n\t\tcurrentViewport.set( 0, 0, gl.canvas.width, gl.canvas.height );\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\tbindFramebuffer: bindFramebuffer,\n\t\tbindXRFramebuffer: bindXRFramebuffer,\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 ? 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$1( image ) {\n\n\t\treturn isPowerOfTwo( image.width ) && 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\ttextureProperties.__maxMipLevel = Math.log2( Math.max( width, height ) );\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 texture = renderTarget.texture;\n\n\t\tconst renderTargetProperties = properties.get( renderTarget );\n\t\tconst textureProperties = properties.get( 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( 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\tconst textureProperties = properties.get( texture );\n\n\t\tif ( texture.version > 0 && textureProperties.__version !== texture.version ) {\n\n\t\t\tuploadCubeTexture( textureProperties, texture, slot );\n\t\t\treturn;\n\n\t\t}\n\n\t\tstate.activeTexture( 33984 + slot );\n\t\tstate.bindTexture( 34067, textureProperties.__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\tif ( extensions.has( 'EXT_texture_filter_anisotropic' ) === true ) {\n\n\t\t\tconst extension = extensions.get( 'EXT_texture_filter_anisotropic' );\n\n\t\t\tif ( texture.type === FloatType && extensions.has( 'OES_texture_float_linear' ) === false ) return; // verify extension for WebGL 1 and WebGL 2\n\t\t\tif ( isWebGL2 === false && ( texture.type === HalfFloatType && extensions.has( 'OES_texture_half_float_linear' ) === false ) ) return; // verify extension for WebGL 1 only\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\t\t_gl.pixelStorei( 37443, 0 );\n\n\t\tconst needsPowerOfTwo = textureNeedsPowerOfTwo( texture ) && isPowerOfTwo$1( texture.image ) === false;\n\t\tconst image = resizeImage( texture.image, needsPowerOfTwo, false, maxTextureSize );\n\n\t\tconst supportsMips = isPowerOfTwo$1( 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\tfunction uploadCubeTexture( textureProperties, texture, slot ) {\n\n\t\tif ( texture.image.length !== 6 ) return;\n\n\t\tinitTexture( textureProperties, texture );\n\n\t\tstate.activeTexture( 33984 + slot );\n\t\tstate.bindTexture( 34067, 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\t\t_gl.pixelStorei( 37443, 0 );\n\n\t\tconst isCompressed = ( texture && ( texture.isCompressedTexture || texture.image[ 0 ].isCompressedTexture ) );\n\t\tconst isDataTexture = ( texture.image[ 0 ] && texture.image[ 0 ].isDataTexture );\n\n\t\tconst cubeImage = [];\n\n\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\tif ( ! isCompressed && ! isDataTexture ) {\n\n\t\t\t\tcubeImage[ i ] = resizeImage( texture.image[ i ], false, true, maxCubemapSize );\n\n\t\t\t} else {\n\n\t\t\t\tcubeImage[ i ] = isDataTexture ? texture.image[ i ].image : texture.image[ i ];\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst image = cubeImage[ 0 ],\n\t\t\tsupportsMips = isPowerOfTwo$1( image ) || isWebGL2,\n\t\t\tglFormat = utils.convert( texture.format ),\n\t\t\tglType = utils.convert( texture.type ),\n\t\t\tglInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType );\n\n\t\tsetTextureParameters( 34067, texture, supportsMips );\n\n\t\tlet mipmaps;\n\n\t\tif ( isCompressed ) {\n\n\t\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\t\tmipmaps = cubeImage[ i ].mipmaps;\n\n\t\t\t\tfor ( let j = 0; j < mipmaps.length; j ++ ) {\n\n\t\t\t\t\tconst mipmap = mipmaps[ j ];\n\n\t\t\t\t\tif ( texture.format !== RGBAFormat && texture.format !== RGBFormat ) {\n\n\t\t\t\t\t\tif ( glFormat !== null ) {\n\n\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} else {\n\n\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}\n\n\t\t\t\t\t} else {\n\n\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}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\ttextureProperties.__maxMipLevel = mipmaps.length - 1;\n\n\t\t} else {\n\n\t\t\tmipmaps = texture.mipmaps;\n\n\t\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\t\tif ( isDataTexture ) {\n\n\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\tfor ( let j = 0; j < mipmaps.length; j ++ ) {\n\n\t\t\t\t\t\tconst mipmap = mipmaps[ j ];\n\t\t\t\t\t\tconst mipmapImage = mipmap.image[ i ].image;\n\n\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}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tstate.texImage2D( 34069 + i, 0, glInternalFormat, glFormat, glType, cubeImage[ i ] );\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\tstate.texImage2D( 34069 + i, j + 1, glInternalFormat, glFormat, glType, mipmap.image[ i ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\ttextureProperties.__maxMipLevel = mipmaps.length;\n\n\t\t}\n\n\t\tif ( textureNeedsGenerateMipmaps( texture, supportsMips ) ) {\n\n\t\t\t// We assume images for cube map have the same size.\n\t\t\tgenerateMipmap( 34067, 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 texture = renderTarget.texture;\n\n\t\tconst glFormat = utils.convert( texture.format );\n\t\tconst glType = utils.convert( texture.type );\n\t\tconst glInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType );\n\n\t\tif ( textureTarget === 32879 || textureTarget === 35866 ) {\n\n\t\t\tstate.texImage3D( textureTarget, 0, glInternalFormat, renderTarget.width, renderTarget.height, renderTarget.depth, 0, glFormat, glType, null );\n\n\t\t} else {\n\n\t\t\tstate.texImage2D( textureTarget, 0, glInternalFormat, renderTarget.width, renderTarget.height, 0, glFormat, glType, null );\n\n\t\t}\n\n\t\tstate.bindFramebuffer( 36160, framebuffer );\n\t\t_gl.framebufferTexture2D( 36160, attachment, textureTarget, properties.get( texture ).__webglTexture, 0 );\n\t\tstate.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 texture = renderTarget.texture;\n\n\t\t\tconst glFormat = utils.convert( texture.format );\n\t\t\tconst glType = utils.convert( texture.type );\n\t\t\tconst glInternalFormat = getInternalFormat( 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\tstate.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\tstate.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\tstate.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\tstate.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 texture = renderTarget.texture;\n\n\t\tconst renderTargetProperties = properties.get( renderTarget );\n\t\tconst textureProperties = properties.get( texture );\n\n\t\trenderTarget.addEventListener( 'dispose', onRenderTargetDispose );\n\n\t\ttextureProperties.__webglTexture = _gl.createTexture();\n\t\ttextureProperties.__version = texture.version;\n\n\t\tinfo.memory.textures ++;\n\n\t\tconst isCube = ( renderTarget.isWebGLCubeRenderTarget === true );\n\t\tconst isMultisample = ( renderTarget.isWebGLMultisampleRenderTarget === true );\n\t\tconst isRenderTarget3D = texture.isDataTexture3D || texture.isDataTexture2DArray;\n\t\tconst supportsMips = isPowerOfTwo$1( renderTarget ) || isWebGL2;\n\n\t\t// Handles WebGL2 RGBFormat fallback - #18858\n\n\t\tif ( isWebGL2 && texture.format === RGBFormat && ( texture.type === FloatType || texture.type === HalfFloatType ) ) {\n\n\t\t\ttexture.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( texture.format );\n\t\t\t\t\tconst glType = utils.convert( texture.type );\n\t\t\t\t\tconst glInternalFormat = getInternalFormat( 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\tstate.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\tstate.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, 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( texture, supportsMips ) ) {\n\n\t\t\t\tgenerateMipmap( 34067, 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\tlet glTextureType = 3553;\n\n\t\t\tif ( isRenderTarget3D ) {\n\n\t\t\t\t// Render targets containing layers, i.e: Texture 3D and 2d arrays\n\n\t\t\t\tif ( isWebGL2 ) {\n\n\t\t\t\t\tconst isTexture3D = texture.isDataTexture3D;\n\t\t\t\t\tglTextureType = isTexture3D ? 32879 : 35866;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.warn( 'THREE.DataTexture3D and THREE.DataTexture2DArray only supported with WebGL2.' );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tstate.bindTexture( glTextureType, textureProperties.__webglTexture );\n\t\t\tsetTextureParameters( glTextureType, texture, supportsMips );\n\t\t\tsetupFrameBufferTexture( renderTargetProperties.__webglFramebuffer, renderTarget, 36064, glTextureType );\n\n\t\t\tif ( textureNeedsGenerateMipmaps( texture, supportsMips ) ) {\n\n\t\t\t\tgenerateMipmap( 3553, 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\n\t\tconst supportsMips = isPowerOfTwo$1( 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 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\tconst renderTargetProperties = properties.get( renderTarget );\n\n\t\t\t\tstate.bindFramebuffer( 36008, renderTargetProperties.__webglMultisampledFramebuffer );\n\t\t\t\tstate.bindFramebuffer( 36009, renderTargetProperties.__webglFramebuffer );\n\n\t\t\t\t_gl.blitFramebuffer( 0, 0, width, height, 0, 0, width, height, mask, 9728 );\n\n\t\t\t\tstate.bindFramebuffer( 36008, null );\n\t\t\t\tstate.bindFramebuffer( 36009, renderTargetProperties.__webglMultisampledFramebuffer );\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\n\t\tsetTextureCube( texture, slot );\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.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\nclass ArrayCamera extends PerspectiveCamera {\n\n\tconstructor( array = [] ) {\n\n\t\tsuper();\n\n\t\tthis.cameras = array;\n\n\t}\n\n}\n\nArrayCamera.prototype.isArrayCamera = true;\n\nclass Group extends Object3D {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.type = 'Group';\n\n\t}\n\n}\n\nGroup.prototype.isGroup = true;\n\nconst _moveEvent = { type: 'move' };\n\nclass WebXRController {\n\n\tconstructor() {\n\n\t\tthis._targetRay = null;\n\t\tthis._grip = null;\n\t\tthis._hand = null;\n\n\t}\n\n\tgetHandSpace() {\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}\n\n\t\treturn this._hand;\n\n\t}\n\n\tgetTargetRaySpace() {\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\t\t\tthis._targetRay.hasLinearVelocity = false;\n\t\t\tthis._targetRay.linearVelocity = new Vector3();\n\t\t\tthis._targetRay.hasAngularVelocity = false;\n\t\t\tthis._targetRay.angularVelocity = new Vector3();\n\n\t\t}\n\n\t\treturn this._targetRay;\n\n\t}\n\n\tgetGripSpace() {\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\t\t\tthis._grip.hasLinearVelocity = false;\n\t\t\tthis._grip.linearVelocity = new Vector3();\n\t\t\tthis._grip.hasAngularVelocity = false;\n\t\t\tthis._grip.angularVelocity = new Vector3();\n\n\t\t}\n\n\t\treturn this._grip;\n\n\t}\n\n\tdispatchEvent( 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( 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( 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 && frame.session.visibilityState !== 'visible-blurred' ) {\n\n\t\t\tif ( targetRay !== null ) {\n\n\t\t\t\tinputPose = frame.getPose( inputSource.targetRaySpace, referenceSpace );\n\n\t\t\t\tif ( inputPose !== null ) {\n\n\t\t\t\t\ttargetRay.matrix.fromArray( inputPose.transform.matrix );\n\t\t\t\t\ttargetRay.matrix.decompose( targetRay.position, targetRay.rotation, targetRay.scale );\n\n\t\t\t\t\tif ( inputPose.linearVelocity ) {\n\n\t\t\t\t\t\ttargetRay.hasLinearVelocity = true;\n\t\t\t\t\t\ttargetRay.linearVelocity.copy( inputPose.linearVelocity );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\ttargetRay.hasLinearVelocity = false;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( inputPose.angularVelocity ) {\n\n\t\t\t\t\t\ttargetRay.hasAngularVelocity = true;\n\t\t\t\t\t\ttargetRay.angularVelocity.copy( inputPose.angularVelocity );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\ttargetRay.hasAngularVelocity = false;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.dispatchEvent( _moveEvent );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( hand && inputSource.hand ) {\n\n\t\t\t\thandPose = true;\n\n\t\t\t\tfor ( const inputjoint of inputSource.hand.values() ) {\n\n\t\t\t\t\t// Update the joints groups with the XRJoint poses\n\t\t\t\t\tconst jointPose = frame.getJointPose( inputjoint, referenceSpace );\n\n\t\t\t\t\tif ( hand.joints[ inputjoint.jointName ] === undefined ) {\n\n\t\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\t\tconst joint = new Group();\n\t\t\t\t\t\tjoint.matrixAutoUpdate = false;\n\t\t\t\t\t\tjoint.visible = false;\n\t\t\t\t\t\thand.joints[ inputjoint.jointName ] = joint;\n\t\t\t\t\t\t// ??\n\t\t\t\t\t\thand.add( joint );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tconst joint = hand.joints[ inputjoint.jointName ];\n\n\t\t\t\t\tif ( jointPose !== null ) {\n\n\t\t\t\t\t\tjoint.matrix.fromArray( jointPose.transform.matrix );\n\t\t\t\t\t\tjoint.matrix.decompose( joint.position, joint.rotation, joint.scale );\n\t\t\t\t\t\tjoint.jointRadius = jointPose.radius;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tjoint.visible = jointPose !== null;\n\n\t\t\t\t}\n\n\t\t\t\t// Custom events\n\n\t\t\t\t// Check pinchz\n\t\t\t\tconst indexTip = hand.joints[ 'index-finger-tip' ];\n\t\t\t\tconst thumbTip = hand.joints[ 'thumb-tip' ];\n\t\t\t\tconst distance = indexTip.position.distanceTo( thumbTip.position );\n\n\t\t\t\tconst distanceToPinch = 0.02;\n\t\t\t\tconst threshold = 0.005;\n\n\t\t\t\tif ( hand.inputState.pinching && distance > distanceToPinch + threshold ) {\n\n\t\t\t\t\thand.inputState.pinching = false;\n\t\t\t\t\tthis.dispatchEvent( {\n\t\t\t\t\t\ttype: 'pinchend',\n\t\t\t\t\t\thandedness: inputSource.handedness,\n\t\t\t\t\t\ttarget: this\n\t\t\t\t\t} );\n\n\t\t\t\t} else if ( ! hand.inputState.pinching && distance <= distanceToPinch - threshold ) {\n\n\t\t\t\t\thand.inputState.pinching = true;\n\t\t\t\t\tthis.dispatchEvent( {\n\t\t\t\t\t\ttype: 'pinchstart',\n\t\t\t\t\t\thandedness: inputSource.handedness,\n\t\t\t\t\t\ttarget: this\n\t\t\t\t\t} );\n\n\t\t\t\t}\n\n\t\t\t} else {\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\tif ( gripPose.linearVelocity ) {\n\n\t\t\t\t\t\t\tgrip.hasLinearVelocity = true;\n\t\t\t\t\t\t\tgrip.linearVelocity.copy( gripPose.linearVelocity );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tgrip.hasLinearVelocity = false;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( gripPose.angularVelocity ) {\n\n\t\t\t\t\t\t\tgrip.hasAngularVelocity = true;\n\t\t\t\t\t\t\tgrip.angularVelocity.copy( gripPose.angularVelocity );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tgrip.hasAngularVelocity = false;\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\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\nclass WebXRManager extends EventDispatcher {\n\n\tconstructor( renderer, gl ) {\n\n\t\tsuper();\n\n\t\tconst scope = this;\n\t\tconst state = renderer.state;\n\n\t\tlet session = null;\n\n\t\tlet framebufferScaleFactor = 1.0;\n\n\t\tlet referenceSpace = null;\n\t\tlet referenceSpaceType = 'local-floor';\n\n\t\tlet pose = null;\n\n\t\tconst controllers = [];\n\t\tconst inputSourcesMap = new Map();\n\n\t\t//\n\n\t\tconst cameraL = new PerspectiveCamera();\n\t\tcameraL.layers.enable( 1 );\n\t\tcameraL.viewport = new Vector4();\n\n\t\tconst cameraR = new PerspectiveCamera();\n\t\tcameraR.layers.enable( 2 );\n\t\tcameraR.viewport = new Vector4();\n\n\t\tconst cameras = [ cameraL, cameraR ];\n\n\t\tconst cameraVR = new ArrayCamera();\n\t\tcameraVR.layers.enable( 1 );\n\t\tcameraVR.layers.enable( 2 );\n\n\t\tlet _currentDepthNear = null;\n\t\tlet _currentDepthFar = null;\n\n\t\t//\n\n\t\tthis.enabled = false;\n\n\t\tthis.isPresenting = false;\n\n\t\tthis.getController = function ( index ) {\n\n\t\t\tlet controller = controllers[ index ];\n\n\t\t\tif ( controller === undefined ) {\n\n\t\t\t\tcontroller = new WebXRController();\n\t\t\t\tcontrollers[ index ] = controller;\n\n\t\t\t}\n\n\t\t\treturn controller.getTargetRaySpace();\n\n\t\t};\n\n\t\tthis.getControllerGrip = function ( index ) {\n\n\t\t\tlet controller = controllers[ index ];\n\n\t\t\tif ( controller === undefined ) {\n\n\t\t\t\tcontroller = new WebXRController();\n\t\t\t\tcontrollers[ index ] = controller;\n\n\t\t\t}\n\n\t\t\treturn controller.getGripSpace();\n\n\t\t};\n\n\t\tthis.getHand = function ( index ) {\n\n\t\t\tlet controller = controllers[ index ];\n\n\t\t\tif ( controller === undefined ) {\n\n\t\t\t\tcontroller = new WebXRController();\n\t\t\t\tcontrollers[ index ] = controller;\n\n\t\t\t}\n\n\t\t\treturn controller.getHandSpace();\n\n\t\t};\n\n\t\t//\n\n\t\tfunction onSessionEvent( event ) {\n\n\t\t\tconst controller = inputSourcesMap.get( event.inputSource );\n\n\t\t\tif ( controller ) {\n\n\t\t\t\tcontroller.dispatchEvent( { type: event.type, data: event.inputSource } );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction onSessionEnd() {\n\n\t\t\tinputSourcesMap.forEach( function ( controller, inputSource ) {\n\n\t\t\t\tcontroller.disconnect( inputSource );\n\n\t\t\t} );\n\n\t\t\tinputSourcesMap.clear();\n\n\t\t\t_currentDepthNear = null;\n\t\t\t_currentDepthFar = null;\n\n\t\t\t// restore framebuffer/rendering state\n\n\t\t\tstate.bindXRFramebuffer( null );\n\t\t\trenderer.setRenderTarget( renderer.getRenderTarget() );\n\n\t\t\t//\n\n\t\t\tanimation.stop();\n\n\t\t\tscope.isPresenting = false;\n\n\t\t\tscope.dispatchEvent( { type: 'sessionend' } );\n\n\t\t}\n\n\t\tthis.setFramebufferScaleFactor = function ( value ) {\n\n\t\t\tframebufferScaleFactor = value;\n\n\t\t\tif ( scope.isPresenting === true ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebXRManager: Cannot change framebuffer scale while presenting.' );\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.setReferenceSpaceType = function ( value ) {\n\n\t\t\treferenceSpaceType = value;\n\n\t\t\tif ( scope.isPresenting === true ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebXRManager: Cannot change reference space type while presenting.' );\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.getReferenceSpace = function () {\n\n\t\t\treturn referenceSpace;\n\n\t\t};\n\n\t\tthis.getSession = function () {\n\n\t\t\treturn session;\n\n\t\t};\n\n\t\tthis.setSession = async function ( value ) {\n\n\t\t\tsession = value;\n\n\t\t\tif ( session !== null ) {\n\n\t\t\t\tsession.addEventListener( 'select', onSessionEvent );\n\t\t\t\tsession.addEventListener( 'selectstart', onSessionEvent );\n\t\t\t\tsession.addEventListener( 'selectend', onSessionEvent );\n\t\t\t\tsession.addEventListener( 'squeeze', onSessionEvent );\n\t\t\t\tsession.addEventListener( 'squeezestart', onSessionEvent );\n\t\t\t\tsession.addEventListener( 'squeezeend', onSessionEvent );\n\t\t\t\tsession.addEventListener( 'end', onSessionEnd );\n\t\t\t\tsession.addEventListener( 'inputsourceschange', onInputSourcesChange );\n\n\t\t\t\tconst attributes = gl.getContextAttributes();\n\n\t\t\t\tif ( attributes.xrCompatible !== true ) {\n\n\t\t\t\t\tawait gl.makeXRCompatible();\n\n\t\t\t\t}\n\n\t\t\t\tconst layerInit = {\n\t\t\t\t\tantialias: attributes.antialias,\n\t\t\t\t\talpha: attributes.alpha,\n\t\t\t\t\tdepth: attributes.depth,\n\t\t\t\t\tstencil: attributes.stencil,\n\t\t\t\t\tframebufferScaleFactor: framebufferScaleFactor\n\t\t\t\t};\n\n\t\t\t\t// eslint-disable-next-line no-undef\n\t\t\t\tconst baseLayer = new XRWebGLLayer( session, gl, layerInit );\n\n\t\t\t\tsession.updateRenderState( { baseLayer: baseLayer } );\n\n\t\t\t\treferenceSpace = await session.requestReferenceSpace( referenceSpaceType );\n\n\t\t\t\tanimation.setContext( session );\n\t\t\t\tanimation.start();\n\n\t\t\t\tscope.isPresenting = true;\n\n\t\t\t\tscope.dispatchEvent( { type: 'sessionstart' } );\n\n\t\t\t}\n\n\t\t};\n\n\t\tfunction onInputSourcesChange( event ) {\n\n\t\t\tconst inputSources = session.inputSources;\n\n\t\t\t// Assign inputSources to available controllers\n\n\t\t\tfor ( let i = 0; i < controllers.length; i ++ ) {\n\n\t\t\t\tinputSourcesMap.set( inputSources[ i ], controllers[ i ] );\n\n\t\t\t}\n\n\t\t\t// Notify disconnected\n\n\t\t\tfor ( let i = 0; i < event.removed.length; i ++ ) {\n\n\t\t\t\tconst inputSource = event.removed[ i ];\n\t\t\t\tconst controller = inputSourcesMap.get( inputSource );\n\n\t\t\t\tif ( controller ) {\n\n\t\t\t\t\tcontroller.dispatchEvent( { type: 'disconnected', data: inputSource } );\n\t\t\t\t\tinputSourcesMap.delete( inputSource );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// Notify connected\n\n\t\t\tfor ( let i = 0; i < event.added.length; i ++ ) {\n\n\t\t\t\tconst inputSource = event.added[ i ];\n\t\t\t\tconst controller = inputSourcesMap.get( inputSource );\n\n\t\t\t\tif ( controller ) {\n\n\t\t\t\t\tcontroller.dispatchEvent( { type: 'connected', data: inputSource } );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\n\t\tconst cameraLPos = new Vector3();\n\t\tconst cameraRPos = new Vector3();\n\n\t\t/**\n\t\t * Assumes 2 cameras that are parallel and share an X-axis, and that\n\t\t * the cameras' projection and world matrices have already been set.\n\t\t * And that near and far planes are identical for both cameras.\n\t\t * Visualization of this technique: https://computergraphics.stackexchange.com/a/4765\n\t\t */\n\t\tfunction setProjectionFromUnion( camera, cameraL, cameraR ) {\n\n\t\t\tcameraLPos.setFromMatrixPosition( cameraL.matrixWorld );\n\t\t\tcameraRPos.setFromMatrixPosition( cameraR.matrixWorld );\n\n\t\t\tconst ipd = cameraLPos.distanceTo( cameraRPos );\n\n\t\t\tconst projL = cameraL.projectionMatrix.elements;\n\t\t\tconst projR = cameraR.projectionMatrix.elements;\n\n\t\t\t// VR systems will have identical far and near planes, and\n\t\t\t// most likely identical top and bottom frustum extents.\n\t\t\t// Use the left camera for these values.\n\t\t\tconst near = projL[ 14 ] / ( projL[ 10 ] - 1 );\n\t\t\tconst far = projL[ 14 ] / ( projL[ 10 ] + 1 );\n\t\t\tconst topFov = ( projL[ 9 ] + 1 ) / projL[ 5 ];\n\t\t\tconst bottomFov = ( projL[ 9 ] - 1 ) / projL[ 5 ];\n\n\t\t\tconst leftFov = ( projL[ 8 ] - 1 ) / projL[ 0 ];\n\t\t\tconst rightFov = ( projR[ 8 ] + 1 ) / projR[ 0 ];\n\t\t\tconst left = near * leftFov;\n\t\t\tconst right = near * rightFov;\n\n\t\t\t// Calculate the new camera's position offset from the\n\t\t\t// left camera. xOffset should be roughly half `ipd`.\n\t\t\tconst zOffset = ipd / ( - leftFov + rightFov );\n\t\t\tconst xOffset = zOffset * - leftFov;\n\n\t\t\t// TODO: Better way to apply this offset?\n\t\t\tcameraL.matrixWorld.decompose( camera.position, camera.quaternion, camera.scale );\n\t\t\tcamera.translateX( xOffset );\n\t\t\tcamera.translateZ( zOffset );\n\t\t\tcamera.matrixWorld.compose( camera.position, camera.quaternion, camera.scale );\n\t\t\tcamera.matrixWorldInverse.copy( camera.matrixWorld ).invert();\n\n\t\t\t// Find the union of the frustum values of the cameras and scale\n\t\t\t// the values so that the near plane's position does not change in world space,\n\t\t\t// although must now be relative to the new union camera.\n\t\t\tconst near2 = near + zOffset;\n\t\t\tconst far2 = far + zOffset;\n\t\t\tconst left2 = left - xOffset;\n\t\t\tconst right2 = right + ( ipd - xOffset );\n\t\t\tconst top2 = topFov * far / far2 * near2;\n\t\t\tconst bottom2 = bottomFov * far / far2 * near2;\n\n\t\t\tcamera.projectionMatrix.makePerspective( left2, right2, top2, bottom2, near2, far2 );\n\n\t\t}\n\n\t\tfunction updateCamera( camera, parent ) {\n\n\t\t\tif ( parent === null ) {\n\n\t\t\t\tcamera.matrixWorld.copy( camera.matrix );\n\n\t\t\t} else {\n\n\t\t\t\tcamera.matrixWorld.multiplyMatrices( parent.matrixWorld, camera.matrix );\n\n\t\t\t}\n\n\t\t\tcamera.matrixWorldInverse.copy( camera.matrixWorld ).invert();\n\n\t\t}\n\n\t\tthis.getCamera = function ( camera ) {\n\n\t\t\tcameraVR.near = cameraR.near = cameraL.near = camera.near;\n\t\t\tcameraVR.far = cameraR.far = cameraL.far = camera.far;\n\n\t\t\tif ( _currentDepthNear !== cameraVR.near || _currentDepthFar !== cameraVR.far ) {\n\n\t\t\t\t// Note that the new renderState won't apply until the next frame. See #18320\n\n\t\t\t\tsession.updateRenderState( {\n\t\t\t\t\tdepthNear: cameraVR.near,\n\t\t\t\t\tdepthFar: cameraVR.far\n\t\t\t\t} );\n\n\t\t\t\t_currentDepthNear = cameraVR.near;\n\t\t\t\t_currentDepthFar = cameraVR.far;\n\n\t\t\t}\n\n\t\t\tconst parent = camera.parent;\n\t\t\tconst cameras = cameraVR.cameras;\n\n\t\t\tupdateCamera( cameraVR, parent );\n\n\t\t\tfor ( let i = 0; i < cameras.length; i ++ ) {\n\n\t\t\t\tupdateCamera( cameras[ i ], parent );\n\n\t\t\t}\n\n\t\t\t// update camera and its children\n\n\t\t\tcamera.matrixWorld.copy( cameraVR.matrixWorld );\n\t\t\tcamera.matrix.copy( cameraVR.matrix );\n\t\t\tcamera.matrix.decompose( camera.position, camera.quaternion, camera.scale );\n\n\t\t\tconst children = camera.children;\n\n\t\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\t\tchildren[ i ].updateMatrixWorld( true );\n\n\t\t\t}\n\n\t\t\t// update projection matrix for proper view frustum culling\n\n\t\t\tif ( cameras.length === 2 ) {\n\n\t\t\t\tsetProjectionFromUnion( cameraVR, cameraL, cameraR );\n\n\t\t\t} else {\n\n\t\t\t\t// assume single camera setup (AR)\n\n\t\t\t\tcameraVR.projectionMatrix.copy( cameraL.projectionMatrix );\n\n\t\t\t}\n\n\t\t\treturn cameraVR;\n\n\t\t};\n\n\t\t// Animation Loop\n\n\t\tlet onAnimationFrameCallback = null;\n\n\t\tfunction onAnimationFrame( time, frame ) {\n\n\t\t\tpose = frame.getViewerPose( referenceSpace );\n\n\t\t\tif ( pose !== null ) {\n\n\t\t\t\tconst views = pose.views;\n\t\t\t\tconst baseLayer = session.renderState.baseLayer;\n\n\t\t\t\tstate.bindXRFramebuffer( baseLayer.framebuffer );\n\n\t\t\t\tlet cameraVRNeedsUpdate = false;\n\n\t\t\t\t// check if it's necessary to rebuild cameraVR's camera list\n\n\t\t\t\tif ( views.length !== cameraVR.cameras.length ) {\n\n\t\t\t\t\tcameraVR.cameras.length = 0;\n\t\t\t\t\tcameraVRNeedsUpdate = true;\n\n\t\t\t\t}\n\n\t\t\t\tfor ( let i = 0; i < views.length; i ++ ) {\n\n\t\t\t\t\tconst view = views[ i ];\n\t\t\t\t\tconst viewport = baseLayer.getViewport( view );\n\n\t\t\t\t\tconst camera = cameras[ i ];\n\t\t\t\t\tcamera.matrix.fromArray( view.transform.matrix );\n\t\t\t\t\tcamera.projectionMatrix.fromArray( view.projectionMatrix );\n\t\t\t\t\tcamera.viewport.set( viewport.x, viewport.y, viewport.width, viewport.height );\n\n\t\t\t\t\tif ( i === 0 ) {\n\n\t\t\t\t\t\tcameraVR.matrix.copy( camera.matrix );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( cameraVRNeedsUpdate === true ) {\n\n\t\t\t\t\t\tcameraVR.cameras.push( camera );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tconst inputSources = session.inputSources;\n\n\t\t\tfor ( let i = 0; i < controllers.length; i ++ ) {\n\n\t\t\t\tconst controller = controllers[ i ];\n\t\t\t\tconst inputSource = inputSources[ i ];\n\n\t\t\t\tcontroller.update( inputSource, frame, referenceSpace );\n\n\t\t\t}\n\n\t\t\tif ( onAnimationFrameCallback ) onAnimationFrameCallback( time, frame );\n\n\t\t}\n\n\t\tconst animation = new WebGLAnimation();\n\t\tanimation.setAnimationLoop( onAnimationFrame );\n\n\t\tthis.setAnimationLoop = function ( callback ) {\n\n\t\t\tonAnimationFrameCallback = callback;\n\n\t\t};\n\n\t\tthis.dispose = function () {};\n\n\t}\n\n}\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, 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 );\n\n\t\t\tif ( material.isMeshPhysicalMaterial ) {\n\n\t\t\t\trefreshUniformsPhysical( uniforms, material );\n\n\t\t\t} else {\n\n\t\t\t\trefreshUniformsStandard( uniforms, material );\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 ) {\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 = properties.get( material ).envMap;\n\n\t\tif ( envMap ) {\n\n\t\t\tuniforms.envMap.value = envMap;\n\n\t\t\tuniforms.flipEnvMap.value = ( envMap.isCubeTexture && envMap._needsFlipEnvMap ) ? - 1 : 1;\n\n\t\t\tuniforms.reflectivity.value = material.reflectivity;\n\t\t\tuniforms.refractionRatio.value = material.refractionRatio;\n\n\t\t\tconst 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. displacementMap map\n\t\t// 4. normal map\n\t\t// 5. bump map\n\t\t// 6. roughnessMap map\n\t\t// 7. metalnessMap map\n\t\t// 8. alphaMap map\n\t\t// 9. emissiveMap map\n\t\t// 10. clearcoat map\n\t\t// 11. clearcoat normal map\n\t\t// 12. clearcoat roughnessMap 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} else if ( material.clearcoatMap ) {\n\n\t\t\tuvScaleMap = material.clearcoatMap;\n\n\t\t} else if ( material.clearcoatNormalMap ) {\n\n\t\t\tuvScaleMap = material.clearcoatNormalMap;\n\n\t\t} else if ( material.clearcoatRoughnessMap ) {\n\n\t\t\tuvScaleMap = material.clearcoatRoughnessMap;\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 ) {\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\tconst envMap = properties.get( material ).envMap;\n\n\t\tif ( envMap ) {\n\n\t\t\t//uniforms.envMap.value = material.envMap; // part of uniforms common\n\t\t\tuniforms.envMapIntensity.value = material.envMapIntensity;\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsPhysical( uniforms, material ) {\n\n\t\trefreshUniformsStandard( uniforms, material );\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 createCanvasElement() {\n\n\tconst canvas = document.createElementNS( 'http://www.w3.org/1999/xhtml', 'canvas' );\n\tcanvas.style.display = 'block';\n\treturn canvas;\n\n}\n\nfunction WebGLRenderer( parameters ) {\n\n\tparameters = parameters || {};\n\n\tconst _canvas = parameters.canvas !== undefined ? parameters.canvas : createCanvasElement(),\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// render() can be called from within a callback triggered by another render.\n\t// We track this so that the nested render call gets its list and state isolated from the parent render call.\n\n\tconst renderListStack = [];\n\tconst renderStateStack = [];\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// internal properties\n\n\tconst _this = this;\n\n\tlet _isContextLost = false;\n\n\t// internal state cache\n\n\tlet _currentActiveCubeFace = 0;\n\tlet _currentActiveMipmapLevel = 0;\n\tlet _currentRenderTarget = null;\n\tlet _currentMaterialId = - 1;\n\n\tlet _currentCamera = 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\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, cubemaps, attributes, geometries, objects;\n\tlet programCache, materials, renderLists, renderStates, clipping, shadowMap;\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\textensions.init( capabilities );\n\n\t\tutils = new WebGLUtils( _gl, extensions, capabilities );\n\n\t\tstate = new WebGLState( _gl, extensions, capabilities );\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\tcubemaps = new WebGLCubeMaps( _this );\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\tclipping = new WebGLClipping( properties );\n\t\tprogramCache = new WebGLPrograms( _this, cubemaps, extensions, capabilities, bindingStates, clipping );\n\t\tmaterials = new WebGLMaterials( properties );\n\t\trenderLists = new WebGLRenderLists( properties );\n\t\trenderStates = new WebGLRenderStates( extensions, capabilities );\n\t\tbackground = new WebGLBackground( _this, cubemaps, state, objects, _premultipliedAlpha );\n\t\tshadowMap = new WebGLShadowMap( _this, objects, capabilities );\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.shadowMap = shadowMap;\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// 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 ( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'WebGLRenderer: .getClearColor() now requires a Color as an argument' );\n\n\t\t\ttarget = new Color();\n\n\t\t}\n\n\t\treturn target.copy( 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\tcubemaps.dispose();\n\t\tobjects.dispose();\n\t\tbindingStates.dispose();\n\n\t\txr.dispose();\n\n\t\txr.removeEventListener( 'sessionstart', onXRSessionStart );\n\t\txr.removeEventListener( 'sessionend', onXRSessionEnd );\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\tconst infoAutoReset = info.autoReset;\n\t\tconst shadowMapEnabled = shadowMap.enabled;\n\t\tconst shadowMapAutoUpdate = shadowMap.autoUpdate;\n\t\tconst shadowMapNeedsUpdate = shadowMap.needsUpdate;\n\t\tconst shadowMapType = shadowMap.type;\n\n\t\tinitGLContext();\n\n\t\tinfo.autoReset = infoAutoReset;\n\t\tshadowMap.enabled = shadowMapEnabled;\n\t\tshadowMap.autoUpdate = shadowMapAutoUpdate;\n\t\tshadowMap.needsUpdate = shadowMapNeedsUpdate;\n\t\tshadowMap.type = shadowMapType;\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\treleaseMaterialProgramReferences( material );\n\n\t\tproperties.remove( material );\n\n\t}\n\n\n\tfunction releaseMaterialProgramReferences( material ) {\n\n\t\tconst programs = properties.get( material ).programs;\n\n\t\tif ( programs !== undefined ) {\n\n\t\t\tprograms.forEach( function ( program ) {\n\n\t\t\t\tprogramCache.releaseProgram( program );\n\n\t\t\t} );\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 );\n\t\tcurrentRenderState.init();\n\n\t\tscene.traverseVisible( function ( object ) {\n\n\t\t\tif ( object.isLight && object.layers.test( camera.layers ) ) {\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();\n\n\t\tscene.traverse( function ( object ) {\n\n\t\t\tconst 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\tconst material2 = material[ i ];\n\n\t\t\t\t\t\tgetProgram( material2, scene, object );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tgetProgram( material, scene, object );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} );\n\n\t};\n\n\t// Animation Loop\n\n\tlet onAnimationFrameCallback = null;\n\n\tfunction onAnimationFrame( time ) {\n\n\t\tif ( onAnimationFrameCallback ) onAnimationFrameCallback( time );\n\n\t}\n\n\tfunction onXRSessionStart() {\n\n\t\tanimation.stop();\n\n\t}\n\n\tfunction onXRSessionEnd() {\n\n\t\tanimation.start();\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\txr.addEventListener( 'sessionstart', onXRSessionStart );\n\txr.addEventListener( 'sessionend', onXRSessionEnd );\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// 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, renderStateStack.length );\n\t\tcurrentRenderState.init();\n\n\t\trenderStateStack.push( currentRenderState );\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, renderListStack.length );\n\t\tcurrentRenderList.init();\n\n\t\trenderListStack.push( currentRenderList );\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();\n\t\tcurrentRenderState.setupLightsView( 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 ( _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//\n\n\t\tif ( scene.isScene === true ) scene.onAfterRender( _this, scene, camera );\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\tbindingStates.resetDefaultState();\n\t\t_currentMaterialId = - 1;\n\t\t_currentCamera = null;\n\n\t\trenderStateStack.pop();\n\n\t\tif ( renderStateStack.length > 0 ) {\n\n\t\t\tcurrentRenderState = renderStateStack[ renderStateStack.length - 1 ];\n\n\t\t} else {\n\n\t\t\tcurrentRenderState = null;\n\n\t\t}\n\n\t\trenderListStack.pop();\n\n\t\tif ( renderListStack.length > 0 ) {\n\n\t\t\tcurrentRenderList = renderListStack[ renderListStack.length - 1 ];\n\n\t\t} else {\n\n\t\t\tcurrentRenderList = null;\n\n\t\t}\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\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.setupLightsView( 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\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\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\n\t}\n\n\tfunction getProgram( 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, object );\n\t\tconst programCacheKey = programCache.getProgramCacheKey( parameters );\n\n\t\tlet programs = materialProperties.programs;\n\n\t\t// always update environment and fog - changing these trigger an getProgram call, but it's possible that the program doesn't change\n\n\t\tmaterialProperties.environment = material.isMeshStandardMaterial ? scene.environment : null;\n\t\tmaterialProperties.fog = scene.fog;\n\t\tmaterialProperties.envMap = cubemaps.get( material.envMap || materialProperties.environment );\n\n\t\tif ( programs === undefined ) {\n\n\t\t\t// new material\n\n\t\t\tmaterial.addEventListener( 'dispose', onMaterialDispose );\n\n\t\t\tprograms = new Map();\n\t\t\tmaterialProperties.programs = programs;\n\n\t\t}\n\n\t\tlet program = programs.get( programCacheKey );\n\n\t\tif ( program !== undefined ) {\n\n\t\t\t// early out if program and light state is identical\n\n\t\t\tif ( materialProperties.currentProgram === program && materialProperties.lightsStateVersion === lightsStateVersion ) {\n\n\t\t\t\tupdateCommonMaterialProperties( material, parameters );\n\n\t\t\t\treturn program;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tparameters.uniforms = programCache.getUniforms( material );\n\n\t\t\tmaterial.onBuild( parameters, _this );\n\n\t\t\tmaterial.onBeforeCompile( parameters, _this );\n\n\t\t\tprogram = programCache.acquireProgram( parameters, programCacheKey );\n\t\t\tprograms.set( programCacheKey, program );\n\n\t\t\tmaterialProperties.uniforms = parameters.uniforms;\n\n\t\t}\n\n\t\tconst uniforms = materialProperties.uniforms;\n\n\t\tif ( ( ! material.isShaderMaterial && ! material.isRawShaderMaterial ) || material.clipping === true ) {\n\n\t\t\tuniforms.clippingPlanes = clipping.uniform;\n\n\t\t}\n\n\t\tupdateCommonMaterialProperties( material, parameters );\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.ltc_1.value = lights.state.rectAreaLTC1;\n\t\t\tuniforms.ltc_2.value = lights.state.rectAreaLTC2;\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 = program.getUniforms();\n\t\tconst uniformsList = WebGLUniforms.seqWithValue( progUniforms.seq, uniforms );\n\n\t\tmaterialProperties.currentProgram = program;\n\t\tmaterialProperties.uniformsList = uniformsList;\n\n\t\treturn program;\n\n\t}\n\n\tfunction updateCommonMaterialProperties( material, parameters ) {\n\n\t\tconst materialProperties = properties.get( material );\n\n\t\tmaterialProperties.outputEncoding = parameters.outputEncoding;\n\t\tmaterialProperties.instancing = parameters.instancing;\n\t\tmaterialProperties.numClippingPlanes = parameters.numClippingPlanes;\n\t\tmaterialProperties.numIntersection = parameters.numClipIntersection;\n\t\tmaterialProperties.vertexAlphas = parameters.vertexAlphas;\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\t\tconst envMap = cubemaps.get( material.envMap || environment );\n\t\tconst vertexAlphas = material.vertexColors === true && object.geometry && object.geometry.attributes.color && object.geometry.attributes.color.itemSize === 4;\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\tclipping.setState( material, camera, useCache );\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\n\t\tlet needsProgramChange = false;\n\n\t\tif ( material.version === materialProperties.__version ) {\n\n\t\t\tif ( materialProperties.needsLights && ( materialProperties.lightsStateVersion !== lights.state.version ) ) {\n\n\t\t\t\tneedsProgramChange = true;\n\n\t\t\t} else if ( materialProperties.outputEncoding !== encoding ) {\n\n\t\t\t\tneedsProgramChange = true;\n\n\t\t\t} else if ( object.isInstancedMesh && materialProperties.instancing === false ) {\n\n\t\t\t\tneedsProgramChange = true;\n\n\t\t\t} else if ( ! object.isInstancedMesh && materialProperties.instancing === true ) {\n\n\t\t\t\tneedsProgramChange = true;\n\n\t\t\t} else if ( materialProperties.envMap !== envMap ) {\n\n\t\t\t\tneedsProgramChange = true;\n\n\t\t\t} else if ( material.fog && materialProperties.fog !== fog ) {\n\n\t\t\t\tneedsProgramChange = true;\n\n\t\t\t} else if ( materialProperties.numClippingPlanes !== undefined &&\n\t\t\t\t( materialProperties.numClippingPlanes !== clipping.numPlanes ||\n\t\t\t\tmaterialProperties.numIntersection !== clipping.numIntersection ) ) {\n\n\t\t\t\tneedsProgramChange = true;\n\n\t\t\t} else if ( materialProperties.vertexAlphas !== vertexAlphas ) {\n\n\t\t\t\tneedsProgramChange = true;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tneedsProgramChange = true;\n\t\t\tmaterialProperties.__version = material.version;\n\n\t\t}\n\n\t\t//\n\n\t\tlet program = materialProperties.currentProgram;\n\n\t\tif ( needsProgramChange === true ) {\n\n\t\t\tprogram = getProgram( material, scene, object );\n\n\t\t}\n\n\t\tlet refreshProgram = false;\n\t\tlet refreshMaterial = false;\n\t\tlet refreshLights = false;\n\n\t\tconst p_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 === null ) {\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 = 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, _pixelRatio, _height );\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\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 = 0, activeMipmapLevel = 0 ) {\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 = null;\n\t\tlet isCube = false;\n\t\tlet isRenderTarget3D = false;\n\n\t\tif ( renderTarget ) {\n\n\t\t\tconst texture = renderTarget.texture;\n\n\t\t\tif ( texture.isDataTexture3D || texture.isDataTexture2DArray ) {\n\n\t\t\t\tisRenderTarget3D = true;\n\n\t\t\t}\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 ];\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\tstate.bindFramebuffer( 36160, framebuffer );\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, textureProperties.__webglTexture, activeMipmapLevel );\n\n\t\t} else if ( isRenderTarget3D ) {\n\n\t\t\tconst textureProperties = properties.get( renderTarget.texture );\n\t\t\tconst layer = activeCubeFace || 0;\n\t\t\t_gl.framebufferTextureLayer( 36160, 36064, textureProperties.__webglTexture, activeMipmapLevel || 0, layer );\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\tstate.bindFramebuffer( 36160, framebuffer );\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\tconst halfFloatSupportedByExt = ( textureType === HalfFloatType ) && ( extensions.has( 'EXT_color_buffer_half_float' ) || ( capabilities.isWebGL2 && extensions.has( 'EXT_color_buffer_float' ) ) );\n\n\t\t\t\tif ( textureType !== UnsignedByteType && utils.convert( textureType ) !== _gl.getParameter( 35738 ) && // Edge and Chrome Mac < 52 (#9513)\n\t\t\t\t\t! ( textureType === FloatType && ( capabilities.isWebGL2 || extensions.has( 'OES_texture_float' ) || extensions.has( 'WEBGL_color_buffer_float' ) ) ) && // Chrome Mac >= 52 and Firefox\n\t\t\t\t\t! halfFloatSupportedByExt ) {\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\t// restore framebuffer of current render target if necessary\n\n\t\t\t\tconst framebuffer = ( _currentRenderTarget !== null ) ? properties.get( _currentRenderTarget ).__webglFramebuffer : null;\n\t\t\t\tstate.bindFramebuffer( 36160, framebuffer );\n\n\t\t\t}\n\n\t\t}\n\n\t};\n\n\tthis.copyFramebufferToTexture = function ( position, texture, 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 = 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.copyTextureToTexture3D = function ( sourceBox, position, srcTexture, dstTexture, level = 0 ) {\n\n\t\tif ( _this.isWebGL1Renderer ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer.copyTextureToTexture3D: can only be used with WebGL2.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tconst { width, height, data } = srcTexture.image;\n\t\tconst glFormat = utils.convert( dstTexture.format );\n\t\tconst glType = utils.convert( dstTexture.type );\n\t\tlet glTarget;\n\n\t\tif ( dstTexture.isDataTexture3D ) {\n\n\t\t\ttextures.setTexture3D( dstTexture, 0 );\n\t\t\tglTarget = 32879;\n\n\t\t} else if ( dstTexture.isDataTexture2DArray ) {\n\n\t\t\ttextures.setTexture2DArray( dstTexture, 0 );\n\t\t\tglTarget = 35866;\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer.copyTextureToTexture3D: only supports THREE.DataTexture3D and THREE.DataTexture2DArray.' );\n\t\t\treturn;\n\n\t\t}\n\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\tconst unpackRowLen = _gl.getParameter( 3314 );\n\t\tconst unpackImageHeight = _gl.getParameter( 32878 );\n\t\tconst unpackSkipPixels = _gl.getParameter( 3316 );\n\t\tconst unpackSkipRows = _gl.getParameter( 3315 );\n\t\tconst unpackSkipImages = _gl.getParameter( 32877 );\n\n\t\t_gl.pixelStorei( 3314, width );\n\t\t_gl.pixelStorei( 32878, height );\n\t\t_gl.pixelStorei( 3316, sourceBox.min.x );\n\t\t_gl.pixelStorei( 3315, sourceBox.min.y );\n\t\t_gl.pixelStorei( 32877, sourceBox.min.z );\n\n\t\t_gl.texSubImage3D(\n\t\t\tglTarget,\n\t\t\tlevel,\n\t\t\tposition.x,\n\t\t\tposition.y,\n\t\t\tposition.z,\n\t\t\tsourceBox.max.x - sourceBox.min.x + 1,\n\t\t\tsourceBox.max.y - sourceBox.min.y + 1,\n\t\t\tsourceBox.max.z - sourceBox.min.z + 1,\n\t\t\tglFormat,\n\t\t\tglType,\n\t\t\tdata\n\t\t);\n\n\t\t_gl.pixelStorei( 3314, unpackRowLen );\n\t\t_gl.pixelStorei( 32878, unpackImageHeight );\n\t\t_gl.pixelStorei( 3316, unpackSkipPixels );\n\t\t_gl.pixelStorei( 3315, unpackSkipRows );\n\t\t_gl.pixelStorei( 32877, unpackSkipImages );\n\n\t\t// Generate mipmaps only when copying level 0\n\t\tif ( level === 0 && dstTexture.generateMipmaps ) _gl.generateMipmap( glTarget );\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\tthis.resetState = function () {\n\n\t\t_currentActiveCubeFace = 0;\n\t\t_currentActiveMipmapLevel = 0;\n\t\t_currentRenderTarget = null;\n\n\t\tstate.reset();\n\t\tbindingStates.reset();\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\nclass WebGL1Renderer extends WebGLRenderer {}\n\nWebGL1Renderer.prototype.isWebGL1Renderer = true;\n\nclass FogExp2 {\n\n\tconstructor( color, density = 0.00025 ) {\n\n\t\tthis.name = '';\n\n\t\tthis.color = new Color( color );\n\t\tthis.density = density;\n\n\t}\n\n\tclone() {\n\n\t\treturn new FogExp2( this.color, this.density );\n\n\t}\n\n\ttoJSON( /* 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\nFogExp2.prototype.isFogExp2 = true;\n\nclass Fog {\n\n\tconstructor( color, near = 1, far = 1000 ) {\n\n\t\tthis.name = '';\n\n\t\tthis.color = new Color( color );\n\n\t\tthis.near = near;\n\t\tthis.far = far;\n\n\t}\n\n\tclone() {\n\n\t\treturn new Fog( this.color, this.near, this.far );\n\n\t}\n\n\ttoJSON( /* 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\nFog.prototype.isFog = true;\n\nclass Scene extends Object3D {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.type = 'Scene';\n\n\t\tthis.background = null;\n\t\tthis.environment = null;\n\t\tthis.fog = null;\n\n\t\tthis.overrideMaterial = null;\n\n\t\tthis.autoUpdate = true; // checked by the renderer\n\n\t\tif ( typeof __THREE_DEVTOOLS__ !== 'undefined' ) {\n\n\t\t\t__THREE_DEVTOOLS__.dispatchEvent( new CustomEvent( 'observe', { detail: this } ) ); // eslint-disable-line no-undef\n\n\t\t}\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( 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( meta ) {\n\n\t\tconst data = super.toJSON( 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}\n\nScene.prototype.isScene = true;\n\nclass InterleavedBuffer {\n\n\tconstructor( array, stride ) {\n\n\t\tthis.array = array;\n\t\tthis.stride = stride;\n\t\tthis.count = array !== undefined ? array.length / stride : 0;\n\n\t\tthis.usage = StaticDrawUsage;\n\t\tthis.updateRange = { offset: 0, count: - 1 };\n\n\t\tthis.version = 0;\n\n\t\tthis.uuid = generateUUID();\n\n\t\tthis.onUploadCallback = function () {};\n\n\t}\n\n\tset needsUpdate( value ) {\n\n\t\tif ( value === true ) this.version ++;\n\n\t}\n\n\tsetUsage( value ) {\n\n\t\tthis.usage = value;\n\n\t\treturn this;\n\n\t}\n\n\tcopy( 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( 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( value, offset = 0 ) {\n\n\t\tthis.array.set( value, offset );\n\n\t\treturn this;\n\n\t}\n\n\tclone( 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 = 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( callback ) {\n\n\t\tthis.onUploadCallback = callback;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON( 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 = 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\nInterleavedBuffer.prototype.isInterleavedBuffer = true;\n\nconst _vector$6 = new /*@__PURE__*/ Vector3();\n\nclass InterleavedBufferAttribute {\n\n\tconstructor( interleavedBuffer, itemSize, offset, normalized ) {\n\n\t\tthis.name = '';\n\n\t\tthis.data = interleavedBuffer;\n\t\tthis.itemSize = itemSize;\n\t\tthis.offset = offset;\n\n\t\tthis.normalized = normalized === true;\n\n\t}\n\n\tget count() {\n\n\t\treturn this.data.count;\n\n\t}\n\n\tget array() {\n\n\t\treturn this.data.array;\n\n\t}\n\n\tset needsUpdate( value ) {\n\n\t\tthis.data.needsUpdate = value;\n\n\t}\n\n\tapplyMatrix4( 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\tapplyNormalMatrix( m ) {\n\n\t\tfor ( let i = 0, l = this.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.applyNormalMatrix( 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\ttransformDirection( m ) {\n\n\t\tfor ( let i = 0, l = this.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.transformDirection( 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( 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( 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( 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( 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( index ) {\n\n\t\treturn this.data.array[ index * this.data.stride + this.offset ];\n\n\t}\n\n\tgetY( index ) {\n\n\t\treturn this.data.array[ index * this.data.stride + this.offset + 1 ];\n\n\t}\n\n\tgetZ( index ) {\n\n\t\treturn this.data.array[ index * this.data.stride + this.offset + 2 ];\n\n\t}\n\n\tgetW( index ) {\n\n\t\treturn this.data.array[ index * this.data.stride + this.offset + 3 ];\n\n\t}\n\n\tsetXY( 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( 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( 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( 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( 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\nInterleavedBufferAttribute.prototype.isInterleavedBufferAttribute = true;\n\n/**\n * parameters = {\n *  color: <hex>,\n *  map: new THREE.Texture( <Image> ),\n *  alphaMap: new THREE.Texture( <Image> ),\n *  rotation: <float>,\n *  sizeAttenuation: <bool>\n * }\n */\n\nclass SpriteMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'SpriteMaterial';\n\n\t\tthis.color = new Color( 0xffffff );\n\n\t\tthis.map = null;\n\n\t\tthis.alphaMap = null;\n\n\t\tthis.rotation = 0;\n\n\t\tthis.sizeAttenuation = true;\n\n\t\tthis.transparent = true;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.color.copy( source.color );\n\n\t\tthis.map = source.map;\n\n\t\tthis.alphaMap = source.alphaMap;\n\n\t\tthis.rotation = source.rotation;\n\n\t\tthis.sizeAttenuation = source.sizeAttenuation;\n\n\t\treturn this;\n\n\t}\n\n}\n\nSpriteMaterial.prototype.isSpriteMaterial = true;\n\nlet _geometry;\n\nconst _intersectPoint = /*@__PURE__*/ new Vector3();\nconst _worldScale = /*@__PURE__*/ new Vector3();\nconst _mvPosition = /*@__PURE__*/ new Vector3();\n\nconst _alignedPosition = /*@__PURE__*/ new Vector2();\nconst _rotatedPosition = /*@__PURE__*/ new Vector2();\nconst _viewWorldMatrix = /*@__PURE__*/ new Matrix4();\n\nconst _vA = /*@__PURE__*/ new Vector3();\nconst _vB = /*@__PURE__*/ new Vector3();\nconst _vC = /*@__PURE__*/ new Vector3();\n\nconst _uvA = /*@__PURE__*/ new Vector2();\nconst _uvB = /*@__PURE__*/ new Vector2();\nconst _uvC = /*@__PURE__*/ new Vector2();\n\nclass Sprite extends Object3D {\n\n\tconstructor( material ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'Sprite';\n\n\t\tif ( _geometry === undefined ) {\n\n\t\t\t_geometry = new BufferGeometry();\n\n\t\t\tconst float32Array = new Float32Array( [\n\t\t\t\t- 0.5, - 0.5, 0, 0, 0,\n\t\t\t\t0.5, - 0.5, 0, 1, 0,\n\t\t\t\t0.5, 0.5, 0, 1, 1,\n\t\t\t\t- 0.5, 0.5, 0, 0, 1\n\t\t\t] );\n\n\t\t\tconst interleavedBuffer = new InterleavedBuffer( float32Array, 5 );\n\n\t\t\t_geometry.setIndex( [ 0, 1, 2,\t0, 2, 3 ] );\n\t\t\t_geometry.setAttribute( 'position', new InterleavedBufferAttribute( interleavedBuffer, 3, 0, false ) );\n\t\t\t_geometry.setAttribute( 'uv', new InterleavedBufferAttribute( interleavedBuffer, 2, 3, false ) );\n\n\t\t}\n\n\t\tthis.geometry = _geometry;\n\t\tthis.material = ( material !== undefined ) ? material : new SpriteMaterial();\n\n\t\tthis.center = new Vector2( 0.5, 0.5 );\n\n\t}\n\n\traycast( 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.set( - 0.5, - 0.5, 0 ), _mvPosition, center, _worldScale, sin, cos );\n\t\ttransformVertex( _vB.set( 0.5, - 0.5, 0 ), _mvPosition, center, _worldScale, sin, cos );\n\t\ttransformVertex( _vC.set( 0.5, 0.5, 0 ), _mvPosition, center, _worldScale, sin, cos );\n\n\t\t_uvA.set( 0, 0 );\n\t\t_uvB.set( 1, 0 );\n\t\t_uvC.set( 1, 1 );\n\n\t\t// check first triangle\n\t\tlet intersect = raycaster.ray.intersectTriangle( _vA, _vB, _vC, false, _intersectPoint );\n\n\t\tif ( intersect === null ) {\n\n\t\t\t// check second triangle\n\t\t\ttransformVertex( _vB.set( - 0.5, 0.5, 0 ), _mvPosition, center, _worldScale, sin, cos );\n\t\t\t_uvB.set( 0, 1 );\n\n\t\t\tintersect = raycaster.ray.intersectTriangle( _vA, _vC, _vB, 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, _vB, _vC, _uvA, _uvB, _uvC, new Vector2() ),\n\t\t\tface: null,\n\t\t\tobject: this\n\n\t\t} );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( 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\nSprite.prototype.isSprite = true;\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$2 = /*@__PURE__*/ new Vector3();\nconst _v2$1 = /*@__PURE__*/ new Vector3();\n\nclass LOD extends Object3D {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis._currentLevel = 0;\n\n\t\tthis.type = 'LOD';\n\n\t\tObject.defineProperties( this, {\n\t\t\tlevels: {\n\t\t\t\tenumerable: true,\n\t\t\t\tvalue: []\n\t\t\t},\n\t\t\tisLOD: {\n\t\t\t\tvalue: true,\n\t\t\t}\n\t\t} );\n\n\t\tthis.autoUpdate = true;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( 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( object, 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() {\n\n\t\treturn this._currentLevel;\n\n\t}\n\n\tgetObjectForDistance( 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( raycaster, intersects ) {\n\n\t\tconst levels = this.levels;\n\n\t\tif ( levels.length > 0 ) {\n\n\t\t\t_v1$2.setFromMatrixPosition( this.matrixWorld );\n\n\t\t\tconst distance = raycaster.ray.origin.distanceTo( _v1$2 );\n\n\t\t\tthis.getObjectForDistance( distance ).raycast( raycaster, intersects );\n\n\t\t}\n\n\t}\n\n\tupdate( camera ) {\n\n\t\tconst levels = this.levels;\n\n\t\tif ( levels.length > 1 ) {\n\n\t\t\t_v1$2.setFromMatrixPosition( camera.matrixWorld );\n\t\t\t_v2$1.setFromMatrixPosition( this.matrixWorld );\n\n\t\t\tconst distance = _v1$2.distanceTo( _v2$1 ) / 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( meta ) {\n\n\t\tconst data = super.toJSON( 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\nconst _basePosition = /*@__PURE__*/ new Vector3();\n\nconst _skinIndex = /*@__PURE__*/ new Vector4();\nconst _skinWeight = /*@__PURE__*/ new Vector4();\n\nconst _vector$5 = /*@__PURE__*/ new Vector3();\nconst _matrix = /*@__PURE__*/ new Matrix4();\n\nclass SkinnedMesh extends Mesh {\n\n\tconstructor( geometry, material ) {\n\n\t\tsuper( geometry, material );\n\n\t\tthis.type = 'SkinnedMesh';\n\n\t\tthis.bindMode = 'attached';\n\t\tthis.bindMatrix = new Matrix4();\n\t\tthis.bindMatrixInverse = new Matrix4();\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( 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( 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.copy( bindMatrix ).invert();\n\n\t}\n\n\tpose() {\n\n\t\tthis.skeleton.pose();\n\n\t}\n\n\tnormalizeSkinWeights() {\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( force ) {\n\n\t\tsuper.updateMatrixWorld( force );\n\n\t\tif ( this.bindMode === 'attached' ) {\n\n\t\t\tthis.bindMatrixInverse.copy( this.matrixWorld ).invert();\n\n\t\t} else if ( this.bindMode === 'detached' ) {\n\n\t\t\tthis.bindMatrixInverse.copy( this.bindMatrix ).invert();\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( index, target ) {\n\n\t\tconst skeleton = this.skeleton;\n\t\tconst geometry = this.geometry;\n\n\t\t_skinIndex.fromBufferAttribute( geometry.attributes.skinIndex, index );\n\t\t_skinWeight.fromBufferAttribute( geometry.attributes.skinWeight, index );\n\n\t\t_basePosition.fromBufferAttribute( geometry.attributes.position, index ).applyMatrix4( this.bindMatrix );\n\n\t\ttarget.set( 0, 0, 0 );\n\n\t\tfor ( let i = 0; i < 4; i ++ ) {\n\n\t\t\tconst weight = _skinWeight.getComponent( i );\n\n\t\t\tif ( weight !== 0 ) {\n\n\t\t\t\tconst boneIndex = _skinIndex.getComponent( i );\n\n\t\t\t\t_matrix.multiplyMatrices( skeleton.bones[ boneIndex ].matrixWorld, skeleton.boneInverses[ boneIndex ] );\n\n\t\t\t\ttarget.addScaledVector( _vector$5.copy( _basePosition ).applyMatrix4( _matrix ), weight );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn target.applyMatrix4( this.bindMatrixInverse );\n\n\t}\n\n}\n\nSkinnedMesh.prototype.isSkinnedMesh = true;\n\nclass Bone extends Object3D {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.type = 'Bone';\n\n\t}\n\n}\n\nBone.prototype.isBone = true;\n\nconst _offsetMatrix = /*@__PURE__*/ new Matrix4();\nconst _identityMatrix = /*@__PURE__*/ new Matrix4();\n\nclass Skeleton {\n\n\tconstructor( bones = [], boneInverses = [] ) {\n\n\t\tthis.uuid = generateUUID();\n\n\t\tthis.bones = bones.slice( 0 );\n\t\tthis.boneInverses = boneInverses;\n\t\tthis.boneMatrices = null;\n\n\t\tthis.boneTexture = null;\n\t\tthis.boneTextureSize = 0;\n\n\t\tthis.frame = - 1;\n\n\t\tthis.init();\n\n\t}\n\n\tinit() {\n\n\t\tconst bones = this.bones;\n\t\tconst boneInverses = this.boneInverses;\n\n\t\tthis.boneMatrices = new Float32Array( bones.length * 16 );\n\n\t\t// calculate inverse bone matrices if necessary\n\n\t\tif ( boneInverses.length === 0 ) {\n\n\t\t\tthis.calculateInverses();\n\n\t\t} else {\n\n\t\t\t// handle special case\n\n\t\t\tif ( bones.length !== boneInverses.length ) {\n\n\t\t\t\tconsole.warn( 'THREE.Skeleton: Number of inverse bone matrices does not match amount of bones.' );\n\n\t\t\t\tthis.boneInverses = [];\n\n\t\t\t\tfor ( let i = 0, il = this.bones.length; i < il; i ++ ) {\n\n\t\t\t\t\tthis.boneInverses.push( new Matrix4() );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tcalculateInverses() {\n\n\t\tthis.boneInverses.length = 0;\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.copy( this.bones[ i ].matrixWorld ).invert();\n\n\t\t\t}\n\n\t\t\tthis.boneInverses.push( inverse );\n\n\t\t}\n\n\t}\n\n\tpose() {\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.copy( this.boneInverses[ i ] ).invert();\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.copy( bone.parent.matrixWorld ).invert();\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() {\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 !== null ) {\n\n\t\t\tboneTexture.needsUpdate = true;\n\n\t\t}\n\n\t}\n\n\tclone() {\n\n\t\treturn new Skeleton( this.bones, this.boneInverses );\n\n\t}\n\n\tgetBoneByName( 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( ) {\n\n\t\tif ( this.boneTexture !== null ) {\n\n\t\t\tthis.boneTexture.dispose();\n\n\t\t\tthis.boneTexture = null;\n\n\t\t}\n\n\t}\n\n\tfromJSON( json, bones ) {\n\n\t\tthis.uuid = json.uuid;\n\n\t\tfor ( let i = 0, l = json.bones.length; i < l; i ++ ) {\n\n\t\t\tconst uuid = json.bones[ i ];\n\t\t\tlet bone = bones[ uuid ];\n\n\t\t\tif ( bone === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Skeleton: No bone found with UUID:', uuid );\n\t\t\t\tbone = new Bone();\n\n\t\t\t}\n\n\t\t\tthis.bones.push( bone );\n\t\t\tthis.boneInverses.push( new Matrix4().fromArray( json.boneInverses[ i ] ) );\n\n\t\t}\n\n\t\tthis.init();\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = {\n\t\t\tmetadata: {\n\t\t\t\tversion: 4.5,\n\t\t\t\ttype: 'Skeleton',\n\t\t\t\tgenerator: 'Skeleton.toJSON'\n\t\t\t},\n\t\t\tbones: [],\n\t\t\tboneInverses: []\n\t\t};\n\n\t\tdata.uuid = this.uuid;\n\n\t\tconst bones = this.bones;\n\t\tconst boneInverses = this.boneInverses;\n\n\t\tfor ( let i = 0, l = bones.length; i < l; i ++ ) {\n\n\t\t\tconst bone = bones[ i ];\n\t\t\tdata.bones.push( bone.uuid );\n\n\t\t\tconst boneInverse = boneInverses[ i ];\n\t\t\tdata.boneInverses.push( boneInverse.toArray() );\n\n\t\t}\n\n\t\treturn data;\n\n\t}\n\n}\n\nconst _instanceLocalMatrix = /*@__PURE__*/ new Matrix4();\nconst _instanceWorldMatrix = /*@__PURE__*/ new Matrix4();\n\nconst _instanceIntersects = [];\n\nconst _mesh = /*@__PURE__*/ new Mesh();\n\nclass InstancedMesh extends Mesh {\n\n\tconstructor( geometry, material, count ) {\n\n\t\tsuper( geometry, material );\n\n\t\tthis.instanceMatrix = new BufferAttribute( new Float32Array( count * 16 ), 16 );\n\t\tthis.instanceColor = null;\n\n\t\tthis.count = count;\n\n\t\tthis.frustumCulled = false;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.instanceMatrix.copy( source.instanceMatrix );\n\n\t\tif ( source.instanceColor !== null ) this.instanceColor = source.instanceColor.clone();\n\n\t\tthis.count = source.count;\n\n\t\treturn this;\n\n\t}\n\n\tgetColorAt( index, color ) {\n\n\t\tcolor.fromArray( this.instanceColor.array, index * 3 );\n\n\t}\n\n\tgetMatrixAt( index, matrix ) {\n\n\t\tmatrix.fromArray( this.instanceMatrix.array, index * 16 );\n\n\t}\n\n\traycast( 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\tsetColorAt( index, color ) {\n\n\t\tif ( this.instanceColor === null ) {\n\n\t\t\tthis.instanceColor = new BufferAttribute( new Float32Array( this.count * 3 ), 3 );\n\n\t\t}\n\n\t\tcolor.toArray( this.instanceColor.array, index * 3 );\n\n\t}\n\n\tsetMatrixAt( index, matrix ) {\n\n\t\tmatrix.toArray( this.instanceMatrix.array, index * 16 );\n\n\t}\n\n\tupdateMorphTargets() {\n\n\t}\n\n\tdispose() {\n\n\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t}\n\n}\n\nInstancedMesh.prototype.isInstancedMesh = true;\n\n/**\n * parameters = {\n *  color: <hex>,\n *  opacity: <float>,\n *\n *  linewidth: <float>,\n *  linecap: \"round\",\n *  linejoin: \"round\"\n * }\n */\n\nclass LineBasicMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'LineBasicMaterial';\n\n\t\tthis.color = new Color( 0xffffff );\n\n\t\tthis.linewidth = 1;\n\t\tthis.linecap = 'round';\n\t\tthis.linejoin = 'round';\n\n\t\tthis.morphTargets = false;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.color.copy( source.color );\n\n\t\tthis.linewidth = source.linewidth;\n\t\tthis.linecap = source.linecap;\n\t\tthis.linejoin = source.linejoin;\n\n\t\tthis.morphTargets = source.morphTargets;\n\n\t\treturn this;\n\n\t}\n\n}\n\nLineBasicMaterial.prototype.isLineBasicMaterial = true;\n\nconst _start$1 = /*@__PURE__*/ new Vector3();\nconst _end$1 = /*@__PURE__*/ new Vector3();\nconst _inverseMatrix$1 = /*@__PURE__*/ new Matrix4();\nconst _ray$1 = /*@__PURE__*/ new Ray();\nconst _sphere$1 = /*@__PURE__*/ new Sphere();\n\nclass Line extends Object3D {\n\n\tconstructor( geometry = new BufferGeometry(), material = new LineBasicMaterial() ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'Line';\n\n\t\tthis.geometry = geometry;\n\t\tthis.material = material;\n\n\t\tthis.updateMorphTargets();\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( 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() {\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$1.fromBufferAttribute( positionAttribute, i - 1 );\n\t\t\t\t\t_end$1.fromBufferAttribute( positionAttribute, i );\n\n\t\t\t\t\tlineDistances[ i ] = lineDistances[ i - 1 ];\n\t\t\t\t\tlineDistances[ 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.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\tconsole.error( 'THREE.Line.computeLineDistances() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.' );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\traycast( raycaster, intersects ) {\n\n\t\tconst geometry = this.geometry;\n\t\tconst matrixWorld = this.matrixWorld;\n\t\tconst threshold = raycaster.params.Line.threshold;\n\t\tconst drawRange = geometry.drawRange;\n\n\t\t// Checking boundingSphere distance to ray\n\n\t\tif ( geometry.boundingSphere === null ) geometry.computeBoundingSphere();\n\n\t\t_sphere$1.copy( geometry.boundingSphere );\n\t\t_sphere$1.applyMatrix4( matrixWorld );\n\t\t_sphere$1.radius += threshold;\n\n\t\tif ( raycaster.ray.intersectsSphere( _sphere$1 ) === false ) return;\n\n\t\t//\n\n\t\t_inverseMatrix$1.copy( matrixWorld ).invert();\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.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 positionAttribute = attributes.position;\n\n\t\t\tif ( index !== null ) {\n\n\t\t\t\tconst start = Math.max( 0, drawRange.start );\n\t\t\t\tconst end = Math.min( index.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\t\tfor ( let i = start, l = end - 1; i < l; i += step ) {\n\n\t\t\t\t\tconst a = index.getX( i );\n\t\t\t\t\tconst b = index.getX( i + 1 );\n\n\t\t\t\t\tvStart.fromBufferAttribute( positionAttribute, a );\n\t\t\t\t\tvEnd.fromBufferAttribute( positionAttribute, b );\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\tconst start = Math.max( 0, drawRange.start );\n\t\t\t\tconst end = Math.min( positionAttribute.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\t\tfor ( let i = start, l = end - 1; i < l; i += step ) {\n\n\t\t\t\t\tvStart.fromBufferAttribute( positionAttribute, i );\n\t\t\t\t\tvEnd.fromBufferAttribute( positionAttribute, i + 1 );\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\tconsole.error( 'THREE.Line.raycast() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.' );\n\n\t\t}\n\n\t}\n\n\tupdateMorphTargets() {\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\nLine.prototype.isLine = true;\n\nconst _start = /*@__PURE__*/ new Vector3();\nconst _end = /*@__PURE__*/ new Vector3();\n\nclass LineSegments extends Line {\n\n\tconstructor( geometry, material ) {\n\n\t\tsuper( geometry, material );\n\n\t\tthis.type = 'LineSegments';\n\n\t}\n\n\tcomputeLineDistances() {\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.fromBufferAttribute( positionAttribute, i );\n\t\t\t\t\t_end.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.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.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\tconsole.error( 'THREE.LineSegments.computeLineDistances() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.' );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n}\n\nLineSegments.prototype.isLineSegments = true;\n\nclass LineLoop extends Line {\n\n\tconstructor( geometry, material ) {\n\n\t\tsuper( geometry, material );\n\n\t\tthis.type = 'LineLoop';\n\n\t}\n\n}\n\nLineLoop.prototype.isLineLoop = true;\n\n/**\n * parameters = {\n *  color: <hex>,\n *  opacity: <float>,\n *  map: new THREE.Texture( <Image> ),\n *  alphaMap: new THREE.Texture( <Image> ),\n *\n *  size: <float>,\n *  sizeAttenuation: <bool>\n *\n *  morphTargets: <bool>\n * }\n */\n\nclass PointsMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'PointsMaterial';\n\n\t\tthis.color = new Color( 0xffffff );\n\n\t\tthis.map = null;\n\n\t\tthis.alphaMap = null;\n\n\t\tthis.size = 1;\n\t\tthis.sizeAttenuation = true;\n\n\t\tthis.morphTargets = false;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.color.copy( source.color );\n\n\t\tthis.map = source.map;\n\n\t\tthis.alphaMap = source.alphaMap;\n\n\t\tthis.size = source.size;\n\t\tthis.sizeAttenuation = source.sizeAttenuation;\n\n\t\tthis.morphTargets = source.morphTargets;\n\n\t\treturn this;\n\n\t}\n\n}\n\nPointsMaterial.prototype.isPointsMaterial = true;\n\nconst _inverseMatrix = /*@__PURE__*/ new Matrix4();\nconst _ray = /*@__PURE__*/ new Ray();\nconst _sphere = /*@__PURE__*/ new Sphere();\nconst _position$2 = /*@__PURE__*/ new Vector3();\n\nclass Points extends Object3D {\n\n\tconstructor( geometry = new BufferGeometry(), material = new PointsMaterial() ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'Points';\n\n\t\tthis.geometry = geometry;\n\t\tthis.material = material;\n\n\t\tthis.updateMorphTargets();\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( 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( raycaster, intersects ) {\n\n\t\tconst geometry = this.geometry;\n\t\tconst matrixWorld = this.matrixWorld;\n\t\tconst threshold = raycaster.params.Points.threshold;\n\t\tconst drawRange = geometry.drawRange;\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\t\t_sphere.radius += threshold;\n\n\t\tif ( raycaster.ray.intersectsSphere( _sphere ) === false ) return;\n\n\t\t//\n\n\t\t_inverseMatrix.copy( matrixWorld ).invert();\n\t\t_ray.copy( raycaster.ray ).applyMatrix4( _inverseMatrix );\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 positionAttribute = attributes.position;\n\n\t\t\tif ( index !== null ) {\n\n\t\t\t\tconst start = Math.max( 0, drawRange.start );\n\t\t\t\tconst end = Math.min( index.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\t\tfor ( let i = start, il = end; i < il; i ++ ) {\n\n\t\t\t\t\tconst a = index.getX( i );\n\n\t\t\t\t\t_position$2.fromBufferAttribute( positionAttribute, a );\n\n\t\t\t\t\ttestPoint( _position$2, a, localThresholdSq, matrixWorld, raycaster, intersects, this );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tconst start = Math.max( 0, drawRange.start );\n\t\t\t\tconst end = Math.min( positionAttribute.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\t\tfor ( let i = start, l = end; i < l; i ++ ) {\n\n\t\t\t\t\t_position$2.fromBufferAttribute( positionAttribute, i );\n\n\t\t\t\t\ttestPoint( _position$2, 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\tconsole.error( 'THREE.Points.raycast() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.' );\n\n\t\t}\n\n\t}\n\n\tupdateMorphTargets() {\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\nPoints.prototype.isPoints = true;\n\nfunction testPoint( point, index, localThresholdSq, matrixWorld, raycaster, intersects, object ) {\n\n\tconst rayPointDistanceSq = _ray.distanceSqToPoint( point );\n\n\tif ( rayPointDistanceSq < localThresholdSq ) {\n\n\t\tconst intersectPoint = new Vector3();\n\n\t\t_ray.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\nclass VideoTexture extends Texture {\n\n\tconstructor( video, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy ) {\n\n\t\tsuper( video, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy );\n\n\t\tthis.format = format !== undefined ? format : RGBFormat;\n\n\t\tthis.minFilter = minFilter !== undefined ? minFilter : LinearFilter;\n\t\tthis.magFilter = magFilter !== undefined ? magFilter : LinearFilter;\n\n\t\tthis.generateMipmaps = false;\n\n\t\tconst scope = this;\n\n\t\tfunction updateVideo() {\n\n\t\t\tscope.needsUpdate = true;\n\t\t\tvideo.requestVideoFrameCallback( updateVideo );\n\n\t\t}\n\n\t\tif ( 'requestVideoFrameCallback' in video ) {\n\n\t\t\tvideo.requestVideoFrameCallback( updateVideo );\n\n\t\t}\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor( this.image ).copy( this );\n\n\t}\n\n\tupdate() {\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\nVideoTexture.prototype.isVideoTexture = true;\n\nclass CompressedTexture extends Texture {\n\n\tconstructor( mipmaps, width, height, format, type, mapping, wrapS, wrapT, magFilter, minFilter, anisotropy, encoding ) {\n\n\t\tsuper( null, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding );\n\n\t\tthis.image = { width: width, height: height };\n\t\tthis.mipmaps = mipmaps;\n\n\t\t// no flipping for cube textures\n\t\t// (also flipping doesn't work for compressed textures )\n\n\t\tthis.flipY = false;\n\n\t\t// can't generate mipmaps for compressed textures\n\t\t// mips must be embedded in DDS files\n\n\t\tthis.generateMipmaps = false;\n\n\t}\n\n}\n\nCompressedTexture.prototype.isCompressedTexture = true;\n\nclass CanvasTexture extends Texture {\n\n\tconstructor( canvas, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy ) {\n\n\t\tsuper( canvas, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy );\n\n\t\tthis.needsUpdate = true;\n\n\t}\n\n}\n\nCanvasTexture.prototype.isCanvasTexture = true;\n\nclass DepthTexture extends Texture {\n\n\tconstructor( width, height, type, mapping, wrapS, wrapT, magFilter, minFilter, anisotropy, format ) {\n\n\t\tformat = format !== undefined ? format : DepthFormat;\n\n\t\tif ( format !== DepthFormat && format !== DepthStencilFormat ) {\n\n\t\t\tthrow new Error( 'DepthTexture format must be either THREE.DepthFormat or THREE.DepthStencilFormat' );\n\n\t\t}\n\n\t\tif ( type === undefined && format === DepthFormat ) type = UnsignedShortType;\n\t\tif ( type === undefined && format === DepthStencilFormat ) type = UnsignedInt248Type;\n\n\t\tsuper( null, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy );\n\n\t\tthis.image = { width: width, height: height };\n\n\t\tthis.magFilter = magFilter !== undefined ? magFilter : NearestFilter;\n\t\tthis.minFilter = minFilter !== undefined ? minFilter : NearestFilter;\n\n\t\tthis.flipY = false;\n\t\tthis.generateMipmaps\t= false;\n\n\t}\n\n\n}\n\nDepthTexture.prototype.isDepthTexture = true;\n\nclass CircleGeometry extends BufferGeometry {\n\n\tconstructor( radius = 1, segments = 8, thetaStart = 0, thetaLength = Math.PI * 2 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'CircleGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\tsegments: segments,\n\t\t\tthetaStart: thetaStart,\n\t\t\tthetaLength: thetaLength\n\t\t};\n\n\t\tsegments = Math.max( 3, segments );\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\tconst vertex = new Vector3();\n\t\tconst uv = new Vector2();\n\n\t\t// center point\n\n\t\tvertices.push( 0, 0, 0 );\n\t\tnormals.push( 0, 0, 1 );\n\t\tuvs.push( 0.5, 0.5 );\n\n\t\tfor ( let s = 0, i = 3; s <= segments; s ++, i += 3 ) {\n\n\t\t\tconst segment = thetaStart + s / segments * 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// uvs\n\n\t\t\tuv.x = ( vertices[ i ] / radius + 1 ) / 2;\n\t\t\tuv.y = ( vertices[ i + 1 ] / radius + 1 ) / 2;\n\n\t\t\tuvs.push( uv.x, uv.y );\n\n\t\t}\n\n\t\t// indices\n\n\t\tfor ( let i = 1; i <= segments; i ++ ) {\n\n\t\t\tindices.push( i, i + 1, 0 );\n\n\t\t}\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}\n\n}\n\nclass CylinderGeometry extends BufferGeometry {\n\n\tconstructor( radiusTop = 1, radiusBottom = 1, height = 1, radialSegments = 8, heightSegments = 1, openEnded = false, thetaStart = 0, thetaLength = Math.PI * 2 ) {\n\n\t\tsuper();\n\t\tthis.type = 'CylinderGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradiusTop: radiusTop,\n\t\t\tradiusBottom: radiusBottom,\n\t\t\theight: height,\n\t\t\tradialSegments: radialSegments,\n\t\t\theightSegments: heightSegments,\n\t\t\topenEnded: openEnded,\n\t\t\tthetaStart: thetaStart,\n\t\t\tthetaLength: thetaLength\n\t\t};\n\n\t\tconst scope = this;\n\n\t\tradialSegments = Math.floor( radialSegments );\n\t\theightSegments = Math.floor( heightSegments );\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 index = 0;\n\t\tconst indexArray = [];\n\t\tconst halfHeight = height / 2;\n\t\tlet groupStart = 0;\n\n\t\t// generate geometry\n\n\t\tgenerateTorso();\n\n\t\tif ( openEnded === false ) {\n\n\t\t\tif ( radiusTop > 0 ) generateCap( true );\n\t\t\tif ( radiusBottom > 0 ) generateCap( false );\n\n\t\t}\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 generateTorso() {\n\n\t\t\tconst normal = new Vector3();\n\t\t\tconst vertex = new Vector3();\n\n\t\t\tlet groupCount = 0;\n\n\t\t\t// this will be used to calculate the normal\n\t\t\tconst slope = ( radiusBottom - radiusTop ) / height;\n\n\t\t\t// generate vertices, normals and uvs\n\n\t\t\tfor ( let y = 0; y <= heightSegments; y ++ ) {\n\n\t\t\t\tconst indexRow = [];\n\n\t\t\t\tconst v = y / heightSegments;\n\n\t\t\t\t// calculate the radius of the current row\n\n\t\t\t\tconst radius = v * ( radiusBottom - radiusTop ) + radiusTop;\n\n\t\t\t\tfor ( let x = 0; x <= radialSegments; x ++ ) {\n\n\t\t\t\t\tconst u = x / radialSegments;\n\n\t\t\t\t\tconst theta = u * thetaLength + thetaStart;\n\n\t\t\t\t\tconst sinTheta = Math.sin( theta );\n\t\t\t\t\tconst cosTheta = Math.cos( theta );\n\n\t\t\t\t\t// vertex\n\n\t\t\t\t\tvertex.x = radius * sinTheta;\n\t\t\t\t\tvertex.y = - v * height + halfHeight;\n\t\t\t\t\tvertex.z = radius * cosTheta;\n\t\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t\t// normal\n\n\t\t\t\t\tnormal.set( sinTheta, slope, cosTheta ).normalize();\n\t\t\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\n\t\t\t\t\t// uv\n\n\t\t\t\t\tuvs.push( u, 1 - v );\n\n\t\t\t\t\t// save index of vertex in respective row\n\n\t\t\t\t\tindexRow.push( index ++ );\n\n\t\t\t\t}\n\n\t\t\t\t// now save vertices of the row in our index array\n\n\t\t\t\tindexArray.push( indexRow );\n\n\t\t\t}\n\n\t\t\t// generate indices\n\n\t\t\tfor ( let x = 0; x < radialSegments; x ++ ) {\n\n\t\t\t\tfor ( let y = 0; y < heightSegments; y ++ ) {\n\n\t\t\t\t\t// we use the index array to access the correct indices\n\n\t\t\t\t\tconst a = indexArray[ y ][ x ];\n\t\t\t\t\tconst b = indexArray[ y + 1 ][ x ];\n\t\t\t\t\tconst c = indexArray[ y + 1 ][ x + 1 ];\n\t\t\t\t\tconst d = indexArray[ y ][ x + 1 ];\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// update group 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, 0 );\n\n\t\t\t// calculate new start value for groups\n\n\t\t\tgroupStart += groupCount;\n\n\t\t}\n\n\t\tfunction generateCap( top ) {\n\n\t\t\t// save the index of the first center vertex\n\t\t\tconst centerIndexStart = index;\n\n\t\t\tconst uv = new Vector2();\n\t\t\tconst vertex = new Vector3();\n\n\t\t\tlet groupCount = 0;\n\n\t\t\tconst radius = ( top === true ) ? radiusTop : radiusBottom;\n\t\t\tconst sign = ( top === true ) ? 1 : - 1;\n\n\t\t\t// first we generate the center vertex data of the cap.\n\t\t\t// because the geometry needs one set of uvs per face,\n\t\t\t// we must generate a center vertex per face/segment\n\n\t\t\tfor ( let x = 1; x <= radialSegments; x ++ ) {\n\n\t\t\t\t// vertex\n\n\t\t\t\tvertices.push( 0, halfHeight * sign, 0 );\n\n\t\t\t\t// normal\n\n\t\t\t\tnormals.push( 0, sign, 0 );\n\n\t\t\t\t// uv\n\n\t\t\t\tuvs.push( 0.5, 0.5 );\n\n\t\t\t\t// increase index\n\n\t\t\t\tindex ++;\n\n\t\t\t}\n\n\t\t\t// save the index of the last center vertex\n\t\t\tconst centerIndexEnd = index;\n\n\t\t\t// now we generate the surrounding vertices, normals and uvs\n\n\t\t\tfor ( let x = 0; x <= radialSegments; x ++ ) {\n\n\t\t\t\tconst u = x / radialSegments;\n\t\t\t\tconst theta = u * thetaLength + thetaStart;\n\n\t\t\t\tconst cosTheta = Math.cos( theta );\n\t\t\t\tconst sinTheta = Math.sin( theta );\n\n\t\t\t\t// vertex\n\n\t\t\t\tvertex.x = radius * sinTheta;\n\t\t\t\tvertex.y = halfHeight * sign;\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\tnormals.push( 0, sign, 0 );\n\n\t\t\t\t// uv\n\n\t\t\t\tuv.x = ( cosTheta * 0.5 ) + 0.5;\n\t\t\t\tuv.y = ( sinTheta * 0.5 * sign ) + 0.5;\n\t\t\t\tuvs.push( uv.x, uv.y );\n\n\t\t\t\t// increase index\n\n\t\t\t\tindex ++;\n\n\t\t\t}\n\n\t\t\t// generate indices\n\n\t\t\tfor ( let x = 0; x < radialSegments; x ++ ) {\n\n\t\t\t\tconst c = centerIndexStart + x;\n\t\t\t\tconst i = centerIndexEnd + x;\n\n\t\t\t\tif ( top === true ) {\n\n\t\t\t\t\t// face top\n\n\t\t\t\t\tindices.push( i, i + 1, c );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// face bottom\n\n\t\t\t\t\tindices.push( i + 1, i, c );\n\n\t\t\t\t}\n\n\t\t\t\tgroupCount += 3;\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, top === true ? 1 : 2 );\n\n\t\t\t// calculate new start value for groups\n\n\t\t\tgroupStart += groupCount;\n\n\t\t}\n\n\t}\n\n}\n\nclass ConeGeometry extends CylinderGeometry {\n\n\tconstructor( radius = 1, height = 1, radialSegments = 8, heightSegments = 1, openEnded = false, thetaStart = 0, thetaLength = Math.PI * 2 ) {\n\n\t\tsuper( 0, radius, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength );\n\n\t\tthis.type = 'ConeGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\theight: height,\n\t\t\tradialSegments: radialSegments,\n\t\t\theightSegments: heightSegments,\n\t\t\topenEnded: openEnded,\n\t\t\tthetaStart: thetaStart,\n\t\t\tthetaLength: thetaLength\n\t\t};\n\n\t}\n\n}\n\nclass PolyhedronGeometry extends BufferGeometry {\n\n\tconstructor( vertices, indices, radius = 1, detail = 0 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'PolyhedronGeometry';\n\n\t\tthis.parameters = {\n\t\t\tvertices: vertices,\n\t\t\tindices: indices,\n\t\t\tradius: radius,\n\t\t\tdetail: detail\n\t\t};\n\n\t\t// default buffer data\n\n\t\tconst vertexBuffer = [];\n\t\tconst uvBuffer = [];\n\n\t\t// the subdivision creates the vertex buffer data\n\n\t\tsubdivide( detail );\n\n\t\t// all vertices should lie on a conceptual sphere with a given radius\n\n\t\tapplyRadius( radius );\n\n\t\t// finally, create the uv data\n\n\t\tgenerateUVs();\n\n\t\t// build non-indexed geometry\n\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertexBuffer, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( vertexBuffer.slice(), 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvBuffer, 2 ) );\n\n\t\tif ( detail === 0 ) {\n\n\t\t\tthis.computeVertexNormals(); // flat normals\n\n\t\t} else {\n\n\t\t\tthis.normalizeNormals(); // smooth normals\n\n\t\t}\n\n\t\t// helper functions\n\n\t\tfunction subdivide( detail ) {\n\n\t\t\tconst a = new Vector3();\n\t\t\tconst b = new Vector3();\n\t\t\tconst c = new Vector3();\n\n\t\t\t// iterate over all faces and apply a subdivison with the given detail value\n\n\t\t\tfor ( let i = 0; i < indices.length; i += 3 ) {\n\n\t\t\t\t// get the vertices of the face\n\n\t\t\t\tgetVertexByIndex( indices[ i + 0 ], a );\n\t\t\t\tgetVertexByIndex( indices[ i + 1 ], b );\n\t\t\t\tgetVertexByIndex( indices[ i + 2 ], c );\n\n\t\t\t\t// perform subdivision\n\n\t\t\t\tsubdivideFace( a, b, c, detail );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction subdivideFace( a, b, c, detail ) {\n\n\t\t\tconst cols = detail + 1;\n\n\t\t\t// we use this multidimensional array as a data structure for creating the subdivision\n\n\t\t\tconst v = [];\n\n\t\t\t// construct all of the vertices for this subdivision\n\n\t\t\tfor ( let i = 0; i <= cols; i ++ ) {\n\n\t\t\t\tv[ i ] = [];\n\n\t\t\t\tconst aj = a.clone().lerp( c, i / cols );\n\t\t\t\tconst bj = b.clone().lerp( c, i / cols );\n\n\t\t\t\tconst rows = cols - i;\n\n\t\t\t\tfor ( let j = 0; j <= rows; j ++ ) {\n\n\t\t\t\t\tif ( j === 0 && i === cols ) {\n\n\t\t\t\t\t\tv[ i ][ j ] = aj;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tv[ i ][ j ] = aj.clone().lerp( bj, j / rows );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// construct all of the faces\n\n\t\t\tfor ( let i = 0; i < cols; i ++ ) {\n\n\t\t\t\tfor ( let j = 0; j < 2 * ( cols - i ) - 1; j ++ ) {\n\n\t\t\t\t\tconst k = Math.floor( j / 2 );\n\n\t\t\t\t\tif ( j % 2 === 0 ) {\n\n\t\t\t\t\t\tpushVertex( v[ i ][ k + 1 ] );\n\t\t\t\t\t\tpushVertex( v[ i + 1 ][ k ] );\n\t\t\t\t\t\tpushVertex( v[ i ][ k ] );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tpushVertex( v[ i ][ k + 1 ] );\n\t\t\t\t\t\tpushVertex( v[ i + 1 ][ k + 1 ] );\n\t\t\t\t\t\tpushVertex( v[ i + 1 ][ 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\tfunction applyRadius( radius ) {\n\n\t\t\tconst vertex = new Vector3();\n\n\t\t\t// iterate over the entire buffer and apply the radius to each vertex\n\n\t\t\tfor ( let i = 0; i < vertexBuffer.length; i += 3 ) {\n\n\t\t\t\tvertex.x = vertexBuffer[ i + 0 ];\n\t\t\t\tvertex.y = vertexBuffer[ i + 1 ];\n\t\t\t\tvertex.z = vertexBuffer[ i + 2 ];\n\n\t\t\t\tvertex.normalize().multiplyScalar( radius );\n\n\t\t\t\tvertexBuffer[ i + 0 ] = vertex.x;\n\t\t\t\tvertexBuffer[ i + 1 ] = vertex.y;\n\t\t\t\tvertexBuffer[ i + 2 ] = vertex.z;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction generateUVs() {\n\n\t\t\tconst vertex = new Vector3();\n\n\t\t\tfor ( let i = 0; i < vertexBuffer.length; i += 3 ) {\n\n\t\t\t\tvertex.x = vertexBuffer[ i + 0 ];\n\t\t\t\tvertex.y = vertexBuffer[ i + 1 ];\n\t\t\t\tvertex.z = vertexBuffer[ i + 2 ];\n\n\t\t\t\tconst u = azimuth( vertex ) / 2 / Math.PI + 0.5;\n\t\t\t\tconst v = inclination( vertex ) / Math.PI + 0.5;\n\t\t\t\tuvBuffer.push( u, 1 - v );\n\n\t\t\t}\n\n\t\t\tcorrectUVs();\n\n\t\t\tcorrectSeam();\n\n\t\t}\n\n\t\tfunction correctSeam() {\n\n\t\t\t// handle case when face straddles the seam, see #3269\n\n\t\t\tfor ( let i = 0; i < uvBuffer.length; i += 6 ) {\n\n\t\t\t\t// uv data of a single face\n\n\t\t\t\tconst x0 = uvBuffer[ i + 0 ];\n\t\t\t\tconst x1 = uvBuffer[ i + 2 ];\n\t\t\t\tconst x2 = uvBuffer[ i + 4 ];\n\n\t\t\t\tconst max = Math.max( x0, x1, x2 );\n\t\t\t\tconst min = Math.min( x0, x1, x2 );\n\n\t\t\t\t// 0.9 is somewhat arbitrary\n\n\t\t\t\tif ( max > 0.9 && min < 0.1 ) {\n\n\t\t\t\t\tif ( x0 < 0.2 ) uvBuffer[ i + 0 ] += 1;\n\t\t\t\t\tif ( x1 < 0.2 ) uvBuffer[ i + 2 ] += 1;\n\t\t\t\t\tif ( x2 < 0.2 ) uvBuffer[ i + 4 ] += 1;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction pushVertex( vertex ) {\n\n\t\t\tvertexBuffer.push( vertex.x, vertex.y, vertex.z );\n\n\t\t}\n\n\t\tfunction getVertexByIndex( index, vertex ) {\n\n\t\t\tconst stride = index * 3;\n\n\t\t\tvertex.x = vertices[ stride + 0 ];\n\t\t\tvertex.y = vertices[ stride + 1 ];\n\t\t\tvertex.z = vertices[ stride + 2 ];\n\n\t\t}\n\n\t\tfunction correctUVs() {\n\n\t\t\tconst a = new Vector3();\n\t\t\tconst b = new Vector3();\n\t\t\tconst c = new Vector3();\n\n\t\t\tconst centroid = new Vector3();\n\n\t\t\tconst uvA = new Vector2();\n\t\t\tconst uvB = new Vector2();\n\t\t\tconst uvC = new Vector2();\n\n\t\t\tfor ( let i = 0, j = 0; i < vertexBuffer.length; i += 9, j += 6 ) {\n\n\t\t\t\ta.set( vertexBuffer[ i + 0 ], vertexBuffer[ i + 1 ], vertexBuffer[ i + 2 ] );\n\t\t\t\tb.set( vertexBuffer[ i + 3 ], vertexBuffer[ i + 4 ], vertexBuffer[ i + 5 ] );\n\t\t\t\tc.set( vertexBuffer[ i + 6 ], vertexBuffer[ i + 7 ], vertexBuffer[ i + 8 ] );\n\n\t\t\t\tuvA.set( uvBuffer[ j + 0 ], uvBuffer[ j + 1 ] );\n\t\t\t\tuvB.set( uvBuffer[ j + 2 ], uvBuffer[ j + 3 ] );\n\t\t\t\tuvC.set( uvBuffer[ j + 4 ], uvBuffer[ j + 5 ] );\n\n\t\t\t\tcentroid.copy( a ).add( b ).add( c ).divideScalar( 3 );\n\n\t\t\t\tconst azi = azimuth( centroid );\n\n\t\t\t\tcorrectUV( uvA, j + 0, a, azi );\n\t\t\t\tcorrectUV( uvB, j + 2, b, azi );\n\t\t\t\tcorrectUV( uvC, j + 4, c, azi );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction correctUV( uv, stride, vector, azimuth ) {\n\n\t\t\tif ( ( azimuth < 0 ) && ( uv.x === 1 ) ) {\n\n\t\t\t\tuvBuffer[ stride ] = uv.x - 1;\n\n\t\t\t}\n\n\t\t\tif ( ( vector.x === 0 ) && ( vector.z === 0 ) ) {\n\n\t\t\t\tuvBuffer[ stride ] = azimuth / 2 / Math.PI + 0.5;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Angle around the Y axis, counter-clockwise when looking from above.\n\n\t\tfunction azimuth( vector ) {\n\n\t\t\treturn Math.atan2( vector.z, - vector.x );\n\n\t\t}\n\n\n\t\t// Angle above the XZ plane.\n\n\t\tfunction inclination( vector ) {\n\n\t\t\treturn Math.atan2( - vector.y, Math.sqrt( ( vector.x * vector.x ) + ( vector.z * vector.z ) ) );\n\n\t\t}\n\n\t}\n\n}\n\nclass DodecahedronGeometry extends PolyhedronGeometry {\n\n\tconstructor( radius = 1, detail = 0 ) {\n\n\t\tconst t = ( 1 + Math.sqrt( 5 ) ) / 2;\n\t\tconst r = 1 / t;\n\n\t\tconst vertices = [\n\n\t\t\t// (±1, ±1, ±1)\n\t\t\t- 1, - 1, - 1,\t- 1, - 1, 1,\n\t\t\t- 1, 1, - 1, - 1, 1, 1,\n\t\t\t1, - 1, - 1, 1, - 1, 1,\n\t\t\t1, 1, - 1, 1, 1, 1,\n\n\t\t\t// (0, ±1/φ, ±φ)\n\t\t\t0, - r, - t, 0, - r, t,\n\t\t\t0, r, - t, 0, r, t,\n\n\t\t\t// (±1/φ, ±φ, 0)\n\t\t\t- r, - t, 0, - r, t, 0,\n\t\t\tr, - t, 0, r, t, 0,\n\n\t\t\t// (±φ, 0, ±1/φ)\n\t\t\t- t, 0, - r, t, 0, - r,\n\t\t\t- t, 0, r, t, 0, r\n\t\t];\n\n\t\tconst indices = [\n\t\t\t3, 11, 7, \t3, 7, 15, \t3, 15, 13,\n\t\t\t7, 19, 17, \t7, 17, 6, \t7, 6, 15,\n\t\t\t17, 4, 8, \t17, 8, 10, \t17, 10, 6,\n\t\t\t8, 0, 16, \t8, 16, 2, \t8, 2, 10,\n\t\t\t0, 12, 1, \t0, 1, 18, \t0, 18, 16,\n\t\t\t6, 10, 2, \t6, 2, 13, \t6, 13, 15,\n\t\t\t2, 16, 18, \t2, 18, 3, \t2, 3, 13,\n\t\t\t18, 1, 9, \t18, 9, 11, \t18, 11, 3,\n\t\t\t4, 14, 12, \t4, 12, 0, \t4, 0, 8,\n\t\t\t11, 9, 5, \t11, 5, 19, \t11, 19, 7,\n\t\t\t19, 5, 14, \t19, 14, 4, \t19, 4, 17,\n\t\t\t1, 12, 14, \t1, 14, 5, \t1, 5, 9\n\t\t];\n\n\t\tsuper( vertices, indices, radius, detail );\n\n\t\tthis.type = 'DodecahedronGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\tdetail: detail\n\t\t};\n\n\t}\n\n}\n\nconst _v0 = new Vector3();\nconst _v1$1 = new Vector3();\nconst _normal = new Vector3();\nconst _triangle = new Triangle();\n\nclass EdgesGeometry extends BufferGeometry {\n\n\tconstructor( geometry, thresholdAngle ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'EdgesGeometry';\n\n\t\tthis.parameters = {\n\t\t\tthresholdAngle: thresholdAngle\n\t\t};\n\n\t\tthresholdAngle = ( thresholdAngle !== undefined ) ? thresholdAngle : 1;\n\n\t\tif ( geometry.isGeometry === true ) {\n\n\t\t\tconsole.error( 'THREE.EdgesGeometry no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tconst precisionPoints = 4;\n\t\tconst precision = Math.pow( 10, precisionPoints );\n\t\tconst thresholdDot = Math.cos( DEG2RAD * thresholdAngle );\n\n\t\tconst indexAttr = geometry.getIndex();\n\t\tconst positionAttr = geometry.getAttribute( 'position' );\n\t\tconst indexCount = indexAttr ? indexAttr.count : positionAttr.count;\n\n\t\tconst indexArr = [ 0, 0, 0 ];\n\t\tconst vertKeys = [ 'a', 'b', 'c' ];\n\t\tconst hashes = new Array( 3 );\n\n\t\tconst edgeData = {};\n\t\tconst vertices = [];\n\t\tfor ( let i = 0; i < indexCount; i += 3 ) {\n\n\t\t\tif ( indexAttr ) {\n\n\t\t\t\tindexArr[ 0 ] = indexAttr.getX( i );\n\t\t\t\tindexArr[ 1 ] = indexAttr.getX( i + 1 );\n\t\t\t\tindexArr[ 2 ] = indexAttr.getX( i + 2 );\n\n\t\t\t} else {\n\n\t\t\t\tindexArr[ 0 ] = i;\n\t\t\t\tindexArr[ 1 ] = i + 1;\n\t\t\t\tindexArr[ 2 ] = i + 2;\n\n\t\t\t}\n\n\t\t\tconst { a, b, c } = _triangle;\n\t\t\ta.fromBufferAttribute( positionAttr, indexArr[ 0 ] );\n\t\t\tb.fromBufferAttribute( positionAttr, indexArr[ 1 ] );\n\t\t\tc.fromBufferAttribute( positionAttr, indexArr[ 2 ] );\n\t\t\t_triangle.getNormal( _normal );\n\n\t\t\t// create hashes for the edge from the vertices\n\t\t\thashes[ 0 ] = `${ Math.round( a.x * precision ) },${ Math.round( a.y * precision ) },${ Math.round( a.z * precision ) }`;\n\t\t\thashes[ 1 ] = `${ Math.round( b.x * precision ) },${ Math.round( b.y * precision ) },${ Math.round( b.z * precision ) }`;\n\t\t\thashes[ 2 ] = `${ Math.round( c.x * precision ) },${ Math.round( c.y * precision ) },${ Math.round( c.z * precision ) }`;\n\n\t\t\t// skip degenerate triangles\n\t\t\tif ( hashes[ 0 ] === hashes[ 1 ] || hashes[ 1 ] === hashes[ 2 ] || hashes[ 2 ] === hashes[ 0 ] ) {\n\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\t// iterate over every edge\n\t\t\tfor ( let j = 0; j < 3; j ++ ) {\n\n\t\t\t\t// get the first and next vertex making up the edge\n\t\t\t\tconst jNext = ( j + 1 ) % 3;\n\t\t\t\tconst vecHash0 = hashes[ j ];\n\t\t\t\tconst vecHash1 = hashes[ jNext ];\n\t\t\t\tconst v0 = _triangle[ vertKeys[ j ] ];\n\t\t\t\tconst v1 = _triangle[ vertKeys[ jNext ] ];\n\n\t\t\t\tconst hash = `${ vecHash0 }_${ vecHash1 }`;\n\t\t\t\tconst reverseHash = `${ vecHash1 }_${ vecHash0 }`;\n\n\t\t\t\tif ( reverseHash in edgeData && edgeData[ reverseHash ] ) {\n\n\t\t\t\t\t// if we found a sibling edge add it into the vertex array if\n\t\t\t\t\t// it meets the angle threshold and delete the edge from the map.\n\t\t\t\t\tif ( _normal.dot( edgeData[ reverseHash ].normal ) <= thresholdDot ) {\n\n\t\t\t\t\t\tvertices.push( v0.x, v0.y, v0.z );\n\t\t\t\t\t\tvertices.push( v1.x, v1.y, v1.z );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tedgeData[ reverseHash ] = null;\n\n\t\t\t\t} else if ( ! ( hash in edgeData ) ) {\n\n\t\t\t\t\t// if we've already got an edge here then skip adding a new one\n\t\t\t\t\tedgeData[ hash ] = {\n\n\t\t\t\t\t\tindex0: indexArr[ j ],\n\t\t\t\t\t\tindex1: indexArr[ jNext ],\n\t\t\t\t\t\tnormal: _normal.clone(),\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// iterate over all remaining, unmatched edges and add them to the vertex array\n\t\tfor ( const key in edgeData ) {\n\n\t\t\tif ( edgeData[ key ] ) {\n\n\t\t\t\tconst { index0, index1 } = edgeData[ key ];\n\t\t\t\t_v0.fromBufferAttribute( positionAttr, index0 );\n\t\t\t\t_v1$1.fromBufferAttribute( positionAttr, index1 );\n\n\t\t\t\tvertices.push( _v0.x, _v0.y, _v0.z );\n\t\t\t\tvertices.push( _v1$1.x, _v1$1.y, _v1$1.z );\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\n\t}\n\n}\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\tconst hasHoles = holeIndices && holeIndices.length;\n\t\tconst outerLen = hasHoles ? holeIndices[ 0 ] * dim : data.length;\n\t\tlet outerNode = linkedList( data, 0, outerLen, dim, true );\n\t\tconst triangles = [];\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\tconst 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\tconst 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\tconst 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\tconst 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\tconst 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\tconst queue = [];\n\tlet i, len, start, end, list;\n\n\tfor ( i = 0, len = holeIndices.length; i < len; i ++ ) {\n\n\t\tstart = holeIndices[ i ] * dim;\n\t\tend = i < len - 1 ? holeIndices[ i + 1 ] * dim : data.length;\n\t\tlist = linkedList( data, start, end, dim, false );\n\t\tif ( list === list.next ) list.steiner = true;\n\t\tqueue.push( getLeftmost( list ) );\n\n\t}\n\n\tqueue.sort( compareX );\n\n\t// process holes from left to right\n\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\tconst hx = hole.x;\n\tconst hy = hole.y;\n\tlet qx = - Infinity, m;\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\tconst 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\tconst stop = m,\n\t\tmx = m.x,\n\t\tmy = m.y;\n\tlet tanMin = Infinity, tan;\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\tconst px = ( 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\tconst 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\nclass ShapeUtils {\n\n\t// calculate area of the contour polygon\n\n\tstatic area( 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\tstatic isClockWise( pts ) {\n\n\t\treturn ShapeUtils.area( pts ) < 0;\n\n\t}\n\n\tstatic triangulateShape( 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: <int>, // number of points on the curves\n *  steps: <int>, // number of points for z-side extrusions / used for subdividing segments of extrude spline too\n *  depth: <float>, // Depth to extrude the shape\n *\n *  bevelEnabled: <bool>, // turn on bevel\n *  bevelThickness: <float>, // how deep into the original shape bevel goes\n *  bevelSize: <float>, // how far from shape outline (including bevelOffset) is bevel\n *  bevelOffset: <float>, // how far from shape outline does bevel start\n *  bevelSegments: <int>, // number of bevel layers\n *\n *  extrudePath: <THREE.Curve> // curve to extrude shape along\n *\n *  UVGenerator: <Object> // object that provides UV generator functions\n *\n * }\n */\n\nclass ExtrudeGeometry extends BufferGeometry {\n\n\tconstructor( shapes, options ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'ExtrudeGeometry';\n\n\t\tthis.parameters = {\n\t\t\tshapes: shapes,\n\t\t\toptions: options\n\t\t};\n\n\t\tshapes = Array.isArray( shapes ) ? shapes : [ shapes ];\n\n\t\tconst scope = this;\n\n\t\tconst verticesArray = [];\n\t\tconst uvArray = [];\n\n\t\tfor ( let i = 0, l = shapes.length; i < l; i ++ ) {\n\n\t\t\tconst shape = shapes[ i ];\n\t\t\taddShape( shape );\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( verticesArray, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvArray, 2 ) );\n\n\t\tthis.computeVertexNormals();\n\n\t\t// functions\n\n\t\tfunction addShape( shape ) {\n\n\t\t\tconst placeholder = [];\n\n\t\t\t// options\n\n\t\t\tconst curveSegments = options.curveSegments !== undefined ? options.curveSegments : 12;\n\t\t\tconst steps = options.steps !== undefined ? options.steps : 1;\n\t\t\tlet depth = options.depth !== undefined ? options.depth : 100;\n\n\t\t\tlet bevelEnabled = options.bevelEnabled !== undefined ? options.bevelEnabled : true;\n\t\t\tlet bevelThickness = options.bevelThickness !== undefined ? options.bevelThickness : 6;\n\t\t\tlet bevelSize = options.bevelSize !== undefined ? options.bevelSize : bevelThickness - 2;\n\t\t\tlet bevelOffset = options.bevelOffset !== undefined ? options.bevelOffset : 0;\n\t\t\tlet bevelSegments = options.bevelSegments !== undefined ? options.bevelSegments : 3;\n\n\t\t\tconst extrudePath = options.extrudePath;\n\n\t\t\tconst uvgen = options.UVGenerator !== undefined ? options.UVGenerator : WorldUVGenerator;\n\n\t\t\t// deprecated options\n\n\t\t\tif ( options.amount !== undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.ExtrudeBufferGeometry: amount has been renamed to depth.' );\n\t\t\t\tdepth = options.amount;\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tlet extrudePts, extrudeByPath = false;\n\t\t\tlet splineTube, binormal, normal, position2;\n\n\t\t\tif ( extrudePath ) {\n\n\t\t\t\textrudePts = extrudePath.getSpacedPoints( steps );\n\n\t\t\t\textrudeByPath = true;\n\t\t\t\tbevelEnabled = false; // bevels not supported for path extrusion\n\n\t\t\t\t// SETUP TNB variables\n\n\t\t\t\t// TODO1 - have a .isClosed in spline?\n\n\t\t\t\tsplineTube = extrudePath.computeFrenetFrames( steps, false );\n\n\t\t\t\t// console.log(splineTube, 'splineTube', splineTube.normals.length, 'steps', steps, 'extrudePts', extrudePts.length);\n\n\t\t\t\tbinormal = new Vector3();\n\t\t\t\tnormal = new Vector3();\n\t\t\t\tposition2 = new Vector3();\n\n\t\t\t}\n\n\t\t\t// Safeguards if bevels are not enabled\n\n\t\t\tif ( ! bevelEnabled ) {\n\n\t\t\t\tbevelSegments = 0;\n\t\t\t\tbevelThickness = 0;\n\t\t\t\tbevelSize = 0;\n\t\t\t\tbevelOffset = 0;\n\n\t\t\t}\n\n\t\t\t// Variables initialization\n\n\t\t\tconst shapePoints = shape.extractPoints( curveSegments );\n\n\t\t\tlet vertices = shapePoints.shape;\n\t\t\tconst holes = shapePoints.holes;\n\n\t\t\tconst reverse = ! ShapeUtils.isClockWise( vertices );\n\n\t\t\tif ( reverse ) {\n\n\t\t\t\tvertices = vertices.reverse();\n\n\t\t\t\t// Maybe we should also check if holes are in the opposite direction, just to be safe ...\n\n\t\t\t\tfor ( let h = 0, hl = holes.length; h < hl; h ++ ) {\n\n\t\t\t\t\tconst ahole = holes[ h ];\n\n\t\t\t\t\tif ( ShapeUtils.isClockWise( ahole ) ) {\n\n\t\t\t\t\t\tholes[ h ] = ahole.reverse();\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\n\t\t\tconst faces = ShapeUtils.triangulateShape( vertices, holes );\n\n\t\t\t/* Vertices */\n\n\t\t\tconst contour = vertices; // vertices has all points but contour has only points of circumference\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\tvertices = vertices.concat( ahole );\n\n\t\t\t}\n\n\n\t\t\tfunction scalePt2( pt, vec, size ) {\n\n\t\t\t\tif ( ! vec ) console.error( 'THREE.ExtrudeGeometry: vec does not exist' );\n\n\t\t\t\treturn vec.clone().multiplyScalar( size ).add( pt );\n\n\t\t\t}\n\n\t\t\tconst vlen = vertices.length, flen = faces.length;\n\n\n\t\t\t// Find directions for point movement\n\n\n\t\t\tfunction getBevelVec( inPt, inPrev, inNext ) {\n\n\t\t\t\t// computes for inPt the corresponding point inPt' on a new contour\n\t\t\t\t//   shifted by 1 unit (length of normalized vector) to the left\n\t\t\t\t// if we walk along contour clockwise, this new contour is outside the old one\n\t\t\t\t//\n\t\t\t\t// inPt' is the intersection of the two lines parallel to the two\n\t\t\t\t//  adjacent edges of inPt at a distance of 1 unit on the left side.\n\n\t\t\t\tlet v_trans_x, v_trans_y, shrink_by; // resulting translation vector for inPt\n\n\t\t\t\t// good reading for geometry algorithms (here: line-line intersection)\n\t\t\t\t// http://geomalgorithms.com/a05-_intersect-1.html\n\n\t\t\t\tconst v_prev_x = inPt.x - inPrev.x,\n\t\t\t\t\tv_prev_y = inPt.y - inPrev.y;\n\t\t\t\tconst v_next_x = inNext.x - inPt.x,\n\t\t\t\t\tv_next_y = inNext.y - inPt.y;\n\n\t\t\t\tconst v_prev_lensq = ( v_prev_x * v_prev_x + v_prev_y * v_prev_y );\n\n\t\t\t\t// check for collinear edges\n\t\t\t\tconst collinear0 = ( v_prev_x * v_next_y - v_prev_y * v_next_x );\n\n\t\t\t\tif ( Math.abs( collinear0 ) > Number.EPSILON ) {\n\n\t\t\t\t\t// not collinear\n\n\t\t\t\t\t// length of vectors for normalizing\n\n\t\t\t\t\tconst v_prev_len = Math.sqrt( v_prev_lensq );\n\t\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\t// shift adjacent points by unit vectors to the left\n\n\t\t\t\t\tconst ptPrevShift_x = ( inPrev.x - v_prev_y / v_prev_len );\n\t\t\t\t\tconst ptPrevShift_y = ( inPrev.y + v_prev_x / v_prev_len );\n\n\t\t\t\t\tconst ptNextShift_x = ( inNext.x - v_next_y / v_next_len );\n\t\t\t\t\tconst ptNextShift_y = ( inNext.y + v_next_x / v_next_len );\n\n\t\t\t\t\t// scaling factor for v_prev to intersection point\n\n\t\t\t\t\tconst sf = ( ( ptNextShift_x - ptPrevShift_x ) * v_next_y -\n\t\t\t\t\t\t\t( ptNextShift_y - ptPrevShift_y ) * v_next_x ) /\n\t\t\t\t\t\t( v_prev_x * v_next_y - v_prev_y * v_next_x );\n\n\t\t\t\t\t// vector from inPt to intersection point\n\n\t\t\t\t\tv_trans_x = ( ptPrevShift_x + v_prev_x * sf - inPt.x );\n\t\t\t\t\tv_trans_y = ( ptPrevShift_y + v_prev_y * sf - inPt.y );\n\n\t\t\t\t\t// Don't normalize!, otherwise sharp corners become ugly\n\t\t\t\t\t//  but prevent crazy spikes\n\t\t\t\t\tconst v_trans_lensq = ( v_trans_x * v_trans_x + v_trans_y * v_trans_y );\n\t\t\t\t\tif ( v_trans_lensq <= 2 ) {\n\n\t\t\t\t\t\treturn new Vector2( v_trans_x, v_trans_y );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tshrink_by = Math.sqrt( v_trans_lensq / 2 );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// handle special case of collinear edges\n\n\t\t\t\t\tlet direction_eq = false; // assumes: opposite\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 ( v_prev_x < - Number.EPSILON ) {\n\n\t\t\t\t\t\t\tif ( v_next_x < - Number.EPSILON ) {\n\n\t\t\t\t\t\t\t\tdirection_eq = true;\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\tif ( Math.sign( v_prev_y ) === Math.sign( v_next_y ) ) {\n\n\t\t\t\t\t\t\t\tdirection_eq = 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 ( direction_eq ) {\n\n\t\t\t\t\t\t// console.log(\"Warning: lines are a straight sequence\");\n\t\t\t\t\t\tv_trans_x = - v_prev_y;\n\t\t\t\t\t\tv_trans_y = v_prev_x;\n\t\t\t\t\t\tshrink_by = Math.sqrt( v_prev_lensq );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// console.log(\"Warning: lines are a straight spike\");\n\t\t\t\t\t\tv_trans_x = v_prev_x;\n\t\t\t\t\t\tv_trans_y = v_prev_y;\n\t\t\t\t\t\tshrink_by = Math.sqrt( v_prev_lensq / 2 );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\treturn new Vector2( v_trans_x / shrink_by, v_trans_y / shrink_by );\n\n\t\t\t}\n\n\n\t\t\tconst contourMovements = [];\n\n\t\t\tfor ( let i = 0, il = contour.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\t// console.log('i,j,k', i, j , k)\n\n\t\t\t\tcontourMovements[ i ] = getBevelVec( contour[ i ], contour[ j ], contour[ k ] );\n\n\t\t\t}\n\n\t\t\tconst holesMovements = [];\n\t\t\tlet oneHoleMovements, verticesMovements = contourMovements.concat();\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\toneHoleMovements = [];\n\n\t\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\t\tif ( j === il ) j = 0;\n\t\t\t\t\tif ( k === il ) k = 0;\n\n\t\t\t\t\t//  (j)---(i)---(k)\n\t\t\t\t\toneHoleMovements[ i ] = getBevelVec( ahole[ i ], ahole[ j ], ahole[ k ] );\n\n\t\t\t\t}\n\n\t\t\t\tholesMovements.push( oneHoleMovements );\n\t\t\t\tverticesMovements = verticesMovements.concat( oneHoleMovements );\n\n\t\t\t}\n\n\n\t\t\t// Loop bevelSegments, 1 for the front, 1 for the back\n\n\t\t\tfor ( let b = 0; b < bevelSegments; b ++ ) {\n\n\t\t\t\t//for ( b = bevelSegments; b > 0; b -- ) {\n\n\t\t\t\tconst t = b / bevelSegments;\n\t\t\t\tconst z = bevelThickness * Math.cos( t * Math.PI / 2 );\n\t\t\t\tconst bs = bevelSize * Math.sin( t * Math.PI / 2 ) + bevelOffset;\n\n\t\t\t\t// contract shape\n\n\t\t\t\tfor ( let i = 0, il = contour.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst vert = scalePt2( contour[ i ], contourMovements[ 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\t// expand holes\n\n\t\t\t\tfor ( let h = 0, hl = holes.length; h < hl; h ++ ) {\n\n\t\t\t\t\tconst ahole = holes[ h ];\n\t\t\t\t\toneHoleMovements = holesMovements[ h ];\n\n\t\t\t\t\tfor ( let i = 0, il = ahole.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tconst vert = scalePt2( ahole[ i ], oneHoleMovements[ i ], bs );\n\n\t\t\t\t\t\tv( vert.x, vert.y, - z );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst bs = bevelSize + bevelOffset;\n\n\t\t\t// Back facing vertices\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, 0 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// v( vert.x, vert.y + extrudePts[ 0 ].y, extrudePts[ 0 ].x );\n\n\t\t\t\t\tnormal.copy( splineTube.normals[ 0 ] ).multiplyScalar( vert.x );\n\t\t\t\t\tbinormal.copy( splineTube.binormals[ 0 ] ).multiplyScalar( vert.y );\n\n\t\t\t\t\tposition2.copy( extrudePts[ 0 ] ).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\t// Add stepped vertices...\n\t\t\t// Including front facing vertices\n\n\t\t\tfor ( let s = 1; s <= steps; s ++ ) {\n\n\t\t\t\tfor ( let i = 0; i < vlen; i ++ ) {\n\n\t\t\t\t\tconst vert = bevelEnabled ? scalePt2( vertices[ i ], verticesMovements[ i ], bs ) : vertices[ i ];\n\n\t\t\t\t\tif ( ! extrudeByPath ) {\n\n\t\t\t\t\t\tv( vert.x, vert.y, depth / steps * s );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// v( vert.x, vert.y + extrudePts[ s - 1 ].y, extrudePts[ s - 1 ].x );\n\n\t\t\t\t\t\tnormal.copy( splineTube.normals[ s ] ).multiplyScalar( vert.x );\n\t\t\t\t\t\tbinormal.copy( splineTube.binormals[ s ] ).multiplyScalar( vert.y );\n\n\t\t\t\t\t\tposition2.copy( extrudePts[ s ] ).add( normal ).add( binormal );\n\n\t\t\t\t\t\tv( position2.x, position2.y, position2.z );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\n\t\t\t// Add bevel segments planes\n\n\t\t\t//for ( b = 1; b <= bevelSegments; b ++ ) {\n\t\t\tfor ( let b = bevelSegments - 1; b >= 0; b -- ) {\n\n\t\t\t\tconst t = b / bevelSegments;\n\t\t\t\tconst z = bevelThickness * Math.cos( t * Math.PI / 2 );\n\t\t\t\tconst bs = bevelSize * Math.sin( t * Math.PI / 2 ) + bevelOffset;\n\n\t\t\t\t// contract shape\n\n\t\t\t\tfor ( let i = 0, il = contour.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst vert = scalePt2( contour[ i ], contourMovements[ i ], bs );\n\t\t\t\t\tv( vert.x, vert.y, depth + z );\n\n\t\t\t\t}\n\n\t\t\t\t// expand holes\n\n\t\t\t\tfor ( let h = 0, hl = holes.length; h < hl; h ++ ) {\n\n\t\t\t\t\tconst ahole = holes[ h ];\n\t\t\t\t\toneHoleMovements = holesMovements[ h ];\n\n\t\t\t\t\tfor ( let i = 0, il = ahole.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tconst vert = scalePt2( ahole[ i ], oneHoleMovements[ i ], bs );\n\n\t\t\t\t\t\tif ( ! extrudeByPath ) {\n\n\t\t\t\t\t\t\tv( vert.x, vert.y, depth + z );\n\n\t\t\t\t\t\t} else {\n\n\t\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\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t/* Faces */\n\n\t\t\t// Top and bottom faces\n\n\t\t\tbuildLidFaces();\n\n\t\t\t// Sides faces\n\n\t\t\tbuildSideFaces();\n\n\n\t\t\t/////  Internal functions\n\n\t\t\tfunction buildLidFaces() {\n\n\t\t\t\tconst start = verticesArray.length / 3;\n\n\t\t\t\tif ( bevelEnabled ) {\n\n\t\t\t\t\tlet layer = 0; // steps + 1\n\t\t\t\t\tlet offset = vlen * layer;\n\n\t\t\t\t\t// Bottom faces\n\n\t\t\t\t\tfor ( let i = 0; i < flen; i ++ ) {\n\n\t\t\t\t\t\tconst face = faces[ i ];\n\t\t\t\t\t\tf3( face[ 2 ] + offset, face[ 1 ] + offset, face[ 0 ] + offset );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tlayer = steps + bevelSegments * 2;\n\t\t\t\t\toffset = vlen * layer;\n\n\t\t\t\t\t// Top faces\n\n\t\t\t\t\tfor ( let i = 0; i < flen; i ++ ) {\n\n\t\t\t\t\t\tconst face = faces[ i ];\n\t\t\t\t\t\tf3( face[ 0 ] + offset, face[ 1 ] + offset, face[ 2 ] + offset );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// Bottom faces\n\n\t\t\t\t\tfor ( let i = 0; i < flen; i ++ ) {\n\n\t\t\t\t\t\tconst face = faces[ i ];\n\t\t\t\t\t\tf3( face[ 2 ], face[ 1 ], face[ 0 ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// Top faces\n\n\t\t\t\t\tfor ( let i = 0; i < flen; i ++ ) {\n\n\t\t\t\t\t\tconst face = faces[ i ];\n\t\t\t\t\t\tf3( face[ 0 ] + vlen * steps, face[ 1 ] + vlen * steps, face[ 2 ] + vlen * steps );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tscope.addGroup( start, verticesArray.length / 3 - start, 0 );\n\n\t\t\t}\n\n\t\t\t// Create faces for the z-sides of the shape\n\n\t\t\tfunction buildSideFaces() {\n\n\t\t\t\tconst start = verticesArray.length / 3;\n\t\t\t\tlet layeroffset = 0;\n\t\t\t\tsidewalls( contour, layeroffset );\n\t\t\t\tlayeroffset += contour.length;\n\n\t\t\t\tfor ( let h = 0, hl = holes.length; h < hl; h ++ ) {\n\n\t\t\t\t\tconst ahole = holes[ h ];\n\t\t\t\t\tsidewalls( ahole, layeroffset );\n\n\t\t\t\t\t//, true\n\t\t\t\t\tlayeroffset += ahole.length;\n\n\t\t\t\t}\n\n\n\t\t\t\tscope.addGroup( start, verticesArray.length / 3 - start, 1 );\n\n\n\t\t\t}\n\n\t\t\tfunction sidewalls( contour, layeroffset ) {\n\n\t\t\t\tlet i = contour.length;\n\n\t\t\t\twhile ( -- i >= 0 ) {\n\n\t\t\t\t\tconst j = i;\n\t\t\t\t\tlet k = i - 1;\n\t\t\t\t\tif ( k < 0 ) k = contour.length - 1;\n\n\t\t\t\t\t//console.log('b', i,j, i-1, k,vertices.length);\n\n\t\t\t\t\tfor ( let s = 0, sl = ( steps + bevelSegments * 2 ); s < sl; s ++ ) {\n\n\t\t\t\t\t\tconst slen1 = vlen * s;\n\t\t\t\t\t\tconst slen2 = vlen * ( s + 1 );\n\n\t\t\t\t\t\tconst a = layeroffset + j + slen1,\n\t\t\t\t\t\t\tb = layeroffset + k + slen1,\n\t\t\t\t\t\t\tc = layeroffset + k + slen2,\n\t\t\t\t\t\t\td = layeroffset + j + slen2;\n\n\t\t\t\t\t\tf4( a, b, c, d );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tfunction v( x, y, z ) {\n\n\t\t\t\tplaceholder.push( x );\n\t\t\t\tplaceholder.push( y );\n\t\t\t\tplaceholder.push( z );\n\n\t\t\t}\n\n\n\t\t\tfunction f3( a, b, c ) {\n\n\t\t\t\taddVertex( a );\n\t\t\t\taddVertex( b );\n\t\t\t\taddVertex( c );\n\n\t\t\t\tconst nextIndex = verticesArray.length / 3;\n\t\t\t\tconst uvs = uvgen.generateTopUV( scope, verticesArray, nextIndex - 3, nextIndex - 2, nextIndex - 1 );\n\n\t\t\t\taddUV( uvs[ 0 ] );\n\t\t\t\taddUV( uvs[ 1 ] );\n\t\t\t\taddUV( uvs[ 2 ] );\n\n\t\t\t}\n\n\t\t\tfunction f4( a, b, c, d ) {\n\n\t\t\t\taddVertex( a );\n\t\t\t\taddVertex( b );\n\t\t\t\taddVertex( d );\n\n\t\t\t\taddVertex( b );\n\t\t\t\taddVertex( c );\n\t\t\t\taddVertex( d );\n\n\n\t\t\t\tconst nextIndex = verticesArray.length / 3;\n\t\t\t\tconst uvs = uvgen.generateSideWallUV( scope, verticesArray, nextIndex - 6, nextIndex - 3, nextIndex - 2, nextIndex - 1 );\n\n\t\t\t\taddUV( uvs[ 0 ] );\n\t\t\t\taddUV( uvs[ 1 ] );\n\t\t\t\taddUV( uvs[ 3 ] );\n\n\t\t\t\taddUV( uvs[ 1 ] );\n\t\t\t\taddUV( uvs[ 2 ] );\n\t\t\t\taddUV( uvs[ 3 ] );\n\n\t\t\t}\n\n\t\t\tfunction addVertex( index ) {\n\n\t\t\t\tverticesArray.push( placeholder[ index * 3 + 0 ] );\n\t\t\t\tverticesArray.push( placeholder[ index * 3 + 1 ] );\n\t\t\t\tverticesArray.push( placeholder[ index * 3 + 2 ] );\n\n\t\t\t}\n\n\n\t\t\tfunction addUV( vector2 ) {\n\n\t\t\t\tuvArray.push( vector2.x );\n\t\t\t\tuvArray.push( vector2.y );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = BufferGeometry.prototype.toJSON.call( this );\n\n\t\tconst shapes = this.parameters.shapes;\n\t\tconst options = this.parameters.options;\n\n\t\treturn toJSON$1( shapes, options, data );\n\n\t}\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};\n\nfunction toJSON$1( shapes, options, 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\tif ( options.extrudePath !== undefined ) data.options.extrudePath = options.extrudePath.toJSON();\n\n\treturn data;\n\n}\n\nclass IcosahedronGeometry extends PolyhedronGeometry {\n\n\tconstructor( radius = 1, detail = 0 ) {\n\n\t\tconst t = ( 1 + Math.sqrt( 5 ) ) / 2;\n\n\t\tconst vertices = [\n\t\t\t- 1, t, 0, \t1, t, 0, \t- 1, - t, 0, \t1, - t, 0,\n\t\t\t0, - 1, t, \t0, 1, t,\t0, - 1, - t, \t0, 1, - t,\n\t\t\tt, 0, - 1, \tt, 0, 1, \t- t, 0, - 1, \t- t, 0, 1\n\t\t];\n\n\t\tconst indices = [\n\t\t\t0, 11, 5, \t0, 5, 1, \t0, 1, 7, \t0, 7, 10, \t0, 10, 11,\n\t\t\t1, 5, 9, \t5, 11, 4,\t11, 10, 2,\t10, 7, 6,\t7, 1, 8,\n\t\t\t3, 9, 4, \t3, 4, 2,\t3, 2, 6,\t3, 6, 8,\t3, 8, 9,\n\t\t\t4, 9, 5, \t2, 4, 11,\t6, 2, 10,\t8, 6, 7,\t9, 8, 1\n\t\t];\n\n\t\tsuper( vertices, indices, radius, detail );\n\n\t\tthis.type = 'IcosahedronGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\tdetail: detail\n\t\t};\n\n\t}\n\n}\n\nclass LatheGeometry extends BufferGeometry {\n\n\tconstructor( points, segments = 12, phiStart = 0, phiLength = Math.PI * 2 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'LatheGeometry';\n\n\t\tthis.parameters = {\n\t\t\tpoints: points,\n\t\t\tsegments: segments,\n\t\t\tphiStart: phiStart,\n\t\t\tphiLength: phiLength\n\t\t};\n\n\t\tsegments = Math.floor( segments );\n\n\t\t// clamp phiLength so it's in range of [ 0, 2PI ]\n\n\t\tphiLength = clamp( phiLength, 0, Math.PI * 2 );\n\n\t\t// buffers\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst uvs = [];\n\n\t\t// helper variables\n\n\t\tconst inverseSegments = 1.0 / segments;\n\t\tconst vertex = new Vector3();\n\t\tconst uv = new Vector2();\n\n\t\t// generate vertices and uvs\n\n\t\tfor ( let i = 0; i <= segments; i ++ ) {\n\n\t\t\tconst phi = phiStart + i * inverseSegments * phiLength;\n\n\t\t\tconst sin = Math.sin( phi );\n\t\t\tconst cos = Math.cos( phi );\n\n\t\t\tfor ( let j = 0; j <= ( points.length - 1 ); j ++ ) {\n\n\t\t\t\t// vertex\n\n\t\t\t\tvertex.x = points[ j ].x * sin;\n\t\t\t\tvertex.y = points[ j ].y;\n\t\t\t\tvertex.z = points[ j ].x * cos;\n\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t// uv\n\n\t\t\t\tuv.x = i / segments;\n\t\t\t\tuv.y = j / ( points.length - 1 );\n\n\t\t\t\tuvs.push( uv.x, uv.y );\n\n\n\t\t\t}\n\n\t\t}\n\n\t\t// indices\n\n\t\tfor ( let i = 0; i < segments; i ++ ) {\n\n\t\t\tfor ( let j = 0; j < ( points.length - 1 ); j ++ ) {\n\n\t\t\t\tconst base = j + i * points.length;\n\n\t\t\t\tconst a = base;\n\t\t\t\tconst b = base + points.length;\n\t\t\t\tconst c = base + points.length + 1;\n\t\t\t\tconst d = base + 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}\n\n\t\t}\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( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t\t// generate normals\n\n\t\tthis.computeVertexNormals();\n\n\t\t// if the geometry is closed, we need to average the normals along the seam.\n\t\t// because the corresponding vertices are identical (but still have different UVs).\n\n\t\tif ( phiLength === Math.PI * 2 ) {\n\n\t\t\tconst normals = this.attributes.normal.array;\n\t\t\tconst n1 = new Vector3();\n\t\t\tconst n2 = new Vector3();\n\t\t\tconst n = new Vector3();\n\n\t\t\t// this is the buffer offset for the last line of vertices\n\n\t\t\tconst base = segments * points.length * 3;\n\n\t\t\tfor ( let i = 0, j = 0; i < points.length; i ++, j += 3 ) {\n\n\t\t\t\t// select the normal of the vertex in the first line\n\n\t\t\t\tn1.x = normals[ j + 0 ];\n\t\t\t\tn1.y = normals[ j + 1 ];\n\t\t\t\tn1.z = normals[ j + 2 ];\n\n\t\t\t\t// select the normal of the vertex in the last line\n\n\t\t\t\tn2.x = normals[ base + j + 0 ];\n\t\t\t\tn2.y = normals[ base + j + 1 ];\n\t\t\t\tn2.z = normals[ base + j + 2 ];\n\n\t\t\t\t// average normals\n\n\t\t\t\tn.addVectors( n1, n2 ).normalize();\n\n\t\t\t\t// assign the new values to both normals\n\n\t\t\t\tnormals[ j + 0 ] = normals[ base + j + 0 ] = n.x;\n\t\t\t\tnormals[ j + 1 ] = normals[ base + j + 1 ] = n.y;\n\t\t\t\tnormals[ j + 2 ] = normals[ base + j + 2 ] = n.z;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n}\n\nclass OctahedronGeometry extends PolyhedronGeometry {\n\n\tconstructor( radius = 1, detail = 0 ) {\n\n\t\tconst vertices = [\n\t\t\t1, 0, 0, \t- 1, 0, 0,\t0, 1, 0,\n\t\t\t0, - 1, 0, \t0, 0, 1,\t0, 0, - 1\n\t\t];\n\n\t\tconst indices = [\n\t\t\t0, 2, 4,\t0, 4, 3,\t0, 3, 5,\n\t\t\t0, 5, 2,\t1, 2, 5,\t1, 5, 3,\n\t\t\t1, 3, 4,\t1, 4, 2\n\t\t];\n\n\t\tsuper( vertices, indices, radius, detail );\n\n\t\tthis.type = 'OctahedronGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\tdetail: detail\n\t\t};\n\n\t}\n\n}\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\nclass ParametricGeometry extends BufferGeometry {\n\n\tconstructor( func, slices, stacks ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'ParametricGeometry';\n\n\t\tthis.parameters = {\n\t\t\tfunc: func,\n\t\t\tslices: slices,\n\t\t\tstacks: stacks\n\t\t};\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\tconst EPS = 0.00001;\n\n\t\tconst normal = new Vector3();\n\n\t\tconst p0 = new Vector3(), p1 = new Vector3();\n\t\tconst pu = new Vector3(), pv = new Vector3();\n\n\t\tif ( func.length < 3 ) {\n\n\t\t\tconsole.error( 'THREE.ParametricGeometry: Function must now modify a Vector3 as third parameter.' );\n\n\t\t}\n\n\t\t// generate vertices, normals and uvs\n\n\t\tconst sliceCount = slices + 1;\n\n\t\tfor ( let i = 0; i <= stacks; i ++ ) {\n\n\t\t\tconst v = i / stacks;\n\n\t\t\tfor ( let j = 0; j <= slices; j ++ ) {\n\n\t\t\t\tconst u = j / slices;\n\n\t\t\t\t// vertex\n\n\t\t\t\tfunc( u, v, p0 );\n\t\t\t\tvertices.push( p0.x, p0.y, p0.z );\n\n\t\t\t\t// normal\n\n\t\t\t\t// approximate tangent vectors via finite differences\n\n\t\t\t\tif ( u - EPS >= 0 ) {\n\n\t\t\t\t\tfunc( u - EPS, v, p1 );\n\t\t\t\t\tpu.subVectors( p0, p1 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tfunc( u + EPS, v, p1 );\n\t\t\t\t\tpu.subVectors( p1, p0 );\n\n\t\t\t\t}\n\n\t\t\t\tif ( v - EPS >= 0 ) {\n\n\t\t\t\t\tfunc( u, v - EPS, p1 );\n\t\t\t\t\tpv.subVectors( p0, p1 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tfunc( u, v + EPS, p1 );\n\t\t\t\t\tpv.subVectors( p1, p0 );\n\n\t\t\t\t}\n\n\t\t\t\t// cross product of tangent vectors returns surface normal\n\n\t\t\t\tnormal.crossVectors( pu, pv ).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, v );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// generate indices\n\n\t\tfor ( let i = 0; i < stacks; i ++ ) {\n\n\t\t\tfor ( let j = 0; j < slices; j ++ ) {\n\n\t\t\t\tconst a = i * sliceCount + j;\n\t\t\t\tconst b = i * sliceCount + j + 1;\n\t\t\t\tconst c = ( i + 1 ) * sliceCount + j + 1;\n\t\t\t\tconst d = ( i + 1 ) * sliceCount + j;\n\n\t\t\t\t// faces one and two\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\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}\n\n}\n\nclass RingGeometry extends BufferGeometry {\n\n\tconstructor( innerRadius = 0.5, outerRadius = 1, thetaSegments = 8, phiSegments = 1, thetaStart = 0, thetaLength = Math.PI * 2 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'RingGeometry';\n\n\t\tthis.parameters = {\n\t\t\tinnerRadius: innerRadius,\n\t\t\touterRadius: outerRadius,\n\t\t\tthetaSegments: thetaSegments,\n\t\t\tphiSegments: phiSegments,\n\t\t\tthetaStart: thetaStart,\n\t\t\tthetaLength: thetaLength\n\t\t};\n\n\t\tthetaSegments = Math.max( 3, thetaSegments );\n\t\tphiSegments = Math.max( 1, phiSegments );\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// some helper variables\n\n\t\tlet radius = innerRadius;\n\t\tconst radiusStep = ( ( outerRadius - innerRadius ) / phiSegments );\n\t\tconst vertex = new Vector3();\n\t\tconst uv = new Vector2();\n\n\t\t// generate vertices, normals and uvs\n\n\t\tfor ( let j = 0; j <= phiSegments; j ++ ) {\n\n\t\t\tfor ( let i = 0; i <= thetaSegments; i ++ ) {\n\n\t\t\t\t// values are generate from the inside of the ring to the outside\n\n\t\t\t\tconst segment = thetaStart + i / thetaSegments * thetaLength;\n\n\t\t\t\t// vertex\n\n\t\t\t\tvertex.x = radius * Math.cos( segment );\n\t\t\t\tvertex.y = radius * Math.sin( segment );\n\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t// normal\n\n\t\t\t\tnormals.push( 0, 0, 1 );\n\n\t\t\t\t// uv\n\n\t\t\t\tuv.x = ( vertex.x / outerRadius + 1 ) / 2;\n\t\t\t\tuv.y = ( vertex.y / outerRadius + 1 ) / 2;\n\n\t\t\t\tuvs.push( uv.x, uv.y );\n\n\t\t\t}\n\n\t\t\t// increase the radius for next row of vertices\n\n\t\t\tradius += radiusStep;\n\n\t\t}\n\n\t\t// indices\n\n\t\tfor ( let j = 0; j < phiSegments; j ++ ) {\n\n\t\t\tconst thetaSegmentLevel = j * ( thetaSegments + 1 );\n\n\t\t\tfor ( let i = 0; i < thetaSegments; i ++ ) {\n\n\t\t\t\tconst segment = i + thetaSegmentLevel;\n\n\t\t\t\tconst a = segment;\n\t\t\t\tconst b = segment + thetaSegments + 1;\n\t\t\t\tconst c = segment + thetaSegments + 2;\n\t\t\t\tconst d = segment + 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}\n\n\t\t}\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}\n\n}\n\nclass ShapeGeometry extends BufferGeometry {\n\n\tconstructor( shapes, curveSegments = 12 ) {\n\n\t\tsuper();\n\t\tthis.type = 'ShapeGeometry';\n\n\t\tthis.parameters = {\n\t\t\tshapes: shapes,\n\t\t\tcurveSegments: curveSegments\n\t\t};\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 groupStart = 0;\n\t\tlet groupCount = 0;\n\n\t\t// allow single and array values for \"shapes\" parameter\n\n\t\tif ( Array.isArray( shapes ) === false ) {\n\n\t\t\taddShape( shapes );\n\n\t\t} else {\n\n\t\t\tfor ( let i = 0; i < shapes.length; i ++ ) {\n\n\t\t\t\taddShape( shapes[ i ] );\n\n\t\t\t\tthis.addGroup( groupStart, groupCount, i ); // enables MultiMaterial support\n\n\t\t\t\tgroupStart += groupCount;\n\t\t\t\tgroupCount = 0;\n\n\t\t\t}\n\n\t\t}\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\n\t\t// helper functions\n\n\t\tfunction addShape( shape ) {\n\n\t\t\tconst indexOffset = vertices.length / 3;\n\t\t\tconst points = shape.extractPoints( curveSegments );\n\n\t\t\tlet shapeVertices = points.shape;\n\t\t\tconst shapeHoles = points.holes;\n\n\t\t\t// check direction of vertices\n\n\t\t\tif ( ShapeUtils.isClockWise( shapeVertices ) === false ) {\n\n\t\t\t\tshapeVertices = shapeVertices.reverse();\n\n\t\t\t}\n\n\t\t\tfor ( let i = 0, l = shapeHoles.length; i < l; i ++ ) {\n\n\t\t\t\tconst shapeHole = shapeHoles[ i ];\n\n\t\t\t\tif ( ShapeUtils.isClockWise( shapeHole ) === true ) {\n\n\t\t\t\t\tshapeHoles[ i ] = shapeHole.reverse();\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst faces = ShapeUtils.triangulateShape( shapeVertices, shapeHoles );\n\n\t\t\t// join vertices of inner and outer paths to a single array\n\n\t\t\tfor ( let i = 0, l = shapeHoles.length; i < l; i ++ ) {\n\n\t\t\t\tconst shapeHole = shapeHoles[ i ];\n\t\t\t\tshapeVertices = shapeVertices.concat( shapeHole );\n\n\t\t\t}\n\n\t\t\t// vertices, normals, uvs\n\n\t\t\tfor ( let i = 0, l = shapeVertices.length; i < l; i ++ ) {\n\n\t\t\t\tconst vertex = shapeVertices[ i ];\n\n\t\t\t\tvertices.push( vertex.x, vertex.y, 0 );\n\t\t\t\tnormals.push( 0, 0, 1 );\n\t\t\t\tuvs.push( vertex.x, vertex.y ); // world uvs\n\n\t\t\t}\n\n\t\t\t// incides\n\n\t\t\tfor ( let i = 0, l = faces.length; i < l; i ++ ) {\n\n\t\t\t\tconst face = faces[ i ];\n\n\t\t\t\tconst a = face[ 0 ] + indexOffset;\n\t\t\t\tconst b = face[ 1 ] + indexOffset;\n\t\t\t\tconst c = face[ 2 ] + indexOffset;\n\n\t\t\t\tindices.push( a, b, c );\n\t\t\t\tgroupCount += 3;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = BufferGeometry.prototype.toJSON.call( this );\n\n\t\tconst shapes = this.parameters.shapes;\n\n\t\treturn toJSON( shapes, data );\n\n\t}\n\n}\n\nfunction toJSON( 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\nclass SphereGeometry extends BufferGeometry {\n\n\tconstructor( radius = 1, widthSegments = 8, heightSegments = 6, phiStart = 0, phiLength = Math.PI * 2, thetaStart = 0, thetaLength = Math.PI ) {\n\n\t\tsuper();\n\t\tthis.type = 'SphereGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\twidthSegments: widthSegments,\n\t\t\theightSegments: heightSegments,\n\t\t\tphiStart: phiStart,\n\t\t\tphiLength: phiLength,\n\t\t\tthetaStart: thetaStart,\n\t\t\tthetaLength: thetaLength\n\t\t};\n\n\t\twidthSegments = Math.max( 3, Math.floor( widthSegments ) );\n\t\theightSegments = Math.max( 2, Math.floor( heightSegments ) );\n\n\t\tconst thetaEnd = Math.min( thetaStart + thetaLength, Math.PI );\n\n\t\tlet index = 0;\n\t\tconst grid = [];\n\n\t\tconst vertex = new Vector3();\n\t\tconst normal = new Vector3();\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// generate vertices, normals and uvs\n\n\t\tfor ( let iy = 0; iy <= heightSegments; iy ++ ) {\n\n\t\t\tconst verticesRow = [];\n\n\t\t\tconst v = iy / heightSegments;\n\n\t\t\t// special case for the poles\n\n\t\t\tlet uOffset = 0;\n\n\t\t\tif ( iy == 0 && thetaStart == 0 ) {\n\n\t\t\t\tuOffset = 0.5 / widthSegments;\n\n\t\t\t} else if ( iy == heightSegments && thetaEnd == Math.PI ) {\n\n\t\t\t\tuOffset = - 0.5 / widthSegments;\n\n\t\t\t}\n\n\t\t\tfor ( let ix = 0; ix <= widthSegments; ix ++ ) {\n\n\t\t\t\tconst u = ix / widthSegments;\n\n\t\t\t\t// vertex\n\n\t\t\t\tvertex.x = - radius * Math.cos( phiStart + u * phiLength ) * Math.sin( thetaStart + v * thetaLength );\n\t\t\t\tvertex.y = radius * Math.cos( thetaStart + v * thetaLength );\n\t\t\t\tvertex.z = radius * Math.sin( phiStart + u * phiLength ) * Math.sin( thetaStart + v * thetaLength );\n\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.copy( vertex ).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 + uOffset, 1 - v );\n\n\t\t\t\tverticesRow.push( index ++ );\n\n\t\t\t}\n\n\t\t\tgrid.push( verticesRow );\n\n\t\t}\n\n\t\t// indices\n\n\t\tfor ( let iy = 0; iy < heightSegments; iy ++ ) {\n\n\t\t\tfor ( let ix = 0; ix < widthSegments; ix ++ ) {\n\n\t\t\t\tconst a = grid[ iy ][ ix + 1 ];\n\t\t\t\tconst b = grid[ iy ][ ix ];\n\t\t\t\tconst c = grid[ iy + 1 ][ ix ];\n\t\t\t\tconst d = grid[ iy + 1 ][ ix + 1 ];\n\n\t\t\t\tif ( iy !== 0 || thetaStart > 0 ) indices.push( a, b, d );\n\t\t\t\tif ( iy !== heightSegments - 1 || thetaEnd < Math.PI ) indices.push( b, c, d );\n\n\t\t\t}\n\n\t\t}\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}\n\n}\n\nclass TetrahedronGeometry extends PolyhedronGeometry {\n\n\tconstructor( radius = 1, detail = 0 ) {\n\n\t\tconst vertices = [\n\t\t\t1, 1, 1, \t- 1, - 1, 1, \t- 1, 1, - 1, \t1, - 1, - 1\n\t\t];\n\n\t\tconst indices = [\n\t\t\t2, 1, 0, \t0, 3, 2,\t1, 3, 0,\t2, 3, 1\n\t\t];\n\n\t\tsuper( vertices, indices, radius, detail );\n\n\t\tthis.type = 'TetrahedronGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\tdetail: detail\n\t\t};\n\n\t}\n\n}\n\n/**\n * Text = 3D Text\n *\n * parameters = {\n *  font: <THREE.Font>, // font\n *\n *  size: <float>, // size of the text\n *  height: <float>, // thickness to extrude text\n *  curveSegments: <int>, // number of points on the curves\n *\n *  bevelEnabled: <bool>, // turn on bevel\n *  bevelThickness: <float>, // how deep into text bevel goes\n *  bevelSize: <float>, // how far from text outline (including bevelOffset) is bevel\n *  bevelOffset: <float> // how far from text outline does bevel start\n * }\n */\n\nclass TextGeometry extends ExtrudeGeometry {\n\n\tconstructor( text, parameters = {} ) {\n\n\t\tconst font = parameters.font;\n\n\t\tif ( ! ( font && font.isFont ) ) {\n\n\t\t\tconsole.error( 'THREE.TextGeometry: font parameter is not an instance of THREE.Font.' );\n\t\t\treturn new BufferGeometry();\n\n\t\t}\n\n\t\tconst shapes = font.generateShapes( text, parameters.size );\n\n\t\t// translate parameters to ExtrudeGeometry API\n\n\t\tparameters.depth = parameters.height !== undefined ? parameters.height : 50;\n\n\t\t// defaults\n\n\t\tif ( parameters.bevelThickness === undefined ) parameters.bevelThickness = 10;\n\t\tif ( parameters.bevelSize === undefined ) parameters.bevelSize = 8;\n\t\tif ( parameters.bevelEnabled === undefined ) parameters.bevelEnabled = false;\n\n\t\tsuper( shapes, parameters );\n\n\t\tthis.type = 'TextGeometry';\n\n\t}\n\n}\n\nclass TorusGeometry extends BufferGeometry {\n\n\tconstructor( radius = 1, tube = 0.4, radialSegments = 8, tubularSegments = 6, arc = Math.PI * 2 ) {\n\n\t\tsuper();\n\t\tthis.type = 'TorusGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\ttube: tube,\n\t\t\tradialSegments: radialSegments,\n\t\t\ttubularSegments: tubularSegments,\n\t\t\tarc: arc\n\t\t};\n\n\t\tradialSegments = Math.floor( radialSegments );\n\t\ttubularSegments = Math.floor( tubularSegments );\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\tconst center = new Vector3();\n\t\tconst vertex = new Vector3();\n\t\tconst normal = new Vector3();\n\n\t\t// generate vertices, normals and uvs\n\n\t\tfor ( let j = 0; j <= radialSegments; j ++ ) {\n\n\t\t\tfor ( let i = 0; i <= tubularSegments; i ++ ) {\n\n\t\t\t\tconst u = i / tubularSegments * arc;\n\t\t\t\tconst v = j / radialSegments * Math.PI * 2;\n\n\t\t\t\t// vertex\n\n\t\t\t\tvertex.x = ( radius + tube * Math.cos( v ) ) * Math.cos( u );\n\t\t\t\tvertex.y = ( radius + tube * Math.cos( v ) ) * Math.sin( u );\n\t\t\t\tvertex.z = tube * Math.sin( v );\n\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t// normal\n\n\t\t\t\tcenter.x = radius * Math.cos( u );\n\t\t\t\tcenter.y = radius * Math.sin( u );\n\t\t\t\tnormal.subVectors( vertex, center ).normalize();\n\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( i / tubularSegments );\n\t\t\t\tuvs.push( j / radialSegments );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// generate indices\n\n\t\tfor ( let j = 1; j <= radialSegments; j ++ ) {\n\n\t\t\tfor ( let i = 1; i <= tubularSegments; i ++ ) {\n\n\t\t\t\t// indices\n\n\t\t\t\tconst a = ( tubularSegments + 1 ) * j + i - 1;\n\t\t\t\tconst b = ( tubularSegments + 1 ) * ( j - 1 ) + i - 1;\n\t\t\t\tconst c = ( tubularSegments + 1 ) * ( j - 1 ) + i;\n\t\t\t\tconst d = ( tubularSegments + 1 ) * j + 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\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}\n\n}\n\nclass TorusKnotGeometry extends BufferGeometry {\n\n\tconstructor( radius = 1, tube = 0.4, tubularSegments = 64, radialSegments = 8, p = 2, q = 3 ) {\n\n\t\tsuper();\n\t\tthis.type = 'TorusKnotGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\ttube: tube,\n\t\t\ttubularSegments: tubularSegments,\n\t\t\tradialSegments: radialSegments,\n\t\t\tp: p,\n\t\t\tq: q\n\t\t};\n\n\t\ttubularSegments = Math.floor( tubularSegments );\n\t\tradialSegments = Math.floor( radialSegments );\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\tconst vertex = new Vector3();\n\t\tconst normal = new Vector3();\n\n\t\tconst P1 = new Vector3();\n\t\tconst P2 = new Vector3();\n\n\t\tconst B = new Vector3();\n\t\tconst T = new Vector3();\n\t\tconst N = new Vector3();\n\n\t\t// generate vertices, normals and uvs\n\n\t\tfor ( let i = 0; i <= tubularSegments; ++ i ) {\n\n\t\t\t// the radian \"u\" is used to calculate the position on the torus curve of the current tubular segement\n\n\t\t\tconst u = i / tubularSegments * p * Math.PI * 2;\n\n\t\t\t// now we calculate two points. P1 is our current position on the curve, P2 is a little farther ahead.\n\t\t\t// these points are used to create a special \"coordinate space\", which is necessary to calculate the correct vertex positions\n\n\t\t\tcalculatePositionOnCurve( u, p, q, radius, P1 );\n\t\t\tcalculatePositionOnCurve( u + 0.01, p, q, radius, P2 );\n\n\t\t\t// calculate orthonormal basis\n\n\t\t\tT.subVectors( P2, P1 );\n\t\t\tN.addVectors( P2, P1 );\n\t\t\tB.crossVectors( T, N );\n\t\t\tN.crossVectors( B, T );\n\n\t\t\t// normalize B, N. T can be ignored, we don't use it\n\n\t\t\tB.normalize();\n\t\t\tN.normalize();\n\n\t\t\tfor ( let j = 0; j <= radialSegments; ++ j ) {\n\n\t\t\t\t// now calculate the vertices. they are nothing more than an extrusion of the torus curve.\n\t\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\t\tconst v = j / radialSegments * Math.PI * 2;\n\t\t\t\tconst cx = - tube * Math.cos( v );\n\t\t\t\tconst cy = tube * Math.sin( v );\n\n\t\t\t\t// now calculate the final vertex position.\n\t\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\t\tvertex.x = P1.x + ( cx * N.x + cy * B.x );\n\t\t\t\tvertex.y = P1.y + ( cx * N.y + cy * B.y );\n\t\t\t\tvertex.z = P1.z + ( cx * N.z + cy * B.z );\n\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\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\t\tnormal.subVectors( vertex, P1 ).normalize();\n\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( i / tubularSegments );\n\t\t\t\tuvs.push( j / radialSegments );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// generate indices\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\t// indices\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\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\t// this function calculates the current position on the torus curve\n\n\t\tfunction calculatePositionOnCurve( u, p, q, radius, position ) {\n\n\t\t\tconst cu = Math.cos( u );\n\t\t\tconst su = Math.sin( u );\n\t\t\tconst quOverP = q / p * u;\n\t\t\tconst cs = Math.cos( quOverP );\n\n\t\t\tposition.x = radius * ( 2 + cs ) * 0.5 * cu;\n\t\t\tposition.y = radius * ( 2 + cs ) * su * 0.5;\n\t\t\tposition.z = radius * Math.sin( quOverP ) * 0.5;\n\n\t\t}\n\n\t}\n\n}\n\nclass TubeGeometry extends BufferGeometry {\n\n\tconstructor( path, tubularSegments = 64, radius = 1, radialSegments = 8, closed = false ) {\n\n\t\tsuper();\n\t\tthis.type = 'TubeGeometry';\n\n\t\tthis.parameters = {\n\t\t\tpath: path,\n\t\t\ttubularSegments: tubularSegments,\n\t\t\tradius: radius,\n\t\t\tradialSegments: radialSegments,\n\t\t\tclosed: closed\n\t\t};\n\n\t\tconst frames = path.computeFrenetFrames( tubularSegments, closed );\n\n\t\t// expose internals\n\n\t\tthis.tangents = frames.tangents;\n\t\tthis.normals = frames.normals;\n\t\tthis.binormals = frames.binormals;\n\n\t\t// helper variables\n\n\t\tconst vertex = new Vector3();\n\t\tconst normal = new Vector3();\n\t\tconst uv = new Vector2();\n\t\tlet P = new Vector3();\n\n\t\t// buffer\n\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\t\tconst indices = [];\n\n\t\t// create buffer data\n\n\t\tgenerateBufferData();\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\t// functions\n\n\t\tfunction generateBufferData() {\n\n\t\t\tfor ( let i = 0; i < tubularSegments; i ++ ) {\n\n\t\t\t\tgenerateSegment( i );\n\n\t\t\t}\n\n\t\t\t// if the geometry is not closed, generate the last row of vertices and normals\n\t\t\t// at the regular position on the given path\n\t\t\t//\n\t\t\t// if the geometry is closed, duplicate the first row of vertices and normals (uvs will differ)\n\n\t\t\tgenerateSegment( ( closed === false ) ? tubularSegments : 0 );\n\n\t\t\t// uvs are generated in a separate function.\n\t\t\t// this makes it easy compute correct values for closed geometries\n\n\t\t\tgenerateUVs();\n\n\t\t\t// finally create faces\n\n\t\t\tgenerateIndices();\n\n\t\t}\n\n\t\tfunction generateSegment( i ) {\n\n\t\t\t// we use getPointAt to sample evenly distributed points from the given path\n\n\t\t\tP = path.getPointAt( i / tubularSegments, P );\n\n\t\t\t// retrieve corresponding normal and binormal\n\n\t\t\tconst N = frames.normals[ i ];\n\t\t\tconst B = frames.binormals[ i ];\n\n\t\t\t// generate normals and vertices for the current segment\n\n\t\t\tfor ( let j = 0; j <= radialSegments; j ++ ) {\n\n\t\t\t\tconst v = j / radialSegments * Math.PI * 2;\n\n\t\t\t\tconst sin = Math.sin( v );\n\t\t\t\tconst cos = - Math.cos( v );\n\n\t\t\t\t// normal\n\n\t\t\t\tnormal.x = ( cos * N.x + sin * B.x );\n\t\t\t\tnormal.y = ( cos * N.y + sin * B.y );\n\t\t\t\tnormal.z = ( cos * N.z + sin * B.z );\n\t\t\t\tnormal.normalize();\n\n\t\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\n\t\t\t\t// vertex\n\n\t\t\t\tvertex.x = P.x + radius * normal.x;\n\t\t\t\tvertex.y = P.y + radius * normal.y;\n\t\t\t\tvertex.z = P.z + radius * normal.z;\n\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction generateIndices() {\n\n\t\t\tfor ( let j = 1; j <= tubularSegments; j ++ ) {\n\n\t\t\t\tfor ( let i = 1; i <= radialSegments; i ++ ) {\n\n\t\t\t\t\tconst a = ( radialSegments + 1 ) * ( j - 1 ) + ( i - 1 );\n\t\t\t\t\tconst b = ( radialSegments + 1 ) * j + ( i - 1 );\n\t\t\t\t\tconst c = ( radialSegments + 1 ) * j + i;\n\t\t\t\t\tconst d = ( radialSegments + 1 ) * ( j - 1 ) + i;\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}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction generateUVs() {\n\n\t\t\tfor ( let i = 0; i <= tubularSegments; i ++ ) {\n\n\t\t\t\tfor ( let j = 0; j <= radialSegments; j ++ ) {\n\n\t\t\t\t\tuv.x = i / tubularSegments;\n\t\t\t\t\tuv.y = j / radialSegments;\n\n\t\t\t\t\tuvs.push( uv.x, uv.y );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\ttoJSON() {\n\n\t\tconst data = BufferGeometry.prototype.toJSON.call( this );\n\n\t\tdata.path = this.parameters.path.toJSON();\n\n\t\treturn data;\n\n\t}\n\n}\n\nclass WireframeGeometry extends BufferGeometry {\n\n\tconstructor( geometry ) {\n\n\t\tsuper();\n\t\tthis.type = 'WireframeGeometry';\n\n\t\tif ( geometry.isGeometry === true ) {\n\n\t\t\tconsole.error( 'THREE.WireframeGeometry no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\t// buffer\n\n\t\tconst vertices = [];\n\n\t\t// helper variables\n\n\t\tconst edge = [ 0, 0 ], edges = {};\n\n\t\tconst 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\t// build geometry\n\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\n\t}\n\n}\n\nvar Geometries = /*#__PURE__*/Object.freeze({\n\t__proto__: null,\n\tBoxGeometry: BoxGeometry,\n\tBoxBufferGeometry: BoxGeometry,\n\tCircleGeometry: CircleGeometry,\n\tCircleBufferGeometry: CircleGeometry,\n\tConeGeometry: ConeGeometry,\n\tConeBufferGeometry: ConeGeometry,\n\tCylinderGeometry: CylinderGeometry,\n\tCylinderBufferGeometry: CylinderGeometry,\n\tDodecahedronGeometry: DodecahedronGeometry,\n\tDodecahedronBufferGeometry: DodecahedronGeometry,\n\tEdgesGeometry: EdgesGeometry,\n\tExtrudeGeometry: ExtrudeGeometry,\n\tExtrudeBufferGeometry: ExtrudeGeometry,\n\tIcosahedronGeometry: IcosahedronGeometry,\n\tIcosahedronBufferGeometry: IcosahedronGeometry,\n\tLatheGeometry: LatheGeometry,\n\tLatheBufferGeometry: LatheGeometry,\n\tOctahedronGeometry: OctahedronGeometry,\n\tOctahedronBufferGeometry: OctahedronGeometry,\n\tParametricGeometry: ParametricGeometry,\n\tParametricBufferGeometry: ParametricGeometry,\n\tPlaneGeometry: PlaneGeometry,\n\tPlaneBufferGeometry: PlaneGeometry,\n\tPolyhedronGeometry: PolyhedronGeometry,\n\tPolyhedronBufferGeometry: PolyhedronGeometry,\n\tRingGeometry: RingGeometry,\n\tRingBufferGeometry: RingGeometry,\n\tShapeGeometry: ShapeGeometry,\n\tShapeBufferGeometry: ShapeGeometry,\n\tSphereGeometry: SphereGeometry,\n\tSphereBufferGeometry: SphereGeometry,\n\tTetrahedronGeometry: TetrahedronGeometry,\n\tTetrahedronBufferGeometry: TetrahedronGeometry,\n\tTextGeometry: TextGeometry,\n\tTextBufferGeometry: TextGeometry,\n\tTorusGeometry: TorusGeometry,\n\tTorusBufferGeometry: TorusGeometry,\n\tTorusKnotGeometry: TorusKnotGeometry,\n\tTorusKnotBufferGeometry: TorusKnotGeometry,\n\tTubeGeometry: TubeGeometry,\n\tTubeBufferGeometry: TubeGeometry,\n\tWireframeGeometry: WireframeGeometry\n});\n\n/**\n * parameters = {\n *  color: <THREE.Color>\n * }\n */\n\nclass ShadowMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'ShadowMaterial';\n\n\t\tthis.color = new Color( 0x000000 );\n\t\tthis.transparent = true;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.color.copy( source.color );\n\n\t\treturn this;\n\n\t}\n\n}\n\nShadowMaterial.prototype.isShadowMaterial = true;\n\nclass RawShaderMaterial extends ShaderMaterial {\n\n\tconstructor( parameters ) {\n\n\t\tsuper( parameters );\n\n\t\tthis.type = 'RawShaderMaterial';\n\n\t}\n\n}\n\nRawShaderMaterial.prototype.isRawShaderMaterial = true;\n\n/**\n * parameters = {\n *  color: <hex>,\n *  roughness: <float>,\n *  metalness: <float>,\n *  opacity: <float>,\n *\n *  map: new THREE.Texture( <Image> ),\n *\n *  lightMap: new THREE.Texture( <Image> ),\n *  lightMapIntensity: <float>\n *\n *  aoMap: new THREE.Texture( <Image> ),\n *  aoMapIntensity: <float>\n *\n *  emissive: <hex>,\n *  emissiveIntensity: <float>\n *  emissiveMap: new THREE.Texture( <Image> ),\n *\n *  bumpMap: new THREE.Texture( <Image> ),\n *  bumpScale: <float>,\n *\n *  normalMap: new THREE.Texture( <Image> ),\n *  normalMapType: THREE.TangentSpaceNormalMap,\n *  normalScale: <Vector2>,\n *\n *  displacementMap: new THREE.Texture( <Image> ),\n *  displacementScale: <float>,\n *  displacementBias: <float>,\n *\n *  roughnessMap: new THREE.Texture( <Image> ),\n *\n *  metalnessMap: new THREE.Texture( <Image> ),\n *\n *  alphaMap: new THREE.Texture( <Image> ),\n *\n *  envMap: new THREE.CubeTexture( [posx, negx, posy, negy, posz, negz] ),\n *  envMapIntensity: <float>\n *\n *  refractionRatio: <float>,\n *\n *  wireframe: <boolean>,\n *  wireframeLinewidth: <float>,\n *\n *  skinning: <bool>,\n *  morphTargets: <bool>,\n *  morphNormals: <bool>,\n *\n *  flatShading: <bool>\n * }\n */\n\nclass MeshStandardMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.defines = { 'STANDARD': '' };\n\n\t\tthis.type = 'MeshStandardMaterial';\n\n\t\tthis.color = new Color( 0xffffff ); // diffuse\n\t\tthis.roughness = 1.0;\n\t\tthis.metalness = 0.0;\n\n\t\tthis.map = null;\n\n\t\tthis.lightMap = null;\n\t\tthis.lightMapIntensity = 1.0;\n\n\t\tthis.aoMap = null;\n\t\tthis.aoMapIntensity = 1.0;\n\n\t\tthis.emissive = new Color( 0x000000 );\n\t\tthis.emissiveIntensity = 1.0;\n\t\tthis.emissiveMap = null;\n\n\t\tthis.bumpMap = null;\n\t\tthis.bumpScale = 1;\n\n\t\tthis.normalMap = null;\n\t\tthis.normalMapType = TangentSpaceNormalMap;\n\t\tthis.normalScale = new Vector2( 1, 1 );\n\n\t\tthis.displacementMap = null;\n\t\tthis.displacementScale = 1;\n\t\tthis.displacementBias = 0;\n\n\t\tthis.roughnessMap = null;\n\n\t\tthis.metalnessMap = null;\n\n\t\tthis.alphaMap = null;\n\n\t\tthis.envMap = null;\n\t\tthis.envMapIntensity = 1.0;\n\n\t\tthis.refractionRatio = 0.98;\n\n\t\tthis.wireframe = false;\n\t\tthis.wireframeLinewidth = 1;\n\t\tthis.wireframeLinecap = 'round';\n\t\tthis.wireframeLinejoin = 'round';\n\n\t\tthis.skinning = false;\n\t\tthis.morphTargets = false;\n\t\tthis.morphNormals = false;\n\n\t\tthis.flatShading = false;\n\n\t\tthis.vertexTangents = false;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.defines = { 'STANDARD': '' };\n\n\t\tthis.color.copy( source.color );\n\t\tthis.roughness = source.roughness;\n\t\tthis.metalness = source.metalness;\n\n\t\tthis.map = source.map;\n\n\t\tthis.lightMap = source.lightMap;\n\t\tthis.lightMapIntensity = source.lightMapIntensity;\n\n\t\tthis.aoMap = source.aoMap;\n\t\tthis.aoMapIntensity = source.aoMapIntensity;\n\n\t\tthis.emissive.copy( source.emissive );\n\t\tthis.emissiveMap = source.emissiveMap;\n\t\tthis.emissiveIntensity = source.emissiveIntensity;\n\n\t\tthis.bumpMap = source.bumpMap;\n\t\tthis.bumpScale = source.bumpScale;\n\n\t\tthis.normalMap = source.normalMap;\n\t\tthis.normalMapType = source.normalMapType;\n\t\tthis.normalScale.copy( source.normalScale );\n\n\t\tthis.displacementMap = source.displacementMap;\n\t\tthis.displacementScale = source.displacementScale;\n\t\tthis.displacementBias = source.displacementBias;\n\n\t\tthis.roughnessMap = source.roughnessMap;\n\n\t\tthis.metalnessMap = source.metalnessMap;\n\n\t\tthis.alphaMap = source.alphaMap;\n\n\t\tthis.envMap = source.envMap;\n\t\tthis.envMapIntensity = source.envMapIntensity;\n\n\t\tthis.refractionRatio = source.refractionRatio;\n\n\t\tthis.wireframe = source.wireframe;\n\t\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\t\tthis.wireframeLinecap = source.wireframeLinecap;\n\t\tthis.wireframeLinejoin = source.wireframeLinejoin;\n\n\t\tthis.skinning = source.skinning;\n\t\tthis.morphTargets = source.morphTargets;\n\t\tthis.morphNormals = source.morphNormals;\n\n\t\tthis.flatShading = source.flatShading;\n\n\t\tthis.vertexTangents = source.vertexTangents;\n\n\t\treturn this;\n\n\t}\n\n}\n\nMeshStandardMaterial.prototype.isMeshStandardMaterial = true;\n\n/**\n * parameters = {\n *  clearcoat: <float>,\n *  clearcoatMap: new THREE.Texture( <Image> ),\n *  clearcoatRoughness: <float>,\n *  clearcoatRoughnessMap: new THREE.Texture( <Image> ),\n *  clearcoatNormalScale: <Vector2>,\n *  clearcoatNormalMap: new THREE.Texture( <Image> ),\n *\n *  reflectivity: <float>,\n *  ior: <float>,\n *\n *  sheen: <Color>,\n *\n *  transmission: <float>,\n *  transmissionMap: new THREE.Texture( <Image> )\n * }\n */\n\nclass MeshPhysicalMaterial extends MeshStandardMaterial {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.defines = {\n\n\t\t\t'STANDARD': '',\n\t\t\t'PHYSICAL': ''\n\n\t\t};\n\n\t\tthis.type = 'MeshPhysicalMaterial';\n\n\t\tthis.clearcoat = 0.0;\n\t\tthis.clearcoatMap = null;\n\t\tthis.clearcoatRoughness = 0.0;\n\t\tthis.clearcoatRoughnessMap = null;\n\t\tthis.clearcoatNormalScale = new Vector2( 1, 1 );\n\t\tthis.clearcoatNormalMap = null;\n\n\t\tthis.reflectivity = 0.5; // maps to F0 = 0.04\n\n\t\tObject.defineProperty( this, 'ior', {\n\t\t\tget: function () {\n\n\t\t\t\treturn ( 1 + 0.4 * this.reflectivity ) / ( 1 - 0.4 * this.reflectivity );\n\n\t\t\t},\n\t\t\tset: function ( ior ) {\n\n\t\t\t\tthis.reflectivity = clamp( 2.5 * ( ior - 1 ) / ( ior + 1 ), 0, 1 );\n\n\t\t\t}\n\t\t} );\n\n\t\tthis.sheen = null; // null will disable sheen bsdf\n\n\t\tthis.transmission = 0.0;\n\t\tthis.transmissionMap = null;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.defines = {\n\n\t\t\t'STANDARD': '',\n\t\t\t'PHYSICAL': ''\n\n\t\t};\n\n\t\tthis.clearcoat = source.clearcoat;\n\t\tthis.clearcoatMap = source.clearcoatMap;\n\t\tthis.clearcoatRoughness = source.clearcoatRoughness;\n\t\tthis.clearcoatRoughnessMap = source.clearcoatRoughnessMap;\n\t\tthis.clearcoatNormalMap = source.clearcoatNormalMap;\n\t\tthis.clearcoatNormalScale.copy( source.clearcoatNormalScale );\n\n\t\tthis.reflectivity = source.reflectivity;\n\n\t\tif ( source.sheen ) {\n\n\t\t\tthis.sheen = ( this.sheen || new Color() ).copy( source.sheen );\n\n\t\t} else {\n\n\t\t\tthis.sheen = null;\n\n\t\t}\n\n\t\tthis.transmission = source.transmission;\n\t\tthis.transmissionMap = source.transmissionMap;\n\n\t\treturn this;\n\n\t}\n\n}\n\nMeshPhysicalMaterial.prototype.isMeshPhysicalMaterial = true;\n\n/**\n * parameters = {\n *  color: <hex>,\n *  specular: <hex>,\n *  shininess: <float>,\n *  opacity: <float>,\n *\n *  map: new THREE.Texture( <Image> ),\n *\n *  lightMap: new THREE.Texture( <Image> ),\n *  lightMapIntensity: <float>\n *\n *  aoMap: new THREE.Texture( <Image> ),\n *  aoMapIntensity: <float>\n *\n *  emissive: <hex>,\n *  emissiveIntensity: <float>\n *  emissiveMap: new THREE.Texture( <Image> ),\n *\n *  bumpMap: new THREE.Texture( <Image> ),\n *  bumpScale: <float>,\n *\n *  normalMap: new THREE.Texture( <Image> ),\n *  normalMapType: THREE.TangentSpaceNormalMap,\n *  normalScale: <Vector2>,\n *\n *  displacementMap: new THREE.Texture( <Image> ),\n *  displacementScale: <float>,\n *  displacementBias: <float>,\n *\n *  specularMap: new THREE.Texture( <Image> ),\n *\n *  alphaMap: new THREE.Texture( <Image> ),\n *\n *  envMap: new THREE.CubeTexture( [posx, negx, posy, negy, posz, negz] ),\n *  combine: THREE.MultiplyOperation,\n *  reflectivity: <float>,\n *  refractionRatio: <float>,\n *\n *  wireframe: <boolean>,\n *  wireframeLinewidth: <float>,\n *\n *  skinning: <bool>,\n *  morphTargets: <bool>,\n *  morphNormals: <bool>,\n *\n *  flatShading: <bool>\n * }\n */\n\nclass MeshPhongMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'MeshPhongMaterial';\n\n\t\tthis.color = new Color( 0xffffff ); // diffuse\n\t\tthis.specular = new Color( 0x111111 );\n\t\tthis.shininess = 30;\n\n\t\tthis.map = null;\n\n\t\tthis.lightMap = null;\n\t\tthis.lightMapIntensity = 1.0;\n\n\t\tthis.aoMap = null;\n\t\tthis.aoMapIntensity = 1.0;\n\n\t\tthis.emissive = new Color( 0x000000 );\n\t\tthis.emissiveIntensity = 1.0;\n\t\tthis.emissiveMap = null;\n\n\t\tthis.bumpMap = null;\n\t\tthis.bumpScale = 1;\n\n\t\tthis.normalMap = null;\n\t\tthis.normalMapType = TangentSpaceNormalMap;\n\t\tthis.normalScale = new Vector2( 1, 1 );\n\n\t\tthis.displacementMap = null;\n\t\tthis.displacementScale = 1;\n\t\tthis.displacementBias = 0;\n\n\t\tthis.specularMap = null;\n\n\t\tthis.alphaMap = null;\n\n\t\tthis.envMap = null;\n\t\tthis.combine = MultiplyOperation;\n\t\tthis.reflectivity = 1;\n\t\tthis.refractionRatio = 0.98;\n\n\t\tthis.wireframe = false;\n\t\tthis.wireframeLinewidth = 1;\n\t\tthis.wireframeLinecap = 'round';\n\t\tthis.wireframeLinejoin = 'round';\n\n\t\tthis.skinning = false;\n\t\tthis.morphTargets = false;\n\t\tthis.morphNormals = false;\n\n\t\tthis.flatShading = false;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.color.copy( source.color );\n\t\tthis.specular.copy( source.specular );\n\t\tthis.shininess = source.shininess;\n\n\t\tthis.map = source.map;\n\n\t\tthis.lightMap = source.lightMap;\n\t\tthis.lightMapIntensity = source.lightMapIntensity;\n\n\t\tthis.aoMap = source.aoMap;\n\t\tthis.aoMapIntensity = source.aoMapIntensity;\n\n\t\tthis.emissive.copy( source.emissive );\n\t\tthis.emissiveMap = source.emissiveMap;\n\t\tthis.emissiveIntensity = source.emissiveIntensity;\n\n\t\tthis.bumpMap = source.bumpMap;\n\t\tthis.bumpScale = source.bumpScale;\n\n\t\tthis.normalMap = source.normalMap;\n\t\tthis.normalMapType = source.normalMapType;\n\t\tthis.normalScale.copy( source.normalScale );\n\n\t\tthis.displacementMap = source.displacementMap;\n\t\tthis.displacementScale = source.displacementScale;\n\t\tthis.displacementBias = source.displacementBias;\n\n\t\tthis.specularMap = source.specularMap;\n\n\t\tthis.alphaMap = source.alphaMap;\n\n\t\tthis.envMap = source.envMap;\n\t\tthis.combine = source.combine;\n\t\tthis.reflectivity = source.reflectivity;\n\t\tthis.refractionRatio = source.refractionRatio;\n\n\t\tthis.wireframe = source.wireframe;\n\t\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\t\tthis.wireframeLinecap = source.wireframeLinecap;\n\t\tthis.wireframeLinejoin = source.wireframeLinejoin;\n\n\t\tthis.skinning = source.skinning;\n\t\tthis.morphTargets = source.morphTargets;\n\t\tthis.morphNormals = source.morphNormals;\n\n\t\tthis.flatShading = source.flatShading;\n\n\t\treturn this;\n\n\t}\n\n}\n\nMeshPhongMaterial.prototype.isMeshPhongMaterial = true;\n\n/**\n * parameters = {\n *  color: <hex>,\n *\n *  map: new THREE.Texture( <Image> ),\n *  gradientMap: new THREE.Texture( <Image> ),\n *\n *  lightMap: new THREE.Texture( <Image> ),\n *  lightMapIntensity: <float>\n *\n *  aoMap: new THREE.Texture( <Image> ),\n *  aoMapIntensity: <float>\n *\n *  emissive: <hex>,\n *  emissiveIntensity: <float>\n *  emissiveMap: new THREE.Texture( <Image> ),\n *\n *  bumpMap: new THREE.Texture( <Image> ),\n *  bumpScale: <float>,\n *\n *  normalMap: new THREE.Texture( <Image> ),\n *  normalMapType: THREE.TangentSpaceNormalMap,\n *  normalScale: <Vector2>,\n *\n *  displacementMap: new THREE.Texture( <Image> ),\n *  displacementScale: <float>,\n *  displacementBias: <float>,\n *\n *  alphaMap: new THREE.Texture( <Image> ),\n *\n *  wireframe: <boolean>,\n *  wireframeLinewidth: <float>,\n *\n *  skinning: <bool>,\n *  morphTargets: <bool>,\n *  morphNormals: <bool>\n * }\n */\n\nclass MeshToonMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.defines = { 'TOON': '' };\n\n\t\tthis.type = 'MeshToonMaterial';\n\n\t\tthis.color = new Color( 0xffffff );\n\n\t\tthis.map = null;\n\t\tthis.gradientMap = null;\n\n\t\tthis.lightMap = null;\n\t\tthis.lightMapIntensity = 1.0;\n\n\t\tthis.aoMap = null;\n\t\tthis.aoMapIntensity = 1.0;\n\n\t\tthis.emissive = new Color( 0x000000 );\n\t\tthis.emissiveIntensity = 1.0;\n\t\tthis.emissiveMap = null;\n\n\t\tthis.bumpMap = null;\n\t\tthis.bumpScale = 1;\n\n\t\tthis.normalMap = null;\n\t\tthis.normalMapType = TangentSpaceNormalMap;\n\t\tthis.normalScale = new Vector2( 1, 1 );\n\n\t\tthis.displacementMap = null;\n\t\tthis.displacementScale = 1;\n\t\tthis.displacementBias = 0;\n\n\t\tthis.alphaMap = null;\n\n\t\tthis.wireframe = false;\n\t\tthis.wireframeLinewidth = 1;\n\t\tthis.wireframeLinecap = 'round';\n\t\tthis.wireframeLinejoin = 'round';\n\n\t\tthis.skinning = false;\n\t\tthis.morphTargets = false;\n\t\tthis.morphNormals = false;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.color.copy( source.color );\n\n\t\tthis.map = source.map;\n\t\tthis.gradientMap = source.gradientMap;\n\n\t\tthis.lightMap = source.lightMap;\n\t\tthis.lightMapIntensity = source.lightMapIntensity;\n\n\t\tthis.aoMap = source.aoMap;\n\t\tthis.aoMapIntensity = source.aoMapIntensity;\n\n\t\tthis.emissive.copy( source.emissive );\n\t\tthis.emissiveMap = source.emissiveMap;\n\t\tthis.emissiveIntensity = source.emissiveIntensity;\n\n\t\tthis.bumpMap = source.bumpMap;\n\t\tthis.bumpScale = source.bumpScale;\n\n\t\tthis.normalMap = source.normalMap;\n\t\tthis.normalMapType = source.normalMapType;\n\t\tthis.normalScale.copy( source.normalScale );\n\n\t\tthis.displacementMap = source.displacementMap;\n\t\tthis.displacementScale = source.displacementScale;\n\t\tthis.displacementBias = source.displacementBias;\n\n\t\tthis.alphaMap = source.alphaMap;\n\n\t\tthis.wireframe = source.wireframe;\n\t\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\t\tthis.wireframeLinecap = source.wireframeLinecap;\n\t\tthis.wireframeLinejoin = source.wireframeLinejoin;\n\n\t\tthis.skinning = source.skinning;\n\t\tthis.morphTargets = source.morphTargets;\n\t\tthis.morphNormals = source.morphNormals;\n\n\t\treturn this;\n\n\t}\n\n}\n\nMeshToonMaterial.prototype.isMeshToonMaterial = true;\n\n/**\n * parameters = {\n *  opacity: <float>,\n *\n *  bumpMap: new THREE.Texture( <Image> ),\n *  bumpScale: <float>,\n *\n *  normalMap: new THREE.Texture( <Image> ),\n *  normalMapType: THREE.TangentSpaceNormalMap,\n *  normalScale: <Vector2>,\n *\n *  displacementMap: new THREE.Texture( <Image> ),\n *  displacementScale: <float>,\n *  displacementBias: <float>,\n *\n *  wireframe: <boolean>,\n *  wireframeLinewidth: <float>\n *\n *  skinning: <bool>,\n *  morphTargets: <bool>,\n *  morphNormals: <bool>,\n *\n *  flatShading: <bool>\n * }\n */\n\nclass MeshNormalMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'MeshNormalMaterial';\n\n\t\tthis.bumpMap = null;\n\t\tthis.bumpScale = 1;\n\n\t\tthis.normalMap = null;\n\t\tthis.normalMapType = TangentSpaceNormalMap;\n\t\tthis.normalScale = new Vector2( 1, 1 );\n\n\t\tthis.displacementMap = null;\n\t\tthis.displacementScale = 1;\n\t\tthis.displacementBias = 0;\n\n\t\tthis.wireframe = false;\n\t\tthis.wireframeLinewidth = 1;\n\n\t\tthis.fog = false;\n\n\t\tthis.skinning = false;\n\t\tthis.morphTargets = false;\n\t\tthis.morphNormals = false;\n\n\t\tthis.flatShading = false;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.bumpMap = source.bumpMap;\n\t\tthis.bumpScale = source.bumpScale;\n\n\t\tthis.normalMap = source.normalMap;\n\t\tthis.normalMapType = source.normalMapType;\n\t\tthis.normalScale.copy( source.normalScale );\n\n\t\tthis.displacementMap = source.displacementMap;\n\t\tthis.displacementScale = source.displacementScale;\n\t\tthis.displacementBias = source.displacementBias;\n\n\t\tthis.wireframe = source.wireframe;\n\t\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\n\t\tthis.skinning = source.skinning;\n\t\tthis.morphTargets = source.morphTargets;\n\t\tthis.morphNormals = source.morphNormals;\n\n\t\tthis.flatShading = source.flatShading;\n\n\t\treturn this;\n\n\t}\n\n}\n\nMeshNormalMaterial.prototype.isMeshNormalMaterial = true;\n\n/**\n * parameters = {\n *  color: <hex>,\n *  opacity: <float>,\n *\n *  map: new THREE.Texture( <Image> ),\n *\n *  lightMap: new THREE.Texture( <Image> ),\n *  lightMapIntensity: <float>\n *\n *  aoMap: new THREE.Texture( <Image> ),\n *  aoMapIntensity: <float>\n *\n *  emissive: <hex>,\n *  emissiveIntensity: <float>\n *  emissiveMap: new THREE.Texture( <Image> ),\n *\n *  specularMap: new THREE.Texture( <Image> ),\n *\n *  alphaMap: new THREE.Texture( <Image> ),\n *\n *  envMap: new THREE.CubeTexture( [posx, negx, posy, negy, posz, negz] ),\n *  combine: THREE.Multiply,\n *  reflectivity: <float>,\n *  refractionRatio: <float>,\n *\n *  wireframe: <boolean>,\n *  wireframeLinewidth: <float>,\n *\n *  skinning: <bool>,\n *  morphTargets: <bool>,\n *  morphNormals: <bool>\n * }\n */\n\nclass MeshLambertMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'MeshLambertMaterial';\n\n\t\tthis.color = new Color( 0xffffff ); // diffuse\n\n\t\tthis.map = null;\n\n\t\tthis.lightMap = null;\n\t\tthis.lightMapIntensity = 1.0;\n\n\t\tthis.aoMap = null;\n\t\tthis.aoMapIntensity = 1.0;\n\n\t\tthis.emissive = new Color( 0x000000 );\n\t\tthis.emissiveIntensity = 1.0;\n\t\tthis.emissiveMap = null;\n\n\t\tthis.specularMap = null;\n\n\t\tthis.alphaMap = null;\n\n\t\tthis.envMap = null;\n\t\tthis.combine = MultiplyOperation;\n\t\tthis.reflectivity = 1;\n\t\tthis.refractionRatio = 0.98;\n\n\t\tthis.wireframe = false;\n\t\tthis.wireframeLinewidth = 1;\n\t\tthis.wireframeLinecap = 'round';\n\t\tthis.wireframeLinejoin = 'round';\n\n\t\tthis.skinning = false;\n\t\tthis.morphTargets = false;\n\t\tthis.morphNormals = false;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.color.copy( source.color );\n\n\t\tthis.map = source.map;\n\n\t\tthis.lightMap = source.lightMap;\n\t\tthis.lightMapIntensity = source.lightMapIntensity;\n\n\t\tthis.aoMap = source.aoMap;\n\t\tthis.aoMapIntensity = source.aoMapIntensity;\n\n\t\tthis.emissive.copy( source.emissive );\n\t\tthis.emissiveMap = source.emissiveMap;\n\t\tthis.emissiveIntensity = source.emissiveIntensity;\n\n\t\tthis.specularMap = source.specularMap;\n\n\t\tthis.alphaMap = source.alphaMap;\n\n\t\tthis.envMap = source.envMap;\n\t\tthis.combine = source.combine;\n\t\tthis.reflectivity = source.reflectivity;\n\t\tthis.refractionRatio = source.refractionRatio;\n\n\t\tthis.wireframe = source.wireframe;\n\t\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\t\tthis.wireframeLinecap = source.wireframeLinecap;\n\t\tthis.wireframeLinejoin = source.wireframeLinejoin;\n\n\t\tthis.skinning = source.skinning;\n\t\tthis.morphTargets = source.morphTargets;\n\t\tthis.morphNormals = source.morphNormals;\n\n\t\treturn this;\n\n\t}\n\n}\n\nMeshLambertMaterial.prototype.isMeshLambertMaterial = true;\n\n/**\n * parameters = {\n *  color: <hex>,\n *  opacity: <float>,\n *\n *  matcap: new THREE.Texture( <Image> ),\n *\n *  map: new THREE.Texture( <Image> ),\n *\n *  bumpMap: new THREE.Texture( <Image> ),\n *  bumpScale: <float>,\n *\n *  normalMap: new THREE.Texture( <Image> ),\n *  normalMapType: THREE.TangentSpaceNormalMap,\n *  normalScale: <Vector2>,\n *\n *  displacementMap: new THREE.Texture( <Image> ),\n *  displacementScale: <float>,\n *  displacementBias: <float>,\n *\n *  alphaMap: new THREE.Texture( <Image> ),\n *\n *  skinning: <bool>,\n *  morphTargets: <bool>,\n *  morphNormals: <bool>\n *\n *  flatShading: <bool>\n * }\n */\n\nclass MeshMatcapMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.defines = { 'MATCAP': '' };\n\n\t\tthis.type = 'MeshMatcapMaterial';\n\n\t\tthis.color = new Color( 0xffffff ); // diffuse\n\n\t\tthis.matcap = null;\n\n\t\tthis.map = null;\n\n\t\tthis.bumpMap = null;\n\t\tthis.bumpScale = 1;\n\n\t\tthis.normalMap = null;\n\t\tthis.normalMapType = TangentSpaceNormalMap;\n\t\tthis.normalScale = new Vector2( 1, 1 );\n\n\t\tthis.displacementMap = null;\n\t\tthis.displacementScale = 1;\n\t\tthis.displacementBias = 0;\n\n\t\tthis.alphaMap = null;\n\n\t\tthis.skinning = false;\n\t\tthis.morphTargets = false;\n\t\tthis.morphNormals = false;\n\n\t\tthis.flatShading = false;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.defines = { 'MATCAP': '' };\n\n\t\tthis.color.copy( source.color );\n\n\t\tthis.matcap = source.matcap;\n\n\t\tthis.map = source.map;\n\n\t\tthis.bumpMap = source.bumpMap;\n\t\tthis.bumpScale = source.bumpScale;\n\n\t\tthis.normalMap = source.normalMap;\n\t\tthis.normalMapType = source.normalMapType;\n\t\tthis.normalScale.copy( source.normalScale );\n\n\t\tthis.displacementMap = source.displacementMap;\n\t\tthis.displacementScale = source.displacementScale;\n\t\tthis.displacementBias = source.displacementBias;\n\n\t\tthis.alphaMap = source.alphaMap;\n\n\t\tthis.skinning = source.skinning;\n\t\tthis.morphTargets = source.morphTargets;\n\t\tthis.morphNormals = source.morphNormals;\n\n\t\tthis.flatShading = source.flatShading;\n\n\t\treturn this;\n\n\t}\n\n}\n\nMeshMatcapMaterial.prototype.isMeshMatcapMaterial = true;\n\n/**\n * parameters = {\n *  color: <hex>,\n *  opacity: <float>,\n *\n *  linewidth: <float>,\n *\n *  scale: <float>,\n *  dashSize: <float>,\n *  gapSize: <float>\n * }\n */\n\nclass LineDashedMaterial extends LineBasicMaterial {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'LineDashedMaterial';\n\n\t\tthis.scale = 1;\n\t\tthis.dashSize = 3;\n\t\tthis.gapSize = 1;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.scale = source.scale;\n\t\tthis.dashSize = source.dashSize;\n\t\tthis.gapSize = source.gapSize;\n\n\t\treturn this;\n\n\t}\n\n}\n\nLineDashedMaterial.prototype.isLineDashedMaterial = true;\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 = 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 = 0, referenceClip = targetClip, fps = 30 ) {\n\n\t\tif ( fps <= 0 ) fps = 30;\n\n\t\tconst numTracks = referenceClip.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\t&& track.ValueTypeName === referenceTrackType;\n\n\t\t\t} );\n\n\t\t\tif ( targetTrack === undefined ) continue;\n\n\t\t\tlet referenceOffset = 0;\n\t\t\tconst referenceValueSize = referenceTrack.getValueSize();\n\n\t\t\tif ( referenceTrack.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline ) {\n\n\t\t\t\treferenceOffset = referenceValueSize / 3;\n\n\t\t\t}\n\n\t\t\tlet targetOffset = 0;\n\t\t\tconst targetValueSize = targetTrack.getValueSize();\n\n\t\t\tif ( targetTrack.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline ) {\n\n\t\t\t\ttargetOffset = targetValueSize / 3;\n\n\t\t\t}\n\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\tconst startIndex = referenceOffset;\n\t\t\t\tconst endIndex = referenceValueSize - referenceOffset;\n\t\t\t\treferenceValue = AnimationUtils.arraySlice( referenceTrack.values, startIndex, endIndex );\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 * referenceValueSize + referenceOffset;\n\t\t\t\tconst endIndex = startIndex + referenceValueSize - referenceOffset;\n\t\t\t\treferenceValue = AnimationUtils.arraySlice( referenceTrack.values, startIndex, endIndex );\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\tconst startIndex = referenceOffset;\n\t\t\t\tconst endIndex = referenceValueSize - referenceOffset;\n\t\t\t\tinterpolant.evaluate( referenceTime );\n\t\t\t\treferenceValue = AnimationUtils.arraySlice( interpolant.resultBuffer, startIndex, endIndex );\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().fromArray( referenceValue ).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 * targetValueSize + targetOffset;\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\tconst valueEnd = targetValueSize - targetOffset * 2;\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 < valueEnd; ++ 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\nclass Interpolant {\n\n\tconstructor( parameterPositions, sampleValues, sampleSize, resultBuffer ) {\n\n\t\tthis.parameterPositions = parameterPositions;\n\t\tthis._cachedIndex = 0;\n\n\t\tthis.resultBuffer = resultBuffer !== undefined ?\n\t\t\tresultBuffer : new sampleValues.constructor( sampleSize );\n\t\tthis.sampleValues = sampleValues;\n\t\tthis.valueSize = sampleSize;\n\n\t\tthis.settings = null;\n\t\tthis.DefaultSettings_ = {};\n\n\t}\n\n\tevaluate( t ) {\n\n\t\tconst pp = this.parameterPositions;\n\t\tlet i1 = this._cachedIndex,\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\tgetSettings_() {\n\n\t\treturn this.settings || this.DefaultSettings_;\n\n\t}\n\n\tcopySampleValue_( 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_( /* 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_( /* i1, t0, t1 */ ) {\n\n\t\t// empty\n\n\t}\n\n}\n\n// ALIAS DEFINITIONS\n\nInterpolant.prototype.beforeStart_ = Interpolant.prototype.copySampleValue_;\nInterpolant.prototype.afterEnd_ = Interpolant.prototype.copySampleValue_;\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\nclass CubicInterpolant extends Interpolant {\n\n\tconstructor( parameterPositions, sampleValues, sampleSize, resultBuffer ) {\n\n\t\tsuper( parameterPositions, sampleValues, sampleSize, resultBuffer );\n\n\t\tthis._weightPrev = - 0;\n\t\tthis._offsetPrev = - 0;\n\t\tthis._weightNext = - 0;\n\t\tthis._offsetNext = - 0;\n\n\t\tthis.DefaultSettings_ = {\n\n\t\t\tendingStart: ZeroCurvatureEnding,\n\t\t\tendingEnd: ZeroCurvatureEnding\n\n\t\t};\n\n\t}\n\n\tintervalChanged_( i1, t0, t1 ) {\n\n\t\tconst pp = this.parameterPositions;\n\t\tlet iPrev = 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_( 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\nclass LinearInterpolant extends Interpolant {\n\n\tconstructor( parameterPositions, sampleValues, sampleSize, resultBuffer ) {\n\n\t\tsuper( parameterPositions, sampleValues, sampleSize, resultBuffer );\n\n\t}\n\n\tinterpolate_( 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\nclass DiscreteInterpolant extends Interpolant {\n\n\tconstructor( parameterPositions, sampleValues, sampleSize, resultBuffer ) {\n\n\t\tsuper( parameterPositions, sampleValues, sampleSize, resultBuffer );\n\n\t}\n\n\tinterpolate_( i1 /*, t0, t, t1 */ ) {\n\n\t\treturn this.copySampleValue_( i1 - 1 );\n\n\t}\n\n}\n\nclass KeyframeTrack {\n\n\tconstructor( name, times, values, interpolation ) {\n\n\t\tif ( name === undefined ) throw new Error( 'THREE.KeyframeTrack: track name is undefined' );\n\t\tif ( times === undefined || times.length === 0 ) throw new Error( 'THREE.KeyframeTrack: no keyframes in track named ' + name );\n\n\t\tthis.name = name;\n\n\t\tthis.times = AnimationUtils.convertArray( times, this.TimeBufferType );\n\t\tthis.values = AnimationUtils.convertArray( values, this.ValueBufferType );\n\n\t\tthis.setInterpolation( interpolation || this.DefaultInterpolation );\n\n\t}\n\n\t// Serialization (in static context, because of constructor invocation\n\t// and automatic invocation of .toJSON):\n\n\tstatic toJSON( 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 !== this.toJSON ) {\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\tInterpolantFactoryMethodDiscrete( result ) {\n\n\t\treturn new DiscreteInterpolant( this.times, this.values, this.getValueSize(), result );\n\n\t}\n\n\tInterpolantFactoryMethodLinear( result ) {\n\n\t\treturn new LinearInterpolant( this.times, this.values, this.getValueSize(), result );\n\n\t}\n\n\tInterpolantFactoryMethodSmooth( result ) {\n\n\t\treturn new CubicInterpolant( this.times, this.values, this.getValueSize(), result );\n\n\t}\n\n\tsetInterpolation( 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() {\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() {\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( 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( 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( 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() {\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() {\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 !== times[ 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() {\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\nKeyframeTrack.prototype.TimeBufferType = Float32Array;\nKeyframeTrack.prototype.ValueBufferType = Float32Array;\nKeyframeTrack.prototype.DefaultInterpolation = InterpolateLinear;\n\n/**\n * A Track of Boolean keyframe values.\n */\nclass BooleanKeyframeTrack extends KeyframeTrack {}\n\nBooleanKeyframeTrack.prototype.ValueTypeName = 'bool';\nBooleanKeyframeTrack.prototype.ValueBufferType = Array;\nBooleanKeyframeTrack.prototype.DefaultInterpolation = InterpolateDiscrete;\nBooleanKeyframeTrack.prototype.InterpolantFactoryMethodLinear = undefined;\nBooleanKeyframeTrack.prototype.InterpolantFactoryMethodSmooth = undefined;\n\n/**\n * A Track of keyframe values that represent color.\n */\nclass ColorKeyframeTrack extends KeyframeTrack {}\n\nColorKeyframeTrack.prototype.ValueTypeName = 'color';\n\n/**\n * A Track of numeric keyframe values.\n */\nclass NumberKeyframeTrack extends KeyframeTrack {}\n\nNumberKeyframeTrack.prototype.ValueTypeName = 'number';\n\n/**\n * Spherical linear unit quaternion interpolant.\n */\n\nclass QuaternionLinearInterpolant extends Interpolant {\n\n\tconstructor( parameterPositions, sampleValues, sampleSize, resultBuffer ) {\n\n\t\tsuper( parameterPositions, sampleValues, sampleSize, resultBuffer );\n\n\t}\n\n\tinterpolate_( 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 */\nclass QuaternionKeyframeTrack extends KeyframeTrack {\n\n\tInterpolantFactoryMethodLinear( result ) {\n\n\t\treturn new QuaternionLinearInterpolant( this.times, this.values, this.getValueSize(), result );\n\n\t}\n\n}\n\nQuaternionKeyframeTrack.prototype.ValueTypeName = 'quaternion';\n// ValueBufferType is inherited\nQuaternionKeyframeTrack.prototype.DefaultInterpolation = InterpolateLinear;\nQuaternionKeyframeTrack.prototype.InterpolantFactoryMethodSmooth = undefined;\n\n/**\n * A Track that interpolates Strings\n */\nclass StringKeyframeTrack extends KeyframeTrack {}\n\nStringKeyframeTrack.prototype.ValueTypeName = 'string';\nStringKeyframeTrack.prototype.ValueBufferType = Array;\nStringKeyframeTrack.prototype.DefaultInterpolation = InterpolateDiscrete;\nStringKeyframeTrack.prototype.InterpolantFactoryMethodLinear = undefined;\nStringKeyframeTrack.prototype.InterpolantFactoryMethodSmooth = undefined;\n\n/**\n * A Track of vectored keyframe values.\n */\nclass VectorKeyframeTrack extends KeyframeTrack {}\n\nVectorKeyframeTrack.prototype.ValueTypeName = 'vector';\n\nclass AnimationClip {\n\n\tconstructor( name, duration = - 1, tracks, blendMode = NormalAnimationBlendMode ) {\n\n\t\tthis.name = name;\n\t\tthis.tracks = tracks;\n\t\tthis.duration = duration;\n\t\tthis.blendMode = blendMode;\n\n\t\tthis.uuid = generateUUID();\n\n\t\t// this means it should figure out its duration by scanning the tracks\n\t\tif ( this.duration < 0 ) {\n\n\t\t\tthis.resetDuration();\n\n\t\t}\n\n\t}\n\n\n\tstatic parse( 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\tconst clip = new this( json.name, json.duration, tracks, json.blendMode );\n\t\tclip.uuid = json.uuid;\n\n\t\treturn clip;\n\n\t}\n\n\tstatic toJSON( 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\tstatic CreateFromMorphTargetSequence( 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 this( name, - 1, tracks );\n\n\t}\n\n\tstatic findByName( 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\tstatic CreateClipsFromMorphTargetSequences( 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( this.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\tstatic parseAnimation( 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 this( clipName, duration, tracks, blendMode );\n\n\t\treturn clip;\n\n\t}\n\n\tresetDuration() {\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() {\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() {\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() {\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() {\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 this.constructor( this.name, this.duration, tracks, this.blendMode );\n\n\t}\n\n\ttoJSON() {\n\n\t\treturn this.constructor.toJSON( this );\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\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\nclass LoadingManager {\n\n\tconstructor( onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tlet isLoading = false;\n\t\tlet itemsLoaded = 0;\n\t\tlet itemsTotal = 0;\n\t\tlet urlModifier = undefined;\n\t\tconst handlers = [];\n\n\t\t// Refer to #5689 for the reason why we don't set .onStart\n\t\t// in the constructor\n\n\t\tthis.onStart = undefined;\n\t\tthis.onLoad = onLoad;\n\t\tthis.onProgress = onProgress;\n\t\tthis.onError = onError;\n\n\t\tthis.itemStart = function ( url ) {\n\n\t\t\titemsTotal ++;\n\n\t\t\tif ( isLoading === false ) {\n\n\t\t\t\tif ( scope.onStart !== undefined ) {\n\n\t\t\t\t\tscope.onStart( url, itemsLoaded, itemsTotal );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tisLoading = true;\n\n\t\t};\n\n\t\tthis.itemEnd = function ( url ) {\n\n\t\t\titemsLoaded ++;\n\n\t\t\tif ( scope.onProgress !== undefined ) {\n\n\t\t\t\tscope.onProgress( url, itemsLoaded, itemsTotal );\n\n\t\t\t}\n\n\t\t\tif ( itemsLoaded === itemsTotal ) {\n\n\t\t\t\tisLoading = false;\n\n\t\t\t\tif ( scope.onLoad !== undefined ) {\n\n\t\t\t\t\tscope.onLoad();\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.itemError = function ( url ) {\n\n\t\t\tif ( scope.onError !== undefined ) {\n\n\t\t\t\tscope.onError( url );\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.resolveURL = function ( url ) {\n\n\t\t\tif ( urlModifier ) {\n\n\t\t\t\treturn urlModifier( url );\n\n\t\t\t}\n\n\t\t\treturn url;\n\n\t\t};\n\n\t\tthis.setURLModifier = function ( transform ) {\n\n\t\t\turlModifier = transform;\n\n\t\t\treturn this;\n\n\t\t};\n\n\t\tthis.addHandler = function ( regex, loader ) {\n\n\t\t\thandlers.push( regex, loader );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t\tthis.removeHandler = function ( regex ) {\n\n\t\t\tconst index = handlers.indexOf( regex );\n\n\t\t\tif ( index !== - 1 ) {\n\n\t\t\t\thandlers.splice( index, 2 );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t};\n\n\t\tthis.getHandler = function ( file ) {\n\n\t\t\tfor ( let i = 0, l = handlers.length; i < l; i += 2 ) {\n\n\t\t\t\tconst regex = handlers[ i ];\n\t\t\t\tconst loader = handlers[ i + 1 ];\n\n\t\t\t\tif ( regex.global ) regex.lastIndex = 0; // see #17920\n\n\t\t\t\tif ( regex.test( file ) ) {\n\n\t\t\t\t\treturn loader;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn null;\n\n\t\t};\n\n\t}\n\n}\n\nconst DefaultLoadingManager = new LoadingManager();\n\nclass Loader {\n\n\tconstructor( manager ) {\n\n\t\tthis.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager;\n\n\t\tthis.crossOrigin = 'anonymous';\n\t\tthis.withCredentials = false;\n\t\tthis.path = '';\n\t\tthis.resourcePath = '';\n\t\tthis.requestHeader = {};\n\n\t}\n\n\tload( /* url, onLoad, onProgress, onError */ ) {}\n\n\tloadAsync( 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( /* data */ ) {}\n\n\tsetCrossOrigin( crossOrigin ) {\n\n\t\tthis.crossOrigin = crossOrigin;\n\t\treturn this;\n\n\t}\n\n\tsetWithCredentials( value ) {\n\n\t\tthis.withCredentials = value;\n\t\treturn this;\n\n\t}\n\n\tsetPath( path ) {\n\n\t\tthis.path = path;\n\t\treturn this;\n\n\t}\n\n\tsetResourcePath( resourcePath ) {\n\n\t\tthis.resourcePath = resourcePath;\n\t\treturn this;\n\n\t}\n\n\tsetRequestHeader( requestHeader ) {\n\n\t\tthis.requestHeader = requestHeader;\n\t\treturn this;\n\n\t}\n\n}\n\nconst loading = {};\n\nclass FileLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( 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( value ) {\n\n\t\tthis.responseType = value;\n\t\treturn this;\n\n\t}\n\n\tsetMimeType( value ) {\n\n\t\tthis.mimeType = value;\n\t\treturn this;\n\n\t}\n\n}\n\nclass AnimationLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( 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.setWithCredentials( this.withCredentials );\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( 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\nclass CompressedTextureLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst images = [];\n\n\t\tconst texture = new CompressedTexture();\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\t\tloader.setWithCredentials( scope.withCredentials );\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 ) texture.minFilter = LinearFilter;\n\n\t\t\t\t\ttexture.image = images;\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\ttexture.image = images;\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\nclass ImageLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( 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\nclass CubeTextureLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( 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\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\nclass DataTextureLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( 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.setWithCredentials( scope.withCredentials );\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.encoding !== undefined ) {\n\n\t\t\t\ttexture.encoding = texData.encoding;\n\n\t\t\t}\n\n\t\t\tif ( texData.flipY !== undefined ) {\n\n\t\t\t\ttexture.flipY = texData.flipY;\n\n\t\t\t}\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\tif ( texData.generateMipmaps !== undefined ) {\n\n\t\t\t\ttexture.generateMipmaps = texData.generateMipmaps;\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\nclass TextureLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( 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\nclass Curve {\n\n\tconstructor() {\n\n\t\tthis.type = 'Curve';\n\n\t\tthis.arcLengthDivisions = 200;\n\n\t}\n\n\t// Virtual base class method to overwrite and implement in subclasses\n\t//\t- t [0 .. 1]\n\n\tgetPoint( /* 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( 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( 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( 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() {\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( 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() {\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( u, distance ) {\n\n\t\tconst arcLengths = this.getLengths();\n\n\t\tlet i = 0;\n\t\tconst 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( 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( u, optionalTarget ) {\n\n\t\tconst t = this.getUtoTmapping( u );\n\t\treturn this.getTangent( t, optionalTarget );\n\n\t}\n\n\tcomputeFrenetFrames( 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( 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( 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() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tthis.arcLengthDivisions = source.arcLengthDivisions;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\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( json ) {\n\n\t\tthis.arcLengthDivisions = json.arcLengthDivisions;\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass EllipseCurve extends Curve {\n\n\tconstructor( aX = 0, aY = 0, xRadius = 1, yRadius = 1, aStartAngle = 0, aEndAngle = Math.PI * 2, aClockwise = false, aRotation = 0 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'EllipseCurve';\n\n\t\tthis.aX = aX;\n\t\tthis.aY = aY;\n\n\t\tthis.xRadius = xRadius;\n\t\tthis.yRadius = yRadius;\n\n\t\tthis.aStartAngle = aStartAngle;\n\t\tthis.aEndAngle = aEndAngle;\n\n\t\tthis.aClockwise = aClockwise;\n\n\t\tthis.aRotation = aRotation;\n\n\t}\n\n\tgetPoint( t, optionalTarget ) {\n\n\t\tconst point = optionalTarget || new Vector2();\n\n\t\tconst twoPi = Math.PI * 2;\n\t\tlet deltaAngle = this.aEndAngle - this.aStartAngle;\n\t\tconst samePoints = Math.abs( deltaAngle ) < Number.EPSILON;\n\n\t\t// ensures that deltaAngle is 0 .. 2 PI\n\t\twhile ( deltaAngle < 0 ) deltaAngle += twoPi;\n\t\twhile ( deltaAngle > twoPi ) deltaAngle -= twoPi;\n\n\t\tif ( deltaAngle < Number.EPSILON ) {\n\n\t\t\tif ( samePoints ) {\n\n\t\t\t\tdeltaAngle = 0;\n\n\t\t\t} else {\n\n\t\t\t\tdeltaAngle = twoPi;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( this.aClockwise === true && ! samePoints ) {\n\n\t\t\tif ( deltaAngle === twoPi ) {\n\n\t\t\t\tdeltaAngle = - twoPi;\n\n\t\t\t} else {\n\n\t\t\t\tdeltaAngle = deltaAngle - twoPi;\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst angle = this.aStartAngle + t * deltaAngle;\n\t\tlet x = this.aX + this.xRadius * Math.cos( angle );\n\t\tlet y = this.aY + this.yRadius * Math.sin( angle );\n\n\t\tif ( this.aRotation !== 0 ) {\n\n\t\t\tconst cos = Math.cos( this.aRotation );\n\t\t\tconst sin = Math.sin( this.aRotation );\n\n\t\t\tconst tx = x - this.aX;\n\t\t\tconst ty = y - this.aY;\n\n\t\t\t// Rotate the point about the center of the ellipse.\n\t\t\tx = tx * cos - ty * sin + this.aX;\n\t\t\ty = tx * sin + ty * cos + this.aY;\n\n\t\t}\n\n\t\treturn point.set( x, y );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.aX = source.aX;\n\t\tthis.aY = source.aY;\n\n\t\tthis.xRadius = source.xRadius;\n\t\tthis.yRadius = source.yRadius;\n\n\t\tthis.aStartAngle = source.aStartAngle;\n\t\tthis.aEndAngle = source.aEndAngle;\n\n\t\tthis.aClockwise = source.aClockwise;\n\n\t\tthis.aRotation = source.aRotation;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.aX = this.aX;\n\t\tdata.aY = this.aY;\n\n\t\tdata.xRadius = this.xRadius;\n\t\tdata.yRadius = this.yRadius;\n\n\t\tdata.aStartAngle = this.aStartAngle;\n\t\tdata.aEndAngle = this.aEndAngle;\n\n\t\tdata.aClockwise = this.aClockwise;\n\n\t\tdata.aRotation = this.aRotation;\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.aX = json.aX;\n\t\tthis.aY = json.aY;\n\n\t\tthis.xRadius = json.xRadius;\n\t\tthis.yRadius = json.yRadius;\n\n\t\tthis.aStartAngle = json.aStartAngle;\n\t\tthis.aEndAngle = json.aEndAngle;\n\n\t\tthis.aClockwise = json.aClockwise;\n\n\t\tthis.aRotation = json.aRotation;\n\n\t\treturn this;\n\n\t}\n\n}\n\nEllipseCurve.prototype.isEllipseCurve = true;\n\nclass ArcCurve extends EllipseCurve {\n\n\tconstructor( aX, aY, aRadius, aStartAngle, aEndAngle, aClockwise ) {\n\n\t\tsuper( aX, aY, aRadius, aRadius, aStartAngle, aEndAngle, aClockwise );\n\n\t\tthis.type = 'ArcCurve';\n\n\t}\n\n}\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\nclass CatmullRomCurve3 extends Curve {\n\n\tconstructor( points = [], closed = false, curveType = 'centripetal', tension = 0.5 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'CatmullRomCurve3';\n\n\t\tthis.points = points;\n\t\tthis.closed = closed;\n\t\tthis.curveType = curveType;\n\t\tthis.tension = tension;\n\n\t}\n\n\tgetPoint( t, optionalTarget = new Vector3() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tconst points = this.points;\n\t\tconst l = points.length;\n\n\t\tconst p = ( l - ( this.closed ? 0 : 1 ) ) * t;\n\t\tlet intPoint = Math.floor( p );\n\t\tlet weight = p - intPoint;\n\n\t\tif ( this.closed ) {\n\n\t\t\tintPoint += intPoint > 0 ? 0 : ( Math.floor( Math.abs( intPoint ) / l ) + 1 ) * l;\n\n\t\t} else if ( weight === 0 && intPoint === l - 1 ) {\n\n\t\t\tintPoint = l - 2;\n\t\t\tweight = 1;\n\n\t\t}\n\n\t\tlet p0, p3; // 4 points (p1 & p2 defined below)\n\n\t\tif ( this.closed || intPoint > 0 ) {\n\n\t\t\tp0 = points[ ( intPoint - 1 ) % l ];\n\n\t\t} else {\n\n\t\t\t// extrapolate first point\n\t\t\ttmp.subVectors( points[ 0 ], points[ 1 ] ).add( points[ 0 ] );\n\t\t\tp0 = tmp;\n\n\t\t}\n\n\t\tconst p1 = points[ intPoint % l ];\n\t\tconst p2 = points[ ( intPoint + 1 ) % l ];\n\n\t\tif ( this.closed || intPoint + 2 < l ) {\n\n\t\t\tp3 = points[ ( intPoint + 2 ) % l ];\n\n\t\t} else {\n\n\t\t\t// extrapolate last point\n\t\t\ttmp.subVectors( points[ l - 1 ], points[ l - 2 ] ).add( points[ l - 1 ] );\n\t\t\tp3 = tmp;\n\n\t\t}\n\n\t\tif ( this.curveType === 'centripetal' || this.curveType === 'chordal' ) {\n\n\t\t\t// init Centripetal / Chordal Catmull-Rom\n\t\t\tconst pow = this.curveType === 'chordal' ? 0.5 : 0.25;\n\t\t\tlet dt0 = Math.pow( p0.distanceToSquared( p1 ), pow );\n\t\t\tlet dt1 = Math.pow( p1.distanceToSquared( p2 ), pow );\n\t\t\tlet dt2 = Math.pow( p2.distanceToSquared( p3 ), pow );\n\n\t\t\t// safety check for repeated points\n\t\t\tif ( dt1 < 1e-4 ) dt1 = 1.0;\n\t\t\tif ( dt0 < 1e-4 ) dt0 = dt1;\n\t\t\tif ( dt2 < 1e-4 ) dt2 = dt1;\n\n\t\t\tpx.initNonuniformCatmullRom( p0.x, p1.x, p2.x, p3.x, dt0, dt1, dt2 );\n\t\t\tpy.initNonuniformCatmullRom( p0.y, p1.y, p2.y, p3.y, dt0, dt1, dt2 );\n\t\t\tpz.initNonuniformCatmullRom( p0.z, p1.z, p2.z, p3.z, dt0, dt1, dt2 );\n\n\t\t} else if ( this.curveType === 'catmullrom' ) {\n\n\t\t\tpx.initCatmullRom( p0.x, p1.x, p2.x, p3.x, this.tension );\n\t\t\tpy.initCatmullRom( p0.y, p1.y, p2.y, p3.y, this.tension );\n\t\t\tpz.initCatmullRom( p0.z, p1.z, p2.z, p3.z, this.tension );\n\n\t\t}\n\n\t\tpoint.set(\n\t\t\tpx.calc( weight ),\n\t\t\tpy.calc( weight ),\n\t\t\tpz.calc( weight )\n\t\t);\n\n\t\treturn point;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.points = [];\n\n\t\tfor ( let i = 0, l = source.points.length; i < l; i ++ ) {\n\n\t\t\tconst point = source.points[ i ];\n\n\t\t\tthis.points.push( point.clone() );\n\n\t\t}\n\n\t\tthis.closed = source.closed;\n\t\tthis.curveType = source.curveType;\n\t\tthis.tension = source.tension;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.points = [];\n\n\t\tfor ( let i = 0, l = this.points.length; i < l; i ++ ) {\n\n\t\t\tconst point = this.points[ i ];\n\t\t\tdata.points.push( point.toArray() );\n\n\t\t}\n\n\t\tdata.closed = this.closed;\n\t\tdata.curveType = this.curveType;\n\t\tdata.tension = this.tension;\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.points = [];\n\n\t\tfor ( let i = 0, l = json.points.length; i < l; i ++ ) {\n\n\t\t\tconst point = json.points[ i ];\n\t\t\tthis.points.push( new Vector3().fromArray( point ) );\n\n\t\t}\n\n\t\tthis.closed = json.closed;\n\t\tthis.curveType = json.curveType;\n\t\tthis.tension = json.tension;\n\n\t\treturn this;\n\n\t}\n\n}\n\nCatmullRomCurve3.prototype.isCatmullRomCurve3 = true;\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\nclass CubicBezierCurve extends Curve {\n\n\tconstructor( v0 = new Vector2(), v1 = new Vector2(), v2 = new Vector2(), v3 = new Vector2() ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'CubicBezierCurve';\n\n\t\tthis.v0 = v0;\n\t\tthis.v1 = v1;\n\t\tthis.v2 = v2;\n\t\tthis.v3 = v3;\n\n\t}\n\n\tgetPoint( t, optionalTarget = new Vector2() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tconst v0 = this.v0, v1 = this.v1, v2 = this.v2, v3 = this.v3;\n\n\t\tpoint.set(\n\t\t\tCubicBezier( t, v0.x, v1.x, v2.x, v3.x ),\n\t\t\tCubicBezier( t, v0.y, v1.y, v2.y, v3.y )\n\t\t);\n\n\t\treturn point;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.v0.copy( source.v0 );\n\t\tthis.v1.copy( source.v1 );\n\t\tthis.v2.copy( source.v2 );\n\t\tthis.v3.copy( source.v3 );\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.v0 = this.v0.toArray();\n\t\tdata.v1 = this.v1.toArray();\n\t\tdata.v2 = this.v2.toArray();\n\t\tdata.v3 = this.v3.toArray();\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.v0.fromArray( json.v0 );\n\t\tthis.v1.fromArray( json.v1 );\n\t\tthis.v2.fromArray( json.v2 );\n\t\tthis.v3.fromArray( json.v3 );\n\n\t\treturn this;\n\n\t}\n\n}\n\nCubicBezierCurve.prototype.isCubicBezierCurve = true;\n\nclass CubicBezierCurve3 extends Curve {\n\n\tconstructor( v0 = new Vector3(), v1 = new Vector3(), v2 = new Vector3(), v3 = new Vector3() ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'CubicBezierCurve3';\n\n\t\tthis.v0 = v0;\n\t\tthis.v1 = v1;\n\t\tthis.v2 = v2;\n\t\tthis.v3 = v3;\n\n\t}\n\n\tgetPoint( t, optionalTarget = new Vector3() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tconst v0 = this.v0, v1 = this.v1, v2 = this.v2, v3 = this.v3;\n\n\t\tpoint.set(\n\t\t\tCubicBezier( t, v0.x, v1.x, v2.x, v3.x ),\n\t\t\tCubicBezier( t, v0.y, v1.y, v2.y, v3.y ),\n\t\t\tCubicBezier( t, v0.z, v1.z, v2.z, v3.z )\n\t\t);\n\n\t\treturn point;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.v0.copy( source.v0 );\n\t\tthis.v1.copy( source.v1 );\n\t\tthis.v2.copy( source.v2 );\n\t\tthis.v3.copy( source.v3 );\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.v0 = this.v0.toArray();\n\t\tdata.v1 = this.v1.toArray();\n\t\tdata.v2 = this.v2.toArray();\n\t\tdata.v3 = this.v3.toArray();\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.v0.fromArray( json.v0 );\n\t\tthis.v1.fromArray( json.v1 );\n\t\tthis.v2.fromArray( json.v2 );\n\t\tthis.v3.fromArray( json.v3 );\n\n\t\treturn this;\n\n\t}\n\n}\n\nCubicBezierCurve3.prototype.isCubicBezierCurve3 = true;\n\nclass LineCurve extends Curve {\n\n\tconstructor( v1 = new Vector2(), v2 = new Vector2() ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'LineCurve';\n\n\t\tthis.v1 = v1;\n\t\tthis.v2 = v2;\n\n\t}\n\n\tgetPoint( t, optionalTarget = new Vector2() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tif ( t === 1 ) {\n\n\t\t\tpoint.copy( this.v2 );\n\n\t\t} else {\n\n\t\t\tpoint.copy( this.v2 ).sub( this.v1 );\n\t\t\tpoint.multiplyScalar( t ).add( this.v1 );\n\n\t\t}\n\n\t\treturn point;\n\n\t}\n\n\t// Line curve is linear, so we can overwrite default getPointAt\n\tgetPointAt( u, optionalTarget ) {\n\n\t\treturn this.getPoint( u, optionalTarget );\n\n\t}\n\n\tgetTangent( t, optionalTarget ) {\n\n\t\tconst tangent = optionalTarget || new Vector2();\n\n\t\ttangent.copy( this.v2 ).sub( this.v1 ).normalize();\n\n\t\treturn tangent;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.v1.copy( source.v1 );\n\t\tthis.v2.copy( source.v2 );\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.v1 = this.v1.toArray();\n\t\tdata.v2 = this.v2.toArray();\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.v1.fromArray( json.v1 );\n\t\tthis.v2.fromArray( json.v2 );\n\n\t\treturn this;\n\n\t}\n\n}\n\nLineCurve.prototype.isLineCurve = true;\n\nclass LineCurve3 extends Curve {\n\n\tconstructor( v1 = new Vector3(), v2 = new Vector3() ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'LineCurve3';\n\t\tthis.isLineCurve3 = true;\n\n\t\tthis.v1 = v1;\n\t\tthis.v2 = v2;\n\n\t}\n\tgetPoint( t, optionalTarget = new Vector3() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tif ( t === 1 ) {\n\n\t\t\tpoint.copy( this.v2 );\n\n\t\t} else {\n\n\t\t\tpoint.copy( this.v2 ).sub( this.v1 );\n\t\t\tpoint.multiplyScalar( t ).add( this.v1 );\n\n\t\t}\n\n\t\treturn point;\n\n\t}\n\t// Line curve is linear, so we can overwrite default getPointAt\n\tgetPointAt( u, optionalTarget ) {\n\n\t\treturn this.getPoint( u, optionalTarget );\n\n\t}\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.v1.copy( source.v1 );\n\t\tthis.v2.copy( source.v2 );\n\n\t\treturn this;\n\n\t}\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.v1 = this.v1.toArray();\n\t\tdata.v2 = this.v2.toArray();\n\n\t\treturn data;\n\n\t}\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.v1.fromArray( json.v1 );\n\t\tthis.v2.fromArray( json.v2 );\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass QuadraticBezierCurve extends Curve {\n\n\tconstructor( v0 = new Vector2(), v1 = new Vector2(), v2 = new Vector2() ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'QuadraticBezierCurve';\n\n\t\tthis.v0 = v0;\n\t\tthis.v1 = v1;\n\t\tthis.v2 = v2;\n\n\t}\n\n\tgetPoint( t, optionalTarget = new Vector2() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tconst v0 = this.v0, v1 = this.v1, v2 = this.v2;\n\n\t\tpoint.set(\n\t\t\tQuadraticBezier( t, v0.x, v1.x, v2.x ),\n\t\t\tQuadraticBezier( t, v0.y, v1.y, v2.y )\n\t\t);\n\n\t\treturn point;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.v0.copy( source.v0 );\n\t\tthis.v1.copy( source.v1 );\n\t\tthis.v2.copy( source.v2 );\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.v0 = this.v0.toArray();\n\t\tdata.v1 = this.v1.toArray();\n\t\tdata.v2 = this.v2.toArray();\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.v0.fromArray( json.v0 );\n\t\tthis.v1.fromArray( json.v1 );\n\t\tthis.v2.fromArray( json.v2 );\n\n\t\treturn this;\n\n\t}\n\n}\n\nQuadraticBezierCurve.prototype.isQuadraticBezierCurve = true;\n\nclass QuadraticBezierCurve3 extends Curve {\n\n\tconstructor( v0 = new Vector3(), v1 = new Vector3(), v2 = new Vector3() ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'QuadraticBezierCurve3';\n\n\t\tthis.v0 = v0;\n\t\tthis.v1 = v1;\n\t\tthis.v2 = v2;\n\n\t}\n\n\tgetPoint( t, optionalTarget = new Vector3() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tconst v0 = this.v0, v1 = this.v1, v2 = this.v2;\n\n\t\tpoint.set(\n\t\t\tQuadraticBezier( t, v0.x, v1.x, v2.x ),\n\t\t\tQuadraticBezier( t, v0.y, v1.y, v2.y ),\n\t\t\tQuadraticBezier( t, v0.z, v1.z, v2.z )\n\t\t);\n\n\t\treturn point;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.v0.copy( source.v0 );\n\t\tthis.v1.copy( source.v1 );\n\t\tthis.v2.copy( source.v2 );\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.v0 = this.v0.toArray();\n\t\tdata.v1 = this.v1.toArray();\n\t\tdata.v2 = this.v2.toArray();\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.v0.fromArray( json.v0 );\n\t\tthis.v1.fromArray( json.v1 );\n\t\tthis.v2.fromArray( json.v2 );\n\n\t\treturn this;\n\n\t}\n\n}\n\nQuadraticBezierCurve3.prototype.isQuadraticBezierCurve3 = true;\n\nclass SplineCurve extends Curve {\n\n\tconstructor( points = [] ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'SplineCurve';\n\n\t\tthis.points = points;\n\n\t}\n\n\tgetPoint( t, optionalTarget = new Vector2() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tconst points = this.points;\n\t\tconst p = ( points.length - 1 ) * t;\n\n\t\tconst intPoint = Math.floor( p );\n\t\tconst weight = p - intPoint;\n\n\t\tconst p0 = points[ intPoint === 0 ? intPoint : intPoint - 1 ];\n\t\tconst p1 = points[ intPoint ];\n\t\tconst p2 = points[ intPoint > points.length - 2 ? points.length - 1 : intPoint + 1 ];\n\t\tconst p3 = points[ intPoint > points.length - 3 ? points.length - 1 : intPoint + 2 ];\n\n\t\tpoint.set(\n\t\t\tCatmullRom( weight, p0.x, p1.x, p2.x, p3.x ),\n\t\t\tCatmullRom( weight, p0.y, p1.y, p2.y, p3.y )\n\t\t);\n\n\t\treturn point;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.points = [];\n\n\t\tfor ( let i = 0, l = source.points.length; i < l; i ++ ) {\n\n\t\t\tconst point = source.points[ i ];\n\n\t\t\tthis.points.push( point.clone() );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.points = [];\n\n\t\tfor ( let i = 0, l = this.points.length; i < l; i ++ ) {\n\n\t\t\tconst point = this.points[ i ];\n\t\t\tdata.points.push( point.toArray() );\n\n\t\t}\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.points = [];\n\n\t\tfor ( let i = 0, l = json.points.length; i < l; i ++ ) {\n\n\t\t\tconst point = json.points[ i ];\n\t\t\tthis.points.push( new Vector2().fromArray( point ) );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n}\n\nSplineCurve.prototype.isSplineCurve = true;\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\nclass CurvePath extends Curve {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.type = 'CurvePath';\n\n\t\tthis.curves = [];\n\t\tthis.autoClose = false; // Automatically closes the path\n\n\t}\n\n\tadd( curve ) {\n\n\t\tthis.curves.push( curve );\n\n\t}\n\n\tclosePath() {\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( 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 <d\n\n\t}\n\n\t// We cannot use the default THREE.Curve getPoint() with getLength() because in\n\t// THREE.Curve, getLength() depends on getPoint() but in THREE.CurvePath\n\t// getPoint() depends on getLength\n\n\tgetLength() {\n\n\t\tconst lens = this.getCurveLengths();\n\t\treturn lens[ lens.length - 1 ];\n\n\t}\n\n\t// cacheLengths must be recalculated.\n\tupdateArcLengths() {\n\n\t\tthis.needsUpdate = true;\n\t\tthis.cacheLengths = null;\n\t\tthis.getCurveLengths();\n\n\t}\n\n\t// Compute lengths and cache them\n\t// We cannot overwrite getLengths() because UtoT mapping uses it.\n\n\tgetCurveLengths() {\n\n\t\t// We use cache values if curves and cache array are same length\n\n\t\tif ( this.cacheLengths && this.cacheLengths.length === this.curves.length ) {\n\n\t\t\treturn this.cacheLengths;\n\n\t\t}\n\n\t\t// Get length of sub-curve\n\t\t// Push sums into cached array\n\n\t\tconst lengths = [];\n\t\tlet sums = 0;\n\n\t\tfor ( let i = 0, l = this.curves.length; i < l; i ++ ) {\n\n\t\t\tsums += this.curves[ i ].getLength();\n\t\t\tlengths.push( sums );\n\n\t\t}\n\n\t\tthis.cacheLengths = lengths;\n\n\t\treturn lengths;\n\n\t}\n\n\tgetSpacedPoints( divisions = 40 ) {\n\n\t\tconst points = [];\n\n\t\tfor ( let i = 0; i <= divisions; i ++ ) {\n\n\t\t\tpoints.push( this.getPoint( i / divisions ) );\n\n\t\t}\n\n\t\tif ( this.autoClose ) {\n\n\t\t\tpoints.push( points[ 0 ] );\n\n\t\t}\n\n\t\treturn points;\n\n\t}\n\n\tgetPoints( divisions = 12 ) {\n\n\t\tconst points = [];\n\t\tlet last;\n\n\t\tfor ( let i = 0, curves = this.curves; i < curves.length; i ++ ) {\n\n\t\t\tconst curve = curves[ i ];\n\t\t\tconst resolution = ( curve && curve.isEllipseCurve ) ? divisions * 2\n\t\t\t\t: ( curve && ( curve.isLineCurve || curve.isLineCurve3 ) ) ? 1\n\t\t\t\t\t: ( curve && curve.isSplineCurve ) ? divisions * curve.points.length\n\t\t\t\t\t\t: divisions;\n\n\t\t\tconst pts = curve.getPoints( resolution );\n\n\t\t\tfor ( let j = 0; j < pts.length; j ++ ) {\n\n\t\t\t\tconst point = pts[ j ];\n\n\t\t\t\tif ( last && last.equals( point ) ) continue; // ensures no consecutive points are duplicates\n\n\t\t\t\tpoints.push( point );\n\t\t\t\tlast = point;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( this.autoClose && points.length > 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( source ) {\n\n\t\tsuper.copy( 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() {\n\n\t\tconst data = super.toJSON();\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( json ) {\n\n\t\tsuper.fromJSON( 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\nclass Path extends CurvePath {\n\n\tconstructor( points ) {\n\n\t\tsuper();\n\t\tthis.type = 'Path';\n\n\t\tthis.currentPoint = new Vector2();\n\n\t\tif ( points ) {\n\n\t\t\tthis.setFromPoints( points );\n\n\t\t}\n\n\t}\n\n\tsetFromPoints( 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( 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( 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( 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( 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( 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( 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( 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( 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( 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( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.currentPoint.copy( source.currentPoint );\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.currentPoint = this.currentPoint.toArray();\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.currentPoint.fromArray( json.currentPoint );\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass Shape extends Path {\n\n\tconstructor( points ) {\n\n\t\tsuper( points );\n\n\t\tthis.uuid = generateUUID();\n\n\t\tthis.type = 'Shape';\n\n\t\tthis.holes = [];\n\n\t}\n\n\tgetPointsHoles( 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( 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( source ) {\n\n\t\tsuper.copy( 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() {\n\n\t\tconst data = super.toJSON();\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( json ) {\n\n\t\tsuper.fromJSON( 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\nclass Light extends Object3D {\n\n\tconstructor( color, intensity = 1 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'Light';\n\n\t\tthis.color = new Color( color );\n\t\tthis.intensity = intensity;\n\n\t}\n\n\tdispose() {\n\n\t\t// Empty here in base class; some subclasses override.\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( 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( meta ) {\n\n\t\tconst data = super.toJSON( 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\nLight.prototype.isLight = true;\n\nclass HemisphereLight extends Light {\n\n\tconstructor( skyColor, groundColor, intensity ) {\n\n\t\tsuper( skyColor, intensity );\n\n\t\tthis.type = 'HemisphereLight';\n\n\t\tthis.position.copy( Object3D.DefaultUp );\n\t\tthis.updateMatrix();\n\n\t\tthis.groundColor = new Color( groundColor );\n\n\t}\n\n\tcopy( 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\nHemisphereLight.prototype.isHemisphereLight = true;\n\nconst _projScreenMatrix$1 = /*@__PURE__*/ new Matrix4();\nconst _lightPositionWorld$1 = /*@__PURE__*/ new Vector3();\nconst _lookTarget$1 = /*@__PURE__*/ new Vector3();\n\nclass LightShadow {\n\n\tconstructor( camera ) {\n\n\t\tthis.camera = camera;\n\n\t\tthis.bias = 0;\n\t\tthis.normalBias = 0;\n\t\tthis.radius = 1;\n\n\t\tthis.mapSize = new Vector2( 512, 512 );\n\n\t\tthis.map = null;\n\t\tthis.mapPass = null;\n\t\tthis.matrix = new Matrix4();\n\n\t\tthis.autoUpdate = true;\n\t\tthis.needsUpdate = false;\n\n\t\tthis._frustum = new Frustum();\n\t\tthis._frameExtents = new Vector2( 1, 1 );\n\n\t\tthis._viewportCount = 1;\n\n\t\tthis._viewports = [\n\n\t\t\tnew Vector4( 0, 0, 1, 1 )\n\n\t\t];\n\n\t}\n\n\tgetViewportCount() {\n\n\t\treturn this._viewportCount;\n\n\t}\n\n\tgetFrustum() {\n\n\t\treturn this._frustum;\n\n\t}\n\n\tupdateMatrices( light ) {\n\n\t\tconst shadowCamera = this.camera;\n\t\tconst shadowMatrix = this.matrix;\n\n\t\t_lightPositionWorld$1.setFromMatrixPosition( light.matrixWorld );\n\t\tshadowCamera.position.copy( _lightPositionWorld$1 );\n\n\t\t_lookTarget$1.setFromMatrixPosition( light.target.matrixWorld );\n\t\tshadowCamera.lookAt( _lookTarget$1 );\n\t\tshadowCamera.updateMatrixWorld();\n\n\t\t_projScreenMatrix$1.multiplyMatrices( shadowCamera.projectionMatrix, shadowCamera.matrixWorldInverse );\n\t\tthis._frustum.setFromProjectionMatrix( _projScreenMatrix$1 );\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( viewportIndex ) {\n\n\t\treturn this._viewports[ viewportIndex ];\n\n\t}\n\n\tgetFrameExtents() {\n\n\t\treturn this._frameExtents;\n\n\t}\n\n\tdispose() {\n\n\t\tif ( this.map ) {\n\n\t\t\tthis.map.dispose();\n\n\t\t}\n\n\t\tif ( this.mapPass ) {\n\n\t\t\tthis.mapPass.dispose();\n\n\t\t}\n\n\t}\n\n\tcopy( 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() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\ttoJSON() {\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\nclass SpotLightShadow extends LightShadow {\n\n\tconstructor() {\n\n\t\tsuper( new PerspectiveCamera( 50, 1, 0.5, 500 ) );\n\n\t\tthis.focus = 1;\n\n\t}\n\n\tupdateMatrices( light ) {\n\n\t\tconst camera = this.camera;\n\n\t\tconst fov = RAD2DEG * 2 * light.angle * this.focus;\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\tsuper.updateMatrices( light );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.focus = source.focus;\n\n\t\treturn this;\n\n\t}\n\n}\n\nSpotLightShadow.prototype.isSpotLightShadow = true;\n\nclass SpotLight extends Light {\n\n\tconstructor( color, intensity, distance = 0, angle = Math.PI / 3, penumbra = 0, decay = 1 ) {\n\n\t\tsuper( color, intensity );\n\n\t\tthis.type = 'SpotLight';\n\n\t\tthis.position.copy( Object3D.DefaultUp );\n\t\tthis.updateMatrix();\n\n\t\tthis.target = new Object3D();\n\n\t\tthis.distance = distance;\n\t\tthis.angle = angle;\n\t\tthis.penumbra = penumbra;\n\t\tthis.decay = decay; // for physically correct lights, should be 2.\n\n\t\tthis.shadow = new SpotLightShadow();\n\n\t}\n\n\tget power() {\n\n\t\t// intensity = power per solid angle.\n\t\t// ref: equation (17) from https://seblagarde.files.wordpress.com/2015/07/course_notes_moving_frostbite_to_pbr_v32.pdf\n\t\treturn this.intensity * Math.PI;\n\n\t}\n\n\tset power( power ) {\n\n\t\t// intensity = power per solid angle.\n\t\t// ref: equation (17) from https://seblagarde.files.wordpress.com/2015/07/course_notes_moving_frostbite_to_pbr_v32.pdf\n\t\tthis.intensity = power / Math.PI;\n\n\t}\n\n\tdispose() {\n\n\t\tthis.shadow.dispose();\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( 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\nSpotLight.prototype.isSpotLight = true;\n\nconst _projScreenMatrix = /*@__PURE__*/ new Matrix4();\nconst _lightPositionWorld = /*@__PURE__*/ new Vector3();\nconst _lookTarget = /*@__PURE__*/ new Vector3();\n\nclass PointLightShadow extends LightShadow {\n\n\tconstructor() {\n\n\t\tsuper( new PerspectiveCamera( 90, 1, 0.5, 500 ) );\n\n\t\tthis._frameExtents = new Vector2( 4, 2 );\n\n\t\tthis._viewportCount = 6;\n\n\t\tthis._viewports = [\n\t\t\t// These viewports map a cube-map onto a 2D texture with the\n\t\t\t// following orientation:\n\t\t\t//\n\t\t\t//  xzXZ\n\t\t\t//   y Y\n\t\t\t//\n\t\t\t// X - Positive x direction\n\t\t\t// x - Negative x direction\n\t\t\t// Y - Positive y direction\n\t\t\t// y - Negative y direction\n\t\t\t// Z - Positive z direction\n\t\t\t// z - Negative z direction\n\n\t\t\t// positive X\n\t\t\tnew Vector4( 2, 1, 1, 1 ),\n\t\t\t// negative X\n\t\t\tnew Vector4( 0, 1, 1, 1 ),\n\t\t\t// positive Z\n\t\t\tnew Vector4( 3, 1, 1, 1 ),\n\t\t\t// negative Z\n\t\t\tnew Vector4( 1, 1, 1, 1 ),\n\t\t\t// positive Y\n\t\t\tnew Vector4( 3, 0, 1, 1 ),\n\t\t\t// negative Y\n\t\t\tnew Vector4( 1, 0, 1, 1 )\n\t\t];\n\n\t\tthis._cubeDirections = [\n\t\t\tnew Vector3( 1, 0, 0 ), new Vector3( - 1, 0, 0 ), new Vector3( 0, 0, 1 ),\n\t\t\tnew Vector3( 0, 0, - 1 ), new Vector3( 0, 1, 0 ), new Vector3( 0, - 1, 0 )\n\t\t];\n\n\t\tthis._cubeUps = [\n\t\t\tnew Vector3( 0, 1, 0 ), new Vector3( 0, 1, 0 ), new Vector3( 0, 1, 0 ),\n\t\t\tnew Vector3( 0, 1, 0 ), new Vector3( 0, 0, 1 ),\tnew Vector3( 0, 0, - 1 )\n\t\t];\n\n\t}\n\n\tupdateMatrices( light, viewportIndex = 0 ) {\n\n\t\tconst camera = this.camera;\n\t\tconst shadowMatrix = this.matrix;\n\n\t\tconst far = light.distance || camera.far;\n\n\t\tif ( far !== camera.far ) {\n\n\t\t\tcamera.far = far;\n\t\t\tcamera.updateProjectionMatrix();\n\n\t\t}\n\n\t\t_lightPositionWorld.setFromMatrixPosition( light.matrixWorld );\n\t\tcamera.position.copy( _lightPositionWorld );\n\n\t\t_lookTarget.copy( camera.position );\n\t\t_lookTarget.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\t_projScreenMatrix.multiplyMatrices( camera.projectionMatrix, camera.matrixWorldInverse );\n\t\tthis._frustum.setFromProjectionMatrix( _projScreenMatrix );\n\n\t}\n\n}\n\nPointLightShadow.prototype.isPointLightShadow = true;\n\nclass PointLight extends Light {\n\n\tconstructor( color, intensity, distance = 0, decay = 1 ) {\n\n\t\tsuper( color, intensity );\n\n\t\tthis.type = 'PointLight';\n\n\t\tthis.distance = distance;\n\t\tthis.decay = decay; // for physically correct lights, should be 2.\n\n\t\tthis.shadow = new PointLightShadow();\n\n\t}\n\n\tget power() {\n\n\t\t// intensity = power per solid angle.\n\t\t// ref: equation (15) from https://seblagarde.files.wordpress.com/2015/07/course_notes_moving_frostbite_to_pbr_v32.pdf\n\t\treturn this.intensity * 4 * Math.PI;\n\n\t}\n\n\tset power( power ) {\n\n\t\t// intensity = power per solid angle.\n\t\t// ref: equation (15) from https://seblagarde.files.wordpress.com/2015/07/course_notes_moving_frostbite_to_pbr_v32.pdf\n\t\tthis.intensity = power / ( 4 * Math.PI );\n\n\t}\n\n\tdispose() {\n\n\t\tthis.shadow.dispose();\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( 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\nPointLight.prototype.isPointLight = true;\n\nclass OrthographicCamera extends Camera {\n\n\tconstructor( left = - 1, right = 1, top = 1, bottom = - 1, near = 0.1, far = 2000 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'OrthographicCamera';\n\n\t\tthis.zoom = 1;\n\t\tthis.view = null;\n\n\t\tthis.left = left;\n\t\tthis.right = right;\n\t\tthis.top = top;\n\t\tthis.bottom = bottom;\n\n\t\tthis.near = near;\n\t\tthis.far = far;\n\n\t\tthis.updateProjectionMatrix();\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( 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( 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() {\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() {\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.copy( this.projectionMatrix ).invert();\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst data = super.toJSON( 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\nOrthographicCamera.prototype.isOrthographicCamera = true;\n\nclass DirectionalLightShadow extends LightShadow {\n\n\tconstructor() {\n\n\t\tsuper( new OrthographicCamera( - 5, 5, 5, - 5, 0.5, 500 ) );\n\n\t}\n\n}\n\nDirectionalLightShadow.prototype.isDirectionalLightShadow = true;\n\nclass DirectionalLight extends Light {\n\n\tconstructor( color, intensity ) {\n\n\t\tsuper( color, intensity );\n\n\t\tthis.type = 'DirectionalLight';\n\n\t\tthis.position.copy( Object3D.DefaultUp );\n\t\tthis.updateMatrix();\n\n\t\tthis.target = new Object3D();\n\n\t\tthis.shadow = new DirectionalLightShadow();\n\n\t}\n\n\tdispose() {\n\n\t\tthis.shadow.dispose();\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.target = source.target.clone();\n\t\tthis.shadow = source.shadow.clone();\n\n\t\treturn this;\n\n\t}\n\n}\n\nDirectionalLight.prototype.isDirectionalLight = true;\n\nclass AmbientLight extends Light {\n\n\tconstructor( color, intensity ) {\n\n\t\tsuper( color, intensity );\n\n\t\tthis.type = 'AmbientLight';\n\n\t}\n\n}\n\nAmbientLight.prototype.isAmbientLight = true;\n\nclass RectAreaLight extends Light {\n\n\tconstructor( color, intensity, width = 10, height = 10 ) {\n\n\t\tsuper( color, intensity );\n\n\t\tthis.type = 'RectAreaLight';\n\n\t\tthis.width = width;\n\t\tthis.height = height;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( 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( meta ) {\n\n\t\tconst data = super.toJSON( 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\nRectAreaLight.prototype.isRectAreaLight = true;\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\nclass SphericalHarmonics3 {\n\n\tconstructor() {\n\n\t\tthis.coefficients = [];\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tthis.coefficients.push( new Vector3() );\n\n\t\t}\n\n\t}\n\n\tset( 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() {\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( 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( 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( 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( 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( 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( 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( 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( sh ) {\n\n\t\treturn this.set( sh.coefficients );\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tfromArray( array, 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( array = [], 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\t// evaluate the basis functions\n\t// shBasis is an Array[ 9 ]\n\tstatic getBasisAt( 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\nSphericalHarmonics3.prototype.isSphericalHarmonics3 = true;\n\nclass LightProbe extends Light {\n\n\tconstructor( sh = new SphericalHarmonics3(), intensity = 1 ) {\n\n\t\tsuper( undefined, intensity );\n\n\t\tthis.sh = sh;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.sh.copy( source.sh );\n\n\t\treturn this;\n\n\t}\n\n\tfromJSON( 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( meta ) {\n\n\t\tconst data = super.toJSON( meta );\n\n\t\tdata.object.sh = this.sh.toArray();\n\n\t\treturn data;\n\n\t}\n\n}\n\nLightProbe.prototype.isLightProbe = true;\n\nclass MaterialLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\t\tthis.textures = {};\n\n\t}\n\n\tload( 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.setWithCredentials( scope.withCredentials );\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( 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 !== 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 !== undefined ) material.emissive.setHex( json.emissive );\n\t\tif ( json.specular !== undefined && material.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.shadowSide !== undefined ) material.shadowSide = json.shadowSide;\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.alphaToCoverage !== undefined ) material.alphaToCoverage = json.alphaToCoverage;\n\t\tif ( json.premultipliedAlpha !== undefined ) material.premultipliedAlpha = json.premultipliedAlpha;\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\t\t\t\t\t\tbreak;\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( value ) {\n\n\t\tthis.textures = value;\n\t\treturn this;\n\n\t}\n\n}\n\nclass LoaderUtils {\n\n\tstatic decodeText( 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\tstatic extractUrlBase( 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\nclass InstancedBufferGeometry extends BufferGeometry {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.type = 'InstancedBufferGeometry';\n\t\tthis.instanceCount = Infinity;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.instanceCount = source.instanceCount;\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\ttoJSON() {\n\n\t\tconst data = super.toJSON( 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\nInstancedBufferGeometry.prototype.isInstancedBufferGeometry = true;\n\nclass InstancedBufferAttribute extends BufferAttribute {\n\n\tconstructor( array, itemSize, normalized, meshPerAttribute ) {\n\n\t\tif ( typeof ( normalized ) === 'number' ) {\n\n\t\t\tmeshPerAttribute = normalized;\n\n\t\t\tnormalized = false;\n\n\t\t\tconsole.error( 'THREE.InstancedBufferAttribute: The constructor now expects normalized as the third argument.' );\n\n\t\t}\n\n\t\tsuper( array, itemSize, normalized );\n\n\t\tthis.meshPerAttribute = meshPerAttribute || 1;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.meshPerAttribute = source.meshPerAttribute;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON()\t{\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.meshPerAttribute = this.meshPerAttribute;\n\n\t\tdata.isInstancedBufferAttribute = true;\n\n\t\treturn data;\n\n\t}\n\n}\n\nInstancedBufferAttribute.prototype.isInstancedBufferAttribute = true;\n\nclass BufferGeometryLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( 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.setWithCredentials( scope.withCredentials );\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( 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 = getTypedArray( 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 = getTypedArray( 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 = getTypedArray( 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\tif ( attribute.usage !== undefined ) bufferAttribute.setUsage( attribute.usage );\n\n\t\t\tif ( attribute.updateRange !== undefined ) {\n\n\t\t\t\tbufferAttribute.updateRange.offset = attribute.updateRange.offset;\n\t\t\t\tbufferAttribute.updateRange.count = attribute.updateRange.count;\n\n\t\t\t}\n\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 = getTypedArray( 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\nclass ObjectLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( 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( this.manager );\n\t\tloader.setPath( this.path );\n\t\tloader.setRequestHeader( this.requestHeader );\n\t\tloader.setWithCredentials( this.withCredentials );\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( json, onLoad ) {\n\n\t\tconst animations = this.parseAnimations( json.animations );\n\t\tconst shapes = this.parseShapes( 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, animations );\n\t\tconst skeletons = this.parseSkeletons( json.skeletons, object );\n\n\t\tthis.bindSkeletons( object, skeletons );\n\n\t\t//\n\n\t\tif ( onLoad !== undefined ) {\n\n\t\t\tlet hasImages = false;\n\n\t\t\tfor ( const uuid in images ) {\n\n\t\t\t\tif ( images[ uuid ] instanceof HTMLImageElement ) {\n\n\t\t\t\t\thasImages = true;\n\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( hasImages === false ) onLoad( object );\n\n\t\t}\n\n\t\treturn object;\n\n\t}\n\n\tparseShapes( 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\tparseSkeletons( json, object ) {\n\n\t\tconst skeletons = {};\n\t\tconst bones = {};\n\n\t\t// generate bone lookup table\n\n\t\tobject.traverse( function ( child ) {\n\n\t\t\tif ( child.isBone ) bones[ child.uuid ] = child;\n\n\t\t} );\n\n\t\t// create skeletons\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 skeleton = new Skeleton().fromJSON( json[ i ], bones );\n\n\t\t\t\tskeletons[ skeleton.uuid ] = skeleton;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn skeletons;\n\n\t}\n\n\tparseGeometries( 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\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( 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( json ) {\n\n\t\tconst animations = {};\n\n\t\tif ( json !== undefined ) {\n\n\t\t\tfor ( let i = 0; i < json.length; i ++ ) {\n\n\t\t\t\tconst data = json[ i ];\n\n\t\t\t\tconst clip = AnimationClip.parse( data );\n\n\t\t\t\tanimations[ clip.uuid ] = clip;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn animations;\n\n\t}\n\n\tparseImages( 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\tfunction deserializeImage( image ) {\n\n\t\t\tif ( typeof image === 'string' ) {\n\n\t\t\t\tconst url = image;\n\n\t\t\t\tconst path = /^(\\/\\/)|([a-z]+:(\\/\\/)?)/i.test( url ) ? url : scope.resourcePath + url;\n\n\t\t\t\treturn loadImage( path );\n\n\t\t\t} else {\n\n\t\t\t\tif ( image.data ) {\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\tdata: getTypedArray( image.type, image.data ),\n\t\t\t\t\t\twidth: image.width,\n\t\t\t\t\t\theight: image.height\n\t\t\t\t\t};\n\n\t\t\t\t} else {\n\n\t\t\t\t\treturn null;\n\n\t\t\t\t}\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 deserializedImage = deserializeImage( currentUrl );\n\n\t\t\t\t\t\tif ( deserializedImage !== null ) {\n\n\t\t\t\t\t\t\tif ( deserializedImage instanceof HTMLImageElement ) {\n\n\t\t\t\t\t\t\t\timages[ image.uuid ].push( deserializedImage );\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// special case: handle array of data textures for cube textures\n\n\t\t\t\t\t\t\t\timages[ image.uuid ].push( new DataTexture( deserializedImage.data, deserializedImage.width, deserializedImage.height ) );\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\t// load single image\n\n\t\t\t\t\tconst deserializedImage = deserializeImage( image.url );\n\n\t\t\t\t\tif ( deserializedImage !== null ) {\n\n\t\t\t\t\t\timages[ image.uuid ] = deserializedImage;\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 images;\n\n\t}\n\n\tparseTextures( 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\t\t\t\tconst image = images[ data.image ];\n\n\t\t\t\tif ( Array.isArray( image ) ) {\n\n\t\t\t\t\ttexture = new CubeTexture( image );\n\n\t\t\t\t\tif ( image.length === 6 ) texture.needsUpdate = true;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( image && image.data ) {\n\n\t\t\t\t\t\ttexture = new DataTexture( image.data, image.width, image.height );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\ttexture = new Texture( image );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( image ) texture.needsUpdate = true; // textures can have undefined image data\n\n\t\t\t\t}\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( data, geometries, materials, animations ) {\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\tgeometry = getGeometry( data.geometry );\n\t\t\t \tmaterial = getMaterial( data.material );\n\n\t\t\t\tobject = new SkinnedMesh( geometry, material );\n\n\t\t\t\tif ( data.bindMode !== undefined ) object.bindMode = data.bindMode;\n\t\t\t\tif ( data.bindMatrix !== undefined ) object.bindMatrix.fromArray( data.bindMatrix );\n\t\t\t\tif ( data.skeleton !== undefined ) object.skeleton = data.skeleton;\n\n\t\t\t\tbreak;\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\t\t\t\tconst instanceColor = data.instanceColor;\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\t\t\t\tif ( instanceColor !== undefined ) object.instanceColor = new BufferAttribute( new Float32Array( instanceColor.array ), instanceColor.itemSize );\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 ) );\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\tcase 'Bone':\n\n\t\t\t\tobject = new Bone();\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, animations ) );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( data.animations !== undefined ) {\n\n\t\t\tconst objectAnimations = data.animations;\n\n\t\t\tfor ( let i = 0; i < objectAnimations.length; i ++ ) {\n\n\t\t\t\tconst uuid = objectAnimations[ i ];\n\n\t\t\t\tobject.animations.push( animations[ uuid ] );\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\tbindSkeletons( object, skeletons ) {\n\n\t\tif ( Object.keys( skeletons ).length === 0 ) return;\n\n\t\tobject.traverse( function ( child ) {\n\n\t\t\tif ( child.isSkinnedMesh === true && child.skeleton !== undefined ) {\n\n\t\t\t\tconst skeleton = skeletons[ child.skeleton ];\n\n\t\t\t\tif ( skeleton === undefined ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.ObjectLoader: No skeleton found with UUID:', child.skeleton );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tchild.bind( skeleton, child.bindMatrix );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} );\n\n\t}\n\n\t/* DEPRECATED */\n\n\tsetTexturePath( 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\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\nclass ImageBitmapLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t\tif ( typeof createImageBitmap === 'undefined' ) {\n\n\t\t\tconsole.warn( 'THREE.ImageBitmapLoader: createImageBitmap() not supported.' );\n\n\t\t}\n\n\t\tif ( typeof fetch === 'undefined' ) {\n\n\t\t\tconsole.warn( 'THREE.ImageBitmapLoader: fetch() not supported.' );\n\n\t\t}\n\n\t\tthis.options = { premultiplyAlpha: 'none' };\n\n\t}\n\n\tsetOptions( options ) {\n\n\t\tthis.options = options;\n\n\t\treturn this;\n\n\t}\n\n\tload( 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\tconst fetchOptions = {};\n\t\tfetchOptions.credentials = ( this.crossOrigin === 'anonymous' ) ? 'same-origin' : 'include';\n\t\tfetchOptions.headers = this.requestHeader;\n\n\t\tfetch( url, fetchOptions ).then( function ( res ) {\n\n\t\t\treturn res.blob();\n\n\t\t} ).then( function ( blob ) {\n\n\t\t\treturn createImageBitmap( blob, Object.assign( scope.options, { colorSpaceConversion: 'none' } ) );\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\nImageBitmapLoader.prototype.isImageBitmapLoader = true;\n\nclass ShapePath {\n\n\tconstructor() {\n\n\t\tthis.type = 'ShapePath';\n\n\t\tthis.color = new Color();\n\n\t\tthis.subPaths = [];\n\t\tthis.currentPath = null;\n\n\t}\n\n\tmoveTo( 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( x, y ) {\n\n\t\tthis.currentPath.lineTo( x, y );\n\n\t\treturn this;\n\n\t}\n\n\tquadraticCurveTo( 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( 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( pts ) {\n\n\t\tthis.currentPath.splineThru( pts );\n\n\t\treturn this;\n\n\t}\n\n\ttoShapes( 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;\n\t\tconst 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\nclass Font {\n\n\tconstructor( data ) {\n\n\t\tthis.type = 'Font';\n\n\t\tthis.data = data;\n\n\t}\n\n\tgenerateShapes( text, 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( text );\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\nFont.prototype.isFont = true;\n\nclass FontLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( 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.setWithCredentials( scope.withCredentials );\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( 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\nclass AudioLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst loader = new FileLoader( this.manager );\n\t\tloader.setResponseType( 'arraybuffer' );\n\t\tloader.setPath( this.path );\n\t\tloader.setRequestHeader( this.requestHeader );\n\t\tloader.setWithCredentials( this.withCredentials );\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\nclass HemisphereLightProbe extends LightProbe {\n\n\tconstructor( skyColor, groundColor, intensity = 1 ) {\n\n\t\tsuper( undefined, intensity );\n\n\t\tconst color1 = new Color().set( skyColor );\n\t\tconst color2 = new Color().set( groundColor );\n\n\t\tconst sky = new Vector3( color1.r, color1.g, color1.b );\n\t\tconst ground = new Vector3( color2.r, color2.g, color2.b );\n\n\t\t// without extra factor of PI in the shader, should = 1 / Math.sqrt( Math.PI );\n\t\tconst c0 = Math.sqrt( Math.PI );\n\t\tconst c1 = c0 * Math.sqrt( 0.75 );\n\n\t\tthis.sh.coefficients[ 0 ].copy( sky ).add( ground ).multiplyScalar( c0 );\n\t\tthis.sh.coefficients[ 1 ].copy( sky ).sub( ground ).multiplyScalar( c1 );\n\n\t}\n\n}\n\nHemisphereLightProbe.prototype.isHemisphereLightProbe = true;\n\nclass AmbientLightProbe extends LightProbe {\n\n\tconstructor( color, intensity = 1 ) {\n\n\t\tsuper( undefined, intensity );\n\n\t\tconst color1 = new Color().set( color );\n\n\t\t// without extra factor of PI in the shader, would be 2 / Math.sqrt( Math.PI );\n\t\tthis.sh.coefficients[ 0 ].set( color1.r, color1.g, color1.b ).multiplyScalar( 2 * Math.sqrt( Math.PI ) );\n\n\t}\n\n}\n\nAmbientLightProbe.prototype.isAmbientLightProbe = true;\n\nconst _eyeRight = /*@__PURE__*/ new Matrix4();\nconst _eyeLeft = /*@__PURE__*/ new Matrix4();\n\nclass StereoCamera {\n\n\tconstructor() {\n\n\t\tthis.type = 'StereoCamera';\n\n\t\tthis.aspect = 1;\n\n\t\tthis.eyeSep = 0.064;\n\n\t\tthis.cameraL = new PerspectiveCamera();\n\t\tthis.cameraL.layers.enable( 1 );\n\t\tthis.cameraL.matrixAutoUpdate = false;\n\n\t\tthis.cameraR = new PerspectiveCamera();\n\t\tthis.cameraR.layers.enable( 2 );\n\t\tthis.cameraR.matrixAutoUpdate = false;\n\n\t\tthis._cache = {\n\t\t\tfocus: null,\n\t\t\tfov: null,\n\t\t\taspect: null,\n\t\t\tnear: null,\n\t\t\tfar: null,\n\t\t\tzoom: null,\n\t\t\teyeSep: null\n\t\t};\n\n\t}\n\n\tupdate( 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( 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\nclass Clock {\n\n\tconstructor( autoStart = true ) {\n\n\t\tthis.autoStart = autoStart;\n\n\t\tthis.startTime = 0;\n\t\tthis.oldTime = 0;\n\t\tthis.elapsedTime = 0;\n\n\t\tthis.running = false;\n\n\t}\n\n\tstart() {\n\n\t\tthis.startTime = now();\n\n\t\tthis.oldTime = this.startTime;\n\t\tthis.elapsedTime = 0;\n\t\tthis.running = true;\n\n\t}\n\n\tstop() {\n\n\t\tthis.getElapsedTime();\n\t\tthis.running = false;\n\t\tthis.autoStart = false;\n\n\t}\n\n\tgetElapsedTime() {\n\n\t\tthis.getDelta();\n\t\treturn this.elapsedTime;\n\n\t}\n\n\tgetDelta() {\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 = 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\nfunction now() {\n\n\treturn ( typeof performance === 'undefined' ? Date : performance ).now(); // see #10732\n\n}\n\nconst _position$1 = /*@__PURE__*/ new Vector3();\nconst _quaternion$1 = /*@__PURE__*/ new Quaternion();\nconst _scale$1 = /*@__PURE__*/ new Vector3();\nconst _orientation$1 = /*@__PURE__*/ new Vector3();\n\nclass AudioListener extends Object3D {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.type = 'AudioListener';\n\n\t\tthis.context = AudioContext.getContext();\n\n\t\tthis.gain = this.context.createGain();\n\t\tthis.gain.connect( this.context.destination );\n\n\t\tthis.filter = null;\n\n\t\tthis.timeDelta = 0;\n\n\t\t// private\n\n\t\tthis._clock = new Clock();\n\n\t}\n\n\tgetInput() {\n\n\t\treturn this.gain;\n\n\t}\n\n\tremoveFilter() {\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() {\n\n\t\treturn this.filter;\n\n\t}\n\n\tsetFilter( 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() {\n\n\t\treturn this.gain.gain.value;\n\n\t}\n\n\tsetMasterVolume( 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( force ) {\n\n\t\tsuper.updateMatrixWorld( 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$1, _quaternion$1, _scale$1 );\n\n\t\t_orientation$1.set( 0, 0, - 1 ).applyQuaternion( _quaternion$1 );\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$1.x, endTime );\n\t\t\tlistener.positionY.linearRampToValueAtTime( _position$1.y, endTime );\n\t\t\tlistener.positionZ.linearRampToValueAtTime( _position$1.z, endTime );\n\t\t\tlistener.forwardX.linearRampToValueAtTime( _orientation$1.x, endTime );\n\t\t\tlistener.forwardY.linearRampToValueAtTime( _orientation$1.y, endTime );\n\t\t\tlistener.forwardZ.linearRampToValueAtTime( _orientation$1.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$1.x, _position$1.y, _position$1.z );\n\t\t\tlistener.setOrientation( _orientation$1.x, _orientation$1.y, _orientation$1.z, up.x, up.y, up.z );\n\n\t\t}\n\n\t}\n\n}\n\nclass Audio extends Object3D {\n\n\tconstructor( listener ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'Audio';\n\n\t\tthis.listener = listener;\n\t\tthis.context = listener.context;\n\n\t\tthis.gain = this.context.createGain();\n\t\tthis.gain.connect( listener.getInput() );\n\n\t\tthis.autoplay = false;\n\n\t\tthis.buffer = null;\n\t\tthis.detune = 0;\n\t\tthis.loop = false;\n\t\tthis.loopStart = 0;\n\t\tthis.loopEnd = 0;\n\t\tthis.offset = 0;\n\t\tthis.duration = undefined;\n\t\tthis.playbackRate = 1;\n\t\tthis.isPlaying = false;\n\t\tthis.hasPlaybackControl = true;\n\t\tthis.source = null;\n\t\tthis.sourceType = 'empty';\n\n\t\tthis._startedAt = 0;\n\t\tthis._progress = 0;\n\t\tthis._connected = false;\n\n\t\tthis.filters = [];\n\n\t}\n\n\tgetOutput() {\n\n\t\treturn this.gain;\n\n\t}\n\n\tsetNodeSource( 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( 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( 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( 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( 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() {\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() {\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() {\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\tthis._connected = true;\n\n\t\treturn this;\n\n\t}\n\n\tdisconnect() {\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\tthis._connected = false;\n\n\t\treturn this;\n\n\t}\n\n\tgetFilters() {\n\n\t\treturn this.filters;\n\n\t}\n\n\tsetFilters( value ) {\n\n\t\tif ( ! value ) value = [];\n\n\t\tif ( this._connected === true ) {\n\n\t\t\tthis.disconnect();\n\t\t\tthis.filters = value.slice();\n\t\t\tthis.connect();\n\n\t\t} else {\n\n\t\t\tthis.filters = value.slice();\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetDetune( 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() {\n\n\t\treturn this.detune;\n\n\t}\n\n\tgetFilter() {\n\n\t\treturn this.getFilters()[ 0 ];\n\n\t}\n\n\tsetFilter( filter ) {\n\n\t\treturn this.setFilters( filter ? [ filter ] : [] );\n\n\t}\n\n\tsetPlaybackRate( 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() {\n\n\t\treturn this.playbackRate;\n\n\t}\n\n\tonEnded() {\n\n\t\tthis.isPlaying = false;\n\n\t}\n\n\tgetLoop() {\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( 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( value ) {\n\n\t\tthis.loopStart = value;\n\n\t\treturn this;\n\n\t}\n\n\tsetLoopEnd( value ) {\n\n\t\tthis.loopEnd = value;\n\n\t\treturn this;\n\n\t}\n\n\tgetVolume() {\n\n\t\treturn this.gain.gain.value;\n\n\t}\n\n\tsetVolume( 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 = /*@__PURE__*/ new Vector3();\nconst _quaternion = /*@__PURE__*/ new Quaternion();\nconst _scale = /*@__PURE__*/ new Vector3();\nconst _orientation = /*@__PURE__*/ new Vector3();\n\nclass PositionalAudio extends Audio {\n\n\tconstructor( listener ) {\n\n\t\tsuper( listener );\n\n\t\tthis.panner = this.context.createPanner();\n\t\tthis.panner.panningModel = 'HRTF';\n\t\tthis.panner.connect( this.gain );\n\n\t}\n\n\tgetOutput() {\n\n\t\treturn this.panner;\n\n\t}\n\n\tgetRefDistance() {\n\n\t\treturn this.panner.refDistance;\n\n\t}\n\n\tsetRefDistance( value ) {\n\n\t\tthis.panner.refDistance = value;\n\n\t\treturn this;\n\n\t}\n\n\tgetRolloffFactor() {\n\n\t\treturn this.panner.rolloffFactor;\n\n\t}\n\n\tsetRolloffFactor( value ) {\n\n\t\tthis.panner.rolloffFactor = value;\n\n\t\treturn this;\n\n\t}\n\n\tgetDistanceModel() {\n\n\t\treturn this.panner.distanceModel;\n\n\t}\n\n\tsetDistanceModel( value ) {\n\n\t\tthis.panner.distanceModel = value;\n\n\t\treturn this;\n\n\t}\n\n\tgetMaxDistance() {\n\n\t\treturn this.panner.maxDistance;\n\n\t}\n\n\tsetMaxDistance( value ) {\n\n\t\tthis.panner.maxDistance = value;\n\n\t\treturn this;\n\n\t}\n\n\tsetDirectionalCone( 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( force ) {\n\n\t\tsuper.updateMatrixWorld( force );\n\n\t\tif ( this.hasPlaybackControl === true && this.isPlaying === false ) return;\n\n\t\tthis.matrixWorld.decompose( _position, _quaternion, _scale );\n\n\t\t_orientation.set( 0, 0, 1 ).applyQuaternion( _quaternion );\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.x, endTime );\n\t\t\tpanner.positionY.linearRampToValueAtTime( _position.y, endTime );\n\t\t\tpanner.positionZ.linearRampToValueAtTime( _position.z, endTime );\n\t\t\tpanner.orientationX.linearRampToValueAtTime( _orientation.x, endTime );\n\t\t\tpanner.orientationY.linearRampToValueAtTime( _orientation.y, endTime );\n\t\t\tpanner.orientationZ.linearRampToValueAtTime( _orientation.z, endTime );\n\n\t\t} else {\n\n\t\t\tpanner.setPosition( _position.x, _position.y, _position.z );\n\t\t\tpanner.setOrientation( _orientation.x, _orientation.y, _orientation.z );\n\n\t\t}\n\n\t}\n\n}\n\nclass AudioAnalyser {\n\n\tconstructor( audio, fftSize = 2048 ) {\n\n\t\tthis.analyser = audio.context.createAnalyser();\n\t\tthis.analyser.fftSize = fftSize;\n\n\t\tthis.data = new Uint8Array( this.analyser.frequencyBinCount );\n\n\t\taudio.getOutput().connect( this.analyser );\n\n\t}\n\n\n\tgetFrequencyData() {\n\n\t\tthis.analyser.getByteFrequencyData( this.data );\n\n\t\treturn this.data;\n\n\t}\n\n\tgetAverageFrequency() {\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\nclass PropertyMixer {\n\n\tconstructor( binding, typeName, valueSize ) {\n\n\t\tthis.binding = binding;\n\t\tthis.valueSize = valueSize;\n\n\t\tlet mixFunction,\n\t\t\tmixFunctionAdditive,\n\t\t\tsetIdentity;\n\n\t\t// buffer layout: [ incoming | accu0 | accu1 | orig | addAccu | (optional work) ]\n\t\t//\n\t\t// interpolators can use .buffer as their .result\n\t\t// the data then goes to 'incoming'\n\t\t//\n\t\t// 'accu0' and 'accu1' are used frame-interleaved for\n\t\t// the cumulative result and are compared to detect\n\t\t// changes\n\t\t//\n\t\t// 'orig' stores the original state of the property\n\t\t//\n\t\t// 'add' is used for additive cumulative results\n\t\t//\n\t\t// 'work' is optional and is only present for quaternion types. It is used\n\t\t// to store intermediate quaternion multiplication results\n\n\t\tswitch ( typeName ) {\n\n\t\t\tcase 'quaternion':\n\t\t\t\tmixFunction = this._slerp;\n\t\t\t\tmixFunctionAdditive = this._slerpAdditive;\n\t\t\t\tsetIdentity = this._setAdditiveIdentityQuaternion;\n\n\t\t\t\tthis.buffer = new Float64Array( valueSize * 6 );\n\t\t\t\tthis._workIndex = 5;\n\t\t\t\tbreak;\n\n\t\t\tcase 'string':\n\t\t\tcase 'bool':\n\t\t\t\tmixFunction = this._select;\n\n\t\t\t\t// Use the regular mix function and for additive on these types,\n\t\t\t\t// additive is not relevant for non-numeric types\n\t\t\t\tmixFunctionAdditive = this._select;\n\n\t\t\t\tsetIdentity = this._setAdditiveIdentityOther;\n\n\t\t\t\tthis.buffer = new Array( valueSize * 5 );\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tmixFunction = this._lerp;\n\t\t\t\tmixFunctionAdditive = this._lerpAdditive;\n\t\t\t\tsetIdentity = this._setAdditiveIdentityNumeric;\n\n\t\t\t\tthis.buffer = new Float64Array( valueSize * 5 );\n\n\t\t}\n\n\t\tthis._mixBufferRegion = mixFunction;\n\t\tthis._mixBufferRegionAdditive = mixFunctionAdditive;\n\t\tthis._setIdentity = setIdentity;\n\t\tthis._origIndex = 3;\n\t\tthis._addIndex = 4;\n\n\t\tthis.cumulativeWeight = 0;\n\t\tthis.cumulativeWeightAdditive = 0;\n\n\t\tthis.useCount = 0;\n\t\tthis.referenceCount = 0;\n\n\t}\n\n\t// accumulate data in the 'incoming' region into 'accu<i>'\n\taccumulate( 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( 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<i>' to the binding when accus differ\n\tapply( 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() {\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() {\n\n\t\tconst originalValueOffset = this.valueSize * 3;\n\t\tthis.binding.setValue( this.buffer, originalValueOffset );\n\n\t}\n\n\t_setAdditiveIdentityNumeric() {\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() {\n\n\t\tthis._setAdditiveIdentityNumeric();\n\t\tthis.buffer[ this._addIndex * this.valueSize + 3 ] = 1;\n\n\t}\n\n\t_setAdditiveIdentityOther() {\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( 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( buffer, dstOffset, srcOffset, t ) {\n\n\t\tQuaternion.slerpFlat( buffer, dstOffset, buffer, dstOffset, buffer, srcOffset, t );\n\n\t}\n\n\t_slerpAdditive( 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( 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( 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\nclass Composite {\n\n\tconstructor( targetGroup, path, optionalParsedPath ) {\n\n\t\tconst parsedPath = optionalParsedPath || PropertyBinding.parseTrackName( path );\n\n\t\tthis._targetGroup = targetGroup;\n\t\tthis._bindings = targetGroup.subscribe_( path, parsedPath );\n\n\t}\n\n\tgetValue( 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( 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() {\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() {\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// Note: This class uses a State pattern on a per-method basis:\n// 'bind' sets 'this.getValue' / 'setValue' and shadows the\n// prototype version of these methods with one that represents\n// the bound state. When the property is not found, the methods\n// become no-ops.\nclass PropertyBinding {\n\n\tconstructor( rootNode, path, parsedPath ) {\n\n\t\tthis.path = path;\n\t\tthis.parsedPath = parsedPath || PropertyBinding.parseTrackName( path );\n\n\t\tthis.node = PropertyBinding.findNode( rootNode, this.parsedPath.nodeName ) || rootNode;\n\n\t\tthis.rootNode = rootNode;\n\n\t\t// initial state of these methods that calls 'bind'\n\t\tthis.getValue = this._getValue_unbound;\n\t\tthis.setValue = this._setValue_unbound;\n\n\t}\n\n\n\tstatic create( 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\tstatic sanitizeNodeName( name ) {\n\n\t\treturn name.replace( /\\s/g, '_' ).replace( _reservedRe, '' );\n\n\t}\n\n\tstatic parseTrackName( 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\tstatic findNode( 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\t// these are used to \"bind\" a nonexistent property\n\t_getValue_unavailable() {}\n\t_setValue_unavailable() {}\n\n\t// Getters\n\n\t_getValue_direct( buffer, offset ) {\n\n\t\tbuffer[ offset ] = this.node[ this.propertyName ];\n\n\t}\n\n\t_getValue_array( buffer, offset ) {\n\n\t\tconst source = this.resolvedProperty;\n\n\t\tfor ( let i = 0, n = source.length; i !== n; ++ i ) {\n\n\t\t\tbuffer[ offset ++ ] = source[ i ];\n\n\t\t}\n\n\t}\n\n\t_getValue_arrayElement( buffer, offset ) {\n\n\t\tbuffer[ offset ] = this.resolvedProperty[ this.propertyIndex ];\n\n\t}\n\n\t_getValue_toArray( buffer, offset ) {\n\n\t\tthis.resolvedProperty.toArray( buffer, offset );\n\n\t}\n\n\t// Direct\n\n\t_setValue_direct( buffer, offset ) {\n\n\t\tthis.targetObject[ this.propertyName ] = buffer[ offset ];\n\n\t}\n\n\t_setValue_direct_setNeedsUpdate( buffer, offset ) {\n\n\t\tthis.targetObject[ this.propertyName ] = buffer[ offset ];\n\t\tthis.targetObject.needsUpdate = true;\n\n\t}\n\n\t_setValue_direct_setMatrixWorldNeedsUpdate( buffer, offset ) {\n\n\t\tthis.targetObject[ this.propertyName ] = buffer[ offset ];\n\t\tthis.targetObject.matrixWorldNeedsUpdate = true;\n\n\t}\n\n\t// EntireArray\n\n\t_setValue_array( buffer, offset ) {\n\n\t\tconst dest = this.resolvedProperty;\n\n\t\tfor ( let i = 0, n = dest.length; i !== n; ++ i ) {\n\n\t\t\tdest[ i ] = buffer[ offset ++ ];\n\n\t\t}\n\n\t}\n\n\t_setValue_array_setNeedsUpdate( buffer, offset ) {\n\n\t\tconst dest = this.resolvedProperty;\n\n\t\tfor ( let i = 0, n = dest.length; i !== n; ++ i ) {\n\n\t\t\tdest[ i ] = buffer[ offset ++ ];\n\n\t\t}\n\n\t\tthis.targetObject.needsUpdate = true;\n\n\t}\n\n\t_setValue_array_setMatrixWorldNeedsUpdate( buffer, offset ) {\n\n\t\tconst dest = this.resolvedProperty;\n\n\t\tfor ( let i = 0, n = dest.length; i !== n; ++ i ) {\n\n\t\t\tdest[ i ] = buffer[ offset ++ ];\n\n\t\t}\n\n\t\tthis.targetObject.matrixWorldNeedsUpdate = true;\n\n\t}\n\n\t// ArrayElement\n\n\t_setValue_arrayElement( buffer, offset ) {\n\n\t\tthis.resolvedProperty[ this.propertyIndex ] = buffer[ offset ];\n\n\t}\n\n\t_setValue_arrayElement_setNeedsUpdate( buffer, offset ) {\n\n\t\tthis.resolvedProperty[ this.propertyIndex ] = buffer[ offset ];\n\t\tthis.targetObject.needsUpdate = true;\n\n\t}\n\n\t_setValue_arrayElement_setMatrixWorldNeedsUpdate( buffer, offset ) {\n\n\t\tthis.resolvedProperty[ this.propertyIndex ] = buffer[ offset ];\n\t\tthis.targetObject.matrixWorldNeedsUpdate = true;\n\n\t}\n\n\t// HasToFromArray\n\n\t_setValue_fromArray( buffer, offset ) {\n\n\t\tthis.resolvedProperty.fromArray( buffer, offset );\n\n\t}\n\n\t_setValue_fromArray_setNeedsUpdate( buffer, offset ) {\n\n\t\tthis.resolvedProperty.fromArray( buffer, offset );\n\t\tthis.targetObject.needsUpdate = true;\n\n\t}\n\n\t_setValue_fromArray_setMatrixWorldNeedsUpdate( buffer, offset ) {\n\n\t\tthis.resolvedProperty.fromArray( buffer, offset );\n\t\tthis.targetObject.matrixWorldNeedsUpdate = true;\n\n\t}\n\n\t_getValue_unbound( targetArray, offset ) {\n\n\t\tthis.bind();\n\t\tthis.getValue( targetArray, offset );\n\n\t}\n\n\t_setValue_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() {\n\n\t\tlet targetObject = this.node;\n\t\tconst parsedPath = this.parsedPath;\n\n\t\tconst objectName = parsedPath.objectName;\n\t\tconst propertyName = parsedPath.propertyName;\n\t\tlet propertyIndex = 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() {\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\nPropertyBinding.Composite = Composite;\n\nPropertyBinding.prototype.BindingType = {\n\tDirect: 0,\n\tEntireArray: 1,\n\tArrayElement: 2,\n\tHasFromToArray: 3\n};\n\nPropertyBinding.prototype.Versioning = {\n\tNone: 0,\n\tNeedsUpdate: 1,\n\tMatrixWorldNeedsUpdate: 2\n};\n\nPropertyBinding.prototype.GetterByBindingType = [\n\n\tPropertyBinding.prototype._getValue_direct,\n\tPropertyBinding.prototype._getValue_array,\n\tPropertyBinding.prototype._getValue_arrayElement,\n\tPropertyBinding.prototype._getValue_toArray,\n\n];\n\nPropertyBinding.prototype.SetterByBindingTypeAndVersioning = [\n\n\t[\n\t\t// Direct\n\t\tPropertyBinding.prototype._setValue_direct,\n\t\tPropertyBinding.prototype._setValue_direct_setNeedsUpdate,\n\t\tPropertyBinding.prototype._setValue_direct_setMatrixWorldNeedsUpdate,\n\n\t], [\n\n\t\t// EntireArray\n\n\t\tPropertyBinding.prototype._setValue_array,\n\t\tPropertyBinding.prototype._setValue_array_setNeedsUpdate,\n\t\tPropertyBinding.prototype._setValue_array_setMatrixWorldNeedsUpdate,\n\n\t], [\n\n\t\t// ArrayElement\n\t\tPropertyBinding.prototype._setValue_arrayElement,\n\t\tPropertyBinding.prototype._setValue_arrayElement_setNeedsUpdate,\n\t\tPropertyBinding.prototype._setValue_arrayElement_setMatrixWorldNeedsUpdate,\n\n\t], [\n\n\t\t// HasToFromArray\n\t\tPropertyBinding.prototype._setValue_fromArray,\n\t\tPropertyBinding.prototype._setValue_fromArray_setNeedsUpdate,\n\t\tPropertyBinding.prototype._setValue_fromArray_setMatrixWorldNeedsUpdate,\n\n\t]\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\nclass AnimationObjectGroup {\n\n\tconstructor() {\n\n\t\tthis.uuid = generateUUID();\n\n\t\t// cached objects followed by the active ones\n\t\tthis._objects = Array.prototype.slice.call( arguments );\n\n\t\tthis.nCachedObjects_ = 0; // threshold\n\t\t// note: read by PropertyBinding.Composite\n\n\t\tconst indices = {};\n\t\tthis._indicesByUUID = indices; // for bookkeeping\n\n\t\tfor ( let i = 0, n = arguments.length; i !== n; ++ i ) {\n\n\t\t\tindices[ arguments[ i ].uuid ] = i;\n\n\t\t}\n\n\t\tthis._paths = []; // inside: string\n\t\tthis._parsedPaths = []; // inside: { we don't care, here }\n\t\tthis._bindings = []; // inside: Array< PropertyBinding >\n\t\tthis._bindingsIndicesByPath = {}; // inside: indices in these arrays\n\n\t\tconst scope = this;\n\n\t\tthis.stats = {\n\n\t\t\tobjects: {\n\t\t\t\tget total() {\n\n\t\t\t\t\treturn scope._objects.length;\n\n\t\t\t\t},\n\t\t\t\tget inUse() {\n\n\t\t\t\t\treturn this.total - scope.nCachedObjects_;\n\n\t\t\t\t}\n\t\t\t},\n\t\t\tget bindingsPerObject() {\n\n\t\t\t\treturn scope._bindings.length;\n\n\t\t\t}\n\n\t\t};\n\n\t}\n\n\tadd() {\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() {\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() {\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\tif ( lastIndex > 0 ) {\n\n\t\t\t\t\t\tindicesByUUID[ lastObject.uuid ] = index;\n\n\t\t\t\t\t}\n\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_( 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\tconst indicesByPath = this._bindingsIndicesByPath;\n\t\tlet index = indicesByPath[ path ];\n\t\tconst bindings = 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_( 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\nAnimationObjectGroup.prototype.isAnimationObjectGroup = true;\n\nclass AnimationAction {\n\n\tconstructor( mixer, clip, localRoot = null, blendMode = clip.blendMode ) {\n\n\t\tthis._mixer = mixer;\n\t\tthis._clip = clip;\n\t\tthis._localRoot = localRoot;\n\t\tthis.blendMode = blendMode;\n\n\t\tconst tracks = clip.tracks,\n\t\t\tnTracks = tracks.length,\n\t\t\tinterpolants = new Array( nTracks );\n\n\t\tconst interpolantSettings = {\n\t\t\tendingStart: ZeroCurvatureEnding,\n\t\t\tendingEnd: ZeroCurvatureEnding\n\t\t};\n\n\t\tfor ( let i = 0; i !== nTracks; ++ i ) {\n\n\t\t\tconst interpolant = tracks[ i ].createInterpolant( null );\n\t\t\tinterpolants[ i ] = interpolant;\n\t\t\tinterpolant.settings = interpolantSettings;\n\n\t\t}\n\n\t\tthis._interpolantSettings = interpolantSettings;\n\n\t\tthis._interpolants = interpolants; // bound by the mixer\n\n\t\t// inside: PropertyMixer (managed by the mixer)\n\t\tthis._propertyBindings = new Array( nTracks );\n\n\t\tthis._cacheIndex = null; // for the memory manager\n\t\tthis._byClipCacheIndex = null; // for the memory manager\n\n\t\tthis._timeScaleInterpolant = null;\n\t\tthis._weightInterpolant = null;\n\n\t\tthis.loop = LoopRepeat;\n\t\tthis._loopCount = - 1;\n\n\t\t// global mixer time when the action is to be started\n\t\t// it's set back to 'null' upon start of the action\n\t\tthis._startTime = null;\n\n\t\t// scaled local time of the action\n\t\t// gets clamped or wrapped to 0..clip.duration according to loop\n\t\tthis.time = 0;\n\n\t\tthis.timeScale = 1;\n\t\tthis._effectiveTimeScale = 1;\n\n\t\tthis.weight = 1;\n\t\tthis._effectiveWeight = 1;\n\n\t\tthis.repetitions = Infinity; // no. of repetitions when looping\n\n\t\tthis.paused = false; // true -> zero effective time scale\n\t\tthis.enabled = true; // false -> zero effective weight\n\n\t\tthis.clampWhenFinished = false;// keep feeding the last frame?\n\n\t\tthis.zeroSlopeAtStart = true;// for smooth interpolation w/o separate\n\t\tthis.zeroSlopeAtEnd = true;// clips for start, loop and end\n\n\t}\n\n\t// State & Scheduling\n\n\tplay() {\n\n\t\tthis._mixer._activateAction( this );\n\n\t\treturn this;\n\n\t}\n\n\tstop() {\n\n\t\tthis._mixer._deactivateAction( this );\n\n\t\treturn this.reset();\n\n\t}\n\n\treset() {\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() {\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() {\n\n\t\treturn this._mixer._isActiveAction( this );\n\n\t}\n\n\tstartAt( time ) {\n\n\t\tthis._startTime = time;\n\n\t\treturn this;\n\n\t}\n\n\tsetLoop( 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( 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() {\n\n\t\treturn this._effectiveWeight;\n\n\t}\n\n\tfadeIn( duration ) {\n\n\t\treturn this._scheduleFading( duration, 0, 1 );\n\n\t}\n\n\tfadeOut( duration ) {\n\n\t\treturn this._scheduleFading( duration, 1, 0 );\n\n\t}\n\n\tcrossFadeFrom( 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( fadeInAction, duration, warp ) {\n\n\t\treturn fadeInAction.crossFadeFrom( this, duration, warp );\n\n\t}\n\n\tstopFading() {\n\n\t\tconst 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( 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() {\n\n\t\treturn this._effectiveTimeScale;\n\n\t}\n\n\tsetDuration( duration ) {\n\n\t\tthis.timeScale = this._clip.duration / duration;\n\n\t\treturn this.stopWarping();\n\n\t}\n\n\tsyncWith( 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( duration ) {\n\n\t\treturn this.warp( this._effectiveTimeScale, 0, duration );\n\n\t}\n\n\twarp( 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() {\n\n\t\tconst 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() {\n\n\t\treturn this._mixer;\n\n\t}\n\n\tgetClip() {\n\n\t\treturn this._clip;\n\n\t}\n\n\tgetRoot() {\n\n\t\treturn this._localRoot || this._mixer._root;\n\n\t}\n\n\t// Interna\n\n\t_update( 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( 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( 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( 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( 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( 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\nclass AnimationMixer extends EventDispatcher {\n\n\tconstructor( root ) {\n\n\t\tsuper();\n\n\t\tthis._root = root;\n\t\tthis._initMemoryManager();\n\t\tthis._accuIndex = 0;\n\t\tthis.time = 0;\n\t\tthis.timeScale = 1.0;\n\n\t}\n\n\t_bindAction( 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( 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( 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() {\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( action ) {\n\n\t\tconst index = action._cacheIndex;\n\t\treturn index !== null && index < this._nActiveActions;\n\n\t}\n\n\t_addInactiveAction( 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( 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( 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( 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( 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( 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( 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( 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( 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() {\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( 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// 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( 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\tconst actionsForClip = this._actionsByClip[ clipUuid ];\n\t\tlet prototypeAction = 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( 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() {\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( 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( 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() {\n\n\t\treturn this._root;\n\n\t}\n\n\t// free all resources specific to a particular clip\n\tuncacheClip( 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( 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( 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\nAnimationMixer.prototype._controlInterpolantsResultBuffer = new Float32Array( 1 );\n\nclass Uniform {\n\n\tconstructor( value ) {\n\n\t\tif ( typeof value === 'string' ) {\n\n\t\t\tconsole.warn( 'THREE.Uniform: Type parameter is no longer needed.' );\n\t\t\tvalue = arguments[ 1 ];\n\n\t\t}\n\n\t\tthis.value = value;\n\n\t}\n\n\tclone() {\n\n\t\treturn new Uniform( this.value.clone === undefined ? this.value : this.value.clone() );\n\n\t}\n\n}\n\nclass InstancedInterleavedBuffer extends InterleavedBuffer {\n\n\tconstructor( array, stride, meshPerAttribute = 1 ) {\n\n\t\tsuper( array, stride );\n\n\t\tthis.meshPerAttribute = meshPerAttribute || 1;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.meshPerAttribute = source.meshPerAttribute;\n\n\t\treturn this;\n\n\t}\n\n\tclone( data ) {\n\n\t\tconst ib = super.clone( data );\n\n\t\tib.meshPerAttribute = this.meshPerAttribute;\n\n\t\treturn ib;\n\n\t}\n\n\ttoJSON( data ) {\n\n\t\tconst json = super.toJSON( data );\n\n\t\tjson.isInstancedInterleavedBuffer = true;\n\t\tjson.meshPerAttribute = this.meshPerAttribute;\n\n\t\treturn json;\n\n\t}\n\n}\n\nInstancedInterleavedBuffer.prototype.isInstancedInterleavedBuffer = true;\n\nclass GLBufferAttribute {\n\n\tconstructor( buffer, type, itemSize, elementSize, count ) {\n\n\t\tthis.buffer = buffer;\n\t\tthis.type = type;\n\t\tthis.itemSize = itemSize;\n\t\tthis.elementSize = elementSize;\n\t\tthis.count = count;\n\n\t\tthis.version = 0;\n\n\t}\n\n\tset needsUpdate( value ) {\n\n\t\tif ( value === true ) this.version ++;\n\n\t}\n\n\tsetBuffer( buffer ) {\n\n\t\tthis.buffer = buffer;\n\n\t\treturn this;\n\n\t}\n\n\tsetType( type, elementSize ) {\n\n\t\tthis.type = type;\n\t\tthis.elementSize = elementSize;\n\n\t\treturn this;\n\n\t}\n\n\tsetItemSize( itemSize ) {\n\n\t\tthis.itemSize = itemSize;\n\n\t\treturn this;\n\n\t}\n\n\tsetCount( count ) {\n\n\t\tthis.count = count;\n\n\t\treturn this;\n\n\t}\n\n}\n\nGLBufferAttribute.prototype.isGLBufferAttribute = true;\n\nclass Raycaster {\n\n\tconstructor( origin, direction, near = 0, far = Infinity ) {\n\n\t\tthis.ray = new Ray( origin, direction );\n\t\t// direction is assumed to be normalized (for accurate distance calculations)\n\n\t\tthis.near = near;\n\t\tthis.far = far;\n\t\tthis.camera = null;\n\t\tthis.layers = new Layers();\n\n\t\tthis.params = {\n\t\t\tMesh: {},\n\t\t\tLine: { threshold: 1 },\n\t\t\tLOD: {},\n\t\t\tPoints: { threshold: 1 },\n\t\t\tSprite: {}\n\t\t};\n\n\t}\n\n\tset( 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( 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: ' + camera.type );\n\n\t\t}\n\n\t}\n\n\tintersectObject( object, recursive = false, intersects = [] ) {\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( objects, recursive = false, intersects = [] ) {\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\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\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\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( clamp( y / this.radius, - 1, 1 ) );\n\n\t\t}\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}\n\n/**\n * Ref: https://en.wikipedia.org/wiki/Cylindrical_coordinate_system\n */\n\nclass Cylindrical {\n\n\tconstructor( radius = 1, theta = 0, y = 0 ) {\n\n\t\tthis.radius = radius; // distance from the origin to a point in the x-z plane\n\t\tthis.theta = theta; // counterclockwise angle in the x-z plane measured in radians from the positive z-axis\n\t\tthis.y = y; // height above the x-z plane\n\n\t\treturn this;\n\n\t}\n\n\tset( 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\tcopy( 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( 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 + 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\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n}\n\nconst _vector$4 = /*@__PURE__*/ new Vector2();\n\nclass Box2 {\n\n\tconstructor( min = new Vector2( + Infinity, + Infinity ), max = new Vector2( - Infinity, - Infinity ) ) {\n\n\t\tthis.min = min;\n\t\tthis.max = max;\n\n\t}\n\n\tset( 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( 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( center, size ) {\n\n\t\tconst halfSize = _vector$4.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() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tcopy( 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() {\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() {\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( 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( 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( 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( 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( 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( 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( 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( 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( 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( 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( point ) {\n\n\t\tconst clampedPoint = _vector$4.copy( point ).clamp( this.min, this.max );\n\t\treturn clampedPoint.sub( point ).length();\n\n\t}\n\n\tintersect( 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( 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( 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( box ) {\n\n\t\treturn box.min.equals( this.min ) && box.max.equals( this.max );\n\n\t}\n\n}\n\nBox2.prototype.isBox2 = true;\n\nconst _startP = /*@__PURE__*/ new Vector3();\nconst _startEnd = /*@__PURE__*/ new Vector3();\n\nclass Line3 {\n\n\tconstructor( start = new Vector3(), end = new Vector3() ) {\n\n\t\tthis.start = start;\n\t\tthis.end = end;\n\n\t}\n\n\tset( 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\tcopy( 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( 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( 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() {\n\n\t\treturn this.start.distanceToSquared( this.end );\n\n\t}\n\n\tdistance() {\n\n\t\treturn this.start.distanceTo( this.end );\n\n\t}\n\n\tat( 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( 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 = clamp( t, 0, 1 );\n\n\t\t}\n\n\t\treturn t;\n\n\t}\n\n\tclosestPointToPoint( 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( 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( line ) {\n\n\t\treturn line.start.equals( this.start ) && line.end.equals( this.end );\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n}\n\nclass ImmediateRenderObject extends Object3D {\n\n\tconstructor( material ) {\n\n\t\tsuper();\n\n\t\tthis.material = material;\n\t\tthis.render = function ( /* renderCallback */ ) {};\n\n\t\tthis.hasPositions = false;\n\t\tthis.hasNormals = false;\n\t\tthis.hasColors = false;\n\t\tthis.hasUvs = false;\n\n\t\tthis.positionArray = null;\n\t\tthis.normalArray = null;\n\t\tthis.colorArray = null;\n\t\tthis.uvArray = null;\n\n\t\tthis.count = 0;\n\n\t}\n\n}\n\nImmediateRenderObject.prototype.isImmediateRenderObject = true;\n\nconst _vector$3 = /*@__PURE__*/ new Vector3();\n\nclass SpotLightHelper extends Object3D {\n\n\tconstructor( light, color ) {\n\n\t\tsuper();\n\t\tthis.light = light;\n\t\tthis.light.updateMatrixWorld();\n\n\t\tthis.matrix = light.matrixWorld;\n\t\tthis.matrixAutoUpdate = false;\n\n\t\tthis.color = color;\n\n\t\tconst geometry = new BufferGeometry();\n\n\t\tconst positions = [\n\t\t\t0, 0, 0, \t0, 0, 1,\n\t\t\t0, 0, 0, \t1, 0, 1,\n\t\t\t0, 0, 0,\t- 1, 0, 1,\n\t\t\t0, 0, 0, \t0, 1, 1,\n\t\t\t0, 0, 0, \t0, - 1, 1\n\t\t];\n\n\t\tfor ( let i = 0, j = 1, l = 32; i < l; i ++, j ++ ) {\n\n\t\t\tconst p1 = ( i / l ) * Math.PI * 2;\n\t\t\tconst p2 = ( j / l ) * Math.PI * 2;\n\n\t\t\tpositions.push(\n\t\t\t\tMath.cos( p1 ), Math.sin( p1 ), 1,\n\t\t\t\tMath.cos( p2 ), Math.sin( p2 ), 1\n\t\t\t);\n\n\t\t}\n\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( positions, 3 ) );\n\n\t\tconst material = new LineBasicMaterial( { fog: false, toneMapped: false } );\n\n\t\tthis.cone = new LineSegments( geometry, material );\n\t\tthis.add( this.cone );\n\n\t\tthis.update();\n\n\t}\n\n\tdispose() {\n\n\t\tthis.cone.geometry.dispose();\n\t\tthis.cone.material.dispose();\n\n\t}\n\n\tupdate() {\n\n\t\tthis.light.updateMatrixWorld();\n\n\t\tconst coneLength = this.light.distance ? this.light.distance : 1000;\n\t\tconst coneWidth = coneLength * Math.tan( this.light.angle );\n\n\t\tthis.cone.scale.set( coneWidth, coneWidth, coneLength );\n\n\t\t_vector$3.setFromMatrixPosition( this.light.target.matrixWorld );\n\n\t\tthis.cone.lookAt( _vector$3 );\n\n\t\tif ( this.color !== undefined ) {\n\n\t\t\tthis.cone.material.color.set( this.color );\n\n\t\t} else {\n\n\t\t\tthis.cone.material.color.copy( this.light.color );\n\n\t\t}\n\n\t}\n\n}\n\nconst _vector$2 = /*@__PURE__*/ new Vector3();\nconst _boneMatrix = /*@__PURE__*/ new Matrix4();\nconst _matrixWorldInv = /*@__PURE__*/ new Matrix4();\n\n\nclass SkeletonHelper extends LineSegments {\n\n\tconstructor( object ) {\n\n\t\tconst bones = getBoneList( object );\n\n\t\tconst geometry = new BufferGeometry();\n\n\t\tconst vertices = [];\n\t\tconst colors = [];\n\n\t\tconst color1 = new Color( 0, 0, 1 );\n\t\tconst color2 = new Color( 0, 1, 0 );\n\n\t\tfor ( let i = 0; i < bones.length; i ++ ) {\n\n\t\t\tconst bone = bones[ i ];\n\n\t\t\tif ( bone.parent && bone.parent.isBone ) {\n\n\t\t\t\tvertices.push( 0, 0, 0 );\n\t\t\t\tvertices.push( 0, 0, 0 );\n\t\t\t\tcolors.push( color1.r, color1.g, color1.b );\n\t\t\t\tcolors.push( color2.r, color2.g, color2.b );\n\n\t\t\t}\n\n\t\t}\n\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tgeometry.setAttribute( 'color', new Float32BufferAttribute( colors, 3 ) );\n\n\t\tconst material = new LineBasicMaterial( { vertexColors: true, depthTest: false, depthWrite: false, toneMapped: false, transparent: true } );\n\n\t\tsuper( geometry, material );\n\n\t\tthis.type = 'SkeletonHelper';\n\t\tthis.isSkeletonHelper = true;\n\n\t\tthis.root = object;\n\t\tthis.bones = bones;\n\n\t\tthis.matrix = object.matrixWorld;\n\t\tthis.matrixAutoUpdate = false;\n\n\t}\n\n\tupdateMatrixWorld( force ) {\n\n\t\tconst bones = this.bones;\n\n\t\tconst geometry = this.geometry;\n\t\tconst position = geometry.getAttribute( 'position' );\n\n\t\t_matrixWorldInv.copy( this.root.matrixWorld ).invert();\n\n\t\tfor ( let i = 0, j = 0; i < bones.length; i ++ ) {\n\n\t\t\tconst bone = bones[ i ];\n\n\t\t\tif ( bone.parent && bone.parent.isBone ) {\n\n\t\t\t\t_boneMatrix.multiplyMatrices( _matrixWorldInv, bone.matrixWorld );\n\t\t\t\t_vector$2.setFromMatrixPosition( _boneMatrix );\n\t\t\t\tposition.setXYZ( j, _vector$2.x, _vector$2.y, _vector$2.z );\n\n\t\t\t\t_boneMatrix.multiplyMatrices( _matrixWorldInv, bone.parent.matrixWorld );\n\t\t\t\t_vector$2.setFromMatrixPosition( _boneMatrix );\n\t\t\t\tposition.setXYZ( j + 1, _vector$2.x, _vector$2.y, _vector$2.z );\n\n\t\t\t\tj += 2;\n\n\t\t\t}\n\n\t\t}\n\n\t\tgeometry.getAttribute( 'position' ).needsUpdate = true;\n\n\t\tsuper.updateMatrixWorld( force );\n\n\t}\n\n}\n\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\nclass PointLightHelper extends Mesh {\n\n\tconstructor( light, sphereSize, color ) {\n\n\t\tconst geometry = new SphereGeometry( sphereSize, 4, 2 );\n\t\tconst material = new MeshBasicMaterial( { wireframe: true, fog: false, toneMapped: false } );\n\n\t\tsuper( geometry, material );\n\n\t\tthis.light = light;\n\t\tthis.light.updateMatrixWorld();\n\n\t\tthis.color = color;\n\n\t\tthis.type = 'PointLightHelper';\n\n\t\tthis.matrix = this.light.matrixWorld;\n\t\tthis.matrixAutoUpdate = false;\n\n\t\tthis.update();\n\n\n\t\t/*\n\t// TODO: delete this comment?\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\t}\n\n\tdispose() {\n\n\t\tthis.geometry.dispose();\n\t\tthis.material.dispose();\n\n\t}\n\n\tupdate() {\n\n\t\tif ( this.color !== undefined ) {\n\n\t\t\tthis.material.color.set( this.color );\n\n\t\t} else {\n\n\t\t\tthis.material.color.copy( this.light.color );\n\n\t\t}\n\n\t\t/*\n\t\tconst d = this.light.distance;\n\n\t\tif ( d === 0.0 ) {\n\n\t\t\tthis.lightDistance.visible = false;\n\n\t\t} else {\n\n\t\t\tthis.lightDistance.visible = true;\n\t\t\tthis.lightDistance.scale.set( d, d, d );\n\n\t\t}\n\t\t*/\n\n\t}\n\n}\n\nconst _vector$1 = /*@__PURE__*/ new Vector3();\nconst _color1 = /*@__PURE__*/ new Color();\nconst _color2 = /*@__PURE__*/ new Color();\n\nclass HemisphereLightHelper extends Object3D {\n\n\tconstructor( light, size, color ) {\n\n\t\tsuper();\n\t\tthis.light = light;\n\t\tthis.light.updateMatrixWorld();\n\n\t\tthis.matrix = light.matrixWorld;\n\t\tthis.matrixAutoUpdate = false;\n\n\t\tthis.color = color;\n\n\t\tconst geometry = new OctahedronGeometry( size );\n\t\tgeometry.rotateY( Math.PI * 0.5 );\n\n\t\tthis.material = new MeshBasicMaterial( { wireframe: true, fog: false, toneMapped: false } );\n\t\tif ( this.color === undefined ) this.material.vertexColors = true;\n\n\t\tconst position = geometry.getAttribute( 'position' );\n\t\tconst colors = new Float32Array( position.count * 3 );\n\n\t\tgeometry.setAttribute( 'color', new BufferAttribute( colors, 3 ) );\n\n\t\tthis.add( new Mesh( geometry, this.material ) );\n\n\t\tthis.update();\n\n\t}\n\n\tdispose() {\n\n\t\tthis.children[ 0 ].geometry.dispose();\n\t\tthis.children[ 0 ].material.dispose();\n\n\t}\n\n\tupdate() {\n\n\t\tconst mesh = this.children[ 0 ];\n\n\t\tif ( this.color !== undefined ) {\n\n\t\t\tthis.material.color.set( this.color );\n\n\t\t} else {\n\n\t\t\tconst colors = mesh.geometry.getAttribute( 'color' );\n\n\t\t\t_color1.copy( this.light.color );\n\t\t\t_color2.copy( this.light.groundColor );\n\n\t\t\tfor ( let i = 0, l = colors.count; i < l; i ++ ) {\n\n\t\t\t\tconst color = ( i < ( l / 2 ) ) ? _color1 : _color2;\n\n\t\t\t\tcolors.setXYZ( i, color.r, color.g, color.b );\n\n\t\t\t}\n\n\t\t\tcolors.needsUpdate = true;\n\n\t\t}\n\n\t\tmesh.lookAt( _vector$1.setFromMatrixPosition( this.light.matrixWorld ).negate() );\n\n\t}\n\n}\n\nclass GridHelper extends LineSegments {\n\n\tconstructor( size = 10, divisions = 10, color1 = 0x444444, color2 = 0x888888 ) {\n\n\t\tcolor1 = new Color( color1 );\n\t\tcolor2 = new Color( color2 );\n\n\t\tconst center = divisions / 2;\n\t\tconst step = size / divisions;\n\t\tconst halfSize = size / 2;\n\n\t\tconst vertices = [], colors = [];\n\n\t\tfor ( let i = 0, j = 0, k = - halfSize; i <= divisions; i ++, k += step ) {\n\n\t\t\tvertices.push( - halfSize, 0, k, halfSize, 0, k );\n\t\t\tvertices.push( k, 0, - halfSize, k, 0, halfSize );\n\n\t\t\tconst color = i === center ? color1 : color2;\n\n\t\t\tcolor.toArray( colors, j ); j += 3;\n\t\t\tcolor.toArray( colors, j ); j += 3;\n\t\t\tcolor.toArray( colors, j ); j += 3;\n\t\t\tcolor.toArray( colors, j ); j += 3;\n\n\t\t}\n\n\t\tconst geometry = new BufferGeometry();\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tgeometry.setAttribute( 'color', new Float32BufferAttribute( colors, 3 ) );\n\n\t\tconst material = new LineBasicMaterial( { vertexColors: true, toneMapped: false } );\n\n\t\tsuper( geometry, material );\n\n\t\tthis.type = 'GridHelper';\n\n\t}\n\n}\n\nclass PolarGridHelper extends LineSegments {\n\n\tconstructor( radius = 10, radials = 16, circles = 8, divisions = 64, color1 = 0x444444, color2 = 0x888888 ) {\n\n\t\tcolor1 = new Color( color1 );\n\t\tcolor2 = new Color( color2 );\n\n\t\tconst vertices = [];\n\t\tconst colors = [];\n\n\t\t// create the radials\n\n\t\tfor ( let i = 0; i <= radials; i ++ ) {\n\n\t\t\tconst v = ( i / radials ) * ( Math.PI * 2 );\n\n\t\t\tconst x = Math.sin( v ) * radius;\n\t\t\tconst z = Math.cos( v ) * radius;\n\n\t\t\tvertices.push( 0, 0, 0 );\n\t\t\tvertices.push( x, 0, z );\n\n\t\t\tconst color = ( i & 1 ) ? color1 : color2;\n\n\t\t\tcolors.push( color.r, color.g, color.b );\n\t\t\tcolors.push( color.r, color.g, color.b );\n\n\t\t}\n\n\t\t// create the circles\n\n\t\tfor ( let i = 0; i <= circles; i ++ ) {\n\n\t\t\tconst color = ( i & 1 ) ? color1 : color2;\n\n\t\t\tconst r = radius - ( radius / circles * i );\n\n\t\t\tfor ( let j = 0; j < divisions; j ++ ) {\n\n\t\t\t\t// first vertex\n\n\t\t\t\tlet v = ( j / divisions ) * ( Math.PI * 2 );\n\n\t\t\t\tlet x = Math.sin( v ) * r;\n\t\t\t\tlet z = Math.cos( v ) * r;\n\n\t\t\t\tvertices.push( x, 0, z );\n\t\t\t\tcolors.push( color.r, color.g, color.b );\n\n\t\t\t\t// second vertex\n\n\t\t\t\tv = ( ( j + 1 ) / divisions ) * ( Math.PI * 2 );\n\n\t\t\t\tx = Math.sin( v ) * r;\n\t\t\t\tz = Math.cos( v ) * r;\n\n\t\t\t\tvertices.push( x, 0, z );\n\t\t\t\tcolors.push( color.r, color.g, color.b );\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst geometry = new BufferGeometry();\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tgeometry.setAttribute( 'color', new Float32BufferAttribute( colors, 3 ) );\n\n\t\tconst material = new LineBasicMaterial( { vertexColors: true, toneMapped: false } );\n\n\t\tsuper( geometry, material );\n\n\t\tthis.type = 'PolarGridHelper';\n\n\t}\n\n}\n\nconst _v1 = /*@__PURE__*/ new Vector3();\nconst _v2 = /*@__PURE__*/ new Vector3();\nconst _v3 = /*@__PURE__*/ new Vector3();\n\nclass DirectionalLightHelper extends Object3D {\n\n\tconstructor( light, size, color ) {\n\n\t\tsuper();\n\t\tthis.light = light;\n\t\tthis.light.updateMatrixWorld();\n\n\t\tthis.matrix = light.matrixWorld;\n\t\tthis.matrixAutoUpdate = false;\n\n\t\tthis.color = color;\n\n\t\tif ( size === undefined ) size = 1;\n\n\t\tlet geometry = new BufferGeometry();\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( [\n\t\t\t- size, size, 0,\n\t\t\tsize, size, 0,\n\t\t\tsize, - size, 0,\n\t\t\t- size, - size, 0,\n\t\t\t- size, size, 0\n\t\t], 3 ) );\n\n\t\tconst material = new LineBasicMaterial( { fog: false, toneMapped: false } );\n\n\t\tthis.lightPlane = new Line( geometry, material );\n\t\tthis.add( this.lightPlane );\n\n\t\tgeometry = new BufferGeometry();\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( [ 0, 0, 0, 0, 0, 1 ], 3 ) );\n\n\t\tthis.targetLine = new Line( geometry, material );\n\t\tthis.add( this.targetLine );\n\n\t\tthis.update();\n\n\t}\n\n\tdispose() {\n\n\t\tthis.lightPlane.geometry.dispose();\n\t\tthis.lightPlane.material.dispose();\n\t\tthis.targetLine.geometry.dispose();\n\t\tthis.targetLine.material.dispose();\n\n\t}\n\n\tupdate() {\n\n\t\t_v1.setFromMatrixPosition( this.light.matrixWorld );\n\t\t_v2.setFromMatrixPosition( this.light.target.matrixWorld );\n\t\t_v3.subVectors( _v2, _v1 );\n\n\t\tthis.lightPlane.lookAt( _v2 );\n\n\t\tif ( this.color !== undefined ) {\n\n\t\t\tthis.lightPlane.material.color.set( this.color );\n\t\t\tthis.targetLine.material.color.set( this.color );\n\n\t\t} else {\n\n\t\t\tthis.lightPlane.material.color.copy( this.light.color );\n\t\t\tthis.targetLine.material.color.copy( this.light.color );\n\n\t\t}\n\n\t\tthis.targetLine.lookAt( _v2 );\n\t\tthis.targetLine.scale.z = _v3.length();\n\n\t}\n\n}\n\nconst _vector = /*@__PURE__*/ new Vector3();\nconst _camera = /*@__PURE__*/ 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\nclass CameraHelper extends LineSegments {\n\n\tconstructor( camera ) {\n\n\t\tconst geometry = new BufferGeometry();\n\t\tconst material = new LineBasicMaterial( { color: 0xffffff, vertexColors: true, toneMapped: false } );\n\n\t\tconst vertices = [];\n\t\tconst colors = [];\n\n\t\tconst pointMap = {};\n\n\t\t// colors\n\n\t\tconst colorFrustum = new Color( 0xffaa00 );\n\t\tconst colorCone = new Color( 0xff0000 );\n\t\tconst colorUp = new Color( 0x00aaff );\n\t\tconst colorTarget = new Color( 0xffffff );\n\t\tconst colorCross = new Color( 0x333333 );\n\n\t\t// near\n\n\t\taddLine( 'n1', 'n2', colorFrustum );\n\t\taddLine( 'n2', 'n4', colorFrustum );\n\t\taddLine( 'n4', 'n3', colorFrustum );\n\t\taddLine( 'n3', 'n1', colorFrustum );\n\n\t\t// far\n\n\t\taddLine( 'f1', 'f2', colorFrustum );\n\t\taddLine( 'f2', 'f4', colorFrustum );\n\t\taddLine( 'f4', 'f3', colorFrustum );\n\t\taddLine( 'f3', 'f1', colorFrustum );\n\n\t\t// sides\n\n\t\taddLine( 'n1', 'f1', colorFrustum );\n\t\taddLine( 'n2', 'f2', colorFrustum );\n\t\taddLine( 'n3', 'f3', colorFrustum );\n\t\taddLine( 'n4', 'f4', colorFrustum );\n\n\t\t// cone\n\n\t\taddLine( 'p', 'n1', colorCone );\n\t\taddLine( 'p', 'n2', colorCone );\n\t\taddLine( 'p', 'n3', colorCone );\n\t\taddLine( 'p', 'n4', colorCone );\n\n\t\t// up\n\n\t\taddLine( 'u1', 'u2', colorUp );\n\t\taddLine( 'u2', 'u3', colorUp );\n\t\taddLine( 'u3', 'u1', colorUp );\n\n\t\t// target\n\n\t\taddLine( 'c', 't', colorTarget );\n\t\taddLine( 'p', 'c', colorCross );\n\n\t\t// cross\n\n\t\taddLine( 'cn1', 'cn2', colorCross );\n\t\taddLine( 'cn3', 'cn4', colorCross );\n\n\t\taddLine( 'cf1', 'cf2', colorCross );\n\t\taddLine( 'cf3', 'cf4', colorCross );\n\n\t\tfunction addLine( a, b, color ) {\n\n\t\t\taddPoint( a, color );\n\t\t\taddPoint( b, color );\n\n\t\t}\n\n\t\tfunction addPoint( id, color ) {\n\n\t\t\tvertices.push( 0, 0, 0 );\n\t\t\tcolors.push( color.r, color.g, color.b );\n\n\t\t\tif ( pointMap[ id ] === undefined ) {\n\n\t\t\t\tpointMap[ id ] = [];\n\n\t\t\t}\n\n\t\t\tpointMap[ id ].push( ( vertices.length / 3 ) - 1 );\n\n\t\t}\n\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tgeometry.setAttribute( 'color', new Float32BufferAttribute( colors, 3 ) );\n\n\t\tsuper( geometry, material );\n\n\t\tthis.type = 'CameraHelper';\n\n\t\tthis.camera = camera;\n\t\tif ( this.camera.updateProjectionMatrix ) this.camera.updateProjectionMatrix();\n\n\t\tthis.matrix = camera.matrixWorld;\n\t\tthis.matrixAutoUpdate = false;\n\n\t\tthis.pointMap = pointMap;\n\n\t\tthis.update();\n\n\t}\n\n\tupdate() {\n\n\t\tconst geometry = this.geometry;\n\t\tconst pointMap = this.pointMap;\n\n\t\tconst w = 1, h = 1;\n\n\t\t// we need just camera projection matrix inverse\n\t\t// world matrix must be identity\n\n\t\t_camera.projectionMatrixInverse.copy( this.camera.projectionMatrixInverse );\n\n\t\t// center / target\n\n\t\tsetPoint( 'c', pointMap, geometry, _camera, 0, 0, - 1 );\n\t\tsetPoint( 't', pointMap, geometry, _camera, 0, 0, 1 );\n\n\t\t// near\n\n\t\tsetPoint( 'n1', pointMap, geometry, _camera, - w, - h, - 1 );\n\t\tsetPoint( 'n2', pointMap, geometry, _camera, w, - h, - 1 );\n\t\tsetPoint( 'n3', pointMap, geometry, _camera, - w, h, - 1 );\n\t\tsetPoint( 'n4', pointMap, geometry, _camera, w, h, - 1 );\n\n\t\t// far\n\n\t\tsetPoint( 'f1', pointMap, geometry, _camera, - w, - h, 1 );\n\t\tsetPoint( 'f2', pointMap, geometry, _camera, w, - h, 1 );\n\t\tsetPoint( 'f3', pointMap, geometry, _camera, - w, h, 1 );\n\t\tsetPoint( 'f4', pointMap, geometry, _camera, w, h, 1 );\n\n\t\t// up\n\n\t\tsetPoint( 'u1', pointMap, geometry, _camera, w * 0.7, h * 1.1, - 1 );\n\t\tsetPoint( 'u2', pointMap, geometry, _camera, - w * 0.7, h * 1.1, - 1 );\n\t\tsetPoint( 'u3', pointMap, geometry, _camera, 0, h * 2, - 1 );\n\n\t\t// cross\n\n\t\tsetPoint( 'cf1', pointMap, geometry, _camera, - w, 0, 1 );\n\t\tsetPoint( 'cf2', pointMap, geometry, _camera, w, 0, 1 );\n\t\tsetPoint( 'cf3', pointMap, geometry, _camera, 0, - h, 1 );\n\t\tsetPoint( 'cf4', pointMap, geometry, _camera, 0, h, 1 );\n\n\t\tsetPoint( 'cn1', pointMap, geometry, _camera, - w, 0, - 1 );\n\t\tsetPoint( 'cn2', pointMap, geometry, _camera, w, 0, - 1 );\n\t\tsetPoint( 'cn3', pointMap, geometry, _camera, 0, - h, - 1 );\n\t\tsetPoint( 'cn4', pointMap, geometry, _camera, 0, h, - 1 );\n\n\t\tgeometry.getAttribute( 'position' ).needsUpdate = true;\n\n\t}\n\n\tdispose() {\n\n\t\tthis.geometry.dispose();\n\t\tthis.material.dispose();\n\n\t}\n\n}\n\n\nfunction setPoint( point, pointMap, geometry, camera, x, y, z ) {\n\n\t_vector.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.x, _vector.y, _vector.z );\n\n\t\t}\n\n\t}\n\n}\n\nconst _box = /*@__PURE__*/ new Box3();\n\nclass BoxHelper extends LineSegments {\n\n\tconstructor( object, color = 0xffff00 ) {\n\n\t\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\t\tconst positions = new Float32Array( 8 * 3 );\n\n\t\tconst geometry = new BufferGeometry();\n\t\tgeometry.setIndex( new BufferAttribute( indices, 1 ) );\n\t\tgeometry.setAttribute( 'position', new BufferAttribute( positions, 3 ) );\n\n\t\tsuper( geometry, new LineBasicMaterial( { color: color, toneMapped: false } ) );\n\n\t\tthis.object = object;\n\t\tthis.type = 'BoxHelper';\n\n\t\tthis.matrixAutoUpdate = false;\n\n\t\tthis.update();\n\n\t}\n\n\tupdate( object ) {\n\n\t\tif ( object !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.BoxHelper: .update() has no longer arguments.' );\n\n\t\t}\n\n\t\tif ( this.object !== undefined ) {\n\n\t\t\t_box.setFromObject( this.object );\n\n\t\t}\n\n\t\tif ( _box.isEmpty() ) return;\n\n\t\tconst min = _box.min;\n\t\tconst max = _box.max;\n\n\t\t/*\n\t\t\t5____4\n\t\t1/___0/|\n\t\t| 6__|_7\n\t\t2/___3/\n\n\t\t0: max.x, max.y, max.z\n\t\t1: min.x, max.y, max.z\n\t\t2: min.x, min.y, max.z\n\t\t3: max.x, min.y, max.z\n\t\t4: max.x, max.y, min.z\n\t\t5: min.x, max.y, min.z\n\t\t6: min.x, min.y, min.z\n\t\t7: max.x, min.y, min.z\n\t\t*/\n\n\t\tconst position = this.geometry.attributes.position;\n\t\tconst array = position.array;\n\n\t\tarray[ 0 ] = max.x; array[ 1 ] = max.y; array[ 2 ] = max.z;\n\t\tarray[ 3 ] = min.x; array[ 4 ] = max.y; array[ 5 ] = max.z;\n\t\tarray[ 6 ] = min.x; array[ 7 ] = min.y; array[ 8 ] = max.z;\n\t\tarray[ 9 ] = max.x; array[ 10 ] = min.y; array[ 11 ] = max.z;\n\t\tarray[ 12 ] = max.x; array[ 13 ] = max.y; array[ 14 ] = min.z;\n\t\tarray[ 15 ] = min.x; array[ 16 ] = max.y; array[ 17 ] = min.z;\n\t\tarray[ 18 ] = min.x; array[ 19 ] = min.y; array[ 20 ] = min.z;\n\t\tarray[ 21 ] = max.x; array[ 22 ] = min.y; array[ 23 ] = min.z;\n\n\t\tposition.needsUpdate = true;\n\n\t\tthis.geometry.computeBoundingSphere();\n\n\n\t}\n\n\tsetFromObject( object ) {\n\n\t\tthis.object = object;\n\t\tthis.update();\n\n\t\treturn this;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tLineSegments.prototype.copy.call( this, source );\n\n\t\tthis.object = source.object;\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass Box3Helper extends LineSegments {\n\n\tconstructor( box, color = 0xffff00 ) {\n\n\t\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\t\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\t\tconst geometry = new BufferGeometry();\n\n\t\tgeometry.setIndex( new BufferAttribute( indices, 1 ) );\n\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( positions, 3 ) );\n\n\t\tsuper( geometry, new LineBasicMaterial( { color: color, toneMapped: false } ) );\n\n\t\tthis.box = box;\n\n\t\tthis.type = 'Box3Helper';\n\n\t\tthis.geometry.computeBoundingSphere();\n\n\t}\n\n\tupdateMatrixWorld( force ) {\n\n\t\tconst box = this.box;\n\n\t\tif ( box.isEmpty() ) return;\n\n\t\tbox.getCenter( this.position );\n\n\t\tbox.getSize( this.scale );\n\n\t\tthis.scale.multiplyScalar( 0.5 );\n\n\t\tsuper.updateMatrixWorld( force );\n\n\t}\n\n}\n\nclass PlaneHelper extends Line {\n\n\tconstructor( plane, size = 1, hex = 0xffff00 ) {\n\n\t\tconst color = hex;\n\n\t\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\t\tconst geometry = new BufferGeometry();\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( positions, 3 ) );\n\t\tgeometry.computeBoundingSphere();\n\n\t\tsuper( geometry, new LineBasicMaterial( { color: color, toneMapped: false } ) );\n\n\t\tthis.type = 'PlaneHelper';\n\n\t\tthis.plane = plane;\n\n\t\tthis.size = size;\n\n\t\tconst positions2 = [ 1, 1, 1, - 1, 1, 1, - 1, - 1, 1, 1, 1, 1, - 1, - 1, 1, 1, - 1, 1 ];\n\n\t\tconst geometry2 = new BufferGeometry();\n\t\tgeometry2.setAttribute( 'position', new Float32BufferAttribute( positions2, 3 ) );\n\t\tgeometry2.computeBoundingSphere();\n\n\t\tthis.add( new Mesh( geometry2, new MeshBasicMaterial( { color: color, opacity: 0.2, transparent: true, depthWrite: false, toneMapped: false } ) ) );\n\n\t}\n\n\tupdateMatrixWorld( force ) {\n\n\t\tlet scale = - this.plane.constant;\n\n\t\tif ( Math.abs( scale ) < 1e-8 ) scale = 1e-8; // sign does not matter\n\n\t\tthis.scale.set( 0.5 * this.size, 0.5 * this.size, scale );\n\n\t\tthis.children[ 0 ].material.side = ( scale < 0 ) ? BackSide : FrontSide; // renderer flips side when determinant < 0; flipping not wanted here\n\n\t\tthis.lookAt( this.plane.normal );\n\n\t\tsuper.updateMatrixWorld( force );\n\n\t}\n\n}\n\nconst _axis = /*@__PURE__*/ new Vector3();\nlet _lineGeometry, _coneGeometry;\n\nclass ArrowHelper extends Object3D {\n\n\t// dir is assumed to be normalized\n\n\tconstructor( dir = new Vector3( 0, 0, 1 ), origin = new Vector3( 0, 0, 0 ), length = 1, color = 0xffff00, headLength = length * 0.2, headWidth = headLength * 0.2 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'ArrowHelper';\n\n\t\tif ( _lineGeometry === undefined ) {\n\n\t\t\t_lineGeometry = new BufferGeometry();\n\t\t\t_lineGeometry.setAttribute( 'position', new Float32BufferAttribute( [ 0, 0, 0, 0, 1, 0 ], 3 ) );\n\n\t\t\t_coneGeometry = new CylinderGeometry( 0, 0.5, 1, 5, 1 );\n\t\t\t_coneGeometry.translate( 0, - 0.5, 0 );\n\n\t\t}\n\n\t\tthis.position.copy( origin );\n\n\t\tthis.line = new Line( _lineGeometry, new LineBasicMaterial( { color: color, toneMapped: false } ) );\n\t\tthis.line.matrixAutoUpdate = false;\n\t\tthis.add( this.line );\n\n\t\tthis.cone = new Mesh( _coneGeometry, new MeshBasicMaterial( { color: color, toneMapped: false } ) );\n\t\tthis.cone.matrixAutoUpdate = false;\n\t\tthis.add( this.cone );\n\n\t\tthis.setDirection( dir );\n\t\tthis.setLength( length, headLength, headWidth );\n\n\t}\n\n\tsetDirection( dir ) {\n\n\t\t// dir is assumed to be normalized\n\n\t\tif ( dir.y > 0.99999 ) {\n\n\t\t\tthis.quaternion.set( 0, 0, 0, 1 );\n\n\t\t} else if ( dir.y < - 0.99999 ) {\n\n\t\t\tthis.quaternion.set( 1, 0, 0, 0 );\n\n\t\t} else {\n\n\t\t\t_axis.set( dir.z, 0, - dir.x ).normalize();\n\n\t\t\tconst radians = Math.acos( dir.y );\n\n\t\t\tthis.quaternion.setFromAxisAngle( _axis, radians );\n\n\t\t}\n\n\t}\n\n\tsetLength( length, headLength = length * 0.2, headWidth = headLength * 0.2 ) {\n\n\t\tthis.line.scale.set( 1, Math.max( 0.0001, length - headLength ), 1 ); // see #17458\n\t\tthis.line.updateMatrix();\n\n\t\tthis.cone.scale.set( headWidth, headLength, headWidth );\n\t\tthis.cone.position.y = length;\n\t\tthis.cone.updateMatrix();\n\n\t}\n\n\tsetColor( color ) {\n\n\t\tthis.line.material.color.set( color );\n\t\tthis.cone.material.color.set( color );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source, false );\n\n\t\tthis.line.copy( source.line );\n\t\tthis.cone.copy( source.cone );\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass AxesHelper extends LineSegments {\n\n\tconstructor( size = 1 ) {\n\n\t\tconst vertices = [\n\t\t\t0, 0, 0,\tsize, 0, 0,\n\t\t\t0, 0, 0,\t0, size, 0,\n\t\t\t0, 0, 0,\t0, 0, size\n\t\t];\n\n\t\tconst colors = [\n\t\t\t1, 0, 0,\t1, 0.6, 0,\n\t\t\t0, 1, 0,\t0.6, 1, 0,\n\t\t\t0, 0, 1,\t0, 0.6, 1\n\t\t];\n\n\t\tconst geometry = new BufferGeometry();\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tgeometry.setAttribute( 'color', new Float32BufferAttribute( colors, 3 ) );\n\n\t\tconst material = new LineBasicMaterial( { vertexColors: true, toneMapped: false } );\n\n\t\tsuper( geometry, material );\n\n\t\tthis.type = 'AxesHelper';\n\n\t}\n\n\tdispose() {\n\n\t\tthis.geometry.dispose();\n\t\tthis.material.dispose();\n\n\t}\n\n}\n\nconst _floatView = new Float32Array( 1 );\nconst _int32View = new Int32Array( _floatView.buffer );\n\nclass DataUtils {\n\n\t// Converts float32 to float16 (stored as uint16 value).\n\n\tstatic toHalfFloat( val ) {\n\n\t\t// Source: http://gamedev.stackexchange.com/questions/17326/conversion-of-a-number-from-single-precision-floating-point-representation-to-a/17410#17410\n\n\t\t/* This method is faster than the OpenEXR implementation (very often\n\t\t* used, eg. in Ogre), with the additional benefit of rounding, inspired\n\t\t* by James Tursa?s half-precision code. */\n\n\t\t_floatView[ 0 ] = val;\n\t\tconst x = _int32View[ 0 ];\n\n\t\tlet bits = ( x >> 16 ) & 0x8000; /* Get the sign */\n\t\tlet m = ( x >> 12 ) & 0x07ff; /* Keep one extra bit for rounding */\n\t\tconst e = ( x >> 23 ) & 0xff; /* Using int is faster here */\n\n\t\t/* If zero, or denormal, or exponent underflows too much for a denormal\n\t\t\t* half, return signed zero. */\n\t\tif ( e < 103 ) return bits;\n\n\t\t/* If NaN, return NaN. If Inf or exponent overflow, return Inf. */\n\t\tif ( e > 142 ) {\n\n\t\t\tbits |= 0x7c00;\n\t\t\t/* If exponent was 0xff and one mantissa bit was set, it means NaN,\n\t\t\t\t\t\t* not Inf, so make sure we set one mantissa bit too. */\n\t\t\tbits |= ( ( e == 255 ) ? 0 : 1 ) && ( x & 0x007fffff );\n\t\t\treturn bits;\n\n\t\t}\n\n\t\t/* If exponent underflows but not too much, return a denormal */\n\t\tif ( e < 113 ) {\n\n\t\t\tm |= 0x0800;\n\t\t\t/* Extra rounding may overflow and set mantissa to 0 and exponent\n\t\t\t\t* to 1, which is OK. */\n\t\t\tbits |= ( m >> ( 114 - e ) ) + ( ( m >> ( 113 - e ) ) & 1 );\n\t\t\treturn bits;\n\n\t\t}\n\n\t\tbits |= ( ( e - 112 ) << 10 ) | ( m >> 1 );\n\t\t/* Extra rounding. An overflow will set mantissa to 0 and increment\n\t\t\t* the exponent, which is OK. */\n\t\tbits += m & 1;\n\t\treturn bits;\n\n\t}\n\n}\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 backgroundMaterial = new MeshBasicMaterial( {\n\tside: BackSide,\n\tdepthWrite: false,\n\tdepthTest: false,\n} );\nconst backgroundBox = new Mesh( new BoxGeometry(), backgroundMaterial );\n\nconst _flatCamera = /*@__PURE__*/ new OrthographicCamera();\nconst { _lodPlanes, _sizeLods, _sigmas } = /*@__PURE__*/ _createPlanes();\nconst _clearColor = /*@__PURE__*/ new Color();\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\t/*@__PURE__*/ new Vector3( 1, 1, 1 ),\n\t/*@__PURE__*/ new Vector3( - 1, 1, 1 ),\n\t/*@__PURE__*/ new Vector3( 1, 1, - 1 ),\n\t/*@__PURE__*/ new Vector3( - 1, 1, - 1 ),\n\t/*@__PURE__*/ new Vector3( 0, PHI, INV_PHI ),\n\t/*@__PURE__*/ new Vector3( 0, PHI, - INV_PHI ),\n\t/*@__PURE__*/ new Vector3( INV_PHI, 0, PHI ),\n\t/*@__PURE__*/ new Vector3( - INV_PHI, 0, PHI ),\n\t/*@__PURE__*/ new Vector3( PHI, INV_PHI, 0 ),\n\t/*@__PURE__*/ new 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 * Paper: Fast, Accurate Image-Based Lighting\n * https://drive.google.com/file/d/15y8r_UpKlU9SvV4ILb0C3qCPecS8pvLz/view\n*/\n\nfunction convertLinearToRGBE( color ) {\n\n\tconst maxComponent = Math.max( color.r, color.g, color.b );\n\tconst fExp = Math.min( Math.max( Math.ceil( Math.log2( maxComponent ) ), - 128.0 ), 127.0 );\n\tcolor.multiplyScalar( Math.pow( 2.0, - fExp ) );\n\n\tconst alpha = ( fExp + 128.0 ) / 255.0;\n\treturn alpha;\n\n}\n\nclass PMREMGenerator {\n\n\tconstructor( renderer ) {\n\n\t\tthis._renderer = renderer;\n\t\tthis._pingPongRenderTarget = null;\n\n\t\tthis._blurMaterial = _getBlurShader( MAX_SAMPLES );\n\t\tthis._equirectShader = null;\n\t\tthis._cubemapShader = null;\n\n\t\tthis._compileMaterial( this._blurMaterial );\n\n\t}\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( 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( 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( 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() {\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() {\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() {\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( 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( 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( 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};\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( 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( 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 originalAutoClear = renderer.autoClear;\n\t\tconst outputEncoding = renderer.outputEncoding;\n\t\tconst toneMapping = renderer.toneMapping;\n\t\trenderer.getClearColor( _clearColor );\n\n\t\trenderer.toneMapping = NoToneMapping;\n\t\trenderer.outputEncoding = LinearEncoding;\n\t\trenderer.autoClear = false;\n\n\t\tlet useSolidColor = false;\n\t\tconst background = scene.background;\n\t\tif ( background ) {\n\n\t\t\tif ( background.isColor ) {\n\n\t\t\t\tbackgroundMaterial.color.copy( background ).convertSRGBToLinear();\n\t\t\t\tscene.background = null;\n\n\t\t\t\tconst alpha = convertLinearToRGBE( backgroundMaterial.color );\n\t\t\t\tbackgroundMaterial.opacity = alpha;\n\t\t\t\tuseSolidColor = true;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tbackgroundMaterial.color.copy( _clearColor ).convertSRGBToLinear();\n\n\t\t\tconst alpha = convertLinearToRGBE( backgroundMaterial.color );\n\t\t\tbackgroundMaterial.opacity = alpha;\n\t\t\tuseSolidColor = true;\n\n\t\t}\n\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\n\t\t\tif ( useSolidColor ) {\n\n\t\t\t\trenderer.render( backgroundBox, cubeCamera );\n\n\t\t\t}\n\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.autoClear = originalAutoClear;\n\n\t}\n\n\t_textureToCubeUV( 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( 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( 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( 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 <cube_uv_reflection_fragment>\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 <common>\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 <encodings_pars_fragment>\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\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\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\nPath.prototype.fromPoints = function ( points ) {\n\n\tconsole.warn( 'THREE.Path: .fromPoints() has been renamed to .setFromPoints().' );\n\treturn this.setFromPoints( points );\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\nLoader.prototype.extractUrlBase = function ( url ) {\n\n\tconsole.warn( 'THREE.Loader: .extractUrlBase() has been deprecated. Use THREE.LoaderUtils.extractUrlBase() instead.' );\n\treturn LoaderUtils.extractUrlBase( url );\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\n//\n\nBox2.prototype.center = function ( optionalTarget ) {\n\n\tconsole.warn( 'THREE.Box2: .center() has been renamed to .getCenter().' );\n\treturn this.getCenter( optionalTarget );\n\n};\n\nBox2.prototype.empty = function () {\n\n\tconsole.warn( 'THREE.Box2: .empty() has been renamed to .isEmpty().' );\n\treturn this.isEmpty();\n\n};\n\nBox2.prototype.isIntersectionBox = function ( box ) {\n\n\tconsole.warn( 'THREE.Box2: .isIntersectionBox() has been renamed to .intersectsBox().' );\n\treturn this.intersectsBox( box );\n\n};\n\nBox2.prototype.size = function ( optionalTarget ) {\n\n\tconsole.warn( 'THREE.Box2: .size() has been renamed to .getSize().' );\n\treturn this.getSize( optionalTarget );\n\n};\n\n//\n\nBox3.prototype.center = function ( optionalTarget ) {\n\n\tconsole.warn( 'THREE.Box3: .center() has been renamed to .getCenter().' );\n\treturn this.getCenter( optionalTarget );\n\n};\n\nBox3.prototype.empty = function () {\n\n\tconsole.warn( 'THREE.Box3: .empty() has been renamed to .isEmpty().' );\n\treturn this.isEmpty();\n\n};\n\nBox3.prototype.isIntersectionBox = function ( box ) {\n\n\tconsole.warn( 'THREE.Box3: .isIntersectionBox() has been renamed to .intersectsBox().' );\n\treturn this.intersectsBox( box );\n\n};\n\nBox3.prototype.isIntersectionSphere = function ( sphere ) {\n\n\tconsole.warn( 'THREE.Box3: .isIntersectionSphere() has been renamed to .intersectsSphere().' );\n\treturn this.intersectsSphere( sphere );\n\n};\n\nBox3.prototype.size = function ( optionalTarget ) {\n\n\tconsole.warn( 'THREE.Box3: .size() has been renamed to .getSize().' );\n\treturn this.getSize( optionalTarget );\n\n};\n\n//\n\nSphere.prototype.empty = function () {\n\n\tconsole.warn( 'THREE.Sphere: .empty() has been renamed to .isEmpty().' );\n\treturn this.isEmpty();\n\n};\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\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\n//\n\nMatrix3.prototype.flattenToArrayOffset = function ( array, offset ) {\n\n\tconsole.warn( 'THREE.Matrix3: .flattenToArrayOffset() has been deprecated. Use .toArray() instead.' );\n\treturn this.toArray( array, offset );\n\n};\n\nMatrix3.prototype.multiplyVector3 = function ( vector ) {\n\n\tconsole.warn( 'THREE.Matrix3: .multiplyVector3() has been removed. Use vector.applyMatrix3( matrix ) instead.' );\n\treturn vector.applyMatrix3( this );\n\n};\n\nMatrix3.prototype.multiplyVector3Array = function ( /* a */ ) {\n\n\tconsole.error( 'THREE.Matrix3: .multiplyVector3Array() has been removed.' );\n\n};\n\nMatrix3.prototype.applyToBufferAttribute = function ( attribute ) {\n\n\tconsole.warn( 'THREE.Matrix3: .applyToBufferAttribute() has been removed. Use attribute.applyMatrix3( matrix ) instead.' );\n\treturn attribute.applyMatrix3( this );\n\n};\n\nMatrix3.prototype.applyToVector3Array = function ( /* array, offset, length */ ) {\n\n\tconsole.error( 'THREE.Matrix3: .applyToVector3Array() has been removed.' );\n\n};\n\nMatrix3.prototype.getInverse = function ( matrix ) {\n\n\tconsole.warn( 'THREE.Matrix3: .getInverse() has been removed. Use matrixInv.copy( matrix ).invert(); instead.' );\n\treturn this.copy( matrix ).invert();\n\n};\n\n//\n\nMatrix4.prototype.extractPosition = function ( m ) {\n\n\tconsole.warn( 'THREE.Matrix4: .extractPosition() has been renamed to .copyPosition().' );\n\treturn this.copyPosition( m );\n\n};\n\nMatrix4.prototype.flattenToArrayOffset = function ( array, offset ) {\n\n\tconsole.warn( 'THREE.Matrix4: .flattenToArrayOffset() has been deprecated. Use .toArray() instead.' );\n\treturn this.toArray( array, offset );\n\n};\n\nMatrix4.prototype.getPosition = function () {\n\n\tconsole.warn( 'THREE.Matrix4: .getPosition() has been removed. Use Vector3.setFromMatrixPosition( matrix ) instead.' );\n\treturn new Vector3().setFromMatrixColumn( this, 3 );\n\n};\n\nMatrix4.prototype.setRotationFromQuaternion = function ( q ) {\n\n\tconsole.warn( 'THREE.Matrix4: .setRotationFromQuaternion() has been renamed to .makeRotationFromQuaternion().' );\n\treturn this.makeRotationFromQuaternion( q );\n\n};\n\nMatrix4.prototype.multiplyToArray = function () {\n\n\tconsole.warn( 'THREE.Matrix4: .multiplyToArray() has been removed.' );\n\n};\n\nMatrix4.prototype.multiplyVector3 = function ( vector ) {\n\n\tconsole.warn( 'THREE.Matrix4: .multiplyVector3() has been removed. Use vector.applyMatrix4( matrix ) instead.' );\n\treturn vector.applyMatrix4( this );\n\n};\n\nMatrix4.prototype.multiplyVector4 = function ( vector ) {\n\n\tconsole.warn( 'THREE.Matrix4: .multiplyVector4() has been removed. Use vector.applyMatrix4( matrix ) instead.' );\n\treturn vector.applyMatrix4( this );\n\n};\n\nMatrix4.prototype.multiplyVector3Array = function ( /* a */ ) {\n\n\tconsole.error( 'THREE.Matrix4: .multiplyVector3Array() has been removed.' );\n\n};\n\nMatrix4.prototype.rotateAxis = function ( v ) {\n\n\tconsole.warn( 'THREE.Matrix4: .rotateAxis() has been removed. Use Vector3.transformDirection( matrix ) instead.' );\n\tv.transformDirection( this );\n\n};\n\nMatrix4.prototype.crossVector = function ( vector ) {\n\n\tconsole.warn( 'THREE.Matrix4: .crossVector() has been removed. Use vector.applyMatrix4( matrix ) instead.' );\n\treturn vector.applyMatrix4( this );\n\n};\n\nMatrix4.prototype.translate = function () {\n\n\tconsole.error( 'THREE.Matrix4: .translate() has been removed.' );\n\n};\n\nMatrix4.prototype.rotateX = function () {\n\n\tconsole.error( 'THREE.Matrix4: .rotateX() has been removed.' );\n\n};\n\nMatrix4.prototype.rotateY = function () {\n\n\tconsole.error( 'THREE.Matrix4: .rotateY() has been removed.' );\n\n};\n\nMatrix4.prototype.rotateZ = function () {\n\n\tconsole.error( 'THREE.Matrix4: .rotateZ() has been removed.' );\n\n};\n\nMatrix4.prototype.rotateByAxis = function () {\n\n\tconsole.error( 'THREE.Matrix4: .rotateByAxis() has been removed.' );\n\n};\n\nMatrix4.prototype.applyToBufferAttribute = function ( attribute ) {\n\n\tconsole.warn( 'THREE.Matrix4: .applyToBufferAttribute() has been removed. Use attribute.applyMatrix4( matrix ) instead.' );\n\treturn attribute.applyMatrix4( this );\n\n};\n\nMatrix4.prototype.applyToVector3Array = function ( /* array, offset, length */ ) {\n\n\tconsole.error( 'THREE.Matrix4: .applyToVector3Array() has been removed.' );\n\n};\n\nMatrix4.prototype.makeFrustum = function ( left, right, bottom, top, near, far ) {\n\n\tconsole.warn( 'THREE.Matrix4: .makeFrustum() has been removed. Use .makePerspective( left, right, top, bottom, near, far ) instead.' );\n\treturn this.makePerspective( left, right, top, bottom, near, far );\n\n};\n\nMatrix4.prototype.getInverse = function ( matrix ) {\n\n\tconsole.warn( 'THREE.Matrix4: .getInverse() has been removed. Use matrixInv.copy( matrix ).invert(); instead.' );\n\treturn this.copy( matrix ).invert();\n\n};\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\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\nQuaternion.prototype.inverse = function ( ) {\n\n\tconsole.warn( 'THREE.Quaternion: .inverse() has been renamed to invert().' );\n\treturn this.invert();\n\n};\n\n//\n\nRay.prototype.isIntersectionBox = function ( box ) {\n\n\tconsole.warn( 'THREE.Ray: .isIntersectionBox() has been renamed to .intersectsBox().' );\n\treturn this.intersectsBox( box );\n\n};\n\nRay.prototype.isIntersectionPlane = function ( plane ) {\n\n\tconsole.warn( 'THREE.Ray: .isIntersectionPlane() has been renamed to .intersectsPlane().' );\n\treturn this.intersectsPlane( plane );\n\n};\n\nRay.prototype.isIntersectionSphere = function ( sphere ) {\n\n\tconsole.warn( 'THREE.Ray: .isIntersectionSphere() has been renamed to .intersectsSphere().' );\n\treturn this.intersectsSphere( sphere );\n\n};\n\n//\n\nTriangle.prototype.area = function () {\n\n\tconsole.warn( 'THREE.Triangle: .area() has been renamed to .getArea().' );\n\treturn this.getArea();\n\n};\n\nTriangle.prototype.barycoordFromPoint = function ( point, target ) {\n\n\tconsole.warn( 'THREE.Triangle: .barycoordFromPoint() has been renamed to .getBarycoord().' );\n\treturn this.getBarycoord( point, target );\n\n};\n\nTriangle.prototype.midpoint = function ( target ) {\n\n\tconsole.warn( 'THREE.Triangle: .midpoint() has been renamed to .getMidpoint().' );\n\treturn this.getMidpoint( target );\n\n};\n\nTriangle.prototypenormal = function ( target ) {\n\n\tconsole.warn( 'THREE.Triangle: .normal() has been renamed to .getNormal().' );\n\treturn this.getNormal( target );\n\n};\n\nTriangle.prototype.plane = function ( target ) {\n\n\tconsole.warn( 'THREE.Triangle: .plane() has been renamed to .getPlane().' );\n\treturn this.getPlane( target );\n\n};\n\nTriangle.barycoordFromPoint = function ( point, a, b, c, target ) {\n\n\tconsole.warn( 'THREE.Triangle: .barycoordFromPoint() has been renamed to .getBarycoord().' );\n\treturn Triangle.getBarycoord( point, a, b, c, target );\n\n};\n\nTriangle.normal = function ( a, b, c, target ) {\n\n\tconsole.warn( 'THREE.Triangle: .normal() has been renamed to .getNormal().' );\n\treturn Triangle.getNormal( a, b, c, target );\n\n};\n\n//\n\nShape.prototype.extractAllPoints = function ( divisions ) {\n\n\tconsole.warn( 'THREE.Shape: .extractAllPoints() has been removed. Use .extractPoints() instead.' );\n\treturn this.extractPoints( divisions );\n\n};\n\nShape.prototype.extrude = function ( options ) {\n\n\tconsole.warn( 'THREE.Shape: .extrude() has been removed. Use ExtrudeGeometry() instead.' );\n\treturn new ExtrudeGeometry( this, options );\n\n};\n\nShape.prototype.makeGeometry = function ( options ) {\n\n\tconsole.warn( 'THREE.Shape: .makeGeometry() has been removed. Use ShapeGeometry() instead.' );\n\treturn new ShapeGeometry( this, options );\n\n};\n\n//\n\nVector2.prototype.fromAttribute = function ( attribute, index, offset ) {\n\n\tconsole.warn( 'THREE.Vector2: .fromAttribute() has been renamed to .fromBufferAttribute().' );\n\treturn this.fromBufferAttribute( attribute, index, offset );\n\n};\n\nVector2.prototype.distanceToManhattan = function ( v ) {\n\n\tconsole.warn( 'THREE.Vector2: .distanceToManhattan() has been renamed to .manhattanDistanceTo().' );\n\treturn this.manhattanDistanceTo( v );\n\n};\n\nVector2.prototype.lengthManhattan = function () {\n\n\tconsole.warn( 'THREE.Vector2: .lengthManhattan() has been renamed to .manhattanLength().' );\n\treturn this.manhattanLength();\n\n};\n\n//\n\nVector3.prototype.setEulerFromRotationMatrix = function () {\n\n\tconsole.error( 'THREE.Vector3: .setEulerFromRotationMatrix() has been removed. Use Euler.setFromRotationMatrix() instead.' );\n\n};\n\nVector3.prototype.setEulerFromQuaternion = function () {\n\n\tconsole.error( 'THREE.Vector3: .setEulerFromQuaternion() has been removed. Use Euler.setFromQuaternion() instead.' );\n\n};\n\nVector3.prototype.getPositionFromMatrix = function ( m ) {\n\n\tconsole.warn( 'THREE.Vector3: .getPositionFromMatrix() has been renamed to .setFromMatrixPosition().' );\n\treturn this.setFromMatrixPosition( m );\n\n};\n\nVector3.prototype.getScaleFromMatrix = function ( m ) {\n\n\tconsole.warn( 'THREE.Vector3: .getScaleFromMatrix() has been renamed to .setFromMatrixScale().' );\n\treturn this.setFromMatrixScale( m );\n\n};\n\nVector3.prototype.getColumnFromMatrix = function ( index, matrix ) {\n\n\tconsole.warn( 'THREE.Vector3: .getColumnFromMatrix() has been renamed to .setFromMatrixColumn().' );\n\treturn this.setFromMatrixColumn( matrix, index );\n\n};\n\nVector3.prototype.applyProjection = function ( m ) {\n\n\tconsole.warn( 'THREE.Vector3: .applyProjection() has been removed. Use .applyMatrix4( m ) instead.' );\n\treturn this.applyMatrix4( m );\n\n};\n\nVector3.prototype.fromAttribute = function ( attribute, index, offset ) {\n\n\tconsole.warn( 'THREE.Vector3: .fromAttribute() has been renamed to .fromBufferAttribute().' );\n\treturn this.fromBufferAttribute( attribute, index, offset );\n\n};\n\nVector3.prototype.distanceToManhattan = function ( v ) {\n\n\tconsole.warn( 'THREE.Vector3: .distanceToManhattan() has been renamed to .manhattanDistanceTo().' );\n\treturn this.manhattanDistanceTo( v );\n\n};\n\nVector3.prototype.lengthManhattan = function () {\n\n\tconsole.warn( 'THREE.Vector3: .lengthManhattan() has been renamed to .manhattanLength().' );\n\treturn this.manhattanLength();\n\n};\n\n//\n\nVector4.prototype.fromAttribute = function ( attribute, index, offset ) {\n\n\tconsole.warn( 'THREE.Vector4: .fromAttribute() has been renamed to .fromBufferAttribute().' );\n\treturn this.fromBufferAttribute( attribute, index, offset );\n\n};\n\nVector4.prototype.lengthManhattan = function () {\n\n\tconsole.warn( 'THREE.Vector4: .lengthManhattan() has been renamed to .manhattanLength().' );\n\treturn this.manhattanLength();\n\n};\n\n//\n\nObject3D.prototype.getChildByName = function ( name ) {\n\n\tconsole.warn( 'THREE.Object3D: .getChildByName() has been renamed to .getObjectByName().' );\n\treturn this.getObjectByName( name );\n\n};\n\nObject3D.prototype.renderDepth = function () {\n\n\tconsole.warn( 'THREE.Object3D: .renderDepth has been removed. Use .renderOrder, instead.' );\n\n};\n\nObject3D.prototype.translate = function ( distance, axis ) {\n\n\tconsole.warn( 'THREE.Object3D: .translate() has been removed. Use .translateOnAxis( axis, distance ) instead.' );\n\treturn this.translateOnAxis( axis, distance );\n\n};\n\nObject3D.prototype.getWorldRotation = function () {\n\n\tconsole.error( 'THREE.Object3D: .getWorldRotation() has been removed. Use THREE.Object3D.getWorldQuaternion( target ) instead.' );\n\n};\n\nObject3D.prototype.applyMatrix = function ( matrix ) {\n\n\tconsole.warn( 'THREE.Object3D: .applyMatrix() has been renamed to .applyMatrix4().' );\n\treturn this.applyMatrix4( matrix );\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\nMesh.prototype.setDrawMode = function () {\n\n\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};\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\nSkinnedMesh.prototype.initBones = function () {\n\n\tconsole.error( 'THREE.SkinnedMesh: initBones() has been removed.' );\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\nBufferAttribute.prototype.setDynamic = function ( value ) {\n\n\tconsole.warn( 'THREE.BufferAttribute: .setDynamic() has been deprecated. Use .setUsage() instead.' );\n\tthis.setUsage( value === true ? DynamicDrawUsage : StaticDrawUsage );\n\treturn this;\n\n};\n\nBufferAttribute.prototype.copyIndicesArray = function ( /* indices */ ) {\n\n\tconsole.error( 'THREE.BufferAttribute: .copyIndicesArray() has been removed.' );\n\n},\n\nBufferAttribute.prototype.setArray = function ( /* array */ ) {\n\n\tconsole.error( 'THREE.BufferAttribute: .setArray has been removed. Use BufferGeometry .setAttribute to replace/resize attribute buffers' );\n\n};\n\n//\n\nBufferGeometry.prototype.addIndex = function ( index ) {\n\n\tconsole.warn( 'THREE.BufferGeometry: .addIndex() has been renamed to .setIndex().' );\n\tthis.setIndex( index );\n\n};\n\nBufferGeometry.prototype.addAttribute = function ( name, attribute ) {\n\n\tconsole.warn( 'THREE.BufferGeometry: .addAttribute() has been renamed to .setAttribute().' );\n\n\tif ( ! ( attribute && attribute.isBufferAttribute ) && ! ( attribute && attribute.isInterleavedBufferAttribute ) ) {\n\n\t\tconsole.warn( 'THREE.BufferGeometry: .addAttribute() now expects ( name, attribute ).' );\n\n\t\treturn this.setAttribute( name, new BufferAttribute( arguments[ 1 ], arguments[ 2 ] ) );\n\n\t}\n\n\tif ( name === 'index' ) {\n\n\t\tconsole.warn( 'THREE.BufferGeometry.addAttribute: Use .setIndex() for index attribute.' );\n\t\tthis.setIndex( attribute );\n\n\t\treturn this;\n\n\t}\n\n\treturn this.setAttribute( name, attribute );\n\n};\n\nBufferGeometry.prototype.addDrawCall = function ( start, count, indexOffset ) {\n\n\tif ( indexOffset !== undefined ) {\n\n\t\tconsole.warn( 'THREE.BufferGeometry: .addDrawCall() no longer supports indexOffset.' );\n\n\t}\n\n\tconsole.warn( 'THREE.BufferGeometry: .addDrawCall() is now .addGroup().' );\n\tthis.addGroup( start, count );\n\n};\n\nBufferGeometry.prototype.clearDrawCalls = function () {\n\n\tconsole.warn( 'THREE.BufferGeometry: .clearDrawCalls() is now .clearGroups().' );\n\tthis.clearGroups();\n\n};\n\nBufferGeometry.prototype.computeOffsets = function () {\n\n\tconsole.warn( 'THREE.BufferGeometry: .computeOffsets() has been removed.' );\n\n};\n\nBufferGeometry.prototype.removeAttribute = function ( name ) {\n\n\tconsole.warn( 'THREE.BufferGeometry: .removeAttribute() has been renamed to .deleteAttribute().' );\n\n\treturn this.deleteAttribute( name );\n\n};\n\nBufferGeometry.prototype.applyMatrix = function ( matrix ) {\n\n\tconsole.warn( 'THREE.BufferGeometry: .applyMatrix() has been renamed to .applyMatrix4().' );\n\treturn this.applyMatrix4( matrix );\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\nInterleavedBuffer.prototype.setDynamic = function ( value ) {\n\n\tconsole.warn( 'THREE.InterleavedBuffer: .setDynamic() has been deprecated. Use .setUsage() instead.' );\n\tthis.setUsage( value === true ? DynamicDrawUsage : StaticDrawUsage );\n\treturn this;\n\n};\n\nInterleavedBuffer.prototype.setArray = function ( /* array */ ) {\n\n\tconsole.error( 'THREE.InterleavedBuffer: .setArray has been removed. Use BufferGeometry .setAttribute to replace/resize attribute buffers' );\n\n};\n\n//\n\nExtrudeGeometry.prototype.getArrays = function () {\n\n\tconsole.error( 'THREE.ExtrudeGeometry: .getArrays() has been removed.' );\n\n};\n\nExtrudeGeometry.prototype.addShapeList = function () {\n\n\tconsole.error( 'THREE.ExtrudeGeometry: .addShapeList() has been removed.' );\n\n};\n\nExtrudeGeometry.prototype.addShape = function () {\n\n\tconsole.error( 'THREE.ExtrudeGeometry: .addShape() has been removed.' );\n\n};\n\n//\n\nScene.prototype.dispose = function () {\n\n\tconsole.error( 'THREE.Scene: .dispose() has been removed.' );\n\n};\n\n//\n\nUniform.prototype.onUpdate = function () {\n\n\tconsole.warn( 'THREE.Uniform: .onUpdate() has been removed. Use object.onBeforeRender() instead.' );\n\treturn this;\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( 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\nWebGLRenderer.prototype.clearTarget = function ( renderTarget, color, depth, stencil ) {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .clearTarget() has been deprecated. Use .setRenderTarget() and .clear() instead.' );\n\tthis.setRenderTarget( renderTarget );\n\tthis.clear( color, depth, stencil );\n\n};\n\nWebGLRenderer.prototype.animate = function ( callback ) {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .animate() is now .setAnimationLoop().' );\n\tthis.setAnimationLoop( callback );\n\n};\n\nWebGLRenderer.prototype.getCurrentRenderTarget = function () {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .getCurrentRenderTarget() is now .getRenderTarget().' );\n\treturn this.getRenderTarget();\n\n};\n\nWebGLRenderer.prototype.getMaxAnisotropy = function () {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .getMaxAnisotropy() is now .capabilities.getMaxAnisotropy().' );\n\treturn this.capabilities.getMaxAnisotropy();\n\n};\n\nWebGLRenderer.prototype.getPrecision = function () {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .getPrecision() is now .capabilities.precision.' );\n\treturn this.capabilities.precision;\n\n};\n\nWebGLRenderer.prototype.resetGLState = function () {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .resetGLState() is now .state.reset().' );\n\treturn this.state.reset();\n\n};\n\nWebGLRenderer.prototype.supportsFloatTextures = function () {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .supportsFloatTextures() is now .extensions.get( \\'OES_texture_float\\' ).' );\n\treturn this.extensions.get( 'OES_texture_float' );\n\n};\n\nWebGLRenderer.prototype.supportsHalfFloatTextures = function () {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .supportsHalfFloatTextures() is now .extensions.get( \\'OES_texture_half_float\\' ).' );\n\treturn this.extensions.get( 'OES_texture_half_float' );\n\n};\n\nWebGLRenderer.prototype.supportsStandardDerivatives = function () {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .supportsStandardDerivatives() is now .extensions.get( \\'OES_standard_derivatives\\' ).' );\n\treturn this.extensions.get( 'OES_standard_derivatives' );\n\n};\n\nWebGLRenderer.prototype.supportsCompressedTextureS3TC = function () {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .supportsCompressedTextureS3TC() is now .extensions.get( \\'WEBGL_compressed_texture_s3tc\\' ).' );\n\treturn this.extensions.get( 'WEBGL_compressed_texture_s3tc' );\n\n};\n\nWebGLRenderer.prototype.supportsCompressedTexturePVRTC = function () {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .supportsCompressedTexturePVRTC() is now .extensions.get( \\'WEBGL_compressed_texture_pvrtc\\' ).' );\n\treturn this.extensions.get( 'WEBGL_compressed_texture_pvrtc' );\n\n};\n\nWebGLRenderer.prototype.supportsBlendMinMax = function () {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .supportsBlendMinMax() is now .extensions.get( \\'EXT_blend_minmax\\' ).' );\n\treturn this.extensions.get( 'EXT_blend_minmax' );\n\n};\n\nWebGLRenderer.prototype.supportsVertexTextures = function () {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .supportsVertexTextures() is now .capabilities.vertexTextures.' );\n\treturn this.capabilities.vertexTextures;\n\n};\n\nWebGLRenderer.prototype.supportsInstancedArrays = function () {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .supportsInstancedArrays() is now .extensions.get( \\'ANGLE_instanced_arrays\\' ).' );\n\treturn this.extensions.get( 'ANGLE_instanced_arrays' );\n\n};\n\nWebGLRenderer.prototype.enableScissorTest = function ( boolean ) {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .enableScissorTest() is now .setScissorTest().' );\n\tthis.setScissorTest( boolean );\n\n};\n\nWebGLRenderer.prototype.initMaterial = function () {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .initMaterial() has been removed.' );\n\n};\n\nWebGLRenderer.prototype.addPrePlugin = function () {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .addPrePlugin() has been removed.' );\n\n};\n\nWebGLRenderer.prototype.addPostPlugin = function () {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .addPostPlugin() has been removed.' );\n\n};\n\nWebGLRenderer.prototype.updateShadowMap = function () {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .updateShadowMap() has been removed.' );\n\n};\n\nWebGLRenderer.prototype.setFaceCulling = function () {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .setFaceCulling() has been removed.' );\n\n};\n\nWebGLRenderer.prototype.allocTextureUnit = function () {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .allocTextureUnit() has been removed.' );\n\n};\n\nWebGLRenderer.prototype.setTexture = function () {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .setTexture() has been removed.' );\n\n};\n\nWebGLRenderer.prototype.setTexture2D = function () {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .setTexture2D() has been removed.' );\n\n};\n\nWebGLRenderer.prototype.setTextureCube = function () {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .setTextureCube() has been removed.' );\n\n};\n\nWebGLRenderer.prototype.getActiveMipMapLevel = function () {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .getActiveMipMapLevel() is now .getActiveMipmapLevel().' );\n\treturn this.getActiveMipmapLevel();\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\nAudio.prototype.load = function ( file ) {\n\n\tconsole.warn( 'THREE.Audio: .load has been deprecated. Use THREE.AudioLoader instead.' );\n\tconst scope = this;\n\tconst audioLoader = new AudioLoader();\n\taudioLoader.load( file, function ( buffer ) {\n\n\t\tscope.setBuffer( buffer );\n\n\t} );\n\treturn this;\n\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\nCubeCamera.prototype.clear = function ( renderer, color, depth, stencil ) {\n\n\tconsole.warn( 'THREE.CubeCamera: .clear() is now .renderTarget.clear().' );\n\treturn this.renderTarget.clear( renderer, color, depth, stencil );\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\nif ( typeof window !== 'undefined' ) {\n\n\tif ( window.__THREE__ ) {\n\n\t\tconsole.warn( 'WARNING: Multiple instances of Three.js being imported.' );\n\n\t} else {\n\n\t\twindow.__THREE__ = REVISION;\n\n\t}\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, BoxGeometry as BoxBufferGeometry, BoxGeometry, BoxHelper, BufferAttribute, BufferGeometry, BufferGeometryLoader, ByteType, Cache, Camera, CameraHelper, CanvasRenderer, CanvasTexture, CatmullRomCurve3, CineonToneMapping, CircleGeometry as CircleBufferGeometry, CircleGeometry, ClampToEdgeWrapping, Clock, Color, ColorKeyframeTrack, CompressedTexture, CompressedTextureLoader, ConeGeometry as ConeBufferGeometry, ConeGeometry, CubeCamera, CubeReflectionMapping, CubeRefractionMapping, CubeTexture, CubeTextureLoader, CubeUVReflectionMapping, CubeUVRefractionMapping, CubicBezierCurve, CubicBezierCurve3, CubicInterpolant, CullFaceBack, CullFaceFront, CullFaceFrontBack, CullFaceNone, Curve, CurvePath, CustomBlending, CustomToneMapping, CylinderGeometry as CylinderBufferGeometry, CylinderGeometry, Cylindrical, DataTexture, DataTexture2DArray, DataTexture3D, DataTextureLoader, DataUtils, DecrementStencilOp, DecrementWrapStencilOp, DefaultLoadingManager, DepthFormat, DepthStencilFormat, DepthTexture, DirectionalLight, DirectionalLightHelper, DiscreteInterpolant, DodecahedronGeometry as DodecahedronBufferGeometry, DodecahedronGeometry, DoubleSide, DstAlphaFactor, DstColorFactor, DynamicBufferAttribute, DynamicCopyUsage, DynamicDrawUsage, DynamicReadUsage, EdgesGeometry, EdgesHelper, EllipseCurve, EqualDepth, EqualStencilFunc, EquirectangularReflectionMapping, EquirectangularRefractionMapping, Euler, EventDispatcher, ExtrudeGeometry as ExtrudeBufferGeometry, ExtrudeGeometry, FaceColors, FileLoader, FlatShading, Float16BufferAttribute, Float32Attribute, Float32BufferAttribute, Float64Attribute, Float64BufferAttribute, FloatType, Fog, FogExp2, Font, FontLoader, FrontSide, Frustum, GLBufferAttribute, GLSL1, GLSL3, GammaEncoding, GreaterDepth, GreaterEqualDepth, GreaterEqualStencilFunc, GreaterStencilFunc, GridHelper, Group, HalfFloatType, HemisphereLight, HemisphereLightHelper, HemisphereLightProbe, IcosahedronGeometry as 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, LatheGeometry as LatheBufferGeometry, LatheGeometry, Layers, LensFlare, LessDepth, LessEqualDepth, LessEqualStencilFunc, LessStencilFunc, Light, LightProbe, 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, OctahedronGeometry as OctahedronBufferGeometry, OctahedronGeometry, OneFactor, OneMinusDstAlphaFactor, OneMinusDstColorFactor, OneMinusSrcAlphaFactor, OneMinusSrcColorFactor, OrthographicCamera, PCFShadowMap, PCFSoftShadowMap, PMREMGenerator, ParametricGeometry as ParametricBufferGeometry, ParametricGeometry, Particle, ParticleBasicMaterial, ParticleSystem, ParticleSystemMaterial, Path, PerspectiveCamera, Plane, PlaneGeometry as PlaneBufferGeometry, PlaneGeometry, PlaneHelper, PointCloud, PointCloudMaterial, PointLight, PointLightHelper, Points, PointsMaterial, PolarGridHelper, PolyhedronGeometry as 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, RingGeometry as 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, ShapeGeometry as ShapeBufferGeometry, ShapeGeometry, ShapePath, ShapeUtils, ShortType, Skeleton, SkeletonHelper, SkinnedMesh, SmoothShading, Sphere, SphereGeometry as SphereBufferGeometry, SphereGeometry, Spherical, SphericalHarmonics3, SplineCurve, SpotLight, SpotLightHelper, Sprite, SpriteMaterial, SrcAlphaFactor, SrcAlphaSaturateFactor, SrcColorFactor, StaticCopyUsage, StaticDrawUsage, StaticReadUsage, StereoCamera, StreamCopyUsage, StreamDrawUsage, StreamReadUsage, StringKeyframeTrack, SubtractEquation, SubtractiveBlending, TOUCH, TangentSpaceNormalMap, TetrahedronGeometry as TetrahedronBufferGeometry, TetrahedronGeometry, TextGeometry as TextBufferGeometry, TextGeometry, Texture, TextureLoader, TorusGeometry as TorusBufferGeometry, TorusGeometry, TorusKnotGeometry as TorusKnotBufferGeometry, TorusKnotGeometry, Triangle, TriangleFanDrawMode, TriangleStripDrawMode, TrianglesDrawMode, TubeGeometry as 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","// Part 1 of 6 of the rover geometry: base64 of gzipped JSON (see RoverStory.tsx).\nexport const chunk=\"H4sICNq+1WoCA3JvdmVyLWdlb21ldHJ5Lmpzb24AdL1rU+s6s679V1bNrzzrMYcAYX1zIJBwdDiHVbveghAnnJIQg8Ng1f7vr9TW1TqMtWvWmF19d0uWW/JtKcjq//6ff16e//mvf0bTx6p6qf751z+zx4+xAYrly+xr/PwfzvAfi/fHr7ExL+bVP//13+v/Mv/9n3/9s5x/BdrHuJqOrfl//vl4NIZ/Fk0lptj73MD/ub397/V//efeuvl/a+vfu6ZItXicGcvGhsU216299W9b19NOy1TwWW/tdFf7uchsLzuod0+tHkmDl8XOq9UjafB2ttO1eiQNPir3vqweSetf75VW/83+fB7m+/mi+P1SWexl+/WG4NhFGhy/l2z1ezhwstzL0Cf1z45Kg6O/ZL8dleLf6Iti1TucOFnvZTfZem3r5/oizXWJD3aR0p6m/G/2c6LS1IO+X296Wdv7avSbbOtQpVy30e11VNa2H1qLQ4m/kVnTDmsvi+3Lw5WTmfdrZ9srldJfjd+oXOuplP5yfvXarUrpr8aPfo/GQ9D/kR70f6QH/R/pQf9Hepb0O+OgsPEMxgl6Oh5KpxfJeGB8pOMBPR0PtdPLZDwUTk/HA3qWjIfa6el4QE/HA3o6HtBr3//ReAjGSTQegv6PxkPQ/9F4CPo/Gg9Bf9FPz6vOk9UjafC1VUf8ImmvOziUcRBJ6z85knETSXvdwYmMs0gafGt1KuMykgYfrIqdph37j4dIaXczvtdW+15K+xu/cnDUUyntd36Tw5VKaX/jx3VEGvxjcibjYzs/l/GJLtKMi97k6jO0iyzsfTf1jwbHlyrl/vrSjyIlDo3dXs/2+8ekOFRZ2+s3+nZ+caKy9vVQTqTBrwbX8rzQLpGmPcPVQJ4X7CIN/ri6lOcFu8jS+l/L84JdZGnrH8j4xy6ytHG4lPZhF2naQ7uxi6z9+IrGWzC+Ij0YX5EejK9ID8ZXpAfjK9KD8RXpwfiKxlswvqLxFoyvaLwF4ysab8H4isZbYeMWjDf0dFxlTg/GUTSu3H2E44lxEvULejre0NPxhp4l45/noUjGIXo6DtHLZByip+MQPR2H6HUyDtFte4crkcetrcLWJ7rxE92UL+ebDxbHLrrBW3PzXkA38n7+e23rGff/nNvyohs5b/3466AbKX4Gj3Qjb+crGS+UF31l6/uZWjzSV1Luo/EP9JW9zu+nxSPdSGm3fb/1tw9su7kP0Q3+02q9qW6k6Aa/7LfPVbdynmXSf4uDHdufohspfraeUG/iujgq7P027RA9t3HdeLN4pOcS10eLR3pu27t1bPFIt/Oy/u7K4pGeS3sHR3K/gT6Qds2Omvv1utxXe/2ouV+v23Fp79POP7YP5L64b9Ht/OChK/eJXXRTz++i28QTu9Vt/Q/HB6rb61vd4NX28afqRopu8MPtiwfVjUQXaexPi0LGp0ijfx+fybgCF92Mt/biXHDs7UUh48ToEn/RLf9aP/ucPFydN35NOdENfr59fa26kaIbvNgeyPjELnpm/S9lfHr7pYxnU/5D9ZXUJ+OZdmC/WuTb0l/aH0aXeOfSX5HexFv6N9KbeDfjIdQl3qcyfiI9t/E+lfEW6YE08X9UWdh+OJfxDC56LvFeqB09d3wD/5SehyL+CXiI5zfin9LxBfwT8FDEJ7XnlYh/Ah6K+CrgrYh/Ah6K+CfgoYh/Ah6KeCDzfAD/RLwEH6W8BB+lvATvFAn/lI5H4JmAbyKeSfkm5Rn4JeWZwvFLkfAM/JLyDPyS8gzjOx3npePZlG/ho5SX4KMy4aXC8VHKS/BRykvwUcpL8FHKSwEOD/2vvFR7fop4KeCniH8CHor4J+ChiH8yz0MR/wQ8FPFPwEMR/wQ85Psh5p1IBrwTyYB3IhnwTiQD3onk/4tnAr6JeCbgm4jni4Dvi/2dWzv+6oM9lbZ9RffY6iKNflacPt4a/2czy7b4SXa4o9LY0alPZFAP5UTa8e2utyw6B7cTJ03/oc+z/ROVlp+cviwOBirFv9F/6vzuduVkZutv9HbReVRp+9PpJ9nRg8rMtr/Rn8vejUo7f3e6uY+Tu9zJwsdDpNFn9cmv1SNp+6W8uLZ6JA3+Vp/vWT2S1r+4rMUvlAb/KC4/rR5JO68ubsUvktKe272mHYEU/8frxi+Qtj3Zo7Q7kgbPy1LuM5IGfyhG0q+RNP1aFyPp5045lXGALrKUchLHuiglriIzW67RO+XLg8rMxrm/fSdxNrKQ8STlZ/XxRGXh/Ux8c5USh8bvrb64U9n0S+NXXL2plH5p/D6Kq4VK6ZfGr1fceSn90vjN6rs7lRJn/B5zldKexu8te5iobPpF/PJytK1S+qXxAyd+Io19ULzshPEWaddJ2as8X9hFGnxaTOX5wi5S/CfyvEyLV3meRJrn67V8OWn0ppzI2tbT+GEXaXD6b1BMH1Xa9abTuY5IeR4D/imdXtrnLuAZ9JRn0FOeQU95pnZ6mfAMvJPyDHrKM5nT64Rn4J2UZ9BTnkFPeaZweuZ5JuLhgG8iPeCbSA/4JtIDvon0gG8iPeCbSA/4JtIDvon0gG8iPeCbSA/4JtIDvon00o7DgH/QU/7JnF4k/AMfZZ5vIv4J+Cbin4BvIv4J+Cbin4BvIv4J+Cbin4BvIv4J+Cbin4BvIv4J+Cbin5Rv0KUfAv5BT/mndHrKP+gp/6DXCf+gZwn/wEcp/6DXCc/AO1nCS+hG5suGfzZPsj2Vdhx97kk7vx7XTlSa+vHDLtLg+NWf2UBlbetp9M2TttyfyMzW0+j5suEJkfZ3x2Uu41ykjeeyJ8/DdDeXcV48dXZUGjs69yGy9PVQTmRQn0g7rzw9kucwknYdtHsizy3tK572H1Ta+bXTp7sHNyoNjm6uL8+NyKA+kfbvN6fHwheRtH7Lc+GXSNq/syzPhY8iafDTZcNfkZT7utxr7ieQ4n933fgF0rbn6U7uP5IG7+4+Sbwiafl5OWzeN6G0753lUOJ9uPss/YEu0q4HluOd0C7Sru9PSxlX2EWWcp1m3rl8at4PVlpecvrh7vhBpcHfl88yLqlPpKlntjuW8YldZG39Sxmf2EXWtj0jGZ/YRRqc690snx9VZva+Gp1yIu3zt+wKb4gsZFzK/VSnhxOVhfcz4yNXKf3Y+C1OT+5UNuOp8VtevKmUcdX4fS4vFiplXDV+p8srL2VcNX7V6dWdShknjd/i6Xaishk/eVM+kNLOpnx3d7itUsZVUx6c/hRZJPxTOj3ln9rpKf+glwn/wEcp/2ROrxP+gY/k+Q14pnR6yjPoKc+gBzwT6QHfRHrAD5Eu8Qn4J3N6yj/oKf8UTs8830T8E/BNpAd8E+kB30R6wDeRHvBNpAd8E+kB30R6wDeRHvBNpNvfYUL+QU/5Bz3lH/SUfzKnFwn/wEcp/5ROrxP+QU/5Bz3lH/SUZ9CzhJfQM883Ef8EfBPxT8A3Ef8EfBPxT8A3Ef8EfBPxT8A3Ef8EfBPxT8ArEc8EPBTxUso36DKOAv5Bt+Oo893eN/3eu6z/qDT9ttn5Prc6dpEBLtL+Xjj9+bD6x+Xia9/+vWH6uVJp+g39trPcVGnw9Z+5+FNOpP2dz7UDu0iDU/66M9/bXzlp+hf9tvPZVWl/n3b603R5rDKz7Wn0j8v5+UHupJ1HO339Z3GmsrDtbPTe5XdPpZ0vO93EZU9lYeNTV1YX2cRX7MRJpOX3y5+e1SNp8Ivp+srqkbT+nfUX8Qul5dXL1rPVI2nXvZct8Yuk7a+fttQbSevf2ZN2RNK250/HtXt1fYAs/X3Wl6vfg4GTMh4av4vpxolKuV/n19m4Vyn32/gNLrdHKuV+G7+fy20v5X4bv8ufvROVcr/Or9P+VSn32/hxHyIN/nm1L+M4kgY/uDqS8R5Ju27c78m4XL50ZVyiizT2nf1DwbGLrD0u0ujdPyfyPJxencp4Rhdpf8++6st4xi7S4KdXJzKesYvMbH2nx41/YxeZ2et2ZTxjF2n3DV0dSL+JLGz/5tJf4OZ+91QGdpEyTpr44vewf9RTadflTl++HJ6pNDg67RKZ8k/p9JR/0MuET+CXlE/Q7T6FkJfQUz7JnF4nfAK/pHyCnvJJ4fQs4TF4rUx4Bt5JeQY95Rn0gFcingn4J3pOC8/TEW8HPBTpAQ9FesBDkR7wUKQHPBTpAQ9FesBDkR7wSsQzAa9EPBPwSsQzAa9EPBPwSsQzAa9EPBPwSsQzwfMRPS8Bj0a8GvBQpAc8FOkBD0W6/T0z5CX0OuEl9DrhB/ii8PwU8ZXwT8BX6ClfoWcJX6GnfIUe8BK887/yE3qZ8Ay8U0ic9kI+or6If9Dt71u9Js4X901cRZr693pH0i/YRdr9orN9ic+od7Cp0tz37lYucf7qdby06zCnU06kwSn/sJVL/ETa3yOdPurtd1XafVtOf5kdHKvMbHsa/auXS3+KtHFy90O7RNb+vkTafVOzYxmXkbS8cX8sz2EkDX47O5PnNpLWv3cmzznt2N3qnKksbHwa/eK+6TeR0s5GN/HdU1nYdvZkPIhs+knsw1lfxoPI0vtt3vfluRMp99X43c7OT1TKfTm/3vm9Srmvxo/7EGn3VfQGwmuRtPsvegPxi6Rc92bVxDGQ4n/ba/wCaa+79SBxj6TljftH6adI2r939MYyHiNp9zP3SunvP/cj6W90kfb3795UcOwi7X6Q3qXwnkjpxyYurd6ll6X3G85uT1TKfeF386tS4tD4/dw/Sf+ILOz9Dpt+CaXU05TH39zXnspC7lv0SW/cU1nY+270P/fPZyoNjt7pTc5VFj4OIi2PzV7kubzqvTbzLaeLtPuv7yfyPGIXaffT9l7kecQu0v6u7K53OntteM5Ky39Op5zILOGf0ukp/6CXCc/AOynPoNcJX6Gn/JM5vU74Bz5K+Qc95Z/C6VnCP7XTA76J+Cfgm0gP+CbSA76JdPs7WMg/hdNT/kFP+Qc94JuIfwJeivin8HwT8U/ANxH/RHwT8E/ANxH/BHwT6QHfRHrAN5Ee8E2kB3wT6QHfRHrAN5Fe2ucu4B/0OuEf9NrzTcQ/Ad9E/BPwTcQ/Ad9E/CP3EfBJ4fTC803EP6Xnp4ivyoR/4KOUf9BT/kEvPN9E/CN8EvAPeso/6FnCP+gpz6CnvITerBf2z+3fozv1j8rM4yIzO9/+82j1SGayXti1eiQzmW+/WT2Smcy378QvlJnMty+tHslM5tviF8lM5ttSbyQzWS9IOyJp2/NnX9r9cfk5vchlHfemUtZV1cdFsy6bqmzWYaJTTmSzzpPyt53558XASTt+nH7dWfyoLO06stHNurGlUvwb3dS3plLWwU1/0C6RzXXFz6xjOxcTJ5t1rejrP59eyjq40c26sa1S1qONbq+j0j6PnWpyIf1uZNa0w9rN+rB/sXIy836mv2cqZZw0fqa/11Q246Tx62yeqWzGifgNLncGKmWcNH4/lzteyjhp/Ex/r6mUceL8Onszlc04adrh+l9ks96Q8R1J+/3UVU/iHkn7HtzvSj+YdYOMA3SRhV0/HU1Du0hZT53KOMEuUtYxnSZOVjbjVtr9eZVPVGbez7bD9oNI+z2Y8wM36522Srtf5eVI+t2s47ysZZ0kfthFynquL+OW9oos7HruWMYtdpGlrOdk3GIXWcr9rjV+jV1k8/uYXA+7yDLhH3gn4JtID/gm0gO+ifSAbyI94JtID/gm0gO+ifSAbyI9S/ihdHrKJ+jyO1DAS+hFwifwS8on6CmfoJcJv8F3RcIz6FnCM7XTy4Rn4J2UZ9BTnkGvPa9EPBPwT8QzAa9EPBPwSsQzAa9EPBPwSsQzAa9EPBPwSsQzAa9EPBM8x9FzHbx/ovdRwEORHvBQpAc8FOnN7xnTkI/gn4iX0AP+iXgmS3gFnnHXD/kFe8Qn6HXyvPP8p7yEXic8CW8WCS+hlwkvoae8hJ7yEnozf5f4v/WaeIvMPC4ys/PJE+m/SGayTpHnP5KZzOeFLyKZyfxW+CWSmcxvhY8imcn8VvwiKe25fWvaEUjxv91t/AJp27P1KO2OZCbzYbnPSNp9ib1S4vHV25fxY9Z1byqb9ZPg2EU26z/xG/Vy6TeRpV0vNvrDVudHpf0dz+lmPdlSKf6NbupbU2l/N71vxj/XFynrs6b/sIts2iPlzXpYxp3IZn0s+u7Wvpeynm50sw5sq5T1a6Pb66iU39O68ryIzJp2WLtZx8rzJTLzfmZ8zFRKPzZ+ZnysqWzGVePXuzhT2Ywr8bvvXQ1Uyrhq/Fq9Ky9lXDV+ZnysqZRxgt/tTGUzrsSP/heZ2XXNSOJq1jESd3SR8rvKyzS0i5T100Nzf1Y247OZn90PJyoz72evdyHrx3FbZW3XT2PpF7Nu8rKW9Zb4YRdZN+PX6iLtPl13PbP+kfFJe0Xa72p6k2Z+4+wi7Xc091MZn9hFlrLekvGJXWQp6621xq+xi2x+f5P2YReZ8g+8E/BNpAd8E+kB30R6wDeRHvBNpAd8E+kB30R6wDeRHvBNpAd8E+kB30R6lvAMvCO/6wS8hJ7yT+n0IuEf+CjlH/SUf9BT/imcnvIPepbwT+30MuEf+CjlH/SUf9BrzzcR/wS8FPFPwDcR/wR8E/FPwDcR/wR8E/FPwDcR/wR8E/FPwDcR/wR8E/FP8zvKNOQdeCbiH/TC803EPwHfRPyTeZ6IeCPzfAIfYY94CT3lJXT5vSfgn8LpKf+glwn/oKc8g57yEnrKP+j2+/7xzu6D8Z9d7G6qtPv7xmuHVhdp9PnF3p3qRlJOZGAXaf9eWed1WO9w3Np4mDhprot+vra9rdL+/dDpvfHOmkq7bnD64UXr8GHlpN3n5fTeePtMpf37u9PP13auVNrv/5w+HO/eqrTjzumzi9btY+6k3S/v9O3x9kClPXfB6SYeRyrtd60Xa+tWF1lIHMV+UB+MVAZ+xEmk3W9Z5oXVI2n3hWa91oPdjx1Ku7+x7C2tHkl7fk55+mH1SBZ2//yp+EXS/p00K6TeSFr/4kzaEUlpz0DaHUnLk+WljINIGnyjvJJxE0k7bos7GUfP9b2ME3SR9rvT8kbGCXaR9neD7FbGCXaRlvfKOxkn2EUaPKtvZJxgFyn+tzJOsIu0fJbdXTX+jV2kXafWNzIeqvJexovIzLaz0Skn0u5HLQ92H6VfjLRxduMgz7pXjwMny9CvO3kcOClxbvz2y/67SvFv/F7Lvpel7ffG7yA7u1JZ2n5v/PLs2l3/Wsbha1HIdSMp46EpPyqvZJyKtPtxXXlw049HKgvpZ9FPi9uBSstzTid+IouEf0qnp3yDHvASfth5jiL+KROegXdSnkFPeSZzut2vGvIYepnwD3yU8g96yj/oKf8UTs8S/oGPUv5BD/gm4p+IbwL+KTzfRPwT8E2kB3wT6QHfRHrAN5Ee8E2kB3wT6QHfRHrAN5Ee8E2kB3wT6fb39pB/0FP+Qa8T/kFP+Qc95R/0LOEf9JR/0FOeQc88r0Q8U3heiXim8LwS8UzAKxHPBLwS8UzAKxHPlJ5XIp4JeCXSy4RX4JmUT9DtfD7kH/SUZ9CLhLfhcfv76+pTxsPLYLmp0v69b/It4we7yAAXae9z8iXjL5IGz/JKxuv1ZC7j5zhfbKu06wB3Pewi7Tkgzm9/8rmm0p4P5/R8MJdxJNJ+D+H0/cniTKU9T8/px/nnlcrM1t/o15PlrcrMt1ekfY5WK3kOI2m/z81/5bmNpI3/ZEue80jav5dPtoQXImnw8WRX/CJZ2HbsSr2RFP+2tCOStj2Dtotzcz8vg7n0s0i7HnT6+moxUCn93uimH49U2nE6+ZZxJbKQ/hZ7ltcjlYHfaPW7q1La3/i185WMc5EST+c3WZfnRaTEs/Hbm6y/q7T+zm88aXlpfy9wflneulJZ2vg0fu1B1lzfSolbJteNpLSzKU/8RNq/s/90ZBxH0uCr6b6M+0ga/Gh6JM/H8Kcn4xldpP3ubNpt5v3OLtLuC+gcyjjHLtKM89b0SMY5dpH29+Sfroxz7CLF/1DGOXaRma3/6Krxb+wi7ft02pNxgl2kff/+dJt5v7OLtOvXn33pZ5GFHW9NfM39y7g4mh4OVBbeH7vIwsap8eM6IlP+KZ0e8ErEMykvoQd8E/FPmfAMvGP/XhTyUu30lH/QU/7JnF4n/AMfpfyDnvIPut1nHT6/hdMzz0MRLwU8FOkBD0V6wEORHvBQpAc8FOkBD0V6wEORXib8Ax+l/IMe8E3EPwHfRPwT8E3EP4Xnm4h/Cs83Ef8EfBPxT8A3Ef8EfBPxT+n5JuKfgG8iPeCbiH8Cvon0gG8i3c7zQ/5BT/kHvU74Bz3lH/SUf9CzhH/QU/5BT/kHPfO8EvFMIfd9FPILfBLxDHrKM+hFwm/wnT33YKf3W9l9hyflb2X3y1td5OHPd+ns6HY/4smzwwM99Y/KBfUH14nqCeozctZqyi820e35dZ+vTu95ac+TcrhI0afOf+rqOfR6Wn9wHV/+9e/6qTeo39dzGF3vaeNV7k+k/Y7gcFf0weG23J/Xd8X+tDF1+LaXQbmoHpFBPehpPej2u4TbUu7n8vZZ2imyqc/hpZcBLrKpX8pFUuqlvqB+rpfWjx7VF+hBfZEu42W88Wn/PqLjhnFkcPt95+6+szd+Rq9/cpHo4mfs9Y/9Xd6NV9Fz5184e+7LU390/dJdL71u5uotk/qLyB+d+v++rtH73TWp10jBRdp9Xxsv4F5mHheZheOvGQ+MA2OX+iLZXC+6DvVynei6XC+6TqCXvr6o/iK8ftAeu87r5/kk97xDvMGDfo1wzxdNuaAeeEPsgb97bhu7H09N/cH1Xf8EvBbUw7mK1Acenas48bg/r7WxU3/Qfs8/g2j8RTL1o37iQn9RPtBFep5s+IvzlME5F5nyEc8N/Pn+2NWf87h57pyu5yY7HJ1zjcHTc7TB+Z6P7+jA+W6P7wC1HvedH+XA8cMO7r/za+rz9Tff+WH39TTf+WH3122+58Mu/VJ4fuL9Bx7wkUhw/95s3oce1/eq8KXnm9K/Z8uQfxpeierJfbvy/kFWxteVejn3Exydc0LB0TlPFByd80F5P1KPf98e+vdo6c+j9O1WP2k/79+AT0WCB3GJ+CTbarv7zSMJTj/ATwE/RzjnR9JecM6PxA5OuwI+dzjzh8bu+8X0x8rzBM9bdA518BzCL5zXCo5OOfDoHOegHnTOTwXX81Td+anq73TOHwWPzkEO8Ogc5KD+6BzkAI/O1w7w6NzbAI/OrR74OHL+LPEE5/zZ9Jxszk3hHFok569wTiyS81c4JxbJOS7pudTonKvC+bDYOSeF82Gxcx6KxtPFCx6Ozo0e+Lws6fnQ5KuIzpMe+Dwf+HFOK3kyOJ8VHTvns6Z+nM8Kjh/ns4Ljx/ms4MF50tIv5NPgvFbOYSWfBn6cY0o+DfwoR34Prqfn7bp4s4+W83axg3PeK3ZwznvFDq7nvTq7+rvzXrGDc94rdvb7ct4rdvCINzLH58E4ZzwzvsE5Bwg7OOcAYdf63Lk7/tyyZtzzHPB8MO55DtLz0XieuC7PA+U4V4jnAzs4zwnnDEXnlwXnlvHc4Ec56sWP5yo9Dx6cc4LA9dwgd06Q+judc4LA0TknCBydc4LA/blBzTlB3r/ROSeIfuHcIz03zuGce6R2h3P+DXZwzr/BDs75N9jBOf8GOzh//8ROHh94hfw95NMBx488PuBRfqeAx+AJ6gOnPHae8yjv08DzQZT3KeCRKI9TwCPwCrwJn8Kf8Co6PAw/o8PblKf9Ps/QJudhy/NFHiB4gO8JovPmw++Y3DnPSL4noD4dz248sV+f+T/rAfKpMP+n3eRzAtf8Ti4/kPo7nTwu4OjpukPzt7h8Ldoep7PO4D64L+LDffHdg/K5w/mOATs43zHod1fEz8WT68DL/nuLhoephzhSH/2FH/XpOVHuOdHnxp0ThR2cc6Kwg3NOFHZwf07UVeJ/l4fn24Fzzhjniun53k7XcwvdubqcJ8a5vNg5T4xzefHjPDHO98WP88E4lxc/zgfjXF5/TmFzPhjn8uLH+WCcy4sf519x3/5+m/OvsPt9G81+D845S8/pY59IdP7iyu9ni85fXPn9btH5iCu/X4528xzSD4wj4kc8iTdxJF7Ej7hipxzxI574Ez9/znEnijPxxE57OecYu44TNz6ic4qD8UH7qYf9O9THe4T9MvQLOPtlsIOzXwY7OPtlsIOzXwa7vk/dfhns4OyXwQ7OPgvs+v51+yx0fxfzKN1n0dgZb4wz7pfxhj0dd+iMO+JIXBlfjEP80vGIjj/jj/5jHKJzzjQ4/cb1o/P1Azw6Xz/Ao/P1V26/1sCfr8+5yujsT+JcZezsT+JcZezsT9JzlZ093Q/J+cr4sU+J85Wxs0+J85Wxs0/Jn68cn/cOzr4lzlXGrvuW3LnK2Nm3xHnF/J0zOk995fdZpOe28/dMzk3Gzt8/8eO6/J05Olc+d39vHSTn9K/8fhDaRz/Sv2l/okf7XIP9rWk/069pP9OvaT9rfyb9TH/Sj+j0J/2o+9Bcf9KP6PRfdI520K/0I/2HTj8SZ3T+fo/OfjRw9qGxLwA7+9D4ez5+7EPj7/n4sQ+Nv+fjxz40/p6PH/uj+Ds8+8zYn8bf+SnP/jT+zo8f5fg7P37sy+Lv4VyP/V38PRw/9nfx93D84NVsK4v4NVoH2/1M2N3vfvwuiZ3fIcmzRL4jcHT/+2WDk2eIPETgmvfM2dXf5enBDk6eHuzg5OnBDq75xJxd/d3vp9jByQvF/YGTVwm71u/uBzu/V5Lvh+uAk+8HOzj5f7Dr30Vd/h/s+nuoy/+j+YEcTp4f8gCBq04eIYeT/4dy4D7/z7X7vbrpf58Xq8lbBY5O3ipwdPJWgaOTVwocnbxS4OjklwJHJ78UODr5pcDRyS8Fjk5+KXDNd+fyS6m/08lvBI5OfiNwdPIbaXvIt+byG4Gn+Yq0HudH3iNtp9PJewSOTn3g5Gvi93hw8hyR9wicdmAHx4/69Pc1d961ns/t8ChPQDCuonO3AzzKExDhwXncWVi/09151+Ccu027fDuDc7Ej/+Bc7ABH5zxkHbfh+cgBHp2PHPZLeD5yOM7D85EDPDofOfQPz0cO8Oh85ACPzkeO2tPofBcAzvjg7zGcV04+ac4p5/xxzicnfzQ6fuSb5jxxypFXWs8Td3bySnOeOHbyRHOeOHbyRHOeOHbyRPvzxBs7eaK5X/37lRsv6OSz5v7TeODP/XG/xAmJP/URnygPdxDPKA936eMS5eEO4qa6i4/GLcyrHcQtyqsdxC3Kqx3ELcqrXSf5tDOfTyfKp535fDqc2059lOfcduzgnNuOHZxz27GT5wdc8xm5c9yR5D3iHHckeZE4xx1J3iPOZUeS98jng3g+CPMecS47krxHnMuOJO8R57Jz/jp5jKK8FZnPo8N55JQjT1KUVyLIk0S90XnnQT6d6Hz0IJ+Onnfurke+nuh89CBfj56nT38k/RDlowrij572A3raD1E+qiD+UT6qIP5RPqog/lE+qiCOxBWceEb5qIK4RvmoMj8uyTNFPOg/zQtAP4f5kf6XeBPfNN70X9qf9F96/j043xXBe3yXxXda4NF3XwHOd2SU0/dF+D1Y4B993xW8T/HD7vHgu68sbE/wfVcRXjf4Hix8j7v3Ge319xt8D1aE9xV8D1ZE9RyF33/pPNbpfDcEHn1HFODRd0ThPCT8jqgM/bvRd0Pg0XdEAY6u3wfRHr4zct8PMR6i7wNLj/P9Gt+36XxBv19r7OD4UZ+vp/mujXLgjD+1037XPvZpKx7u2w7waN92gEf7toM4RPu2Azzatx3g0b7tAEdnPzbPO+8nnnt03ovgvB95L2InLlE+s+D7P+zg+r2fs6u/+94PO/v9+d4PO98H4Ed5vgPgez++B+S7CXStz30/gT/fWfBdIJLvKPguEMl3FHwXiOQ7Cr4LRPIdhf8e+c5/V5H57wSRfEfBd4FIvqPgu0Ak31Hw3RvjUr/Lc+PRfw+3GITfzSH5DoHv7SjPd3fUg44fONfn+weux34G9ivK/qw82scY7WeM9ncF+7zwZz8y5Twe71cGZ38hdvIRoP+/7FEelEGQ38P5ca4+5+iD67n67hx99Xc65+jrfminc44+uOrk8eD+OFefc/TBXfv0vH/qcX6a54N2Op3z6cHROZ8eHJ3z6cE5lx4du9+3/Or3w0f7lpv9wux3p7/Tfcng6NQDnu6/97juo5fxwPUYN4wT3w72xW9H7cPP73eP75vzmoP2iB/n5IKjc04uODrnxoKn51aDo3NuLOdIs+/e77PX+xGd83w5txk/2s851To+Ej/s0fnywbnyXAed857B0TnvGVzPf3bnPau/0zkvGRyd85LB0Tkv2beH85Nvo/YQn/Rcdfw4R1nb6XTOUQZH5xxlcHTqB6cf/bm/zbkwvn8bnXNhPA9m7nfxhg+Dfa1+P3/m97+ip/tdZT9K8DsBuOxvyZp5QDfwR6ccuOx7yXw5cNlPknk7uOwnybwdnLwp2MHJCxPlqwryx+BHXhPNe+K+R9H8JS6/CbjqrpziLq8J5fQ7GpfXBDs4eU2w6/cx5DUh7wn+5DlxdnC+q+A7C777oR/B0/713xe9JHjwfVEZ+fM9jtij7zaK5Lue4Psi/73Ri/MHx6/B0amH/tB+SvoF/a/46PdL2xGOzjnx3BfnaXN9cH9udnOuNjh6Ws7rzXX03Hl3Pb2+O7cdOzjntmMH59x27OD+3PZB4t+c245d2+PObceu8XHntmMH59x27CmOzjnuSHDOcUeCc645OnEDh6eYf/HdBzjfU2Bnnxf7sWQdYs9BtuuOldexy+90K28Hb2fbq8OVt4OPyrWe7C92ds7nbddrt4crb+f83OfVvuwvxM75uWur/UZ3ds413lr1pR2jwbFcV88pducS2+9iZN++8ysHR3I96uMc5LXJ4Sq0cw4yODrXoV7OOf6YFE0cneSc4+38QvYdDlfXsk+S82gfV5eynxLJebTD1UD2ZVKOc5F7k8tmX7aTnIt8NRjIPksk5+ByvavBtezf5Jza3uRKxgPX4bxb/Ogn+o/+op/Q6S/6SfuPc+5dP6HTX8QdnfgTd/Q03uj0L/2Z9rf2O+fcJ/1Ev6T9RJzTuBPnNO7EOY07/Zv2N/2b9jfxpz84Z5j+SPsHuz/v/DCaBzMvBiffFPlLyDNF3hLs5Jkib4nPj9fkmSJvCX7kmSJvCX7kvSJvCX7kTSOvGudCkncMOzh5x7CDa94xZwcnjxh5xjiPUvOIOTvnV5JHDDvnXZIPCzvnY5I/S/P1uXMqwTmfkvxY5EGjvbST9mHX83pdvi3OJY3y++X+/GPiy3U435Ty8Dy8z/MOTh483gPg5MHDDk5/YWe/mvweFe6rdPpbfb4X4uiHRbM/X/2d/lFcfoY4eq+4jfzRZ/VtVD96r3i8jv0b/S17lPZyTjp6XpbNflx3Tjr6QzGS/ZWck45eFyPZZ8k56Z1yKvtANe+Csw+KF8E5Hx2/x+y1+W6D89Gd37SYyv5QzkfHj/1lnI+OH/fF/Wic3X1xP9i5L+4HO/fF/WDnupzPwfW5P+43jYOeB+/s3B/3i537436xc39cL81DAc45IJxrwXnw+HGuBeevp3kfwNNzdTh/Pc37wPkWnMPuzy1pzimhXei0LzrX/n9pN5L20k502kd7aSftw077aC9+nL9Bu/Fjvxv739J9cex/w86+Nva5sQ+OfW3sc8PO/jV/bk1jZ98c5bkO+9rY50Y59rWxzw07+9/YR4edfZXst2R/JfsDuU/s7LfEL913iZ7uD9VzcZL9oejpPlD0dN8oOuOJ/Xrs3+P+2K/H/j3s7Ndj/x529vVxng12cM6z0fO1OH/SnWej53DxXnDvD+Yb4Jxjx/5AcM6xww7OOXbYwfW8OmdXf3e+HXa/H7E5xw47OPeBXXHOBeP+Hc45MZzbAs65Mtg93jxPnF8D7s+tac6pAccPu8cbP64DznPKdcD1PCH6h/ty5wlhB+c8IezgnCek55vxe5aeG9RK/DM3HlpR/Zyjo3aHc14OdnDO18EOzjk62MHpD+zMW5mnRnk+g3kq81bmvZRjXsy81effO4jmt8xjsTNvZR6LnfkXefCwgzNPw878ifPOme+Bc345dnDOL8cOzvnlgb2Zz7r5bZQXIphvcl3mucx70/kwdua9zHdVT+a96On8Fz3K8xHk90jnu8SN+S7xA4/ynQZ4lO80wKP8gkH+U3++f5NP0Oc3Jb9Ik0/Q5xtscM0n6PMNvrnz/e/DPKjkAyC/XpB/79Kd7+/z8Q183hGfX0/z77l8ADe/YV5Q8gGQR8/n2WvyAZCPL8izJ3H3+fLIy9Dkq/N5KJr8e2l+UJ+HIsgLGuehcOsFflfnd/PmeQ7y4pH3IcnTye/tze/x3k4+iMbP55/V/ngL+yXoj7uwX4L+iPK/BHkYRkk+1rsk78tJ3B/kfSEfK/1B3hfyrmp/7If9gp7GHf3veMd5QYJz+M/CfvDn3pOP9WV6EedJFbv/e0fTP+QFIg+Qvtfc+x47OH7kB/J4kxeIPEDgPo9QYw+uK37kMQInf5HOt7U9h50wrxo4fAg/gpPPATs4+Ryw63vT5XPAru8jl88BOzj5HLCDaz4HZ1d/l88Bu743XT4H7DpPcPkcsPv2kM/hKvG/nYV5aLQ9Lg8DdnDyMGAHJw8DdnDyLWDXeZHLz4Bdx4PLn0BeBHDyJ2AH93kYXloxf0w7Yf4Z+f4583+v4u9T8v2z/fuWs8s5RfVeJt9DZ94u5xQZXL6LzrxdzjGy/va76Mzb5fyi2tfL9aifetGpn3rRqZ960amf66LL+UiZx9HlfKQs9G90OR8pwNHld57C4+jyO0+Ao8vvPAGOLs9XgKPL73YBji6/25UeR5ff7QIcXX4nC3B0+Z0s9He6zGsCHF3mQQGOLvOdsD1Ol3lP6fcfy+/fmc8niC6/f2c+byC6/P6d+TyD6PL7dxbkAXS6/P6d+TyA8vu2/Tux/T07yLeILr9f1z7fIuXl9/IgnyO6/L0iyOeIznWoX37/rn1eRq4jv3/XPi8jfvL7d+3zMuJH3MibyD41cOKInXhGeV6DuBEv4kmcozyOQTyJI+WID3HBTnyIC3biQ1ywaz7LpD/IZ4mduBFHzXfpcOKInXhqPktnJ57EmTyG+IGTxxA7OHkMsYOTxxA7OHkMscs5EAF/kHdbzpsL7OBy3lzm7SmOLufPBRJcfp8OJLj83hBIcPn7RyDJYy1/Nwkk+arl7ywhD7jnnPpk/1Xw923yosv+q9LbyaMu+68CO3njwcm/LvuvpHwufCfrpOA+0GWdFOC0j3Lg1Eeed/n7TiDJQy/r3iD/vKyXAxydPPSybg4keehlnRxI8tDLOjmTvI7yXiHvu6x7C28nPz1+2MkHL+u7QJIPXtaDgSQfPHGiPzVfm/37mv2uzv79rfb5wBjf2PHHT58jl0eM5wBJ3jHyeSLJf0b+TCT5z8ifiST/mc/n2/8M85+RPxNJ/jPyZyLJZ0Y+TST5zMjziSSfGXk/keQzI38oknxm5BuNvu8NvvOVv+MUnt/Jhyt/x5F9yI2dfLjyd5zC28lvK3/HKbyd/Lbyd5zC2zW/rf17RxHYXX5b+XtH4e3kt5W/dxTeTn5b+XtH6e3ktwUnr638naP0kry28neO0kvNa2v/zlEG0uW1lb9zBO/DKK9w6eMV5RUO4omueYFdvKI8wXUQzzBPcBDPKE9wEM8oT3AQzyhPcObjFeUJDuIW5QkO4xfmCQ7iF+UJDuIX5QkO4hflCQ7wKE9wgEd5gkN/zRPc5OEFj/LyBniUl7f2+9ijPAHBvnb2x2Nn3zz76bGz753y6f539HT/e5RXINj3HuUVCPa9R3kFgn3vUV6BYN97lFcg2Pce5RUI9r1HeQWC/e/o7EPnOwHyAvC9ADh5AbCDkxcAO7jPC7Cb+LddnHfj7xPcuffYwTn3HjvfNWheA9dv7KOP8goE+/ajvALBvvwor0D0HUrzHUjEr8G4Y7yB0145T6PwOLqcpxHg6HKeRoCjy/kakX+jy/kaAS5/NyvkOT8Jcfywg8vfzeR5nsp3b+Dyd93a35/HX+V7Ovl7WHC/6JTz8ZnI93WUA+d62MFpt/ydL8DRaS8440HHmcPJg4AdnDwI2MHJg4Bd4+/yIGAHJw8Cdu/f5BEgj4Gvv8krgB2cvAnU5/EmPwL5E8B9PoWmnG9Pcz3K6TjVPBQuv4TD0cmnAI5O3gQf50Ynr0IQ56Mwn4KPc5BfIThf2O/HbvyYL8vv9qVfJ6DL78cBji6/Hwc4OuuLdL0hvxcH6w101h3pOoQ8wsxfWVew3mB9wboCPV1foLPOYN3C/ljqY13AeoH1AesC1gPgrAuwsz7Qdcx9vP5gvaB+yboBnXUD6wHWB+CsD7Cn6wl01g2sE1g3gLNewM66Acm4YB3B/J/1AusA1gesF7DTb/QjdtYFUb7kYF0Q5UsO1gVRvuTSrztoB/WxXojyKAfrhSiPcrBOYN0AznohyoscrBeivMjBeiHKixysF6K8yHXyPGZ+37cf/7cn7vkgr7XTb36d3eW1bnT5+0kZ5rludPn7SRHluRZd/n5S+DzX8neRwuczlr+jSL7iiYwn8hd7v8ZOHmTqk787ZT5/sPwdJfOS/MLU6/e7a/7ybhgH8oYzjsA1b7izq7/LG44dnLzh2MGJL3bi7ON7eRfGmfhiJ87EFztxJr7YiZfPJ97EjXgSf/yIN/H3ee2b+BFP7EG838J808TZ51+O441OOcYl8yo/bhmvTT3Uq/OcMM93gEd5vsP3cpjnO8CjPN8BHuX5Dv3DPN/h/CTM8x2+98M831F7yAN+O4v9g/zcYXvC/NwBHuXnDuKGTt5tcHTycuv80OXDJj82OPmz6QfwKN92OF9y9VLfP//3//zff/3PPy/P//zXPx/zr/ny/3v/51//zB4/xgY4HZdf//G8fKnH/yE2Y1nMq3/+67//c3vzX/+5vf2vrc1/b/+ff/2znH8ZcG/9X/9p/q0b4GNcTcfW8X/++Xg0tn/q8exZyr/PbfGNjX+bCjba/94y1bT+vWOKVIvHmTFtbv679a+tnX/v/Gt3XfCnnZYp/3b7PPzZ3J1v39atP3e7c3M7v/XH7jz/2N/+PfI69p2ji/vfzb/93jbHV+sfHscvv/uebQT14nd2tHu7GdSPX7/XfdwKcPx+e+frW8F18Tu/f5q2guvid3c/LbcDHL/z2bLaCdqD32/v+2g3wPE7ul9ftu/C+vFr57m5/mZv52zNyMutvcPMSLOcEr/D7T9NnB7WJD7g6Eef1xJPcPSnz6n0Bzg6/QSOTruejl8krlxXr7e4krhiB//d7jXxd3bwrVZL4ood/Kz1I3HFDv5nPpO4YgdfzJ8lrtjVf3gvccXu67+SuGIH3573Jf7Ywe3n4Db+3/2OxP24dST9QL8QF/oHCd673x3uHXkJTn+n16F+cPTWvCflwdFpt5TvPEx8fUZOHyZP47M8tz+bjc829hbP3yLta2C68nije/z4+TvQo3JPtZGz43YnG2zsfZ6r/CyM/Dpuq5+TW3V/Y+91o005/K6zG2v/y/+2NP6T5zbl8MtqI1/e91L/jbq7sVft7VIOvyobbuy9d/7yv8+M/+J2l3LqV45M+y7/8m+XubFPdymH32k5MfrDX/6vtfGffu1SDr92ZuTy7/rPC+P39bWj5ZxfXbzZ9v3lv33RNvV97VAOv5d6vrH3/Xd7Zt/G//19h3L43WWVsX/95T9cM37Thx3K4XeamXEw+VlL/c+s39fxNuXw65TrRl/85X9g2zHf3qYcflu1kS+Xf/m3x62Nvbf3bcrh910Y/OXrL//WhcEnl9uUw++tNuVftv/y31wz9uV2i3JRPbP3FvaoPa+XLexRfeY5wS7j/HOxDi7jeLa9Ls/Ll8fVzz4fk68NcPya52BPcfxkvM8eFMdPxvXntuL4yfj9niqOn4zTl9tNcPxkPH4cK46fjLtPj+Mn4+vb4/jJOHq53ALHT8bLx7Pi+Mm4+PxSHD/p/+89xfEj3uCpn/DB++U68QeX5/5lYx370yCX8aG858bL5arbjB+H49cf9GUcguO3NunLeAbHbz0/k+cCHL9FPpDnCxy/58GNPKfg+A1WQ3newfE7yEfCG+D4rU9Gwj/g6jeZCI/pdZ3fdf4mfKhxcH75YC68Co5flc+Fn8Hxu11VwvPg+K3llbwvwNVvsJL3g8bH+fUH6/Ie0PY4v8/JuvC9j3PjdzJoCa+D4zfPW8Lf4Orn+ln7N3mehe8n7+uMF+o5mLSF36Nyxl/4/vv5l3L4jQZt4ffUX/i+ev+lHH5/Vm3h99Rf+P5z+5dy+B395MLvqb/w/eL5l3L4DS9z4ffUX/h+fvxLOfxmnVz4/a/7tXw/O/ylHH6/tpzh99Rf+P7j/Jdy+LVtuwy/p/7C9+/vv5TD72DaFX5P/YXv349/KYdf76cr/J76S/+/7f1SDr/jTld4P/WX59/4Uw4/KWfeB/ijy/UNP+nzF+oLP8/S9jDfcteR+zV8Bk55iZvhP3D8JP6GL8Hxk340/AqOn4wHw8fg+Mm4+vQ4fjI+PzyOn4xz834Ax0+eF/M+0fY7P3n+zPsHHD95Xs37Chy/5vneU1z9LB+Y9yE4fsIf5v2pcXZ+wjefHsdP+Mm8H8DxEz4z7wdw/IT/DB+Aq5/lS/Pcg+Mn/Gqeb22P8xM+Ns8xOH7C3+Z51bg5P+H7ha8HP3k/mOcPHD95n5jnDBw/ef+Y50mv6/zkffXu24OfvN/eff346fPgcPwe+lu/9fv082vbrEPeNpadvln3fD18bvZrIy8Xw/7S4IsFfuhZ6/W3Xi7mafmbh+vf+uWhGm+fGvvGEjt46neyMPV8H1bni6ffev5cTYZWfs0e5vcG3/j46pfG73aOfOhf2+t/cH3fjgbnepQHpzzXuzj+/a1nG18n2+Z+Xs+/ln3T3vr9ba3fM/4/b+NW8Vt/nr8jwanv5njXXHf76/fE6O+d79Gnua/6+QsJ/rFj6n2ZfuOff5p2fOx9Y6cd4Pi1hqae76+XsmXk6/PLfctcf7HxigRP21WczEz8br+JA/WD63Vc/MGJC+XA034Cp16ufzA37ak2JrSD9oHjd2HXu/PjKTh+2k875vpmfHId/MDT+wQfn5jxujhXf9bV2NGfL0x/1xtnKT4cm/o+L8+wI9/Hpt734/PU//7CxOPt4Yxy+K2+TVw+//Z/WDNx/748pRx+2YXx+97+y38yNs/BbO+UcvgNvs3z+Xp5kfp/rt1beUo5/N5qY5/d/uW//W3i+Lk4oRx+u4Xpp+XhX/5n1v91cUK5q8NTsa82nqQfphvXEn/KX2fmufl+/quetwuDV9Nj6sPvuzb6dFqk/vnY2N8vjymH32lhrvt2/pf/ZM2062u7Tzn8FoUd989/+R9dGP+P2z7l8OvXdnw9/OW/Gvfsc9mjHPd/tlHL85zdvsrzRXzA8aPeRWHG12Lvr/rLC1P/rNPjOvidlGa8LI//8r9aM3715RHl8KvKLcsjf/mfflu/6RHlsF9kZrxUlwXtpjx4Ws+xvV79dUh9+P3kB1E98XW3DymH3/XkVK6Txmu52RMefDjcEv5Egr/eZsKzURwmh4dch3o3JoXEI22PxGt+26Ucfnere4l32p6fzUL4jutH42Gy6FIf5bcGT9LP6XVl3Cw6B5Sj/o2je3kPcR3KgeNHvXerVxmnaf0yjqfTA66D3/pqJs8B/lr/XSm8znWi5+7zeJ/6KH85qOX5S68rz+fLxj7l8KvyX3m+dVw5vbvaFZ4AR38aZMJDafumR1syn/hzN5N5AhJ8+VHLe4ry9eWB8B/1oOc/p8Kjaf1XR5nMS6gPv+JS7uc8jdva1oHMkzR+ToJTH+Ufp9fyfqA8+svPvbxn0npnW/cyz/rYOpX3MRL8eOta5meUA9fr0z+9UuZH2PU+tl5lPoQd/ON+KfMm7EjwcjaT+Zn6b9XyPtZyDp/2fmXehB193tuV+cvN1pbMt5Dgna1dmSdMepnMC9r3mbzPf+zv8WbeUEx3hRfl93n7HvvZavj7Z1f4Dxy/r86u8Bw4fuuXu8Jb4PhtWrvhJ3D8GrmtOH5SzvBH7L99KNcxfBDVb/ykXea5j9pj/OQ+zPMatd/ySmdLnr/ofq3fVOYP++D4Pf38ynMIjh/xBe/NMplfIrU9Lu70Izj9hwSnXsYxuI7L6ZPMj8Dxm/+UMg8Cx++j89rMd6jf+ZXTmcxrwPG77Sxl/qJxcH5Hl7XMU8Dx4/7AGV+/1v/V+1Ne4mnmHeDqZ+Nq5hfg+Ek/mHlEFH/jxziN+sv4ybzxc7C2b+dfH90XmRe+n60188+3tcLO46btF/yQ4Gm5VmH0z/xF5ovmbYAdHD+Zt773s3Js+u/rbcr1kOBch/rqzLy3vqoXmV9W/T3qBceP+n/W7HjtTqlP5r/LXHH8KP9Z2PfN2Sv1I8FlnjrP96inNzb1vA2n1IffR2l4922k/khwmae+3ezJ/Hp6nJdrJi6m4dSLBOc6vl7Dv7OJ1oMEl3ntpLXXzMef813pt8mE6yHBuQ7l3up728+vMt/9arWpFxw/mb9/d/LHCzs/uJlwPSQ416H8R2ns1Urrl3n920+nbft/0p1QLxKc+ii/qM191LnWgwSX+ffyrC3z/eVXZzo29XxWJddDgnMdyn0Xph+m+ZvMy+e+XnD8mH+c2PLvZyXXQ4JzHer7zcz4e6neZF7+0dbrgad+O6X9/aOv/khwma+/j9rITmaft8GbzMvfBuoH/pdfYXmir/4qHS7z8teJ6le1ea4+KsWR4DIvf+2q/lTb+VGuOPrb4CDCkeAyXw/0r0FP6gNHgsv827QDfWN1Ku0FR4LL/NvcJ/paXkg8FHcSXObZJm7MP7eG9n38u/Y8NO1+2c2Qhwtjf9/KdF7r5HXf+Feva5TDr36wPDH7y3/VsvzSW6Mcfk/Hdj1Q/OV/Kb+jzNYoh1//wa4zl3/5/w5NP0+zNcpxn4eTexkv3C8SXNYDdhy6ejft72519lf9w76ddxd7XAe/2bF9bvI89QfXeb3DM/u74Of9HvXhN7S/E7228vQ5BN+0PF/Px9jB8aP++dzU//G0p9fBb2Hv+03rQYJ/XNjfYfIxcTnLn+R5JT5IcFkXmeea697Y677c73F96l07NnLW1fqR4A/fdl10M6aeA9vu76JNffj9ebDrthv1R4IP7P18vz3TrstVKTwk6y7Ln67d4PhRfvZg8MVQ60E+H79avs9P1uy8ff0ZP3D8uM7d4FX4VdZvX74d4PhR3/WxjUcrP7Zxec31euB/+S1Mfy9v1F+lw8X/62zE9cxIlPcM7cEvPzb68k39keByX7OR6pvbMY4El/6YViOu9zRYyntS4+AkuKxjzfuX8l+LX2mX1uMkuIybKn9Cf93ekniAI8FlfH8Mn7jOk72+ef/LOtnMM2gHOH6Uf7S/I5t+oB4kuDx3k/Un6jMMJPMaWT+beRL1guNH+WKRyTiiHiS4vGeXN4/oXfu7uBmn4Ehwee+/tx+5/u1qS+Zxsm438z/aAY4f5Vs7B/KcUQ8SXOYtk/kj9Q3yXZlvyjrfzFepFxw/ylePPeED6kGCy/xqOXlAH9vf/Q1vgSPBZb73MXng+r1VJvNo+b3AzM9pBzh+lB+cNLxLPUhwma9O5w/Ut2fjZdYB8ruDWT9QL7he15XP7d8nzPuBepDgMt+u2kP0751ref+AU+/KxtGsH7guErxZD76tUe5p517ek7JemI+G1AuOH+XswtSuK2T9aNYR1AuOH/X1Pp/kvS3rmreuXg8cP+q76JzKukLWoWY9QL3g+FHfz+OTzCNk3VW376kXHD/sD/bvMWaeIuuoKr/HDxw/rteanso6hPbgl+2UMo+hHiS4rK/mg3u9j04h6w1ZR5t1CPWC40f5153XZt7j6kGCy7rrbf2e+rrSzxO3HjfrEVcvOH6UP7J/zzHzJOpBgsu6azq5p773n2tZh8i63qxPqBccPy1vpZlXUY9Kh8v66ntyh37wuZR5EjjS43bcrO64/oEdZ2bdIr8bmPUM7QBXP1e+PFnK/Il6kOCyvloM7qhvPL2XdYv8/mDWM9QLjh/lW1aa+RP1IMFlHTXL76hvw9Zn5mH8fkS94PhR/uKzmSdRDxJc1lHv+R3y5bGZD8k66vVG/cD/8ttp5lH4o+9/2t+fDjzuJLisr6atO+TFjl1XbTXrq8lK/cDxwz58tPPj12Z9Vbdu8QNP/coTI7+KXfyR4LLuqm9Uf7Xl5ruKI8FlPVbnqr/Z9r7NFJd1yuv9FvuHZR0yed2S9c7HteL4yfpm8aQ4fs06Zqk4frJemRy0wPGTdcnrq+L4yXpiViiOn6wPPjPF8ZN5/feW4vjJvPvld1v3qTs/mUd/bCmOn8yzP3cVx299aH+/6imO39zuW3i93wHHbzw3cjZTHL/7lp2f7CqO37XFJ8UuOH5Xtj7TTxo35yfvl6/dTXB5H5j+kvfaslRc/ez7dFEojp+8l2eniuMn84H3a8Xxk3nI60xx/GQ+89JTHD+ZR01+FcdP5m91vQGOn8wDv3cVx0/mn9+F4vjJvPfrV3H8ZP78NVNc/Y5jHD+Z/wf14Cfri+C6+Ml6JGgnfrIOCu4LP1lPBXHAT9ZxQdzwk342zyk440DWj0H8KS/j5auIx4kpL+vcoB8pL+vroN/xk/V7ME7wk98BgnGFn/z+EIxD/OAPHYfOT+aHZv7wYf+ebeYXMp8z8xCZl5r3fn74KvMC/JDgabmL95nMa2R+ZuY/2MHxk3m4ee+PDkuZF3A9JDjXob7W7UzmWTI/M/M36gXHj/q37d/jzbyA+mR9YeYD4PhR/u1wKfNE6keCy/zMzl/tusnMEx5sPWYeQb0qHc51KH95WMs819ezlPlA+/Ze5gvUiwSnPspn9u/EZj5OPUhwmeeZeTz1TzbuZb6g9dn1r5kngONH+XrjV9YH1IMEl3meWYdQT8/WY+YL1CfrejNPAMeP8lP7d37zmqEeJLjM88w6inp+bq9lHkF98nvFu8fxo/z1+66sz6gHCS7zNrOuk99bzLzi+f1a5iPUiwTnOpTvHWayXqQeJLjM28y6lPrPDq9lXkN92Hft/gazrpV5mFknUx48rWfvtpB5DfXJ72BmXqO486O+1d2BrMtlfmfW7dQLjh/1/BwWMg+iPvl90syDwPGj/LvdJ/E50PqR4Md23fQxfJLfe818afZeyHyKepHgXIdyo6NT+Z3j4edJfjehXvC0/slGIbxLffK7tJl3geNH+au7ovk9x9WPBP+4fGp+33H1jGy9hsepT34nN/M1cPwod3x0Lb8b1bads9GIesHxo54nG3fzXqE+nRc6nPmhSodTnutkm039G50n+b2M64HjR/1yPTuPcfXJvNTo4PhR3+adjJt808brNX+mXnD8qEfiZeZP1CfzZKOD40f5avOp+X3M1Y8El/rn68/UI/1t5m3UJ/N2o4PjR/mXzbIZt64eJLjE5/vtWdYFZp4o49JI6pX1hZlXguOHHZzrU+/w41WeG+qnHnnegvqwn3/M5HmVcfJ2M6Y8eFqP8IKZB1OfrKeMDo4f5Tuby+Z3b1c/Elyeh898TD3CX2b+TX2yjjM6OH6U27hbCl/Kc1rPtV5w/KhHeNbM+6lP1o9GB8dP1qdm3QCOH9eZ2X1C5j3AupbrgeOHHZx1MfXL+ya4DvbhZvMe030Nrjx4Wo+8F836h/pk/W50cPwof2z3J5n3MPXL7wlmXSXvbyMpjwSnPspvfWw184WkHplPmPUb5eT3EKOD40f5t81dmb/ovgnrb9aFMr8xkvJIcOqj/OAjk3lWWk8zP1tuUa75vWi5BY4f5XfuMpn3UQ/+Ml8061vKye9adl3scPwo/zI7aH5XYx+H85d5q11nu3Ly+5vRwfGT3/HM+hscP+rtz3oyf6V+/GXeGpTDr9rqyTxV9++4daTMT42kPBKc+ihf9E5l3qn7jJz+LfvLZoqjn80KmReCo8+2CpnP6Th3em73pZl5GDj6/X0zTwJHX9438x5w9PZWM48Bl3Fr1jF8ly3jz6xf5Lkw6x5w/OS5M+skcPzkeTfrKnD8hH/M+gwcP+FDs84Dx0/41qwL9XwA5yd8btaRel3nJ+8Xs+4Ex0/ea2adCq5+9r1p1rX63brzk/d1gOMn84egHvxkPhNcFz+ZLwXtxE/mb8F94SfzwyAO+Mm8NIgbfjIfDuKMn8zDg37BT+b/QT+qn113BP2On6x3TP9rHJyfrKfM+hUcP54HPXfC+envTbTTPVdIcMpXvXuZf4HPrW7me1+ze5kHaT86P5Fm/gKOn5Qz847I3/hN7+9lXhDVb/zu7f5N8/7X+Di/U1ufeW+D4yfPj3nfguMnz5d5T4LjJ8+jeY+B4yfPr3n/aP3OT5538z7R8zqcn/CD/Z2P58v5CZ8YvtdzPJyf8I/hb3D8Gr5aavzxEz40/Kpxc37Cq5Z/OQ/E+QmfG/7T5875yfsi6F/85H0UjB/84Bt/bkns5/dDNuMBqfsnbX+ZdQdSedD2l1nXIMGlv8w6C6n7FR0vRvs1+B2S35VsvU6X3y3N9cDR5XdOcz3dd+F0+V3UXA8cnX0NfP/4tbMu50/wXQDflaGz/zM6lyKy9/35FYE/3/H473oq43eu3wNhB+d7Jv990yjPj/z3VdjB+R4L++/JIM8P/fdb2EefeZ4Xz198j+W/72pwvn/CfnPcyvPTbf2eDPvF8SrPextffD+F/WR7nucH519896b2xSTPLw4rvrvCfvNg2rnvv6vDDs53ddi/tk07u/57PuzgfOeF/aFv+vNwqt/96Xd0Due7P+ybfRP/80v9DtB/F2jaf7rQ7/X8d3oNzvd92CfDYZ73/fd+2BXnuz6+5zNrk/xi44Pv8vx3fyYO3cUH3/H57/fO8vzEf7+Hfdk34694f+N7Ouxr/a6p5+eN7+/8d3cGP/bf3fnv80w8D55f+K4NOzjfo2G/sOe/9I+nul/I2Q/McMjPNibR+T6tOudcH8HRjcTvrig3q15ruFvcb1Zn8+Ese9qsTvrDl/JgszofPe4WRh6/Pd4Vvc3qcP1xXs82q/2z4WH2avXhZm3kQWs4u8iM3+TpzPp3hk+UB2+NjTwcqr2o682qGN5T31O23Kzyatgtfzeri5t76scOjk75utwy7V7dY9+uf+1179/LXYMPFMdv/9u0o1g9ty+M/XTy3LKyN3hen5yacmf3/Ym5z7Oz+zWRb/fgV7lp91mu9vs1U0+/Pz61spuPqXe8ujYy13KfeWGun98fDUxcO9UQ+3Vu4p0PhhMbj/5ZuWXjlN+UH1aeDcbgJzaO3Ru1L1amvw77Q+prTYw8uBm2Smmflqd94NSHvb8ycTweDqnvMTfx7p0NN3ODn64Ux2+6Wto46nWxg6NTvs7M/Z+cTa6yno1LSTvAa4sfDNUOfmHl0brar4vC9ucEO/WsD0z/H7QfuP7pyuid7kM2+LV+iuMHjv64Mnovf+hlph+OBtOWvU7+NuV64GVh+utgovbpyoyj8zetn3r3czOOOvkj44T+B+c5Y1yDF/Y6xZk+f+Afpbmuzfbp7OBrtWlHt/2AHXyYGbzffcAOTjsYd+Do9Cc47aC94Phx3+DoxAWc++T5A0fn+QR/qjOJG/EDxw/7uDTtOB1O/5Smnf3WlH46zUx7z+dT7OBtW0//5pH6JgMju/PHamKfp+4T9lurn/UVxx/7Rbm0cX2BLzbXjDzIn8G5HuMHHN78rXuWt3w9bhzznIIPLU+ez5/gTfAde3/FSu8T/Mz6d1ojyoF/2vh3Ki0Hvm+vd9QfUQ58VMzs86blwNtjc58nwxHlojhcVCPs4MQFOzhx4b7BeU8QJ3DuHzs490+89b4c/9I/4MQX+/Wl5cH+E/3csXq3+wROv2NfZGa8mtfhuuWf05sHnjPw6+LU3ucDdnD6Gzt4x763jgYaX/CN0uC9kdrB8aO+nY5tbzV6+bFxHDzVVuajETj3gR2c+8Le+TH19duK43djn7fj+UtZmOf5uKvt6E9t/7Sej6w8H4z6tnzn7XlzYOcH7ZfcPrcn+ctJkYl+eNmzvOj9XfnKvj9N/ZTDHxyddmRT43cx0XqoF5z7wL60933UHoPjB46+Ze93fzUGJw6UOx8YfuwNX14sf5o40D7w4cCOgxu1n9t6i4HWN7b1n/bHO3YcHdyU4PjNc/veHrxsDMw47q6/dCZ2PJ+9PEzM+O5M9DpcFxw/7ODU5+2Zvb5el3aAo79bvTco7ywv7s8n2k7nB47+a+N00S5n8p7vTrk+7QQ/sfOJ4k3t4NsDg58P1X43sePsbcJ1tqx+1J/82vfqWUtx/Ga5fX/n07V8acfT9HpgZP9tepEb/zyfMm70+XE47cMOTr9z3+DUS7vB0akPnPK0Fxy+4Dq+nuY+0vZTnvsH536o72TtfePLjHf2v/t97OBGHvj98YOx0XsT3efu97GDN+WwP1i8s65+ui9d8aYc9ndb/qz/hB/70RV35bBvWPxoovvW2V8OTjnsx+OFKe/92C8OTjnsE4ufTh7xY784OOWw76wZ/aiv+8rZ/w1OOezD76+Nr7ylfuznBqcc9u2xwU9XD/ixnxucctifv39M+ZXa8QdHZ992d23D3E9b7SmOzj7sb4ufD4bYUxxd91WvbW989VdDdPY5g1MO++na3sZXd6R+7FsGpxz2tQuDm/VQur8ZnHLYf4uOGR9mXun82K8MTjnsn/Whud5c/dh/DE457G/F8cbXYd/7uf3E4JTDXmbnJo4t9dP9xg7Xcs7+XF9ufF2s3+HH/mBwymF/Lm5N+7pqV3+H+33GzT7gcfmw8XUc2mMcnX29k+zZPM8Dtac4Ovt034upuR9vT3F09uV+FpaPJmpPcXT2465K8/zsd9We4ujsv90q5flRe4qn+3Szwjwnea72FEdnP26vMOO1GN5iT3F09uMWtRl/Ra72FEdnv8Uw7wiOPcXR2Y8xmZjxVwxU1/0oDqcc9vnKjL9ipX7sVwGnHPbVyoy//O0OP/bTgFMOeys347Iz13037OcBp5zuz5nc2veT+rG/CJxy2Lu5GWfdudrxB0dnf1V/YMbZ0ZvaUxyd/V2nk3fLR2pPcXT2m50P7PvgTO0pjs7+t/OBGWfnLbWnODr7804ndpyt33t7jOs+QbcvsJ8b/u3m99hTHJ19ifsDMy57I7WnODr7JncmBj/tqj3F0dnHuRqYcXzRVnuKo7Nv83Xasf06xJ7i6OzDvLk8tLwz1HIJjs4+y/3LY/seVXuK675Pt9/xa2rwfPiAPcXR2b94Oz23/P6APcXR2Y+482Pwk67q7CMEpxz20Y95Hooz9WNfIDjlsO9ODd4d6v5B3RfocMphv++Y5+q4Uj/274FTDntt8aKvfuzPA6cc9oMf817pVrqPj/114JTDftsx+MlA/dg/B0457C9WL1rqx/43cMph/7L64XyEH/vWwCmH/Xdq9NMb9WMfGjjlsG9avNN9xq772xyuOvvQbPmj9Wfsf+FOZz/Zj23f2ZvaUxydfVyf1m//Zow9xdHZpzW27ejnY+wpjs4+q8LWez5Xe4qjsz9q79Ly+FmJPcX/2kc1NXi/KrGnODrfHV1Yv4uu2lMcne+gfuz4PhhOsKc4Ot9lXdrnpz9Re4qj813Zt30+z9/UnuLofOfWt8///ki/p+P7OnDKYS8tT/XO9Ps+vvcDpxz2X8uDpyv147tEcMph71o8P9PvIvlOEpxy2K9+OpYv9PtNvucEpxz28crwvlnf4sf3peCUwz7PzXvl7Ez9+N4VnHLY68GGna+on34f7HDKYV/PzXv0oKvfC/P9MDjlsG/l5j195P34/hmccthbuZkHHHfVj++xwSmn9dh5xmmlfnxnDu7ra+wbdh5zkasdf3B0vpP/WZl5Ut5/w57i+l2/+56/Wlmear9hT3F0zh2Y5fa5nag9xdE5f2EysO+bldpTHJ1zLoZ2fnm4UnuK63kg7nyQgZ2/Ho3UnuLonD/St/Pjo5baUxyd801yO//u+XNROCcFnHLYW3adYHT8OG8FnHLYV/WG/b1D/TjPBZxy2Bflj9wnfnp+jMMph/2lNuOvu65+nDsDTjnso9qMv4M39eO8G3DKYb8v3+06Tf04Nwecctiv7boxH6gf5/iAUw77oDDj8uJMzxfivCFwymG/qO17uqV+nHMETjnsF6Wd39yoH+crgVMOe5Fd2viqH+dAgfv63PlP5bkd9+rHuVTglMM+rO2880z9OA8LnHLYy8yMv7NKz93iHC5wymFf1Gb8Hefqx7lg4JTDvvFt+Pewq36cAwZOOexd+b3G2/EHR+ccsNsLy9fzKfYUR+dcr8WFGd/9vuqcxwVOOeyZ/R3tYKR+nK8FTjnsD2ODX8z1HC49r8vhlMO+sfZl58fqx7lY4JTDfmt/H+zO1Y9zrsAph731vbC/O+h5WJxbBU457GOLn3T1fCvO1QGnHPb+xcLOv9WP83TAKYd9w/4eXZzpuTucgwNOOezv9vfi47na8QdH5xycof39t+vtKY6u59vYei+Gz9hTHJ3zZ+T38X6l9hRH9+fSNL+/Ywc3PH4c8j+8bvj62Oli/19wdCnXKlvjr6OVwfNxWM7jTnflW+Xun2rzTf3x8/iBkZW317u9avPG4kZO1B7gje7Km/fHsX0v0j7eJwHetIP2ZzujatPe576RZ3odjzvdXW+VrZt23Wg91Ks498N1su2famNu42Dkul7H4+jN9X6KrT+iu3qo1+PNfWLfLrf71YZtd8fIG71OgIvO9X7KrV610dZ6qFdxd5/Yt+tWWa1XWj/1ejw3cl3t5n187N7jTVxc/AMcXd7bP/XmyLaL++f6iqO79m1nu1tmtqPXpR0ePzByoPZFvRqb9bDGkXYpju7a96fYMHEaaLxol8ddP7n27ZS7RfUq49LIuV4/wEWnfYvs90+1MdK40y5w1V37/tQbfblPF3faBa66a99OtrOoXlbaHtrh8X0jW2r/LH97thzxpV2KO532/ZbrJq4DbQ/tUJz+cHYz3zq282DiS78HOLrMy3aLnW71kms7aXeAG9lX+2f2Z1Stt7X9tFtx10/Y14utrerVjxfaq7jTuZ+XrBqb94H2B/ehOLq7n91se1JN5bkz8kbb63Gnu/tZ1j8/1fqb9h/tBUfnftazLdNvXW0/7Qanv7G/lvWfan2i7afdirt+xd4uW3vVxLY7N3Kk9+HxRud+qvLH9H9fxwH3objTuZ+NetP021DbSbsVd/2N/TWre7Yf6FfaC666u5921hpV9fCV9tPuADdyovavclVWv2/aftoNzjjAbtYDx3YdSH8zbgMcXdYNm/Vmt5rO9b64T3DGAfa37HtU/fpxzH0q7sYB9r1yt12N7X0dGPmm9+fxRuf+v+tfM15yHTfcHzg69z/K5mMzX9Rxw30rju7uf6vemFSTdR0f3J/iTuf+3+uvH3sdxgf3B47O/a8Vu+Pq2d8v9xngRk7UXte/hY0398t9Ku7GH/bnevmn+vXPPfcJzjjD3srW96q6/cr9cp/gjD/sH5mZhf32dZxx3+Do3P9attupRjf2fowc6f0FeKO7+19lfxbVtNJxxv2Bo3P/43LZq35zvS/uU3E3/rBvZ+tmHOV6X9yn4m6cYZ8XVVn9met44r7B0bl/s34+/trPdTzxHAU4uqyzs3Lno3o60/gQF4/vG+nj96f8060mbY0PcQFnXGIvi89R9afS8Uc8wNGJ126xZcZdruOSeICjE69FWW9VL10dl8QJHJ143Wdv469OS8clcVIc3cUrL9bOq8fcxsHIvo+Hx0UnXr/Zjxm/fY0DcQFnfGOflIuf6s+Nxoe4gDOOsbfLLTNOfXw0Lg5nHGNfFnVRTUc6XokTODrxGtazP9XPSscxcQJHJ155trdRDddf7bqmGrZ9nBR3uovXRr0y433wyrgnHuDoxGuaLfrVj+cz4gLOuMe+V291qqe2jmONB7jTiVeVfS+qyUrHMXECRydeD+WsV/1MdLwSJ3B04tWp9ybVvX2vmPf+faVxCvAmbi5eW+VqVH3f6PjWODkcnXi9lvOy+hlpHIgLOOMe+3U5Pf7Kz3R8wwMB3ujud7Ws2PyoHtd1fCs/OByd+H7X32a85zruiSs4OvF9rD9G1c+ZjnviCo5OfPfLvbPqzvJRx8iRxjXARSe+28Vv2/Y38dT4OpznB/t7sdyqJi2NG3EE5znBfp1NxvZ3c54H4qo4uotvXu+cVw9zjSdxBOc5wb6qvyZVfaa8q3F0OM8J9qfs/adaretzQlzB0YnvQdneqW4tj+VG9jWuHm904ruT/Y6rURA3F0dwnivss2JZVJOBPj/EDxyd+N7Ur3+qrP3K80NcwdGJ736xbZ6bkedjF0fF4SFn/5NVe7b/eX40fg5HJ77P9Xu/Wo30uSKu4OjEt1u0P6tr+5znRq5rXANcdOLbzn479v3B80P8wNGJ76L4XFT1m/K6xtHhPFfYb+vXXpWtXnl+iCs4OvE9qM086/5M40YcwZW3nH2jqEbV10jjqfF1OM8b9rJ8K+11eK6IKzg68R2Uz8fh7/z8fq+4e66wd7P2c3V1o/En7gFu5EjtWfHHPH9nPv4u7uA8n9iX9We3+l5XntN4Oxyd/rjLXkZVNnrleaMfwNHpj8Ni+6y6bevzRrzB0emPrbpu23mZxpm4O5znE/u0nm3Z+RPPm/aDw9Hpj0E2Gn9ddDXOxF1x9xxiP8zal9WgrXEm7gF+WV121d4pNs3z6p9b4g2u7x/XH9/FYlJ95xp/7Q+H89xiH5bTnyrravyJOzjPLfajurVT3cz1+aQfwNHpj52iHldPI30+lQ8drvF3/fGazYrqe6W8qP3gcHT647Iu/1R7bY0zcQfnucV+VLd7VflmT242snoh3gEuOv1xUG5sVPf+OacfwNHpj1U936u+/HvJx73Bef6xP5bTfrU21zhrfzic5xx7v2yZ5/JGn1v6ARyd/mjXdad6HOpzq+8hh6PTHx/lx6L67mr8iTs4zy32q6zsmTt65fkk3uDo9EevbufV+MzG2ciB9kOAi05/HNr57p1/XxF3cJ5z7HZzW1UN9DnX95bDffyb/hjVk7JaO1PeJd7g6PTHRf1wLH8n5Tl3fKu41+XvoidFyzzHufYX/aS4e/6xZ+X3R/Xg+VX51uH63nP9tyg/utXXUHmX/gFHp/9uyvGo2hsq72q/ORyd/uuX2U51ttL+op88fmBkS+39YsM890N9/ukfcHT6b7Netu398PzTb+Do9F9ZvG5VX3PtL+0/h8ML2ItyOP46XSkf02+KO53+O81a5rmfa7/QT+DwAvb98s95NTwL+LjpN3B9T7r+q8r3SWWW9dpfrp/A4Qvsd8XzT7XXVT6m38DR6b/jMtuqTm/0+zK+VwNHl78bnI5CXHT6M8BFp79PynXDK13lF/oZHJ3+3q6X4+rRj1flfYfT7/Q3OH7Yp/VrUX3lvn+1vxscnsI+KJ7+VLtz7Xftb4fDR9jPy5bhm8EL/Ut/gysfOfth+WN4KFc+ov/B0RkHdfm2Vy1X2r/0Nzh8hH1YPver9tz3u46DBoePsJ9l65/V1Ur7hf4Ah3ew7xXLTvUw0H4h7m/1y6KqhsoXxBXcx7mJ+2X91Kt2h8oXxBVc4+ziXhStvHpeVx4hruDoxL1fmvXG7crzvosvuL4HnP1P9jaqPteVL/x7t8HRiftjNiqrtucP+ATcx9nF3eHqp++F22O3H0Z4BP4P8EZ3+1+Kcv25uhxpv9BP4PAO9tzyx9DzCP0Gjk6/zrKXbrWcK7/oe93h6PTrdfE4qnb7yiP0J7jv36ZfB9mu4YOR8gL9CY5Ov56WP2fVzUR5gX4DR6dfN8tZu3poKS/Qn+D+fd7063Ndbtn7oh/pp6K8GX8de76nf8B9fzX9dJmtm+e7q/GnP8DhBf9e/z6v7rvaL/QHuL4HnH1ZTifVZ0v7hf4Ahxew35YPP9WOfz/TH+DwgvZbvWt4O9d+oT/A+S6U9wM4OrwPjk59F/Vqp7oeKL/Qn+Do9OtOMRvb3+/gF/oTHJ1+ndRlUS272o/0Kzi8g31Q3v+ptj2/06/gyjvOflOv96px9UI/0q/g8A72Xv21Ud22tB/pV3D4SHm+mOxVn13/nnf9Cg7v/P9U3VFfUtsWhvEPxAWYZHSJRVssAkxUvFNci5QMbQpon/7MqfwHnav9G89YnLP3eMZ8J5qh/sX6sp8OprGvcgbnl2/cc/onzc1jOulEjvCDq3lqjH4fpot25AU/+O4efvO0GFUP6XEa8+cDlyO7e+HiKLVbu3t46wOPHNn2L0atnBOTyAsecHX4K18/TdLuHth6wNU8/R3NZ+lhdw/wgKt5uqqndXrfDi/mPh6dHL/+HKNc3+Z5cPm+/bnFs3pzU/ZIjvCDq3n6VD/ep/NWeOEDly+7nK966SHF/PnA5Uvk/Pp8lvKX0/ZJnuBqfvDdff7m77K5f5C+tSNfeMPV4bV+GqTTWeyffMB55A+Pe2Pb36/vOmm6uwf4xOP+33q9WV/vp4fpP/f5m1dcvuiPm+Pq6b/pP/fDm2c86q3v6XpzUvZSjvCMq/n+b/34PZ2lyBE+cTXff9Y387TsRI7EfbHlar7PmmfPqT2OfeUZD+9br7N6fz99nYdH/nD3gD7uczPcJ7ja607rdJB+DMI7rx/Wd1W62HnkD4/7Ydv/OboepeXunucPl0f6J83Tl/RuvLsPtv7w3b3x1p+NNkfpph35wieu5hW33173tfmwlyaLyB2ecTXf6+bsY1r2I3fivthyNd/T9Vk/7bd2fvmu02Mat2PO5o7LF/1uyZXz3ZzNHZc7kf/Nq4e0HOzu4e3ccbmjf7o+PUrvervc384dj/th26/rTTfN5jFP8x3V+euh02nM0xxxeaHfqmez9Hu8u2+3c8Qj77f96/WkTvvT3b26nS8uL/RP19+Pnz7P4vzL+eDbPdPH47ntz6dfr9NN+TpHLvCDq/nrNe/v09kuF/jB1fwtm1e99Hv+T0685QMe98bWGx73+dbr2frHLO1twhd/+O5+eOvfNv/m/OhHjvCJq/mejB4G6Uf/n9x/84rHPbDtvx/VnXQ+jbzgE1fzXTUv9tP9Lu/5xNV8T+pB9fR5Gh75q5vppHx/y/nnDbev+rjneD1u3n9Pk3545A+XC/pP9eU83W/CI0/T0clz2pvF+ecBj3t+6+m+/rufjjfhhQ9cfuvjPo9F3uNqr5s2lwdlT/niD5dH+o1RXZWvE3jkD5dH+rfNi1G6n/xzD7z5xNW8ntWjl/R3l/u84nEPbPuLUTpKs3Z45G80+rWXTrvhhSdcHum/jKYf069O+OIPj3za5hIeeb993VXzpJ/2epFHPONqvm+ay8dUL+O+NXdcjuh/ru8O02QaeWHeuJqP++b5Q/qVYv7mjssL/YvRqPxcQszZ3PG4B7b9ZZ266XoR8+cDlxdxT5evn05au/tg6wOXI/r7o+ks/drdA+Ze1eM6tZYxZ/PF5YL+tHl8/O/fM/L3h4Jv80L/tnwobTW5df55wNU89Zu39+XfWy7wg6t5+lOf99Kv7i6/tx5wNU+X9XCWXjYxfz7wyJVtbuC7vH97XVqvD9LXQXjhCZcv+pfrX4OSg7tcf/ODR+5v/XXq606a7HKdN1zN6+3otPw8cpx/3nA1r5frfvXU7UUu8Iaref29Xp6km2545A+XF/rD+vb765/rbD3yh8sR/U19Nk+LSeQFn3jc51uvs9H35/QyC188PY/W+6nfipzmAff5e3Id9xx/uOd2ub84SPU08p5PXM3rYTPnx+kuR/jE1bzej05HOU0iX/jE1bxeNb+VP1+8lS984mpeU3N5lK5T5AtvuJrXyejnXjrZ3c/84XJHf289+Zju5pEvfOJqXuvR93566YVHXvG4B7b9RXPxmKp+zN/ccTmif7SuD8u/r/mbO24v5Qmu9rrH9Y/8brEbOcIPHvfB1hNuX71u1vxW/nzxVu7whqv5e24uu+lqGr54wuWO/tUof71Uvg53H2w94XE/bPsfRpNZut3d2zzh8kX/tjmo0/MyvPCEyxf9ef3l+N+/Z+rvj+Jqf080nt/mTvx91/Xipvz3yR2ecbU9+N6s7tPJzi+v6/WPXrqdhBee6tHXWWrOwwsfuHzR3x/9OUj531de8ICreZrXPwepau/uga0HXM1Tt5nz4J97gAdczdN9c7Sffv6TH9t8wHnhCY97Y9v/OepVT4NFzJ8PXI7ob+rFSfnvlBf84GqeJqPqexrv7nOecPmi32qezNPPZeQFb7h91cc9x/fP5vFzag5u5QufuJrvTv1nPx0t43Na3Ru42j2Bq+0FrrYf9+v5QbpZxn1iL3C1/TgaXVflz13ll73A1fbjTz0apfky9iF810cvqTO7lS984mq+39WLo3S1uw94xeWR/tX6Zi/V/dvdPfHmFZdH+gfr8cc0b4dH/n7Vx/3UaN3KF95wNX9Po/ljms3i/Jsrrjbf7/X1YRp3IxfMFY97YjvfzWj4kOa9mKf54nE/bPuL+ugodfLXxdscMW9cbe6detFN007M03xxOaL/c5S/Tqq6kStyA4/c384dj3tg2++uc37kf3/z5wOXL/oPo36dGrPwwgcuX/QfmofHT/1O5Lqc/7ue36TrQfjiCZcX+pPR1X2qu7d88YTLEf299bCX1rNb558fXM0fbv+87r753yx1urf2TD7g/PKKe07/U53Pfc4B559PXM33cnQzKP/99pVnXM3r0eiiU77vYl/lAM4jr7jn9J/W3/bTUyc88opHjmz7j81u9dRvx/3AMx7et3twMJqfpMtO5AjPuNoeXI+uvqebzu3unnjzjcsX/Q/193labW5398Ob14fml+f0YRMeeeqXfP5vHDnND+5zud0DuOf4wz3nf289mh2U88ojf9/XF1WqpuGLj5f62yg9zW4jv7fzxtV8pPrzS2pvIkd4wNV8dJs5V6bLmL+543In7u/R5d7r+8rI77d542o+DuucH6tuzJ8PXL7oP62/9NOH6a0ciTzfcjV/70azx3Q1j3maLy5H9HH7pD9ZXxymm1nMnw887odtf3/99SGldnjhA5cj+qv681FqLyIX+MHVPB2t87m/mMT8+cDlgv7DOn8ddd0KL3zgkffb/lFzPEtP45g/H7hc0H9e9+r0oRte+MDlgv5e4+Px05dunHM5H1y9/dwXXO3zXT6uZzfpchy++Ltunt8Xb5H7W0943APb/sf6ay+lcXjhCZcL+pvmp1lqTyIXeMPV/A3r3wfpv2544QmXC3F/jy4H6Wp3b/OEywX9YfO0/Nxf5Do/eOT41t+7+mg/PS7CC0+4vNB/1+hUT6+/l+DNFx+4vNDvNXNOTHuxl3IDV/OGq3m9W59/T9ez2Fe5ge9y/c0nHrm/9f255MqfZXjkFZc7ca+PDp9Tuxd+ecXli/5Z/Xs/9Xa/H0O+42qecb9fw+twz9mPdnN6kC4XkV/842r7cT46rUoe7+6Nt73A1fbjQ300So+9uE/4x9X2o101X1KrFfstl3C1vcDV9mZQz4/SeSv2xB78qc/20tXOO69fR4OP6bETvvjD5ZT+fvOwn/ZT5BFvuJrX7jrnx3QaczZfXL7o36xPD8u84x7YzhuPvNn2cc/x0W3mvHmYx/zNHZdH+ger5lH++jvmb76nzXk3nc1jnuaL2yf5g6u97m/5+vhyGvPnA5dH+iejwSw9DmL+fOByR79Td+u0P4nc4QdX89Srct5025E78r/fzDlxsct9nnA5oo/bM/1f9Y/7dLkJXzwdjXJOLDsxfz5wORL3RdWYpdbu3uYJlyP61+u7g9Qbhxc+PqzPBmk6jv1zrnHz5wP3nP60HnVK35457zgvPOFxn/A2yuf+fnf+ecPV/H2p8vnu7u55/nDnX3/cnJ2ks939wNPT+sf3NN154QmPe8B9vz6ep+Uu1/nB1fx1m/nctwaxZ5EDW84Xf7jn9O/Kz1d+2v2+JDmO7+6HN8+436vkdbjn7EdvlPcgz8N+2wtcbQ/mo1GVpovwzut/65wr97t84RNX83o0zLmySbHHcgbnkVfcc/qXo9lRmmzCL9+4nNJ/NzrZSxc7v3zj8iju+3X/Y/q9uwf4x9X2oLfOvv+2wzuvg/X0MZ13Y87muxyNDtPF7l41X1xe6A/W/z2kX53IC/PG1eZ+XOX5bnZ5YY4/17NuOp3HfMwLlxf6jXX+Oul8Nx/zwuWF/mzUn6X7dszNvHC5oH9czvffeZxz88Mjr7fzPVu9z1/PL346/3Ibtzf68bzntp+/eFZPb9KkHV54wuWF/mY9vC//vbzwhMsRfdye6Z+O/uulX9PwyB++y5Ftf5hzYjMJj7zickT/oVkfpE/j8Mgr7vzv7ul8vs9SeOQVd/7175rfOum8Hx55xeWC/rD+vJ/ueuGXV1wu6J+v2tXTYB4e+avq6Uk6TeGFJ9z5139fD7+ns1bMn4/L5pd5WmxizuaOO8/6o8bH57TpxZzNHXfO9V/qej8d7vLYvHE1H7jfnye/cbX/vfF6cpAmu5zmB1fzl0bfqnQ2CS884XJHfzL6PMrbHXspT3C++MM9pz+tPpTvL/yUO3ziar5/19Oj9GMeHnnF5ZT+pzrnUPYvj3jG1fbgZ937mBb9yCOecbU9OG187Kdm66fc4RlX24Or0eSxnDNe+MDli36r+e0wTeaRIzzgap5we+x1V3X5nLx++OLjavWhfL/gp7zgAVfzsamn3XQyiTmbOy5H9L+VnDjdzd/ccTmij9tL/YdRb5bupuGFD1y+6E9XnTo1Zz/lCD+4mqeHau/49XN3tzki/4Ort5+zi9tLr7urJzfpxzRyh09czffH5tf7dLoMX/z9HH3qpZ+7+5w/XB7p36wOZqnTC4/84fJI//36+iB1e+GLP1zu6J/VJ4P0Y+eFp+f1USf9SDF/PnA5oo/bV/1q2NxP695Peyk3cB75wz2n/1i18tf5vfDC09NocpJOBpEX/OBqno5GOQ9+7HKBH1zN33JdPg+xG154wiMv9Kv3+ev/VnjhCZcX+p/Kz8sP2/H7Vt0DOF/84Z5zT+Bqr6tH44N00oo84hm3r/q45+zHQX1UpZNO+OV7MWyO0moZfvlLw/2XtN/5aV/lDM4jr7jn9N81J0dp3Is84hlX8z1ef98r//7yiGdcHb7r8jmRu/ufV1we6f9ave+nD4uf8oVPXM33w2j8mMab2D/zxtXm/rnOOXGyu5/NHZcj+o+rxkNa9X/aS3mCq/nB1fytVvtHab8VvvjornN+VO24n80dly/6V+v8ddG4FTnCA67mo70un1+5+SlfzBtX8/G4atfpwyByQm7gan5wNU/d4d7x6+erb3NE/gff1j5P/e9ofJPqFPcAf4OSE+Pd/cwTLkf0nxuNXnpahi8+nhvvZml/GbnOA67m6WvJg++bn3KBB1zN06L5fZDqnDNbL3zgzrn+YZ3Pd90LL3zgzr/+pvqQv85vhRdzPxy2ys//xTk3b1xt7h/X45NU7e5bc8edc/3z5tfvqc6v287Z3HHnXP999XGenno/7ZPzjvPCE+45/b3V3nPan8Y+Oe+4mk9czeukvt5Pr1/fvP0+cfcAzi+vuOfkPq72uvVocFD888s3Lnf0v65z3lSTn3KHZ1xtD96tPozS4+7etge4fNH/1Mi58ncS+WIvcPutj3vO3hyVHLqZRT7JJdye2Bvcc/rz5vFequY/5ZF9wdX26XCd9ybNY3/sx8Fwr5/2+7EPfOPOg/775uAx3bRi/nzg8kV/Mjo6TDeLn/KFH1zN08fq4CE9dmP+fOByR/9LmfvfXQ7xgKv5+FFPumk2ifmb7586fx11k/Nqmy/miqvN92udc+VP+6d8MVfcnunjnuOjWbXq9G6X9+Z+uXo+Lr/fQr7Iczzq7e/B6K1z3sw2MX8+cHmkX43+uy+cFz5weaTfK7nyMI/584HLHf1+8fG3G174uBldHKRvg7gHeMDVPOFywuvejY4HaZbifuANV/N3Wn/upOtBeOHjyzCf+/vdPcwHLhf0rxqb6mm4CC984M65/qic4+sU8+cDd871l+v/vqfrTsyfD9x51h808jl+6Mb5dq5xXnjCPac/aORz/7IJX/zhckH/d/l5+q+9/L794l3qt+MewPniD/ec/mHJjzwHOcInrub1ZvS5Slfzn/ZVbuD88o17Tv9byZX7XuyxnMF5twe45/Rnq78vqTEP7/YAlzvRX4+P0tUycod/XB17U3/ZS9e9n3KHf1xtP86qzse03OU93ydVzpWXeXjkFZc70a9zflxtItf5wdU8/R59PkyXrfBi7j8aB+Xn92PO5lhXf49SYxrzMS9cXuj/ao676XJ3H5oXLi/0G3X+uudqELlufrjaHKuqM0u/W5EL5oerzfe8kXPiZRxzM0dcjui/q56OX39v0TYv5Hbwbe33FF00BzfpcpcXPOBqPp7Xn+7TZS/ymwfcfujjnuPvanXQS78G4Ys/3D7JE1ztdberl1lqDOZyhE9czfdzfXqQ+rPwyCsuR/SP1zkPLieRCzzjar6Xw2YnXQwiF3jG7as+7jl7MGvs76efncgFnnG1PdjPqfN0vLsf+MfV9uBuPThJ0513vnG5oN9Zf/qepuPwy+tt433+uj+FL57uG8/PqdGdO//84GqeOuvT/XS0y3Ue8KPmRfm5zbgHcM/xh3vO/95Z3T9I02nkCJ+4mteXYbNK57t84elutT/Kt0XkCz+4mqf31folvd/lND+4mqd1PThKFylyhwdczdNRM+fKxS6H5Ayu5g1X8/pn1f6YFoPIHT5xNd9/Vs/99HETfnnF5ZT+z1H/sfz/mr+54/JFv7NqHqazdsyfD1yO6D823j3kLQwvfODyRb8zXB+l97PwwgcuL/Q/jAbddL67B/jB1TydFh/nu1wwd9ye6e8N27N0t4zzzwOu5uN5uKnTx/nc+TdvXM3H+bD8npJFnH/5j6v9PrqnUf8mnc/DC0+4vNA/KnlwNggvPOHyQv+l8a6X5pvIC35wNX/N1WqW3k/m8oIfXM3f0SjnwZddrse9vuVq/urRl0E624QXnprDD5102ovzzw+u5mm/+rufnsbhhQ9cLuhfDMvvUdmdf35wNU/v6/5JOpvH+Y97esvVPP1o5vM9mcX8+cCdf/0Pq/L7GybhhQ/c/skBXO11n0sevO+HL55weaF/Wv6eW2+RPZy+S5/nkfc4j/zhnpP7uNrr/tS9gzRpR+7s7u83ro49WOW8+TEL73zj8ki/Uf0dpdQOv3zj8kj/cvj6+2TCO9+4PNL/0sy5MlmEd75xuaNfrQ/30mkKv3zj8ki/V7yuW3N+ee2X/Gi35/ZYnuDquNe3XM33frP3mCbdmL+54/JFH7fH+pMq58pJK+bPBy539HF7r/+l5Eqaz+VL3N9brubvulF+z800vPCEyx39H3XOldOdF55wuaP/WL5/+qMducMPruZvWJXfozOZyx3ecDWvwyr7ay/DI0/txsNx+X2i8kX+4/ZSH4/ntr+PtFdnT6f92EvecDWvdaNxn0764YWn4TDnTerP5Q4/uJqnuuRKaxz5Evf3lqt5qpqjg/Rpdw/wgKt52h8dDtKPXuQCP7iap2mj/N6ezVxe8IPbV33cc/xNGjk/ltPwxR8uX/QPhsvqX188nYyyjx+D8MIHbi/1/6wa39N4FnnBD67m72KYc+JPmssL3nD7p497jte7xtNzavUiL/jE457fev2zHu2nw8XP9mj0LnV39wYe98PWM67mG/d6r/u8zvl0Mo6c4h9X24O71Yec1IPwy+t1I+fHshe++MPli35n+OclNSfhkVdc7ujj9lu/GvWPyr8nv3zvNz7upXoz55dXXL7o4/Zbf161PqY/4/DL67JRfk9RO/KFT1zN63id82C8uw/MF5cX+qvGh/J9hJizueNyJPqNl4f0ezPf5fjb3HE5ot8c/jlKzUG9y/W3+f6p+900nsTeyAfcnM0d95x+r85zrLtze2OuuDrmvmqVz4uMOZs7Li/0V41Up78p5m/uuBzRx+2lfj3M+VF+3/Q2R+Q8bi/14/ntc37v9E2zVz5vZi53+MTVfB+sDu7TrDOXL3ziar5T9dJLv/O/9zZH+MTtpT4e9/x2Dz6VXGn2anspZ3C1vcDV9qa9/naQRtPIJ/uCR+5s9+Ok7EE1jn2wB3vD/U66yvm33e/dPfHGebcHuOfi/UG13k93s/DL97zK/v7xyN+fUe8kVWkuL3jD1fz918j5MSvvN95yhDfcHuvjnuN1r3qep9/d8MXT0TD7aHTCi7l/KX/Pdribs/ni7gV9/LTw77PoV3X3IN3MYv584PJIH7ev+t0qe7rchC8+Oqv1KN31Y/584PJIH7eX+rdVzqGDbvjiD5dT+ri91G83e0fpphV+ecXll/5plf1dL8Mjf83h5mO6X4Qv/nA5pT+ocg41NrU84hNX843bV6/70+w+plmK+fOB20v9byUnLgfhhSdcjuj3Vi/l9yrH/Pn4VeU5vm/HPM33v3KOZ+2YmznicW9s+/Py52FXnZin+eJxP2z7x1U+3/f9OOfmitszfdxzfPwY5jk2FjFP8+2v8rnvpcjr/jD/M9e4XNB/v+7epOt2zNnccfukPx3m8z1dxpzNHXf+9b+Xc3+7y28ecDVPy8Zjfl/YquUCP7iav8ko58SgO4+c3vrB1fw9NT4O0tU4vPCEywv9SZV9nKXwwse0kc/9alI7/zzg9kwf9xx/x418vnvLOP/84Gr+jurs47oXXnharA7y1/3dOM884GqecPvqdeerfO5vB3H+ecPV/D2tHvL7vxS+eMKdf/3b0bf99K0fvnjC181v79LXQeQ6rpb7eNwP2/+9D1XnIF3OI+/5xNV81439Kn/9EznCM662B7i997r8RnuUVr3wzve3Rs6V1iLyhWdczfdZnfPmahB++cblkT5uv/WfV+/30sU0/PI9X+X8+NkKv7zi8kX/pfHQT+/n4ZFXXO7oH9c5P6abmL+54/Ilcr6xf5gmKeZpvrh91V+uVg/pqRVzNndcjujj9lV/2Mj50ZpHjvCDq3m6W/e66XK3r+aNq/loDt+Xn/eP+fOByx39P9Vmln5Od/ft1gcud/TbjWWd3k9j/nzg8kV/r/qV39cPKjniXgiuHv7aK/VFyZW8L3zxh8f9sO23q3f3abK7B/h7rla99DSP+fPxY/VY/v5QzN/ccTmi/9w8Okj9Rczf3AflHJ/34zybK64293fV30462eW6ueLq8LH6s58e+rXzbK642tzfrRbVv3M2X9w51//V7J6ki3Gcc3PF1eb+ZZjP8enuPJs3rubjw/Bpnp4GtXPOA67mCbd/XncxzOe+NQkvPOFyQT+fnP10lCKnecOHJef/a0Xe457jG/ec/72rRvm9g7t84R9X24NPw5wr40XkC/+42h4clVxZdsI737jc0W83fuf34/3wyzcuR/TzhI7S+Tzygn9cbQ9+lPw47UWO8I/bb33cc/bjS8mP1A6/fOP2Xn+2yrnSGkS+8Iyr7QHuPHjdQ9V5TJNN5AhvuJq/YZXzY9wLXzzh8kV/VHJlmeIe4AdX8/eh8Tu/j+yFF55weaT/eZTz5mx33/KEyyP9eZV9/JiFFz7Gwzzf/K9tzuZ+W+bV6sXczPHXKufH8bKSI/I5uLrK/8z1fqNzkya9mLP54nJE/7rkRL2szdN8cTkS9/Eq58RyVssL88bV5t5c3ef3fd2Yp/nickT/pJz7Xifmab64XNBfrd4P0kn7n3v1be64869/Xc73rF875zzg9kwf9xx/D42cB3ftyAXecDWvv4eL8ud+cQ/wiat5/W+dz/3pNM4/b7ia1+Xq3fd8q9fOOW+4mtfbKp/75SDynk/cXurjnuO7V+Vz32hXzj+fuJrvefNoP/XK+/yj8nkNcQ/garmPq/nH1faj02iX799EjvCPq+3H7+pvla43tb3nH1fbg+fqT35fmSJH+MfV9uBh+Lv8+WHcA/zjantw1sy58mMZ+cI/rrYH74Z7e6la1PKFf1xtD1IjfUy/2+GX1+OSN41NeOQPl0f63xo5V8bLmLP54nJHvzV8/T2yMWfzfd94fEh388gLc8XV5ovbP69Lw5wr7+eR3+aNq8190ex200kn8sW88bift3PvlVyperV8MW9cbe77jfyu+Peilhfmjav5GA9zTuT3BuZs7rgc0b8sedHrRl7I/+DbetrI/8z1VcmJcTe8/OPvlcsR/cNh+T3fnfDFHy5H9D8Ps4+7cXjhaTPM5/79LLzwgcsF/dbo80E6HISX8LHlzrn+j0Y+xzfz8BI+ttw51/+8yuf4Yhxe+MDtpfOOq73uYpjP92oeXnjCnX/9q3LOswf757zjaj5xNa+Pw85Jqqe1888bruZ1WM791ay2l3IAV4fPLVfz/b3cA3fdyAuecbU9aK1+5feF08gPeYKr+cfV9uPzOud8dz7/Ue6L0aZ2b+DugdiLLfecPu45+/RzlXNr1ok9sTe4XNMfNfJ+nLdjT+xH1cj5tJpWcop/XG0/ZiWPWrt94Pt91Sm/16uWOzzjar5nq+z1qht++btY5Vy53YQvnnC5o38w/JXfp0/CFx+bRjt/fT+NOZgLLkf0Z6ucE+fzmI954XJE/3eVc2I1iLmZFy5H9OuSE387MTdzxOWL/vGo/J7wbszTHHH5oo/bD/0/5c89LhcxZ3PH7Y38wdVed1vy5nYe8w9PWy6P9Lur8j5yEPcAP7iav3HJi+H0Rl7Ifzzq8nVDrrvDnBPXrfDIKy5H4l5vvNzn90/hkVdcXuhvGuX3infDI6+4vNC/a+Rz/3eXE3IAV/OMq+3BtJn9fZ+GR17fN/YG6XJ3P/C0Wq076ccg5s8H7pzrH72+z+tV9tW5xtW84Wr+Thr53P/jiydcLuiPGvncX4/DC0+4XIh7ffXyPZ1tIhf4wdX8HTQe8vv9ViUv+MHV/C2Lp7+t2D/ecDVPy/Xn/TRItTzmB5fz+ni7/vwuDbrRx72e7+NhzqHpIvKbZ1xtDz4M1+XvkUZO8Yzbb33cc/ZjtPpT3qfGPvA9KTnUmNzIKT5xNd/1qlN+7jw88orLL/0vjZwrZ5PII55xNd9fSt48LSq5wzOu5ntVvP7d5Quv01XOiWkv7gHzxtXm3i95cLKMeZrjtOTBshV5b3642nxx++d1F+X853k6/+aNq819vep0y7zM03zxyIttf1J+3m3SiTmbLy5H9MclJ56mMWfzxeWLfmu1KH8uGLmwO09vXM3Ht5IH/RQ5ITdwtZwPvq2/lnsg18uqfZMu5uGRP1y+6OP2Uv9slfPjZBw5wjOutgc/V9nfMoVHXq9Lvv/jkT9cjug3G82DdDwLX/zhkQvb/l0595Nd7vOHy4Xw2cjn+6ZfOee84WpecfvtdR9Wv/P7v13u84rbb7mBq71uUPLiH++8tqv2SbrohheecPutf1fyYLzLfZ5weaH/p+TBcl7ZY/mA88gr7jn9upHzozG+kSM7n29czfeo+bn8fpd6Psr53x/EPYDzyzfuOfcErva6v8PX31MeOcU/rrYfD6vsddYOv3x/Lv7u5uGRv2HJnXa6kTu84Wpe+yVvzmfhi7+X4fNeGi/CC0+4PNJ/t1p+TMtp+OLjV5XzozG4kSM84Go+Pg/zuT9dRi6YE642r3er9WGaLSvn3JxwtTkOyrm/m8X5Nz9cbb4n5dznudkP+YCb826+b9xz+tNGzomzTszZ3HE5oo/bM/3DkhPjceQID7iaJ9w+ed2nYc6P5SDuB95wNa9/GuVrhH545A+XL/rH5T743I28kP941OV+yPXpsF1+LjByhH9cbQ96Vc6J2aSSI/zjantwVvLgbhLe+cbliP5ZyYX2Mrzz+lBlH19255+ncbVX3jVW5mzuwyqf12n+unu7f84vbv7mjntO/+8wn+/Vbs7mjjv/+l/LOf9n/ru5v3HnX/+unPsfKc4/D7iajx/l3M96MX9zx+WF/nyY8+BuEHM2d1xe6F+VXPhn/nzg8kL/faO5n3rt+mvJ4d4k8htXy2WcR15xz+nPS97U8/DLNy6P9K9L7lxswjuvH4a/y58L3sgX3nA1r99Lfvzd+eIPlzv6fxvto/RjHPnCJ67m9WeVc+J6E774w+WI/p9hzoO73j+58OYNt8fR33LP8T0v+ZE9yhE+cTXfm2HrMeX/KuffvHE1H7h99bpllfPgouTaWy7wg6v5+1y+T/DUuZEXvOHhcetvXHI/e5EX/OBq/npVzo+TTeQIb7iav035+YjrWSVf+MHV/GUP+f1iJ7zwcV9yor2I+Zs7Ll/0X3Pi+3gmR+R28G39muu57q7y3KsU8+fjXbW6TxfTmH/42HI5oo/bS/3vJSee2jsvWx+4fNGflJzI85Yju/v7jat5Oit5cDgOL3zg8kK/O8zn/jrfp9tc4AdX8/Sp5PuPzb/n5c3TlssL/adGzoPlzgtPuLzQf82Df3zxhMsR/ZNhzoNqEr74w+WFPm4v9XvF00U/8iO8bbma14u39+s39lI+4Dzyinsu7vWSF//45RWXI/r35fPSuq16f9h8l7qTuDdwtfsA590e4J7THzVyDl21Yh/sAS6n9EeNnDc/lpE7/OOxD9v9wJ0fr3tXcmg5j32wH7ic0n/No4/jmTyyF/j/vV/Ie/Oz+M5f/fEee7PKvs/b4Z3v20b2+rQJv/xVq/I+sRt7LH9wNW+4mtd5yZWrXd6bK64295syrx+zmJs5Nhr3D2U+csSccLU5vubFP3MzL1yO6L802t2U/6vkiPnh9kkf95y53zaey98XjTmbOy5f9FdVzpWn5Y184QFX8/RrWN4/7ryY+7iRc+JoPpMjch6Puvw5cK43jdZNuhpUcoQf/B9fr57+lDz4MQkvPOHyQr9flfeJs/DFEy4v9F/P/cfJTC5Ezm/5/93b2d/n8r7vey+88IE799FfPQ/S+TTmzwfu/OsfNP7k9/eL8MIH7pzrp6q8L9x54Ql3zvV/lD/f/ccXT7h9da5xtdcdrvL5vmzvPG794c6//vvG6nv6sbvn+cPlQtzrr+8Ld774w+WF/uv5/8cjf7hc0MftcfRLXg9S8fguDcaVewBX8/zP86+1Pfi0yrly3g+/fONyR/+ovL+8md3IHZ5xtT1oVTlv/vHLNy6P9CdV9rq/CL+8/ljl/Lichy/+cPmi32/k/DjphC/+cLmjf9N4fb8fvvjD5Uvc3yXf//HC02nJg7N25IL54WrzPSt5cDO5kRfmiqvN9+Pwvvxe2MgL88Ptnz7uOXO/qHJO5DnbP7mBq3nA1TzdrXKuXOa92eYLD7iap+kw58fJJvKFB1zN00PJj+Uk5s8HLnf078v7x4/TmXyJe3rL/+9+zv/dlyVXDluRL/I/uLr8M9d3JT/OlpEjPOP2Uh/3nD24K/lxM76xl3IGtw/2APec/n+v7x933vm+rrLX7Mde8oyreW01PhykfivuBz5xNa/LYc6Jk0XkBZ+4mte9kgfTcdwPvOHq8Fre3z3tPPKHyxF93H7rX5f8+Mcvr7h80W81WifpbBoe+cPtsf5z8XfTv7GvfOJq/k5e3/fvfPGHyx193N7rz4fZ6/4y/PL6X5XzvT/P71Nz/vf7cT/g/PKKe849gau9Lm/2QTrZ3Q/842p78Knk1z/e+cblWryfKDn1NAuPvN6U96HPO1/84fJI/0vJnbNe+Aqv5fsLN93wxdPs9X1kN/bPvHE1H79KjuynmRzhAbev+rjn+Os3ch6cDGKe5ojbP7mBq71uXPJgOriRF+aK/3M/v8799X7Ic5YX5o3/3/2c63nJied25IV542o+LqqcE5NW5AUPuJqncXlfOWvfyAt+cDV/vxvZ0z++eEolD/Y3MX9zx+2T/uUqz/ekG3M23/vy/nHQv5YX8j/4tv5Vvm7IdbXK53vaj/mbO+786/df3w/OZ85/3N9b/n/3fJ7/orwffO7E/M0dd/71l+V893Z5be64868/L+d2trlxbnnA1Xy0qnxeT3fz5wN3zvX/ljz+3drl99bHYzmX41bMnw/cudX/Xd7f/+OFD1wu6D9V+XxPezF/PnDnX/81X/P8nXN+cHv2f3n9j0f+luV9+ks3zjk/uJq/g/I5x71x9a3kdq8b+Y3zxR8up/Vxr9ffNHKuzJY38oVnXM33YZVz4h+PvOJyRP9DyYvf7fDLNy5H9HH7rd8Zto7SeHff2gNcXug/rHLedAbXcod/XG0/OtXTXpp2w7s9wOWL/mvuPy3CO9+rkusvvfDLKx73w7Z/uMq5MpvH/M0dlzv6w0bOiX/mbO64fNHvDR8f0u9OzNN8v5fzPZ7G3sgB3DzNF/ecfipfD3TGMWfzxeWR/qDkxUUn5mm+uBzRf82Jp+VMjvzffZz5/93DT+X9as6Pl37M2dxx+aL/o+TKbBpzNndc7ujj9k//Xcmb/+bXcn+v/DPXuDzSvxnmXPnHF3+4PNJ//T7BsjuzZ/IEV/OMq+1BXWXf3UHkAf+4mu9N+TnyzuRaHvGJq/melby4aIdHXnE5ov+aE3mi/3dvZ6+4fNHvlJy4HYRHXnH5on+3yp5m4/DF33459/8twgtPuFzQ/7PK5/50t6/yAeeLP9xz+q/fJ1j2wiNPm0b20e3m923N8nOZN/Ie54sn3HP6e1XOlc70Wu7whqv5SyVXLlrhhSdcHum/5so/XnjC5ZF+b/hnlG4nkTv84Gr+9krezHrhiz9cHum/L993eLe4lju84WpeDxrZ3+kub/jE1fy9fv9gOZjJF95wNa+4Pfa6g0bOm/x2jBc+cDml/3G4eUwXm7gHeMDVPI3LnyvebGb/dw9nH7h80R+U7x/f7u4DPnB5of9f+Tr/uhPz5wOXF/qdVc6Dd8vwwgcuL/S/ls/J+McLH6vX94njmKf54vZP/7D8XHhnEfM0X1xe6A+HOQ8uUszZfHH7Jzdwtdcdl897O+xG7h9XD3ulxuWL/mse3LRm9uz/cj/zuM+3/nDP6Z+X7wfc7nKEN1zN67Tkx7fWjRzhDVfz2i1/7/TdJnzxh0eObPtXJSf+8cgrLl92nsv7xGl45LVf/dlPKf8bbHOBN1zNa11lTxfL8MXTt/K5X3n+9k8O4LzwhHtO/zXHb9qz/8v77GO+yuf+dhnnnwdczcdjyelvKZ+jD+/St/mNvMfV8h1X84ar+ftS/l7pu9a1fOEHV/P3WHLktBs5wg+u5u/o9X3lLPKeN9y+6uOe43tc8ia1ruUOz7ia700j58rFIvzyjcsj/e/lc2eee+Gd19d8v+nM/u9+zl5xuaP/p1qWnysPv7zi8kj/a/l7RO86kes84Go+cHvsdR9WOYdOu5FH/OBqnnB773Wv31eYLsILH7g91p+WnEid8MIHvrsf3vqfSl5czGP+fOByRH9cPnfsuR85wg+u5u81J6ru7P/u5+wJly/6+8PXP1cMLzzh8kV/XP5e6X7v2p7xgKt5GpTc/2fO5j4v+fFtfiX35+WfucbVB438z//6weWO171+v2GawgtPuH3Vvy258tS7li/84JH7W3+TkhNHsxt5wQ+u5u+0fA7N8zjygjdczR9uv73uNUeq3kyO8Ib/3/2fvX4uPxdy2ou84A1X83pR/l7o70F45K8a5jzI/7v2Um7gaj5xNd+3JT++LcIXf7h80X8Zlvf9rfDFX6rK+8Vx+OIJly/69yXnjyY37XJfHI3j3sB55A/3nHsCV3vdtHzuzPPufuDvNV+q/uz/7u3sCZc7+uPyczqng8iXXc6/cTV/dfn7SL+n1/KFN1zN63qV/f3jkSfcvuovyud6fliGF55w+aL/+v2GaTt88YfbS/mDq71uv3w/4mkWHnnF5ZH+Tflcn+d5zJ8PXO7ov+Z6NZj9372dfeDySP+m5PrpNHKEHzzu7a2nZfm5wt/zyHt+cDVPh8M893/mz8fvkgcf0pVcMG9czcfr9wMuuzN7Zt642tw/rcrPjy+v/8n31/nickF/UXL8eRnzNF9cXui/nv9qPPu/ezjPF5cL+h/K50v+N4hcl/O4/dP/U/L7dBFe+MDlhf5zeR/5O4UXPnB7Jk9wtdedDvO5/9yNPJAbOI+84p7Tfyw58aF1JS94xtV8v37/4LIffnkdvv59gNa1XOANV4fv8veBf7YiF3jD1by+5ns1mckL3vD/u8+z1075HMl/fPF3UPLgNIUXnnB5of+hnO/fnfDCx6K8j8/zfNfI+Zz/KddxNT+4mo91+dyHD50recEDrubjeZjz4HIcOSE3cDU/uJq/6/LnhVU3fPGEyxH9l5ITt93IC95we6yPe47X11yvprP/u7ezP1zu6DdKvrwbh0decXspf3B13Pclb07bkTs842p78F+V8vvKfni3B7ic0m+VvOn0wiN/uJzSf/1+w+UscohPXM3fsnyfoBqEF55wuaP/oXy/4HYQXvh4PffVfPZ/93CeOy4v9A+rdX5fOI05m++0nPvJ7vybK64235Py94SW02t7Jgdw8zRf/J974LV/UP7eZ2cc8zRfXF7ov35/53IRczbfaePp+KnbiXyflt/30m1f4er3+X3B07fNJR45sn3du0bOiWoW8+cDly/6vfJ5YbfT8MITLl/0X/N6uJj93/2cPeFyRL/XWOX36fPwxR8uR/SXVc6DyTg88ofLC/2b4m+6DI88HZbPdU6zmD8fuPOvf1e+73uZ4tzLAZwv/nDP6V+V3xPyjxeecHmh/2X48j1V6do55wdX8zcsnwdzu4zzzw+u5u813/Nd95r/wzRzP+Dugf+7vzP33P/dE5n/372dfR9XT/n94/JKvvCJq/lur3J+TGaRI3ziar4fy/eVp+24B3jG7bc+7jn7cTxc5/eX6Uru8I+r7cdelffgshX7wPes/L6X517kDp+4/dbHPWcPJiWHqva1POIfV9uDafm8mdt25BH/uNoeDFdP+f1mK3JILuF88YR7Lvrl534my8gp3nA1f/slVy774YWPk2pV3ifG/M0dlzv6r98vuOzEPcADruYJt5deV5XfF/LcDy983JXvC9T9a/nCA67mY1H+XtHdIOZv7rjc0Z+sUn6/2I284QFXm/tVyY9JO+Zsvrjc0X9fcuVbK+4B98KX8ve9Lqcxfz5wOaJ/9fp5kYMrecEDruZpusrz/dqPOZv7bbUq7wtjzuaOO//6f8v7v7rcO2/nnAdczce6nOPTWczZ3HHnXP96mOf+e5f35v6nvI8768U8zRd3zvU/lPOa52xvdvn+xmP+Wx+45/RPq3yOL9O188wDruZp8fq5nvlfb3ue+cHVPL1+/+XreCan+cE7Vc7zr9O4B3DP8Yp7zv/e/SrnxPMs8oJPXM3359e/R5TCL6+4vNDvvP754SY88orLEf3b8vnxv+eRH/IE590e4J7T75T8OBtHjvCPq+1Hp5H34EMn9oHv25ITV91recEzbo/1cc/Zg9Xr5whsruQL/7jaHvwpv6fleZff/OBqnnDnwetOS67UnfDCEy6P9I+rv4f5fEa+8IOrw19jVX6PSPji43vJj7NZ5AgPuJqP5irnR6cX8+cDlzv6z2XuV+OYv7m/L+/jV72Ys/ni8kX/uczrub3Lke0ccXumv6hyfowHkePmiMsd/ZvGc34/2LqU4zer5/x+Pv8T3+aL/nn53JfJLj/kBs4LH7jn9P++fi5k+e992yd5gvPFH+45/brkx5cUHvnD5Yv+5+HLLHUGl/ZylxtvnEdecc/pd8vnB1wtwi/fuD2WP7ja674M/3by+4nwbg9weaTfLr5v++HdHuyVrwfGs8gLnnG1PaiHm/y+sB1++cbli/6ikX1PNuGd14/F33IaHnl6Lvn9pT37VH6e579+3AM4LzzhnnMf4GqvO6qey587hkeexq9/76gT8zd33HnQPymfN1ltruRF3PdbruajWT53+HYaeylPcDU/uJq//6r2URpvIl94w9X8zRt/8/v6zqXc4QdX8/e3/L3Ss13u8IareT2qNvn9Y7qSR3ziar4H1XN+v76I+fOByyn9nyVvrseRQzzgap6q8rkwdf9KjvCDq3k6qsrvb0nhxdwvyrk/6caczReXF3Hvrv4epf1e5Lp542pzx+2f132q9ub5fzdygQdczceP8vnBD72Yv7njckEft5f6J41Nfn/fupQLPOD2Tx/3HH/P5X3o9SJ88fRluHf8dNiJe6LX2NsrNW7/5Ek8v6297k/5vJl6Hn55xeWL/nj4Un7uPPzyjdtL+YOrve6hvO88nETu8I+r7cd9I3vdH4dfvk9WOVfOWuGXV1zu6N+Uz4W8nIUv/qavvw+2H174+FQ+p+G6fN39tq9yAOeFJ9xz+v8NW9XTp2544eN9Of91O+Zs7rhc0L8s/x1305iz+R6U79McLmaDKuf84S7vcbUcx83f3HHP6f8Z5lzZn8X8+cDljv7Pqvw9od09zAcuX/QfVjk/LltXcoQfXM1fXX5/7NP0Ur7whqt5xe2r150Wr7Nx+OWvP9x/SS/9yBfecPunj3uO76PyeZPjSeRL5PyWq/m+K3lzt8sdnnG1PVg3nsvPm8f8+cDliP5zlfPjfBnz5wOXL/rvSh5cjcMLH7i80P89zPN92sSczX1Rfr5/trh2ns0bt3/6uOd4+rraP0ov45i/uZ+/fl7MJs6/eeNqc39q5HO/6Mf5N2/cnunjnuNjr/z+3v3Opbwwb1zNx2H5e/8X3ZizueNyRH9d7ZXPFZjK91X5Z65xOaL/+fXzglN44QmXL/rrVc6PVf9SjvCGq3nF7Z/X7ZWcGHTCI3/fG+9m6WUWvvjD5Yg+bo/1f5XPfTkZhF9ecfmi/77kxWQRHvn7sCq/93UcvnjC5YX+j/L3+y9m4YUnXF7ob6p87r9PwgtPuFzQH5fP/73e3bc84XJBv13+nvNqHvMPT+VzFr5PruW/HMenhX9fRh/niz/c6/VPGnvP6WUZXnhqlZw4WUaO8ICreeq9/j6obnjhCZcv+p+q/VFaLiK/+cHV/N2Wvz900QovPOFyRP+l5MfH2VSO8IOr+atKflwvr+QIP7iav0/l98Ku8vvTbV7whqt5Pa/2+umlHXlh3riaj175nMcfvZi/ueOR6/wM9w/T2TxyIe7dLVfzgdtLr/s6fPeQlp3wwgcuL/T/llyflq873nKBB1zNU6vkxMfFVF7wg6t5eip5MOtdyYXI+S1X8zRotGZpPb2UC/zgap6uG606/R1EXvCD2z993HP8TUp+/JiHF57wuAe2/Vn1/vipv5nK/evG+71S4/JFH7ev+jeN7O+sEx55/VG966WHSeQ6b7ia1175e/n9ZXjkD5cj+vurnBMfN1N5wSeu5vVDeT84W4RH/nA5on+x2u+kunUpR/jE7bE+7jm+fzb299PdPDzyt2i0y899hBeecPmif1O1q6d+K+bPB25f9f8Mc06cz8ILT7gc0b8u/90Pu3uYJ1yO6J+Vz1M4Lj8fl3P/eB73AM4Xf7jn3Ae42us+rHIONbrhl1dcTul/K59HfNMLj7zizoMcw9Ved/f6e78mkVO8Llc5h+7a4ZFXXE7tzmvOm9NZeOQVl0f6VePDS2p3wiOv7fI5whfd8MUfLnf0cfutv1jlvHkchEdecXmk3x2+76fGeCpfzBtX83FV5nuziDmb77rkwXh3D5grrjb3dSPnwWIcuWCuuNrcv5TPfTztRF6YK64295/Vh6P0vj+1T/IBV/OAq3n6r/F+ni7mMWdzX73+/vYU8zRfXC7ofxmW3wW2mMoF88bV5v5YPvex6seczR2XI/qD4cfjp94s8v1b4+NeqXF7Jk9wtdd9WOWcOJnG/skTnF9ecc/p7zdyrixS7J+cwdX842p7cL7KudKbhXe+cbmze39wMEvvJ+GdV9we659V7wdp2gu/fOP2W87gaq97X36P+PUgvNsDXL7ofy3vj1ed2Ad7gMsd/YPXzwlbhnd7gMsd/e/DTvXUm4d3vnH7rd+vDr6nk929wWu3/H6jX/3wyBNu7/V/V6+fy3ndLvn/ZRr3Bq6Oe2XLeeQV95z+cvj+Ob1fhEdeF6+fU78MXzz1yu9vv95c7u75Nx+4PNI/qT6M0noS8+cDl0fRL58XXA9i/nzg8kh/uGq+pNYy5s/HWT5/2VvMnw9c7ujj9lX/uGp/TL+W4YWnVOVced+a2jM5g6vNFVeb+9+qXdItckgu4ebPB+45/VH5fe+zScyfD1y+6E9XBw9pnd+vbnOBB1zN01X5/P46XckLHnA1T+NG8yi1WrFPcgNX84areb0r8z79J0e2nk6H7fJ7xyMX+MHtpT7uOV6fq+zvoB8eefq06tyUr7t4MffGKp/77iTug8Yw/7M7nuJyQf+6cXCfZu2YPx+4XNCfDw96aT6IXOAHV/P0Z5jPcXcc55wfXM3TaaMxS3u7c27uz+X39Z2mmLO54/ZPDuBqr7upPnTS+S6nzf1dOfeP85izueNyQR+3f/o/qs5JupqGF55weaGP20v9ZpVzojsNX/zhckR/WX4v+M08fPGHyxf9ZZnfPIVH/nA5ov9h9fq5nOGRP3xQPv//cBr3AC7XvQ6P+2Lbv6g+Pqe9cXi3B7g80u8OOwdpMgnvfC+HOVcuxpH3PONqe/BxmP09dqb2lU9czfftMHu67oYv/rrNzy9pM49c4AdX87dX5Zyoytdbb3nBD67m77nkwc9dvvOEy4u4v6uP/bS3iLmZI26/5Qmu9rph+T2Bk07M2dxxubPL/5wfF+3IdR5we6mPe46nz43GQ/ozDS98vAxzTlwvruyf3MB54Qn3nP7n0eejtEmRL7zhav4+NT7OU7UJXzzh8kj/YJVz5ecm8oUf/J98f/U3H3bqtNcJL3zclPw429235o7LF/2/9eHx02B6Iff/jg73ngaTi+DbHIn+ltvLyJlh9jSdhy+ecHup/61q9NKf9lSO8IbbV33cc3x/Kr//bzAIv/x9aX6apU07coE3XB1eVx/Lz+uEF55weaHfWzU76cc0fPGEywv9XyXH7ne5wBuu5jWV39N1Pg5f/OFyRL9Vd6unwSy88ITbS/08z+/Zf3jh6bTK/91pGvM39x+j8nuzytdzb3ls3vht+Xz+77MruY57jifcc/73jkeHz+l5ELnDG67mr1rlXBnv7m2ecLmjP2w0y+fHhBeecDmi/2fVHKX7TfjiCZcv+p3X3wvSDi884fJFf6/46CzCC08X+X1W9hleeMLlSJynVedjSp3wxR8uL/S/jw7L3xOKOZsvLkf00+vvfd3EPM0Xly/6l43mYTpdxjzNF5cL+i/DfI5/D2Ke5os757s8f+P2Uv9b+T29F4uYs7njckF/v5nPfWcT8+cDlwv6uP3TX5ScuFpETsgNXM0bruZ10ejM0tNiai/lCc4jr7jn9E/W3fLzPpEjfOJqvj9UOT9OZuGRV1zu6D82vxw/9ZcX7onH9Ze9Ugff5o7+r2HjPu9FeLcHuNzRfz/MXn/v7gG+r9c5P/o5D7c5wieu5vugzp4+dsMXfy/D7Ol6HL74WFV57tUg5m++uD3WPy+/j+p2HHM2X1xe6H8ddU/Sj0HkgrnianP/s+5VT/1N5Le54mpz3zRyTpx1Y57mi8sR/e76cJ6W45izueNyRP9PXX7/VvvqQ8nt40XkPc4LH7jn4j7YcrXXfVznHPo4Dl/84fZVXuFqr2uWfJp1L+2xvMLV/ONq+5G/3qhS1Qrv9mBWfx6l2xQ5xTOutgeXo/J7xduRR/zjanvwNDp6Se32hTziH1fbg07Jj7NN+OUbly/6/Wb3Y1q2wy/fuHzRP6y/9NPHZcw/fKy7j2m2iTmb46f158NUz2Nu5og7//q3608P6W4Q59xccbX5Lut8vk+XMU9zxJ1//VXz6Ci978U8zRGXC/rHdZ7H+TzmZo64vNA/qbuz9DCPnJAbuHmaL+45/S/rXp0a3Qs5Yt64mo/rdfem3P/mzwcuR/QX9fHx05d+5PVidLxX6uDbHNH/vv50n8bjyGv+cHsmZ3C11z3Un3rpbnef84rLHf39kh+9aXjkFZcv+s/1f+Xr+/DIKy5H9M9Hh4PyvoNHXnHnX/9q/bmTrgbhl7+v5feTr2bhiyfc+dfH7bH+QzOf+yrPebvHcgDnkVfcc/q/Rv3q6cs49ls+4GqecbU9mDY/fU8n3fAbvktOLKbhiz9cjujj9l7/v2aew5d+eOQVPx8dvUtfWnHP4Gr3B672v9eqvzyn98u4N/jH1fbjru4e5Hd5cQ/wj6tjb0afq3TVjn2wH7i80x81j0Zp1b6w9/zjavvRrvMe1N3YB75x50H/vv72kvam4Z3XRX24l0424ZFXXK7p486Dfv7//Zh+dcMjr/vNnEPvOzFn88XllP6m5NO0dSmnzBtXm/tqlPPmehnzjLlvuTyKeW+5fdU/a/73kNazmL+5H4163dc/z9/O03xxe6m/rL8d5ffNMWdzx+WO/qbM8ccuX8y3u+7N0q9l5MjufLxxtbl3RjlXDiYxT/PF5Y5+o845cbmMOZsvLkf056Pvx0+H7bgP6ub3vVIH3+aCfrvMdzaNOZv7bPRfL827ke/mjsuLXf/oIHV3uW7uj+uv+ev8VpxPc8XV5t5p5nN5Oo3zGfu75Wo+cHu2e91R/rp/EueZH1zNU3f9LX/d34r584E7z/qDUS9/3T+L/OYBV/M0bw7KzwX+c57fPOD2Tx+P57b+Ptf/lc99nzr/vOFqXu9GX+Zpvgxf/OHOv/6i/HceTq/+rnNufxpEfuNqeY2r+cfV9uOpPn5O7/qxD/YAlzv6uHOif1z3DtJkEN53+/HGnRP9H/VRlS56kTv2Alfbjy/rb6P0Z3IhX3b+37jaflyNekfpehL7YA9weaR/OxqVn0cM73wP6y/lc9ym8oVnXM33Y937mH6OI1/4xNU738f99G4e8zRf3N7rn9e9x3TWi3ma73XzKH99v8tpc8XV5vtt9PUh/WldyBFzxdXmu6xzfsz6MTdzxOWL/t16dJRedvskT3C1eeNqPi6beU75/rFPcgZX84OreXoZ5Vz52QkvfOByR7+17tfp3e4e4OOu7t2ks07Mnw9cvujfNE+On4btc/skN3D3wc36ZO9p2DqP57fP6f9q/nefvzoLv7zi8kX/ZPS1l9Is/PKKyx39d+ucB9939zOvuLzQ/9UcztLLIvzy96v5JX+dn8IXHwflHP9IsX/ONa7mAVeHv2Y+37+ncc75wdX84fbY6zbrnAfnrciFnbc3br/1cc/xXa3H1dOwE37524xyHlzOpnKBH1zN38X6eJ6eehdygR/cvurjnuO1V/57v7cuT0ffyuc/XLo3cPcAn7jn9HHP2YPl+vtzemlHTsX53nLnRB/3nL15bubcGi8iv+wLrrZPuPPmdZ9H36p0Oou9sjcfi+/fu/yyB43i9SKFX17r9elLavbDI6+4PNI/aOZcuZpM5QvPuJrvat0vf980PPL3Z/29n/6OY27mhdtj/fzv/5i/Ho05mMtg9O0wTcaRC+aBq83r03r4kJa7+9O8cHmh/23d76bpInLB/HC1+f4cnR6l5iTmZo64vND/0szzuB7EPM0RlyP6v5r9WVrNL+SCueJqc1+PBnX6m2Ke5vt13b95/X7zdp7mizvn+jf12fHToHceeT0623ut8e351z9bf71PZ/3wwgfu/Ov362EvPfRi/nzgzrn+Zf3tIB3PL51X5xSPc7v1hqv5uxv9mKXmIryEpy13bvVPRseD/PrwwhPu3Oo/rb91Uj0OXzzhzq3+39FoPy0G4Ys/3HnWx+2x/kXdP0mnu7103nF++cY9p3/TnFRPg8G5XAjPWx71dg/q+uv3dN6N888zrrYHw/p7+fnNC7nAM662B79H+b/v6/Sy1cw5/20SeY/bB75xz+n/Wp88p2bnXO7wjIf37R7M1v3y84Phl29cHunvNXPejHe5wzOutgf769EoLTbhkddF3T/K5yb2lU9czV/VvHhJnUnkN2/4zuObv4f6uPwe2fDFEy6P9CfNwcf0OLuQL7zhav6W9Uk/bSaRO+aN2+/ob3l44anuP6aqO5VT5o2r+WjUOW/G7cgdHnA1H506582vSeQOD7j908c9x99znT2dDcIXT/P64ih1FpErcgYPX1tPuOf0/5b55rzkhSdcHulfNwez9GcQvnjC5ZH+n/W4TpvdvcFHa5RzourE/M0dlyP61fry+Ol4EfdEVV/uPR3Pz4O7N7b9o3p4n79uiVzgDVfzd7j+0Uu/OuGFj0Y59//149zLAZwXnnDP6d+Ozmep0wpffDTqfO6nmzj/5o2r+bgbjTpp1o05mzvu/Ouv69P9fH//cy62PrZcLuh368FJqnfz5wOXC/r1aFo9HS9jz+QAzgtPweX9tj+uh99LfskL3nA1f0f1yTzdLyMXeMPtpT7uOb6/rfN//1H/ctocvUv9XtwDOO8732/cc/qL+uw5fRycyxeecbU9OK4HB+lyl/t843JH/7E5qtKsdSFfeMbV9uBvfTpKP1uRIzzj4X27B4P14CiNO5H7fONyR79uXr+k963wzutl/jo7ne7uZ/5w+aL/vR5/LO8v+OLpvnnWTx8X5/LCXHG1+U7qwWO62s3NHHH5ov/SHB2mm3Rhn+QArjZvXG3u+80fD+l2GvskN/Cotx7w8LL1cTkadNPJbs7mjssX/Z+j66N00N3Nf+sDly/6d818DiaLmD8fuHzRP12PZ2nZDy884XJH/6E5Kd8/Dl884XJHv24ObtJ1irznB1fz93N0c/x0NIkckf/Bt/W8ebP3dDQOHvm0fd2HUfZdLcM7r53i726XCzz9Wo8O0qfd/PnA5YL+bfNqlg7+vW/ffODOv/5T8/sgnS3i/POAR+5vPV3Vp5102Y1z77zjan5wNX9P9cV+vh/OnX9+cHX4K3kw24QvnnB5of9zPauejqYxfz4+r398T/Ui5s8HLi/0D5tn83S32Z0vnrZcXui/lFz7nL2sc573OpHruFqOx/Nbj7zintNfNC+f00GKHJI/uJpnXG0P2qNBeTpyin9cbQ9+rk/L5xGEd16fRxejtO6dyxE+cTWv75o5V242keu84Wpeb+u6/H7xyBc+cfutH8/zvt2DQf46Po3nkTs84+rYj/XkY1rMd3753nJ5pP97dNlPH3qRN/zg4Wvr49N6/JjfjUa+8ICr+XgYnR6mq82FfZUbuJofXM3f3uj8Ia3TuXzhDVfzl/99uuXrfr54wuWR/t26Pkr7m13ubH2cNfOcThaRIzzgaj6+15NZubfkhXnjMf+tj4fmtE4fdnlv7vm5mzRNkRfmjavN/dfo5/HTl0nkeK73nr68/vOVyxH9TfPHff7fDS/m/n593kvzaeS4+eJyRH+4Pj1Io3bM03xxuRD5P6pmqd2LOZs77pzH+RidDNKP3fzNHXfO9U/XF510vstvHnD7tOu/8Z2vN0+peb2f0u5c8ITbM/mAq71uOhqfpMtN5AKfuJrXX+t59fRlGr74C77NBf12M5/72TI88orLBX3cvuo36pwTP/uRFzzjantwVfKxu8t7nnG1PcDdL16H39en79KnbvTvmzfPqT2L87C7P9543A/bfcHV9mnZHB+U8ymP7Auutk9Xo4vyferYE/uxqa9HKS3DO993o/FRumrFPcAzrub7vr57SXuL3T2w9Ymr+T7MX5eXfOQrvNbTj+lnO3zxhMsX/WXzpp/arX9y/W1eLyU/JrscMSfcXurjnjPHn6OLwzTtRo6YHx7nbjvf1ujqIT2Nz+WLueJqc1/VOVeu25Hf5o2rzf13fXeU9jYxZ/PF5Y7+8TrPKf+byRfzxtV84PbG6/rN6Szd7u5bPnD5ov+nntXp/STyhR9czV9nnX2ctcILH4/1r+Onz4vI/cfRr72nz/Pzf/hbjmz7y9H5fZp2dr62nnA5ot8eXfXSUyd88YTLhbgv6tPyff+4B3jD1fwt17ez9K4X55YfXM3fj/pskOpNzJ+P4fq6k04XMWdzx51n/dWo3k8Prdgz5xrnhQ98dz+89f9rTk7K13+88IQ7//qP60X19HkZXngKvj3/+uv1+fd0ufPCEy4X9Dv15Tytdvc2T7i80O+t87017IcvnnA5rY/LbX181Lx4l0aD6D+Ofj6nd7PIHZ7xyOut7+t6cvD6fYXtfssZnHd7gHtOf7K+rtJkHt7tAS6P9J9H9Sh/Xb7Lna3vk9HkKJ+P8MgrLnd29/3vl/S3FbnDJ67me7/OuXLdjVyRMzi/fOOe0+82Zx/Teh5++cblkf6f5s9+eteOfOEHV/O0WE8e8/u48GLuV83rw3Q2ixwxV1xt7q26ekh/dnlv3vjuvn3zcb2edNNlP/LCvHE1H2n0+yi1ejF/c8fliH5zdFY+xyXmb75fmrNZOR9yxPxwtfmuRvM67U8iL8wVV5vvU3Nyk077kRfmitszfdxzfGzqh+OnT/3I/VzvPX0qc9xy+bLt/6yv7tP5LHIk7uktD49bf/vNqpf+tCLvecPV/N2PLg7S10n44gmXL/pPo/tZak3DC0+4XNA/qi8H6WZw4fzzhqt5/dqsO+lkHOefT1zN66a+20+/23H++cR398Gb1/06e5qMwxdPuL3U3zSX1dOnQXjhKfg2F/SXo6vv6WK+8xX+3rhc0Mftsf6H9c08pUXcA3zial43Jc+/zcIXf7i818flvz7+YZT5YBn91frXc2rt7nm+cbmjP1pPD1I1Ce984/JIH3dO9Md1XaUfg8gje4Gr7cff0d0oLefnu/cLb3uAyyn9bnN6lM9N7D3/uNp+PNd/XtLL7n7gH1fbj/Xoci+f/vDLd7Pk0NM0/PKKyyn9zehXP+31Y87mjssp/elo+pjqWczTfM9H9WE63c3THHE5oo/bY/295u1DehhEjpgrrjb3r+tpt3wdYs7m+zL6c5ReljFPc8Tli/67Mo/LXe6bLy5H9Huj+Sytxufywlxxtbk/Nxd12lvu7oftXHG1uc/X05s0XkaOmDeu5mO/fv09UZH7uS6/7/H8H/6WL9v+dbO6T5Pd/Pl4P7rtpYf2Lte3HnA1H5P6+iAdbSIXeMDVPL00H2fppRPnnAc86q2nj+t8vq9acc55wNU89Zv/o+rs2lJHljD6g/YFIKh4mShuoqIkiop3EkiiqKjNJuivny7p9ca5mqdWwZwztarfxi947rsiuWP/mnzfcermXt9xavx9t9667nV019wDO29wavy9F9PMZW3tH+cajkf8wXmc7ouNs8/9li/8iYfzT/9pvLh0t6nOPz7h1PjuF1XpPlbyi1c4eUF/MfZf5yR95Tee4dT4hpPzPA/+1prtufNE/fb4feu+U+0DewDnPJBLcGqed1rkB27W156wH3Byiv7l5nnh0kQ5xR7sjd/G7rWtfME/nL2nD9d9EPbjazy1z5vVPuC7N7bPlRopj/AJZ+/pw3kce7Aq5h13N1FO6fVB4NTsQatVHrnPJo+ae2HHm9cFuz3oFO+J+27uB+Z+Oc4/3Dy5J3eYK5yauV9vnmOXNXNm7nByh35v82qfE6s5M9/Dsc+PyUg5wlzhTe7v5t7b2Oc75ZoncxQPe0b/X8v/99/nyhHmCtecw3xPWsvcuekde0NuwJkz84XzOPp7rVXh2iPNmbnDyRf6k1Y+t/mSI3iAU+OjNd76/Ih0H/i6Y/UvvsuX0L9vPb2660R5gR84Nf4Oi9eBW42UI3iDU+N1MC4O3GmuvMAnnBqv+4V9XlctX/jrbOYjN13JF57gnH/6w9Zb380n8oWPXvHZdcu6Offh/MKZPz7gPI5+3soz+z465xw/cGo8tYp6sY6afMeHeDjn9OfF06W7SeUFH3DOOf0/45fSvUc6z/iBU+MJzr7yvEt7Pft3pfzGG5w8pw/ncXiF+/3Zc8OenndQrLfuq9l7cgaOd/YAzuPo9y1vHtrae/IHzj6wH3AeR380flu4Rao9YW/g5Bf9g+Jz7F6m2h/2Y9nK7XNHlEfsBZya/Whtvr9cPVFO4R+uOuzHU6vquMlU3rUHgZNT9OPx6sh84xffh8U6cV9LzZ/5nhTlh73OZZ7MKy3eYldM7jj/zT2649TMq198vLvXgfaMHIBTMz84NfNdj/PIXUeaJ3OEkxf0W63voauXmidzFA85Qn/V8vt+29yfmmPg5Av9QbHK3UeteTJfeHMPcJ5c4b4HmjNzh5Mv9M+Lcu7yVLmOBzg1nobj/bP1eHqrHAk5/4tTd6wWD/vE827Hr68unSpf8Axv7vOd7z+bj8HP/Rz84q9T+HN/kur84wdOjb9os5e7ui0veIJz/un/21Qjd+d0nvEDl6/gb9j67LuZ0znmXMN1Pwd/cB5H/6i16brnVXNvBG9w9pU+nMfhO9uUmZuX9+wxOQDHO77hPI7+sOgt1uNSHvH60Hq9dFkuj/iDkxf0o9a6dG+rX7mw8wlnv+nDdX+EPTja+JwflMp7/MPJf/rw09az/R2x+nCez97E4469H5Byir2AU7M37VZ54O57yi/2Ba79CXtzsflcuPz3nuz2oDXejN0ylV+8PozLoVvU8ognOPtNf7g5/HItd6s8whucOnhdbF467nqpPMIbnP2mD+dx+D4p7HPFm5yS11Yncdsm95kjnJyifzj2efPQ3AfMEU4e0R8Xn/b7PcoVcgPOnJk7nMfRj1pf727ZV77gAU6Np7IoI5dGyhd8DFuHQ9fqa/7MXTzkDv3nlt/3m1r7wbzh1Mz979j/V7xPtTfkCZwaD3BqPB1v2oX7Gmn++ICTI+oXy7l7nGr++ICTI/THmyOfEwPdA9wLvzi1/2d0ezP+eHWLtjzi6XjzNXAvTl7wAScX6L+1nu3zoHSe8QOnxl8yPvDnONV9gCc455z+qvUycpO+fOEpaW367nGiPcMPnBofJ5tu1z3VmjNzh3P+6Q9by8zNVspp5g2nxsd40/fne3Sr/QvnXTx4wYd4eBz9++LDPi/qjnOu+ztwavwNim3pXkt5wRNc90Dob+z7GsdNTuMNTm7Th/M4vML3Nv7xJz09L9nsb129kke8wskj+v+K5YH9nJb9Jn/gqnkdEHhzfnf7cdHaLNys2Qf2YNCy95Fv8h3fcPKF/lWxHLq8L+/4hpM79Metlvc9kXe8zor3jssGyhF8wnWfB69/i9p+j1C+8AcnR+gnrX2fHwPlCHMVpw5z/24tP+z1E3NmjuPxJnb5VDmt3A6cmvmetuz93weaG3OEkxf0J61l5PNec2OOcHKBvp+nz4NlM88wX/GQF/SL1nvprpv7k/nCyQv6yabO3SptciHMFU7N3M+KXuG2TV4zXzg5Qn/f8mBaKxeYN5x9og/ncXiaRvGZ5TR57Wv+CQ85sutfF/9e/T7KI/7g5AX94dje970tX/iDkyP0Z8XbgRsv7zn/eINT43Xc+pO7Vk+5jjd4U++8Lov3kbtp7mH8wTnn9M9b9nmAqc45PuHUeD0fH9rnv8oX/uDkAv0/5ukxki88wdlj+tMo8uc+0fnHT8Opd/5uN/8u3WIlL3iCkwv0k02ndC9NLuAHTo2/p/Fb10U95TWe4OQ3fTh5Th++2rzZ+zmon46Ptr9zHc/iocb3qrU6cJNaHhuvO04e0b8cfy/cY6rcwTOcGt/nrcOx+cMjXuHklPJ/s7L3F5BHvE6jk13eBI/4EyePQv9hvO64or5jX5XvgVPrXg9c93nwfT5uH/3OezzDqfGdFkeJq2vNn7mLh5xSP3D2nv66WH34U67cwQO88bLzNN58x+ZDecP9EbjujeANTi2vxcG7ey6VO/iBU+PvvFhF/kTLF/7g5A597+snV/CFv1/8f/184+/VLFLu4Oli087dWy4v+IDrPgn9dONfQW5TzZm5f41Xc///UjnCvOHUzL0sT31OpL/2b5cbDd/dB77uWP2Ln/2+L67HX68uzxtfwceoOBjY/cz8mTucHKGfjj8P3FWkOTN3OPlCfxod/5x75szcG/7nf/2yWI9s7swfH3Dygv7luNt30ybf8QHX/RD6aavVdVVbuSA/cPYs9OF6XPDaHa8y+/4CeYFPODVey3KwsNf1eMTTpPV16eZLnX/8wKnxdzm2z/0Y6PzjB85e0ofzOLzetj67bmzvA7DLc/IdTo1PODW+xVufey5yuh/u63j7O/fxDSen6C/H7uD3PYBnOOdB/cB5HPtx1eou3EMu7+wBnNyhn41b3ncu7/g+bPlceWjyBc9wanyX6fDr//u9y5lfPORO8C/OPuz2436z7fjXv3fsve6JwKn1+iBwavbmamyfO9LXPrAHfv4+h5zyCA/iTf3zz9XYfbhJW/Nn7ummG7vHUvNkvnDyhX5W/PG50tzDzB1O7qgfOPtKP2r5LfM+8IIPOHlEv4yG3kctL8y94cdhP3f9R7tfi77mz3zHY/s8kJ7yhbnCqZm7/x8u7Osu8oJ5i1OHuX+27NV4orxg3nDtf/Cxqs98ftTKfV93rP7Fz8J98NO/3uy9+ten8oInOPlCP9v8GbjnvuaPj9PN5sCNnM49OQBn/viA8zj6Rf3Xvy4c3DF/fMyLrX2Oq3IfH3DOOf10fNh39215wQec808f3uTBrn9fnvhzX8sXnsRDLtDftJx97qvOP97g1PhblYk/371m/8J5Fw813hoe6uB1stm7dHktX/iD696gPz4q7ecV8hi8wskF+uebTffnHg95jmc4tXwHPt5s9tx4qucV5anPj1w5gudf/Gfv6cP1uLAf5bg+cNdNvmsPAieP6MM5J/Sz8eHCTXtNToU9uE9PdjkU8gjPcNVhD75bbuimbeUO/uHU7MEqvfj6+e8I3vF6t+nY+40pv/EGp5bvon/0+z7HH5y9J3/g1DyvSE/93PuaP3N/LuoPd9PW3Jjj9fgw9v+dmhtzhLN/ypPAqXnefXr8kx/kCPMWV72be9fy4zFRjmjegVMz91V0MbTv62tvQp7ANf/gQzw8TvexvW4qRnfkDn7g1Hi6bvX93JeaP3Nf1IPCfp6pOYe5i5Mvof9a1HN3m2j++IArR0K/Li/P1tHyjtyv68uO1b/4WbgPfvo3xYH3NPiV9ztP95G9H3BPXvAhHvKCfn/sz/1FKS/4gJML9N/K89y+7sQLc3/cdEYuzZXvmnvgnHP6N+OWP6/Nfcvc4Zxn+ot06F+/R5ozcxcPe8a5bh6/q3nee1Fn7q7UnnGu4XjBE5zH0a/T0WIduTvOP37EqYO/yebAn/uRfOEPrlwI/bva3v/XyRf+4OQFffGwr/Sj8XfXjfrKdfkMnJynD+dx2o/AB8X3nrua6Hlv0dnWbSOdB/JHPOwJeyMeHkc/b9nnvtfNnoS9gZNf9G82LZ9bS+UX+wJXHfZpXg/9fqy0J+yH29RD+zkE+4BvOOeBfh2Nfd705B3f4uRR6N+29n2u5DoP5Axc90PwD9f9H/bD/w94r0v5xfdrepbYOWD+mu+47fNmoLkxRzh5RH8ybvn8aHKEucKpme88+uvzY9LkS5hrw0Md5r5p1ZH/+kzzZL6bcjx020RzY47iIV/o39u9578uYp6aYxnl9nqdHNGc4Jrbbo4vZeLzoK+5MUc4+UK/Ktpz+7k9c2OOcPKCfrfOztax34uQ470o66zj1Z14yAX6k82fV/dYKxfwAFcdfOTlX//6rsl35g5nP8gNPT7UPO97/H3gzlfygic455/+v/oqd9upvOAJzjmnPy32R5b3nGe8wdlL9QPX/Rx836UnP+cYv3iFc87Vh4d9pb+sL/y5L3X+8SweavbgedPO3G2tXJDnwKnZg26ZLtZxrT0mH8SDd/ZAnBwJ/dvxn0s36/+6J3Z7ACcX6M/q09J+noN3fO8VltuRcpsch+MX3/D9zbd9XpieB+f5PO9fdLm13+PBO3sgHvKI/kOrd2D5zfnBP5yaPbiLTry/xiNen+uL8c/eh3zBp3g4D/ThPA7fL622z6HmnscrnJyi341uvmwv8Iu/282Rz6HkV37v/MBVB3+zaOBzqC1f+Gv4Lqfor9PLxH2lmifzhZNf9Gfj3of9XJQ5M9/b+sTnx1I5wlzhmnOY+1N97ufY1jyZ42rc9l8VlsoL5gSnZo575c3Qfv6muYU5wskR+nD2if6dva5ZTJULyv/AqZn7YzrweeA0T+YrTo6EvnjYM/ouGhXuq1YuMG84NT7yTW/ubnqaPz7g5AX9P+nt2fpkoHviT3nbWZ9Ed3Dygv5teezzwCkX8ClOHbxW9bnPg+bewCecGt8fm+6BO+vLL17h5AX9Tnmdu69SvvB3t7HP81s1OR48wTnn9B/KoZ97M398fNTjrv3/Y/7MHa7zzP097mX2+9ScZ+YNZy/pw3kcnv5Ek8X6JNG+ct7Fgxc8iYfH0b9Nj/257/3K75DngasO/sryzH99n2tfyQfxUOMTTo1X1+p23UWT33iDU+MVvim6e25U6x6AU/Pva5eZve+w9p5cglOzF+KhZm/ux/Z5kH3lVLMXO677gL0phz6fauUU+yIeavbpvRyP7esk9oS9gZNr9ItNb+i/itOesB9H6f2X+55oH/B9G8U+bwbNPRA8i1MH30WaHLnXifzi7zvNEvv3M0/mdb/pf/z8/DLMh7nAyRf166E/923tEzkgHmrmB6dmjqvo6t32iFxQ/gdOzRzLVi/avT/NLi+YH5w9ow/nccy9X94P3fdS+0GewKnxAKfG08Tuz8Wk8RJ8wHVvhP68TnL3NlLu4AdOjb+vKC3s75LxhT84OUV/Ou77XFnJF/7g5A79k3p+th443QeDaN5ZD1Z34uRO6N/Vf73vvrzj9bW8Gtjv3eIRf3Dygv5Tceg95fKFJzh5QP+wvMvtvxdf+JiUsT+vS82ZuYuH80w/Ly/6bjrSucUDnBofdXnTdcupzjPzhrOX9OE8Dk/TVt+f70jzxwec80//JM0X60FzD+BBnDp4uq3/+td/A3mRJzj3Q+gv68vS/m4NL3iCkxf0n1uHXXfekxc8wclz+vCX4tDzVP2D9Hb78/ctwSNe4ew3uQSn5nmTNLL3b7jHL77h5Bf9WXSxcA+Nd3zDySP6/+qbsXuJ5BevcPab/kNhn0Pb3P94hZM79I/r4su1m3zHK5x8oT+p7fNGfuWNcmbH5Tf4Fud+CP3naHTk3gbyi284uUO/V98mrr2SF3xMoujD/k6XfGHe4tTBx0N6EdvPdckLzTtwany4+vrdfi+NOTP3h1Y/cve18oK5wlWHucd1MXSdJteZK5yaud/Y655F2eRImGMVjXwe9JULzAnOPtGH8zjm240mhf39LvNkvnDygv5NHc3t/UfYJ3IDzvyZux4fHkc/Sauz9d+l8t3XHavh5Aj9+/rcf90/la/G346TL/Q/6uuBe82VI3iDU+P1cdPy+TGSR/zByRf6UbnIXafJffzByRH617V97ke7yYXgUzzU+C6isffXeMRfJ73v2v9fvOAJTi7Qh7Ov9G/KKLPfT8QjnoZ1uVj/dZo/PsRDLtC/i879+V7qnOMB3njZeVqVWWn7iBf5CJzzL2+Bs6/0Z+NW117H4wVPcPKePpz8pw+fbVp79vqefit62LpOcw/gE06N76weHNjvR7L35Ix48I5v8fA4+vNovLDve+KdPYCTR/S/o/uxnWf2GM9wavbgJo2G9nei8h72AE5O0R9Gz1/2/i94Zw/g5BT9SXrm86lu9iHsAVz3QOi/pumRWw3kF99H6UPi9lLlER7g1PhIy4Gfe675M9/Hehy7WaT9Izfg1MwVTs3c6/ru3b1FmjPzvYmin5wgL5ifOHWY72n9PHTdgfKC+cHZJ/pwHsfcr+0+LKLmHg7zhTf3xq7/XKe5/X0k+0SewJm/fASux4X+YTot3F4tL/iAk0f0x+Vgbr/njhc8wckd+hfpy9k6qXUfXJQvHat/8bNwT/z0p+nVq8sT+cXfv/TOPg9c+aLzETg1Xq/LE58TiTziD06+0B+UT7nrTuULT2l9NnJpes85xwOcGk9VZO/33JcX5r4fzbrubaJzy1zh1Mz9Kh1k9n15necwV/Gwf/TFw+PwcV4vF+ukpzkzdzjnn/5ddHXp5qnOue7jwKnx9FnelvZ3KZxz/MCp8XSdnvh8Xmr++ICT3+rDQ57Th19HJzse+sd1tbX3byVH8Amnxjecved5V3Xi86aUd3zDySP6i/RmYfci+0rOwKnZC3hzfnd7s1fOxj/v7xPyiH2BU7M3l9FgaN/XZx/Yg/Po7cvtR/KLb/GQO/RvysuOW+TNPR98w8kj+nDlVuiv6smR/X0L+6D9CJw8oh/VVeJ6ieYvT4FzHuiP6sTnSk+5gwc4NZ5m5U3s8khemDucPab/XT++u9VS85ePwMkX+qNo4POjuW/xIR5yh35Svw3dfqr54wNO7tBP7fVR4Zp7IMz9pZzk7iNVvjBXuOYc5v6nzAvXW2mezPe8Tub2Pi7kBXOFUzPfy+j9bH0xUo5fpu8dq8VDvtCfptev9n0p5tzMfcfZM/p1/Thw7xPlBfOGa/7Bx3k99DkxUY4wb3FyIvThPA5Pw+g1d/tL5ULjYcep8XSVXo7s60+84AmueyP0n9L7vpuNdM7xBqfG32Ft7+840jnHG5war0md+HP/O/d3/uDkAv1RuVqsLybKBbyJh72kD+dx+L5Nry/t7+Ybjzuv6/qhdB/N/pED8Mbvziucx9E/K4feXy2P+BMP+U8fnpRDz0fqn6YvW7ffk195DZzcoX9Rjg5+Xt+Q+8ErnPNAzsCpeV4R3S/s56bkTvP6YMep2YP9qBi791r7Tf7AtQ/ajx1vHrfr/60TnzfN6wL2AE5O0b8oP7/cYS7v+L6Oso4r8l/3w84znJo9+EinR+6jL+94PYleEvu8BObM3OHkEf2kHn3Y78kyZ+Y7K+9j+99r7s/dHOHkC/1OvXj/eR/PME/mNajtc/8mOv/MA07NvM6jz6E7dNobcgDO3Jo57njzuF3/qvb3Xrq6b3Ii5EbgulfDfOE8jv5rPc3tfRPJC92vgVPjI0qXhTto8oJ5w6nx8Tca+fzoKUfwAKfGE5w943mX0fpsfdlXXjT3ReDU6bqzvuz515d3r/Z9E3IEn3BqfH+V9v6Rzb2BZzj7Rx/O49iP49o+D7K5N9gLODX7kaQfuTvsax/wfZFmI5f15Bd/cOVE6D/Vs779nhznH59w3efB61H53HWfzfnHJ1x+g9eTaJTZ30nq/OPPf9WyvooaL8EHnPNPH85+05/4f4XtKecfb3Bq/P2r56X77MkLPiL7ueVFovzGA5w8pw9vlxd77nJ0/+envxSn5nlw/r14/Zu+b+3z98gjfMJ13oNvOOdEz6vt8wAS+cX3op4t7Ddu8YtXOPlF/yB9Htt8yCk8w6nxHaWjobtfyi++4eQX/Yt08+X+JL887rym0W3H9hSP+IOTR8r5Oj9yzjX3efAKJ3eU//V74vquyRfmGHizr7v+ILX3nc+VL8wVTs3cH8tZbL8Hr/s2zBdOXtDfK5/enSs1Z+YLJxfoH6V27ps8IAfgzJm5w3kc/bN6M3R/ppo/PuDKkdCHs3/q1/51UtZWvuAHTo2/1zrP3Xqp/SNP4PjCH5zH6R6pV4V9fp584a+0zw2of90DO29w6safvQ9cr7kfQv6LN3VnHbXv79LHV/s6G494hTf3w64PZ4/pf9VPA7ceyS++4eQR/YPU+z6fKj/wD6fGdxL9y92flXzhb1jfjtxNpFzAG1z3RPD3lBZ9+75S42vn46h867q1+3Vv73zAm1zY9fu1z4P7gXIBP3BqPJ3X9r5gfXnBB7y5N3b9rH683P1cbjdn5v6vrEp7f39ygbnC2TP6cB6Hj25pc6+V83iAf0TjPfu9f/pwHoen03K9dX/68oInOHlE/ySdHLjJRL7wBFfeh/68LBb239/c5zt/cPaVXILrfgjPO4jexva+veQRPuHU+Iazx8394XNomss7vuHkFP2z8vvLbQfyi284OdX4f+i464G8swdwcof+R1oeuX914z34Pq7XiWtNNX98wNlvcgZOzfNakc8Vf7+RL/iBU+NvWhexS0vdG/iAs8f096LXd/evuR+YeycdRfb+c+wZOQBnzswdzuPoD+vvodtONGfmDte9EfpJ6u/Vm1R5wbzh1Ph4KcvcbVa/7uedD7jugdBv2dxbbc2fuR9YTtz1NGfmCydHGg+ds/VgoLwnz3/xnzqJOp31wH5uuXi1r5+ZPz629evAbZaaPz7g5AV9uHIl9Lfl+MBdNDmBNzg1nk7rr9xtl/dNju98wMkR+ifpw+jnfgte8AHXPRD6Zfnct/8+5o8PODlCvx99dl1pr4t3XvAE1/0Q+ntRmrlpc/7xA6fG3zBqL9aDRL7wBCcX6F+Vi0t3vbrn/OMNTo3XdfRS2v9PvOBpbb/f5F+vk+f4gS/qmz03jtSH8zj8naTbrdv2mrwPfuDsMX247oPg9Y/lxK37lfs7f/DmHtj1Z+nz4uf9TrkHgjc4NV570efYlb37Jtd33uDUeN2W6dA9LOURf3Dyhf5p3f1y7VT5jTc4NV7PonnHvi+IR/zByRH6q2h55KrBPTmCTzg1vqN0a78/qPkz9/1o8mGvi8kR5gqnZu639XNs348mF5g3nJq5f9cf764q78kL5g2nZu6uTiP32NM+kQNw5szc4TyO/iDqDl071/yZO1y5HvonpX8dNOlpz5QbgTN/fMB5HP3naJnb54Qp74MfOPtHH87j8NevXeG+nHzhD07u0P+uJ3M3TeURf3DyhT6cPaZ/HO2frYe57oPjdL9jNZw8op9GT6/2dQX5wl7AqdmPTfQxcE+Jcoj8gbMn7Adc90/or6KbA/u9EvaEPYjrvdy1a90PeIZTswdw5VZ43lHt9+BuoH3A9zx967vr5t7A335k7xPpcz7kBX7guieCv3/pJHMPpeaPjzjtLdbDpebM3MVDXtCHs9+6J9KnSzdZygs+4OQL/Y/ovXRPPXlh7nD2kv6z/d7T5Ur3AB7g3Bf04TwOf63Iz70z0Pzx0YumB/Z+GU3e7zzAqfF0X74t3E2TT+QPnBpvcGq8tsvN2D5HlzzCJ5y9pA/ncfh+jybDXY7tcgrPcGr2IIoOv1zXySNeB1HVcbcr+cIfnDyivyxXR+551dwPwd9h7fOjM9WcmTucfKH/FU0/7HNQyBE8wKnxkZVvsZs082e+cPaPfh39e3fLiebJHJ/LSeTy0a97YDc/ODVz/GPnuNvsDecaTs1c4dTM/ci+Dr5ra57MF875p7+oV7lb5pozc4eTC/Th7Bn9XlQXrtNWruMBTo0nF03nu3tu5wUfcHKE/kHq88O+bxJy/KD0/7wYNDzkC/2L9PXVvOILfx/1v4Fb9uULf3Dygv4iuj9wl6U84g/O+ad/aP56iTziqVvO7V0ENH98wJXToT+tP/vudqI5M/fv+rvrXpvzybzh1Mz9pZ5mbjbQ+WSucGr5sPPqc415Ml8455n+oHy9tPcpZs7MHc45p/+Sru3925pcDnOHc87pT0v7PMae5szc4eQzuQyn5nnwv+lsz8Vu6l9q77koncKp+ff16o59jqzyRXkeODW+4ew3z6tre1/5RH7xDSd36F+Xnwv7Pgq5g384NfuxSb/tc0e0D+wBnDyiX5TTocunyh32Ak7NfvQsVw4n8s4ewMkd+ke1z5v7dpPvYQ/g5BH9InVH7nWq3ME/nJr96KSdxPVqzZm5w9l7+h9R/mHvQ0y+MG84NT4u6s/Y/v6KvMADnP2mD+dxePpIv97d21T5ggc4NZ4e0mlkn4uMF3zAyR36cM4D/b3ocOgOm3sYT3DyiP5e7b++mvZ+3RM7T3Byij68ya1d/8He/extpL0kr+D4xSucx9Hfpu3C7Y/kEa/PaT53s+Z+wCecGq91dHS2vurrnqjTo47V4iHX6A/qj1c3bfziFc4e01/WXwO3ipr7I3iFk2v0b6LZgeUKvvAHV56F/nd6kLvD5v7AH5zcob+pq5F7bPIFT9flpm9/l4AX5u7qbte9r5QXzBtOjY88zTOX9zR/5g4nL+hvInv/4OZ+Zu5wcoQ+nH2lf2Rzf2jmj49FvS3dqrnPmTucPSM34LpnwvNG5azrosmUewEP8OZ+2Hmq0/2t60dN3oT8gTf3wM4PnBp/q7Q8cLORcgdvcGq8XpSbxc7nLl/wCafG91vdHbuPRPmCZzj7Sh/O49iD2zQfukWiPMIznJo9WJf2fsPN/YDXvfSl4x5HzT0QfMKbvAn5E7juj7AH07S230eRX7y6cj9x/am8MHc4e0y/isoP++9RXgQPcGp8DNKN/f1QkxPkQ+B4wQecx9F/Kvfe3YfT/Jn7VZpHrmjynnnDqZn7Z2nvKzzVnJk7nLyg/6/0X+/OUs2Z+WZlnbuPkebJfOHkBf1V2itcv9Y8mS+cvaH/kJZzN18pL5g3nL2hD+dx+HjOYvs70ik5/lzF9ne+U/GQL+oHzv7R75u/x7rJ9eApL/cG7nPS5HfwA6fG3zAqDuz9IPGFJzh5QX9V2/sBL+UFT3Bygf5r+TKy/272jxyAU+MTTo3v8/K77x778ohXOHlB/7k87Lp1cz/gNSvLzC3a8oWnpyyyv/vUnJl7J/q4dLO6ye8wbzg1Pu7STuk+mxxn7nDOOf1W7fP5OFJuk9dwajzAqfEEf6+LPXeaTHul//edNP8eav53XsqjrWv1lC94gyvfg9dFuTywz1HBI55Oou+Fm7U1f3zAm7zf9Rfp4ditnfICP3D2kj6cx+H1rC6HLh1M8YhXOPlCv9yefLnvdEq+4BlOzR6so/eOy+sm74N/ODV7MC7bR8419zO+4eQR/aq09xceTckdPMCp8XGXLj/cYqUcwQOcGk+Hlgf2Psvkd/AAp8bTtDx4d/+aXGfucV1GLptMyQXmCmf/6MN5HD4W1cnQfU+n5AUe4NT4WJb+66V5c38ydzj7Rz7AdT+E5yVpO3fr5h7AA5x9pQ/ncfibR/3C1cup7ofgDU6Nv6toOXdFW/mCNzg1/uDsMc+bxKdn6+Fkyj0xyU4762E6FQ85Rf87svejX8k7vuG6N7jv04OB+9fWvpJXcGr2Ak7N3uzXfg+Ol9oH9gBODtGfbY9z973SPrAHcHKHfh69j9yiuR/wHZXdvu0ZHuUvanVd2ZcvPMHJEfqn5TJzWTRl/vi4iQeL9XCqOTN3OHlB378ev3SLpXKBecPZY/pwHoeni3K/dJtm//ADp8bHV1R07fNemDNzhz9Gz3tuONL9AKfmedMs3rrvnu4HPMDZb/pwHoe/m3R1YJ8zRB7hDU6N117pc2jR176SS3BqPMOp2YPrsjV2VS6/+IaTa/SPIp9P16m8swdw8ot+lg2/XLecklP4h1NrPyL7PIDGO74Hae/IlYMpfvE6iePEtUeaM/M9T1cfLkum5AVzhVMz3zr9jm1/2SfmCqdmjqPyz7ur+poP84Jzzum3U3++b3LtGecdztyYI5zH0R/HQ/91/0rzZI5wcoH+Q+S/7k2Xuh+YK5yaufdrnwdlrTkzdzh7Q27AqXneuIoK115OyRH8wNkz+nAeh9c4Xc1tHuQLPuHUeD2Oz87WF7Vy/zg761gtHvKI/lv59epSp3sA36f1n4F7KuURr3ByhP5n+XzgBk5+8QcnP+iP4r+56/bkC39wckH9ej1y2Uoe8QcnF+i3zVNWyheezrOTrlv2NX/m3ov8Ob6Zas7MF845px9tk8X6oq15Ml84e8m5hlPzvEX5dWn//znneIBT4+lP7c/980DzxwecXNC9Wz933Wlf88cHPKnf9tzZVHkPp+Z5SXa6db2BvOAJTu7Q/5u6A3ft5AVPcHKHvou6C3c9mZIveINT43WQndjnyCpvyB84fvEN53H0/9XLoZsslTt4hlOzBy3zetiXX7zeplv7HELlNz7h1HjtRj5Xnp184Q9O7tAfxKeJ6001Z+YOJy/o92ufBze15szc4eQF/ee0G7ubRPcAHuDsH304j8PTn8j7eOnJC3N/SZeRu62VC8wbzl7Sh/M4fPS3Pif6zT2ABzg1ni7s66ebpe4B/MDZS/pwHoe/TdTLnY9tvOAJTr7Qb2U+V3pO+YIfODX+vqOV/R658h4/cGr8rS1voukD+b6u/D99Dae+rS4769NEnJzieY/R3qu76SuH8Aynxnc38nnz2pw7fMPJI/qz+u3A/e3LL17h5I3uj8rnSj9VvuAZTo3vuN6ObC/wiL/X8rDvbpMpeYEfODX+9rc+J94T+cITnByh/x6tMnfX5ALe4NT4c7HPiSjX/PEBJ0fop+XepT0PL/jYlEele+0r75k3nBofcPa1uT/eui5p8h4fcO4F+p2tz5t+KS/4gJNH9Lu1z5vbpXIHP3Bq/M3Lw4W7bcsXnuDkC/3vyufKeykveIKTO/SLaGXvL6kcwRucGn8fmb3f/FJe8AQnX+j/LTsd22v2j9yA4xGvcB7XnL/+kXtbNvkS/MHZV/rbyudHv9b88QEnX+j7lPtwdyvlCH7g1HiaRIexcc4/HuDU8rQ99l/nR8oFPMCp8TSpV/6r+ybf8QEnL+i/be195Z3mjw84uUC/n3ofd05emHsR9XO3GmmezNdlg8IdNfnN/ODUzPf557vcTuecucLZJ/pw5XiY+212ebY+HSmnye3z9ODV3ec6/3iAU+PjpToeuI9c5x8PcGp8nJef9n5gOv/MG06Nj2Vl7+Pe05yZO5xcoP8V+fN938wfH3DOP304+0f/Lmr13bQnX/iDkxf0X6uh/3o9l0f8wckL+tPUZf7VjXzhaRKPFuvTtPESPMHJBfpw9lL5nh5c2vw4//iEU+N1vo1L9xn9yu+dTzg1XqP0096/QR7xByfX6cOr+tPe33+6F/m8t69fAqfmHoBT8+8rK3u/+cEDuYN/ODX7Aef88Ly3tD5w0+Z+YA9GZWvht0t+8Q0nd+iX2XDs1m3lC57h1OzBZemG7qGn3ME/nJr9uM7GX64zkV98d2qfKw+J/OIVTu7Qv62iI/e5lF+8wpX3oZ/H9v7yE82NOeZp/eEeVtpX8gROzVzh1Mz9uG7F7rHJdeYKZy/pw3kcPh6yv+/uX6r5M3c4uUP/uLbPFekrX/AAp8YHnP3meePteOg6ue4B/MCp8fcZdUr3OFAe4QdOjb9RFeXOjeQFT3DyiP5dZe9Dv3ogd/AGp8ZrFtVz99jkED7h1Pg7sBw6T5RH3Bfi1Fv/z/PBQ6+0zwlp7g38wdlX+ln1d+D+1coXvMGp8dqtvY/RQDmBHzg1/kbZVe46K90beINT46+MOiM3i5QLeINT4+8kO+m7vC0veIKTI/TT7UXXf70iX3iCkxf04ew3/dO6ztys8Yi//cznxPlIvvAEJ0fow9lX3UP1gb1PsPYSb3BqvJ5Vp6XbpMoXfMLZY/pwHifftfd6OZJfvMIv6s2eiwcP3Cdwat0f2aW9P5y84xtOrtGf1O0DN+srp/APp2YP9lOfQ/NSfvENJ6fon8cXY/c0kUe8Hlje5LU84hVOHtHvmqeDVL7w91Tv2/eX5UuetoMjt6k1f+Z+Ul0mbm+gOTAXOHlBH86+0j+L2h8u7ykvmB+cmjluIp8Hi5Hmw7zg5AX94+35u3uqHzj/zA9OzXz/2bmft7U35ACcmrnCqZl7u/J5cDDV3pAPcOaPDziPo39v31ebL+UFT3ByhH7X8qP0/7shR/AGp8brn9j72JvIC56OUp8H88YLPuDkBX04+6d+lp2tx02OkPPi1NusY/Uy/fPqFn3lAj7h1Pg+jP25fx49cP7xDGdf6cN5HHvwnG4O3FVPeYB/ODW+t+b1oJRf+Y72R26Rywue4OwxOQCn5nnrrc+DtC+P+IOTF+pbHrw29wA+4dT43pbe06Lxhb9Zli7W41S+8AQnL+g/pH8uXeGUF3iDU+Pvy3w8r+QFH/flpuui6IF8xgOcGh/r2OfNQXMP4wNOHtGHs9/0o6h34IqpvOADzt7Tf65OFi5bav74gJNH9LeWK2/RA/mCHzg1nl7SeuiKxgue4OQL/Yfsxj7fXTmCHzg1/i7ro45LS93PeIKTL/TfK58Ty0S+8AcnR+ivYj/fg77mzNzbNsc0Vd4z3+n2JHbXqebGHOGcc/rv1bn9np/myRzhnGf6D2kdubSne5I5wjnP9O+qm6Fr5Zonc4RzzunHtf+6J2tymvnBqZlvsR34r/udzjHnGs48mS+cx9F/qkaFOxxpzswdzj5x3uHUPO+tbM9dNlLe694NnBp/h7HPg8H0kVwgt8WpK/9PX19Wx6/uuq9cxyecGt9VdW7vB/nAnpEPcGo8w6nZg8vo+8DFjV98w8kR+jfxtf2eh3IEz3Bq9qBT+5y4TpT3zT2949Tswe126L/uT+Udr3k87rrPXL7wNIvamf178IIPOLlA/yD253uQP7KvyvHA8YUnOI+jfxwfX7qblXJd927g7DF9OI/D63R7VvqvV+QRT3D2m35UfnfdcV/3AH7g3Av04TwOr/B26h9/0jzvapttXatWHuEZTo3v99Tnk//vIKfwDKfG90U8tO8v6B7AM5yaPbiNx2P3Wcs7ewAn1+hfpe2hu2m8swdwco1+L/Z70C61D/jei7y/yVQe8TfOkiO3cvKCp7MqS1yrr3xhfnBq5ghnj3leXvbs82Y1T+YIJ1/oR/Ewdne55skc4eQFfXizf7v+ZXb17lyieTJfOHlBPy7bkZsMlBPkBpw5M3c4j6PfiX1OtFeP5AUe4NR4erecuE3kBU9wcoT+aZXk7r25H/AGZ8/ow3kcvk+2aeHq0SO+8Dcue3M3ae5tPMHJI/p31e3Z+qx+JF/If/FQ38e3nfWZe2xn3tP9QL7wdxpfDZwrlRf4gSvfg7927T2dDnTu8QanxtO2ura/C33knOMHrnwPnubR0cjd9pX3eIBT4+kw9nN/cJo/cz/K/PkufQ6Hc8684brPg4/j0j7faaW8Z95wanzcZpPF7/kzdzjnn/4q8+f+vtb88QFX3od+P/Z54Hrygg84eUH/zf5O6W+kHMYP/LH+3nPDpg9Xfgd/69jnSrv3SL7gDc6+Nvm+47rPg9c06h+4u1q5jk84NV5ry5vHVB7xCieP6O9Zrviv3PCLVzi5Q79j+XFXKr/xDKfG9012/+X22/KIVzg5ovs+jjv+q295xCucfKEPZ4/pf1lOrCfyi284OUJ/FXsfncFjcz/sfMDZb/onUf/D3Tf3LT7g5A79ZeVz4rGtfSU34HjBE5zH0f9n+VFF8oInOPlC/632+XGfyxee4OQL/bS6H7r9vrzgCU6+0B9ncem/mtX88bHKfH6sa82ZucPJF/pPsZ9vJ9WcmTucvaTfsfyYTjVn5g4nX+j/2/pcGSfaP3IGTr5v7J++hvM4+tPqr32+iDziCc6+0n+pfN5U00f2j/yB4wt/cB5H/zHtHrhkqnzBG5war6PtnX9dGMkX/uDkC/3jOB65h5484hVOvtCfZxd9t2jyBZ9wanzPspuueynlEa9vtc+Jh+Z+0D0dODVe15X3Nx7JI57g7Cv9UWyf+xTJC57y7LJ0VS0vzB3OvtIf2d87naXN/RA8wLkX6MNbqefnI/XhPB9/SXbrX4+O5AVPcPKIPpxzQr9d+hx6XCmP8Aanxut1fLFwi1q5g084NV4nsX2+Vy2PeIWzx+QSnJrnPUa9oXscKI/wD9frhbAHn+a1lcovvluZz5vcyS++4U0e7fpw9pv+dTU6ck+JvLMHJ/Gtvd+z5szcX2ufN36PmDPzhZNH9P9mF7ErJpoz84WTI7qnt9fv7nWgeTLHUdSz7+NrbswLzvmnv7Jz35pon8gBODVzhVMz96/Yz2s+0dyYYxKPcve01NyYI5y9IQfg1DzvyPLgoGzu2zB3OHlB/yHqz10+0n6QD3BqPMCp5al6sM8VnJH7J9uHjtVw9oycgVPzvP2tz5WiJ494hZM79E9i+9ypqfziG04e0Yezl/T/RD4/LtpN7oc9gJMv9Je2B61c+4DvZeXzYBHJL77h7De5AafmeUex930TyTu+9ywnPlxznwevcHKEPpy9p39e9zM3j+Qdr8fxdPHbl/xZHqS57gE8wKnxtF/Z5z26x+b87+a+sdz2/6XkOTkO1z0Q5g2v6u6eu1zqeXAeh6fScqVVKl/wA6fG310VHbiFkxd8bDOfKzf5I/mCBzg1nv5t/Xw/+k1Oh7n3S58r81r5wrzh1PiI4pl/PVjPyAs8wKnxVGxPOy6L5AUfcPKF/qb6+TxAecETnNyh/7j1+dFyyhHmCmf/6MN5nHxU0YcrpsoL5g2nxgecveR5L7HPg5u+vOADzv6RG3Bqnvea+Zz4HDX3bfAHJ0fUtzxYLOURf3Dygv5R7POg3ZZH/MHJC/pw9pL+dXZaumwlj3iFky/0l1v73Mdc9wY+4dT4hrPHPG+yndj7SMovXg/MR5ro3sDTxHLiPJ2R+7ex/6evxUOO0J9W569ukj+yr02+7zg1/uaVz4/PXF7wBCdf6Bfp4YEbN/lBPsDxhT84j6O/n3kf7Z684GmQnY7cdaq8xwOcGk8P1bjv7tuaM3O/3N7713HRjDkzdzg5Qv8z9TmR9pTfeIBT4+km8znh509e4AFOjaeL7PzSTfqPTa7vfNxss9J/Hay8YN5w9ok+nMfhKa0Puy4aPZLn+IGX6eGeG/ivoyL/zzjS46l5Hpzn469d+bzpRDNyB29warzC2W+etxf7HLruyS9e4eQU/ctqvHDTkfziG05O0f8b3/vX8aMZuYNnODV7AGfveV5e9oe2X+QRewGnZj+yzOfQwUT7wB7AySn6R5Y3t6XuE/YCTs3ewNl7nndWpUfODbQn2pvMz72TaP74eMsi+xwR3RvMG06Njzgex2660j3AvOHsMX04j5M/y48y15yZ+2XZj9z1RPcA84azf/ThPA4fV9nMfo6oOTN3OPlCf7P1c7xr8p75/ql8frip5sl84eQL/ffYPnfW53HIF+YNZ8/ow3kcnqZVZJ/3JS/4gJM79J8ynyvjnu6DJ8t/X8PJHfrt2Ht6SOQLT23Lj3I1Y2/IEzg13uDUeP1Tek8niXJFuR84Nf7Os0f/ejGXFzzByRH6VeVz4m4pX/iDkyP04ewx/e94bJ8TIo94hZMv9J9i+7zYqTzi76yyzw3uyQue4OQC/crO/bivXMAPnH2lD+dxeH3d+jx4WCoX8AmnxveHeS378ou/TXpof9ere0G5Hzg1/k63D/51Z6lcxw+cGn/X28GBux9p/vh43fo8mCeaM3OHkxf0HzOfEy9LzR8fcOVI6B+kPg9ul8pveQicGk+LrZ97q5k/c59uzzr+9abmrPkGTl7QLzOfE9VoRl4wbzg1PqLswb+u9x7C+WeucGrme7IdfLj7WvNkvnD2j9yAU/O8Rzv381JzZu5wcoF+Vt29+9fpmjNzh3P+6X/U/nzfpZo/c4dz/unPtv7c11HO+ccDnBpP59VZ6R6Xmj8+4OQC/ds4zV3l8ymcc/zA2T/6cB6Hv33L74Na5x9vcOrGX2Tf35EXfMDZP/rOzvnpKifH15bbvhYP55/+aHv16uY9nXO8wdlX+nAeh+8kuxu4l7484hVOXtCfpS37+yF5xCucvKA/jX0e1IOcPSYf4HjHN5zH0T/c+vyYDZQjeIZTswdn2U3fZbX84vXLcuKjrRzBJ5wary+x9/QQyRf+Pi2nf3nBE5wcod+KvY/FRF7w8SfzefCazMgF5g1n/+jDeRyeLupW1w1Xym88wKnxBCf/eR78trTPg08e+/b1QTIRp+Z5N5n3Wifyiz9n+TRbyhee4OQXfTjnhP5R7HPoejBjX8krOH7xDedx9D+2Pp8+I+UX/uHU7MFtFg3dQ5Nf+IdTsx/v9rqys8rJKfzDqdmPbexza1FrH9gPOLlG/3ub2vtQah/Yg8vtg71fTE7u4AHOHtOH8zj8zSs/9zzR/PFR29yvc82f+cLZY/pPmc+Pz0Q5onkHTs3cT6soco9NfpAncObP3OE8jv5r7HOi43JyBA9wanw8Zfa54iPNmbnDyRH6q8rnx+tqRo7gAU6Np2E2LVydav7MHc6eNf3B3OVO+YIHODWevmOfKxeTnHviu/L/9DWces/+GQ/mcHKK5z1V3t91LY94hbOX9KfbO3t/N/nFK5w8ot8pvdfzJlfwDKfG65Plxy+P+IOTL/RvsrORK1byhT84uUM/r3xO3PXkEX9wcoR+lM3868qpfOHvj537+UjnH29wavxtt9PF7/njA85eKh8Cp+Z5k+rq0t0k8oKnq+2tf32Za/74gJMX9F9K7+OilBd8wJ3lfzSYcQ/AqXne3PKjU8sLnuDkC/1BnBy4dDAjX/ADp8ZfGt8s3H0iL3iCk0f0e5YvZZ6zl+QMnBqfcGp8/4sj+/6CcgfPcGp8byrv73Aqj/j7G192/OvvGXtJzsDxiFc4j6M/iCdH7nOlfMEnnBrf95Y3nXZO7uABrtwPntqZz5V0OSNf8AOnxtPx9iZ297nmjw84OUJ/Y3lQLuWFuc+3/tz7/z7mzHzh7CX5AKfmea7yeeDnz/6RG3Bq/MCp8dc1Tzc9+cJHz3Lis6e8wAOcGh+Z5USnp7zHA5waH8vK50Q20D2ABzg1PvYsP37lOjkPZ//od2KfE/e1ch0/cGr8wdlLnvca+/wonTziFU7u0L+sTuz3yOURf3Byhf6q8v5+ecTTKvZ5MEnlBU9w8oK+s5zIB8oLvMGp8Xce+3P/0s85/3iDU+Nvkg0yl5Uzzj/e4NT4a5uPX17wBGf/6L/Ffu7TSPPHB5y9pD+zc1+2c/aPHIDjBU9wHkf/yN4XbVzKC57g3Av0n+115GEuX/iDs9/kDJxa93rlc2Xi5BGvcHKHfrH1eZOnyh08w6nxfRzPxu41kl+8wskj+oN4MHTXkfziFU5O0f8yf9vGI16nmfc0ncoX/jLzVEXyhQ84e0l/Ya/ff82TOSZV8uFuBzPtWcgHOHNjjnAeR/+68uc+L3X+mSucmvnu2/l+HWhuzBFOLtD/zvy5vy5nnH/mB6dmvhs793aGwvlnrnBq5n5mP1efuhm5wLzh1Pg4zey1WKI5M/f7rT/fh6XOOfOGszdNf8d5HJ56mf//fuvPZ9gb/MCp8dGx13d/28pv8ly8yfeO1YPq+tV/XatcwBucGn8bO9+vI3mRp8DZP/IBrpr7e+vz4CRSruMTTo3XT8uDbfLb448/OHlBf3/rz/dDpFzHJ5war/uxve4zl7tzjk84+0ofzuPYg7TyXj8bv3iFs9/037be621ffvHattfrvzziD04uyHPm82AeySP+4OQF/ZfKe3pN5QtP1/FJ152Uym/8wG+ykz2XJLPY/jnw5z1wanIdzvPxCudx/O+8Wg55j+w9uQSnxjOcmj34sBx6mMg7vuGcE3IMTs3zXHZjnxMp7/hOKu/vcymPeL3PfN7cTZXr+IRT4/vLXi/uNR7xCieP6L9VPm/mqTzKa+DkEf3HamKvI3P2klyCU+MfTs1+VObjlxfm/rD1c3xo7gHmWMQ+J7JVTl4wP7jOUZhvy/Lgc6UcYa5waub+NxtE7q6tOTNfOHmh/LfX636e5IXu18CpmfvU8mDe5D1zhWvOYe5XWz/f11xzZo6Pdu79nDj/zA9OzXzPMp9tj02uM1c4NXPf2veDR8v5r7z/yXO4avs+v6+z2OdB1s7ZG/IBTo03uDwGf3uW494LeYE3ODX+Onb+h/Zz5d35xw+cPKAP53F4/bTXd94P51z5H7ju8+A1qS5Hbt7W+ccn/JffH6/H1b1/nbeUR7zCOf/0b+zcV8lc5z94hlPju1f5c/841fnHM5wa37V9n9d7IxfwDKfGN1y5Ep53XF1f+nMg73j9/Hm93tzP+INz/ukv7f0vh06+8ATnXqAP91733ChV/9Ver//yiD84+UK/Z7m8GMgj/uDkDv1O5XPlzuXsKzkDp8YnnBrfF5nPm19+8Qonj+h7r0P3WDd+G98/nJyiv7bvI/cbX/j7tly5TuULf3Byh365tdf1tXzhD04e0S8rnzd7tebM3OHkke7X2OfNYqo5M3c4edTcu37ud23Nn/keV4/vNjdyQfdo4NTM967y536WaM/IAfivef7MF87j6H/Y93d/zZm5w3UPhP4y9nlwnWvOzB1OXtCHs5f0b2OfE5/NvYoPOPmi+yL2OeHnT17gAU6Np3s/I7dYKS/wAKfG07vlxfFkQV5wL4iH+sPuDV8/Wk7c+a9PQl7gE06N733Lj2o0J0d0rweu+zz4Pq2GB/7rfvnF3+vWn/t+2eR68ANXfpAbgfM4vE4y7+N6lbOv+IFTy9/Wn/tZT+cfP/Bmj3d9OI/D6/XW58Fr4xF/cHKE/t8qydyiyQt8wqnxurJc937IC3zCqfF6YflxP5BH/MHJF/r/LCe8L3IEn3Dd88Fr23L+oiePeIVzD9CHcy/onogftr/94hWu3Ar9QTyy30ORX7we2uvLWV++8HS+tdeRzfzxASd36Hcqnx9FKi/4gJM79F8tP75SecEHnNyh37f8uE81f3zAyR36z5YTv7zgA06+0M9tXv1cc2OO3/Y68maQkwvMD07NfOHav/C8f3bu80hzZu5wckHnJvbn/tVpzswdTi7QX1qOF6VygXnDqfHxbOffz5nzz7zh1PJh5/5+qlxn3nD2iT6cx+Hp3s6/nz/nHw9wajzdWR70p/KCJzh5QR+uXAn9J/teyM1EXvC0sPOfRAvOP3kOV23fB/I1nHps98DlalFaHuSJ9pLcgFPjGU7NHvTs54TeL/tKbsDxzh7AeRz9663PlXFb+cJewKnZj8Luh6/RghxhL+DU7Mc89r7vS3nHN5zzQP/C7oEsnZMv+IdTswdX5s81HvEK5zzQz7Y+b27KnNzBM5yaPcjt+wTD/oLcwT+cvacP53HsQZZ53/lI3vH6L7bXjyt5xFOcDbsuSnK84ANO3tOHk//04RvjUa7+o+X9V7LQ/RB8wqnxOtp6T/dOvvD3x3Loly88wckv+nD2mP5f8+Qm8oW/qEqG7qaWLzzBySn6cPaV/qPlVLfxhafjLOu4PJUXPMHJI/rP9v0d74v9I3/geMQrnMfRn9j3o78Gmj9zh5Nf9Pt2P9y3dW/gAU6NJzh7zPNq+77zr/nj42jrX0e6VPPHB5wcob+J/XwnkebM3OHsK/17y4VuT/PHB5y8oA9n/+h/2d/Z5BPlCH7guv+Dv3v7vsLrsvEVfFzZzwe+Is2ZucPJEfqfsZ/jNNI8me/YzrfPdc45Of+0tdd9zZyZO7w5/7t+2869+5XfYd5wanzM7dwPRpozc4dz7unf2HnutjVP5vtkr9fz5h5mjnDOOf3z7c/r9DnnnLnCqZk7nD3jeUP7OV7V15yZO5zz39zf/nxPE80fH3Bygf6VvR68XGrPOO9warzB5TF4ncT+3GcT+cIfnLyg/2Hn3iU6//iEU+P1Yus9DXL5wh+c3KYPP4jt5wJO/bHlRLdekCN4hrPf9OE8jv24znx+5KW8swdw8oX+keX3XSm/+G7ZzxWr3oIcwSecGt+J5cd0ovwgT+D4xTecx9G/MN9HjXe8DrY+D375wh+cvKBfWE64gTziD668D/0zy4mu05yZb1yNPly+0tyYI5wcoV9n9jqvmSfzhZMj9Pfs+8JVrTkzXzh5Qb9r853mmjNzTCwPjkrlAvODUzPfjn0/5tfcmCOcHKF/Y3nw2dfcmCOcvKB/YnnQXTZ5EPIBTs284dT4qO31XN7ch8wdTo7QP4pvz9Yno4IcP8puO1aLh1xQzmf2ej1XHpAPcHzhD87j6Dv7fnDlFuQC3uDUeIWzlzzvJfP5kayUE+QJnBr/cGr249Ry4SjXHpMPcGr2BU7N3rzY6/psOidH2As4NXszjH9eJ2rvyRM4e8LewHX/hH7ffl/8rVxwHtgjODV7U2Q+P/Ja+8B+wMkd+of2fgQnifaB/YCTO/Rv7PXj7z1hD35eDy7lEa839nkFSVse8QQn/+nD4+1wzyV99SPL+6OJzgM+4dT4m1gOeS/kFN7g1Pg7sN87mbXlCx9t+3ujt6nmz9wvtz5v8p5yh7nCqZn7fnX/5b6beTJfOHmknLe8uZtqzswdTk7Rv7fvI1R+n8M+kUtwavzAqfF3aO8DcZRqzszXvy7/+D1P5ggnj+g7+7ngzGmezBdOjtD/tO//vqXKe+YNp8ZH316P533Nn7nDOf/09+z9GL4HBeeZecOp8dHe+nN8N5mzH5xrOPPHB5zH0R/Z1/nete6HMPd2NSncUaI5M3c455n+t53XLNecmTucc07/zc5x4nSOOddw7oO3yv/T13DqK+tfDZrHh+fzvIWd+9lKHvEK170R+nD2WLlh38d5S3QP4B/OXtKH8zj248Ny5XKgfME/nJr9+LL3Efjqax/YAzg5Qn+59Xvwax/w3drazwVHC/ICz3D2nj6cx7Ef68rnyjpq9jvkDJyavYBTszeVvX78tQ/sB5w8ov+y9f/byUp7gm8450H3xNb7m5XyiNd7+77ya1++8DS1PL9MlOfkO5wab3Bq/MH/Vv7fc5nq3/fP3u/hq12QU3iDU+N1Yvl0l8ojXuHkmu51y6dssGC/8QmnxuuL/d6/a8sjntLM59Cv+eMDTn7Rf976ufeWmj8+osrnyqy5B/AAp8bT5c/rUHt9s8sd/MDZP/pwHofXlb2PwJfPk5BTzBtOzdxPLIfuRpon84Wzl+QYnFoebO5pT/Nn7vPYXkc6zZm5w8kF+n/s+79ZqTkzdzi5QL/c+jzolZo/PuDkBX04e0Z/a99vmDX3BJ7guk9CH85e0o8rez24kq/Gkz/3X0t5wQecXKD/Zef+LtH8mfulvY/br7wn/+/tfKf1gn3SeQ8cL3iC8zj6N5bfrtQ+kQ9warzBqfHq7PtAceMLf3Dygr5/Xu5604K9xA+cGn+VfT9gNtL88dGxv/u5yxecczzAqfE0s3P/lBfK9eABTo2nys6998Jekg9wauV54NR4HVlOX0XKC3zCqfGdmNd0Jb/4OzNPbiJf+Hi01+nxck4eM284+UwfzuPwBE8sx//3PO+plxbsMd7g1PhLLSdmifIFb3BqvK5+ft7oz0HIEXzCqfF6Y7nylMoj/uDkDv2x5cfdoPEYPJ1bThz1lSP4gVPjaX972XFpLi94gpMj9FuxvY9AsmjyfucNTo1XOPvK827s/QV6iebP3CPL5VmkvGDecGrmPvv5Od9AeUA+wKnxAKfGx4W9znsaFJx/5g2nxscfe513FynXlfOBU+MJzl7yvKHlwVFPvvAEJy/of9jr/jSVFzzByRH637vfC9f8f/nzr+f6mj8+4OQF/Y2d/8eevOADTi7Q39rnhJxMS/J9a+/r72s4uUD/0vzdNrmOp+Ofn7+25QUfcPJCuW3n/2+kc8+84Zp/8DGw831Ua87MHc75p/9oX8+niebM3OGcf/pw9pX+m/3+/sxp/8gBOL7wB+dx9P9m9nq9LsgLvMHZV/pwHofvueX+Y60cwSecGt+1vX/8yaQkR/AJp8b3n+3VpbtdLcgXPMOp2YOe/f1ntSrIETzDqdmDR/t+/2lfOY9/uPaB/eDxdh+c9vS8VpX515cr5RH+4dTsx7nlUdFXHuH78efntLn84u9PdeNfJy7lBR8jy4vHlfICD3BqfMDZY573z94n/juVF3zAyRf6G8uP21xe8AFnv8kZODXPW9v7y1RT+cITnNyhf5Bl/nVirtxh3nBq5r5vP48tauUO84azl/ThPA5Plz+vE5t7GE9wcof+nr0v2NtEvvAHJ4/oH2y9j8elvODpM7vxr9MTzR8fcHKHfmnf570daf7MHc6e0X/K7O/7k4K8YN5wany0s9S/Lkx1/vEAp8bHyn5OWCw1Z+ab2flOypI947zDyf3MPu/L1+LhcfRb9n4Mj33NHx9wcoH+Orv2r+MHmj8+4OQC/ffYn/vzXOcfP3Bq/L1tr3P3HckLnuCcf/qpvf67jeQFT3d27tO2vOADTi7QX1c3/vXdQLmAHzg1nu7t9ziKqbzgCU5e0E/tc7ySXL4aT/7cPzqdf+YNp8bHc2V/n98uOOfMG06Nj3vL2/OJchcPcHKYPpzH4Ql+mg3t/Z31vOcss9frJXmBHzg1/uDsN8+LKp8Tk3rR3Ns7r3ByhP65fV8mXRbkCD7h1Ph+tfcJdm35xSucfKH/1/KjSJUj+IRT4/vKPi+qN1Xe4xlOzR48Wa48TpUv+IdTswcPliOvS+U6/uHU7MHC5vu10pyZe20/P5yUmifzhbPH5Aycmuf1t2P/+j7V/Jk7nByhv4h9Tril5szc4eQI/ba9Ti8GygU8wKnxcWGfC9Vrch0PcGp83FhOPDZ5gQc4NT4ut/Z3/mlBjuABTo2PqeXEV16SF7pfA6fGU2G/5z1JNX/m/s8+x/Vyqbwgz8Wp7XN6fb3JfE4UfeU4PuDK9dC/tff/danmjw84OUL/2fLgqqdcwA+cGk9w8oPnJfb5T71EvvAEJy/oD+z1+0NbvvAEJy/oH9vr9dt+wV6SA3BqfMKp8ZptfU48jeQRf3ByhP6VvV6cRPKIVzh5QX9tn/962dzPeIWTF/Qr+7ufYiWPeIWTF/QvLBc++/KIVzh5QT8zT1dOOY83eKs62XNXpfpwHofvE/u8r25feY9PODW+2z9/P1Qq7/EJp8Z3x96X7XYpv/Kd+fyo+iX5gh84Nf6O7O9Eb+oFOYIfOHtMH97k/s7rp33e7FEuX/iDkzv0r+33/4pU+YI3ODVeY8uVz5X2kpyBU+MTTo3vP9vLxHXrktzBD5xa/n7+jmik+wE/cGo8vdv7v9ym8oInOHnUePO5Uq1KcgdvcGr8fVq+3JTygo+Vff7r0UQ5wrzh7Bl9OI/D04nlx6KvfMEPnP2jD+dx+NvLRv51ZSpf+NiPR/51ZFmSI3iAU+Pj5uf3OHqaP3OHky/0E8uP47wiR7gXxKn9/0+r4ewrz5vZ+/RMevKFPzi5Q3//53Na/PzDnpEzcGo8w6nx/WivO09S+cU3nHyhDyeH6L/Y58UeJfKO77a978tiqX3FJ5warx/bcd/nqDziFU7u0P+qxv71Y6r7Ac9wanwfW35Ml7of8Amnxvcw9p6Op/KFv0t7vTgp5QVPcHKEfv3z+SGRfOEjse/rn0SLrv1eznG9IO/hzJm5w3kc/co+d7bfV47gAU6Np+XP3x2N5AUfC8uPxyY/yBM4NR7g1Hj6rMZj99ovyRH8wKnxtLW/H52mC/IFP3BqPJ1afnxNKnIEP3Bq/LWqs46bJAV5oXs9cGr8vWajI1euSnIEb3BqvOaZz4++0/yZO5x8oT/JfH7Me8oXPMCp8XRtPh4TeWHuz9XVu3tdlZxn5g1Xjoe5l/b1/31/wTln3nBq5n689ef4a1Rxnpk3nJq51/Z+jTeu4Dwzbzg1c5/Z+zeXack5Z95wauZ+t/XnuJ9rnswXzjmnP7BzPG9ynPnCOef0i/jsbD0cKafJbXHq7Kxj9am9v8uDkxc8wckF5bl9/uJrKl94gpML9K/s+/jDlXzhCU4u0IeTE/Rb2XnuvqKK849PODVeq8rnwc2kIBfwCafGa5r5c1+0df7xCafGK5w95nmpfY6fG8kjXuHkBf1ve5+XeSKPeIWTF/QXcbJYD5OKfSUf4HjHN5zH0e/a+8c/TOQX33ByhP61/ZzkpVeSF3iGU7MHRz9/pzvxXn3O/+3rfoDjF99wHkf/MDvbum0t7/iGk1P04Zwr+teWR9c97QN7ANd9wr1u70NfTOUX32eWQ59tecQrnJyi/2R/p5U7ecQrXDkV+nDOCf08u/hy3Uje8fruz7GbtgvyCG9warwmsc+hl7Ikj/AJZ7/pw3kcvveqs8Rtl5ozcz+215XXeUFOMVd4cx/s5t6zz29ZNPcwc4eTR/Tjrc+bz1K5w7zh1PjI7HVfPtE8me/D9mLo9nqaJ/OFkyP0H+3zkKfTgrxg3nBq5n60TXL3MtA8meM2Swq3TStygfnBqZnvVzyYu+tI82SOcPKC/nd8era+qHX+yXlx6uy0Y/Vndv7qt03nn3nD2Rv6cB6Hp337nPDPROcfP3BqPEU/f9/Z3AP4gVPj767y537P6dyTA3BqvMGp8Xph7/ty35NH/MHJBfpf24u+m6zkEa9wcoH+Z3zRdWVffvEKZy/JDTg1z6vsfQKypfziG06O0N9uB4v1hVMu4B9OzR7A2XueN7f3fV9E8o7vn3l8OJ1/PMOb+3/ne/Pzd7pL+cUrfGE5f5HofoBzD/A8OI+jf135PdjLtQ/47lf2/v25POIVTu7Qf7PPi5ok8ohXOHlEf5ldjJ3/6kN5H/xl9rozGxTkC37g1Pirs+GXO1xq/vhI7f2X5825wwecfKH/FidH7iOVF3zAyR36V7HPlb1RRb4wPzg1813Hgw93579uDbnD/ODUzHf283lcK82NOcLJC/rz+PzdlSPNk/nCyQv6kf0eX7oqyAXmDadm7uvtcOgOc51/5g2nxsexfa513lcuMG84NT7g7BnPm8f2Od+18gIPcGp52ib2vp7/kXUGbckrMRT+QS4QQcVlURBQkKKouFOUoiCggxT99TeT6Tvh467Ok5O00pyZTDrQGnVBD3jqCP5X//6vh3HUBT3gqRf4G37eJ+135j/1P/LYHpPu+43/f0537agX+sFTF/Df12Xebw5jfUc/eOoC/o1/v0vSnVAX0BMeG12/tpdjd5pGHdEPnvFKHYDH5rg///+4xuOoF/rd+v//+pTGuo5u8Ixj/PDEoeuFrwfzWaz36AaPja69gb7fK+qFfvDUC/wXdakTSSPqiH7w1BH89anUidtZRh1BN3hsdO3695xuhlEv9IOnvuB/m0o97jur74V+8NRv/PA9v//TT+M6AI/NcYt6c+tOk6gvusIzT/DPfB16sXqEzvDYjIOW//+xozzqi661aavv5t0p9Qg94bHRtbZNWu5+FPVCP3jqEf76tOX/L0is++gHTz3Cf1hvlkX/qCP6wVOP8F/4uvJTjeOSOgOPjugKTxz+92mz7U5czDN5v/fvcX4ZxvFK/YEn/+Qdnjj8p4NW3Y26Mf/oAU/dwV8eXK7cLI/rA/rAY6OT8+/rl/vXuG4UOsBjo1OpftFypcOYf/SAp+7g/9T/+zfOqCPoAI+NTseDxtj9jHbqRaHTVD7TySjmmbzDUy/wN/07qp/zmH/yezutd9aN4Tt1gXoeeextvbxujCKP/Zaflddt4xmXnG9Tv/x0j7YOoA88Nvqtp5cNNxvGdQDd4LHRD55xyXHjutSVxsjqSlFn4NEXXeHjOlP4a4PzsSvNoo7oCk99wT+qS51Iqxn1Ap3hGd/44YljHPxsWzX3ehjrC/rDYzM+RvVWxX0lUXfGATx1Bz884x7/kX9P/HM3jhPGDTx1Cv9gmrytG2nUnXHwPrj074mJuqM3PPUI/7wu1/1RjTqi67Wv6xeHkxP/PueL4YR1AD6uC4XO8NjoWpXO0JWGUS/0g6dO4e94ndI06hX1q7fe3Gsa6w76wGOjEzzjm+MGPu+rZcw/enzW9f+ExDyTd3jqDn54xjH+tH7x6w7bcX1AH3hs9INnfHPcvcx/0TmuG+gGj42u40HjzH0Mp9Qp9ITHRm/5S21XasT8owc8dQ3/if5f2WWsX+gDj41+o6nkfexi/tHjaiv1Y9WN+UcPeOoL/oe65PfJ1oGo01bydZjEvJHHlv8/f/eHGfOZ/MFjk8fbrczj98OYN/IFzzzHv5kmE3fgYn7IFzzzH/+3/z9PkyTmjXzBM8/xv6VnnXV7GOczdb7r/y/7uBHzSX7hmef4LwYyj5cu1mnyCo9N3pv+Pc3tcazH5BseGz2u6zKP//KYf/SAZzwx3+GxOe6kXu+6+27UC53gmf/4235+33ajLugEzzijDsBjc9yXr1c/w6gX+sFTF/CPfT14G8W6gG7w2Oj6mtXe1u00znP0hGe84oePuhfjIJnK/H4Zx3mOzvDYNj7qmVt2p8xz9IfHjuPA/5+Wlq3D6A0/T6X+t9K4DsBjU/fhsTlfy4+DvyyOB8bB9zY5cUO/X1DUi0JneGzGwcHg4s0NllFf0/ui79a2rqIfPPUFf3eq/0ck1hH0hMdG13FS+nXVdtQLneAZ9/j/pD+TcRD1Qid46g7+32ly5hbLqBc6wVOP8F/4evPXfafukFd4bPL+qv/ftxrzTH7hqUf4/wYXdZfWYp7JOzx1B//r9Hzl1uOYZ/IOT33Bf5bUEvfajuOMegKPjT7w2Oj0lJdarlKL+UePz63k77kR80ze4akv+OEZZ/hX02TsFo2Yf/SAp+7gLyW1ifs9fKeOoA88Njrd+Dpx53+nEOoFOsBjo9MiP+6su+24HiyT4/K6232Hx96k5fK6n0eeOsJxi+35p0ulHyjqBXrCM17xwxPHOHgYnDecq8U6gs7w2IyDdVI6cV2rK+gPj43ej+nB2FXyuJ6gMzzjGz88cYyPp4Ho+jSK+qL3ZHvhn/uKOqIrPPUl9gH+/xm+j6O+6ApP3cEPz3zAX8prA3ebRd3RG566g3+RVN/W3UbUEV3hqUf4X7bn/vclse6g381UrtuNYn1BN3hs9HtN/f/vsrqOTvCsC/jhe56/bkf/MDnbuso46oVO8MyHqOdU6tPIRb3QD576hf9+K/Xp3tZ/9IOnfuE/TEr+dypRF3TK9f+NH8b8owc8dQf/PDv9dae1mH/0gKce4e9PpQ691aIu6ARPncJ/OZB6830Y9UIneMYrdQkem+PS9KztKu2YZ/J+ltW+3GMt5pP8wlN38MMzXvFf16Ue3Ldjnsk7PPUC/zo/WLlpFvOPHvDUC/zTVOrBoBHzjx7w1Av8H9lpy53mMf/oAU9dwH9Rlzy9dWP+0QOeeoFf8jB2392Yf/J+ndf8+5tjnsk7PPUC/yatvbrHbswn+d0k5c667+I8p54ndZnHw/GU+Uxe4bHJ+2d+0HBZ7T3O5yKv8Iwn/PCxXhd63Pp5n4xinsk7PHUh+pMTuY/PYp7JOzzzH/9RctZ1r7YOk3d45j/+w7RUc89ZzD96wDP/oz5+fn8OY51GB3hsdMr8vJe+gPmPPvDY6PeTHL6t+0vTq9Av8kVdwA/PuMR/mB/03J2bUhfQGT6uz4XeExkxLhtFHdHv3Nfj/jLWY/SBpz7jh//z/7f9phb98ByP3m/J8daddqOO6ApPfcG/zGsnvm+gvqAnPDZ6f+WlN/d0GHVEV3jGN3UGHpvj6pnUlXk16o7e8NQd/LeJ/z/hLtZ79IfHZhy4vPLrSlnUEV2X0me529qUOoKe8Njo+pjVztwmj/UdXeGpL/if0+O2O6nGPJN3eOoO/pdU6spLNeafvMNTd/BnWanuntoxz+T3NDtZufkw5o08wlMv8F/4OjGsxTpNXuGxye93UmnJfUvMJ/mFp47gh2f8xbqfS/5u2zH/5B2e+oK/n0r92LRjnsk7PPUF/0NanbiTcawX5BseGz16vk68tGOeyTs8dQT/X77trC8aH4wn6gk8NutC5Av7MNmWvf2QHHy60SjWC/SEZ/zhhyeOcVBOThpulkd90RueuhP1T0/lvr8d1wf0h8dmHMBTbzhumR2N5X4p6ove8Ix7/JJ3/96vKXUEneGxGQeXmdSVN6svUeeCx2YcDLJTv38Q6wj6w2MzDkppdeCeh7FeoDM8NuPgL8nf1ue1qDu6wjMf8F8not/jLOqIfj/JceZm3XfqCPrAY6PfPJXPfzHKqP/oAP+QCn++jH544tBvnpe37iCPuqDTRSb1Jp1NqTtRn4LHRqez9PTNvbpYd6I+BY+NTt3stO9WWaxH6AOPjU7btNpyT1bX0Qc+rv+FTr/J36/0BzH/6FHKj8vu4TDmHz3gqTv4P7PqmfvIYl2P+hQ8Njq9p+W2OxjFfJJfeOoL/qO0+uUmVt9jfgueuoP/LzuV+/lazDP5hWf+47/MZd6vkjj/Ld+BxybvH0k1caNlnOfkGx6bvOfpX8v9LmOeyTs88x//oc/TvdX1mO+Cx0aPt6zq7+Pfmc/oAI+NHm/Z4cSd1eJ8jvkueGz0WCXVV/dWjXkm7/DM8+jP1531ZfuDel1J1uX1ZfcDnvmPP/LF+MO/Sk/8e9+jXugHT13An2Qy75c2zqgD8OiLrvDE4R9mMu9bh7F+ozM8Nnr/JL9j9zuKOqIrPOObugGPHet/ctz16xP1Iupf8Ix7/PDEMT4ektOa2O+Me+oJPDbjBR6bcfOcVCpuncX6EsdLwWPHcVPwzBOOe8mk3rwlse7E8VLw2Iyno9S9rS9tfWB8TJKTnnsZRt0ZB/DUKfwnSTlzizyOB/S+TORztZJY/6n78NjoD1/JKkfush2PgyeO8fGdbrfutxF1R++XvHrihmnUEf16XqfBKOqFHvdppe/WScwn+b1JpK68tmN9Ia/w2OS3nGx+Xblm+SzyC089wj9MpK7IOkR9Ia/w2OT9Lzk8c4t2zDN5h6fu4IdnnOFfJtu227qYN/IITz3C3/d16G4U80l+4alT+BuJ1I90FvNM3uGpL/jT5Gjl3DjmHz3gqSP4k1TqwTiNuqAHPPUC/1+2abmyi/mPOhU8dQR/x+fvaRl1QQ94xhN1AB6b476zw7H7HMX8o8csy/3vAmOeyTs88xz/eSbz9Tab2rwN+YbHRo9qsuqsO0mcz6wL8Dt2ed1pfJxkR59uksdxxnyHRy/0gycO/1Vy1JD7mzguqQPw6Iiu8LFeFP7ftHLirkdRR3SFZ/6bzj9jVx7HdQA94bHR+ywrd90ojzqi30dWqbn7ZdQL/eCpF/hlZFXkbv+DeoFu8NjoWs4O/e8Bp9QL9ITHRteKf4dX2+py1K/gGcfUmRhf2ByXZ0c9OW/UF/0aXqdvqyPoMcvkeq6yWIepv/DY6AD/4OM7s3gcPHHo95Ovt67cjnpF/QqeehT9+eGJezyMdQfd4LHR9SWtvLnh4Tt1B93gGcf44YlD73Hy13dZGvVFV3jqFP5ldthy6XJKPUJn+LhOFHofpd+/rppHHdHvU+7D/a9sqTvoBo+Nrmdpfua+xlFHdIVnHFN/4LE5ziXrtjvMLf+FHvDUKfyfyeGXe6jGdQB94BnH+OGJQ7/brFJ3wyTqgh6Pye/KbVxcD8g7PHUE/0t6mPg6SL2IOhQ8Nnoc5t8tV53tzKOgBzz1Aj884xX/Sy75e21EvdAJnvqC/yjN/e//oi7osczkUx4O4zpAvuGx0eMpP3z16w15Jr+VdN5ZXy9jvaDO7/DBzubl9bWLPOOP4zq+Tty1oy7oBG91JPgH2W/Dbay+oxM89QX/TSL14CaPeplOgade4P9Lvsaumsb8R50KnvGKP82lHoytvqMHPPUC/0/+V3OjWtQFneCpC/jhGa/4Z/mm4j4OTUd0LXjqCP6erwdD0xFd4akX+OEZx7Ge5LO39fUs6oiu8Ixv/Eki9eM2jTqiKzz1Bf91vs3czyjWF/SEx0bvJJe62DuM6wLrATx21LngseP4KPi/9O/IdavxfHm28u8niLozDpq+rrx0Y31BZ3hsxsEi+XtzI1sf0DXLN333kZpe6Ffw1CP89UT0GCZRl6hfvvh1p6OYf9Nj6/9PyDv1gnzDY6NHM5M6sV7GcUndgEcX9IAnDv9Psmq7yizWEVuPA49Nfk+y/Ms9Wz7JIzx1B/9b/ld3j2nMJ/mFZ5xRT+CxOW6c/Kzc+zLWe/INH/Nf6HGY5om7s/yjBzz1Jdb/bNFyp+1YR2L9L3jGE374uG4XurpU8p2Ooo7oB0/dwV+SauZcNeqITl/5cuIqtt6iBzx1xHTLX91TGusFOsBjo1M5mXbWN4nV+6L+Rx47nZa9/ZD+frqHUdQLnR6Tn4Z7Tz6Y5+gDz/gzf+BNx6DfIvs7ceemCzrBM//x/+afY3dSNV0KPeAZr/jfk23Xv8Wc/KMHPPMfPzzjG3812dTcuBH1Qj946gX+RfZdcZ/LOC6pG/DoiK7wxOH/SPKBG3WjvugKT33Bf5hlb+teNeqLrvC2PgR/L/vtuftx1Be94ak7+Af5OnPTYdQXXZ9zqX91r5fU5ySZUqeNDzqiKzx1HT88x+PP8/nWncyivuj9mOUn7m0Uxze6wWOja55v3sSO45i6BI+NnvDY6P2RfffdZyPqi36Pad5yj91Yd9AHHhv9/vKPX3dmdQR94LHRr+HrynD8Tn1BH3hs9Osm7sxlsw/GK3UGHhs94eP8LfT+Sedtd2LrQ1x3Cx4bnbq56PE6iuMVfeCx0WmVburueRh1Ie+T9Gvl5uNY78k3PDZ6XPv68dCO9R4d4LHR4zf78P/fKdYRdIDHRo/TRPJxl8W6jg7w2Ohx6fO+yeO4QQd4bPL+nc0m7tjFukC+4Rln+OHjul3ocZ5I3sfDmH/yvs1eO+ukMaMuUOfhGWf4Yzxx+Wt5nbRn0/Tn0z2Nol7oB08dwf+cf/l9/w/qBXrCY6NrKd2cuKbpiH7w1BH8W7k1dGddWw8K/eCpF/i36brrbuX+pBh/1Ad49EVXeOLwl7LvmnuzuoCuy3RRcSur6+h0lLuBv29n/FEH4LHRDR4bXbfJ+G2dJFEvdHpKfnpuZPUbHeCx0ek+X2VulnxYHQ96wDP/8f8lsj41GtIvb47cxU69L3jsWMeJL/RCP3ji8G/S6dbVqlEv9IOnvuBfZO7EDUxHdIJn3OOv5t9v7q1h8xH9Cp66g3+WL/puObN1u9AVnroTdc5dy9c1xis6w2Oja55Ofl3pMNYX9ISP+hZ6p9m67B5NX3SFp+7gT7Plma+P6Iiu8NQd/Otk6v9PuNX1It/w2Ojx6p8alnnAuCTf8Njosc2/6+7V1lvyDk8dwT9NPlduUYt1gXzDY6NHlrpEf3dU5J+8b9JJy5VsXSW/8NQL/C2fjweb/+QVnnGGH5449LhOlmPpdj+oC3F9LXhs9PjKsomrJVbXCx3gsdHjLnWvbmJ1gby7/Kmzrldn1AXqduTNLq/rtdlX+vXpxt2Yf/SAp17gH+efDbdIY72I63TBY6MTPOMv1plE6kG7EfVCP3jqBf6f5G3sSsOoF/rBx3pf+A/yVdfdD6Ne6NRMZd4PZlEX9ICnLuCHZ7ziX+QfFfc9tnW70AmeeoG/7ef9WzfqhX7w1AX8ouXbun4YdUS/yBd1Af97/tXTeVPohX7w1Av8o2yeuc8sjj/0gcdGv04mdfuyNj1Ivv37/eM6AI9e6AdPHHUfHpvjXPq6dQe1WF/QEx4bvcvZ0u8jx3qPzvDYjINSsnhzqYs6ouss++i7r2rUC/3gqS/4D9Jly98vohf6wTOOqT/w2Bz3nb/8uu0y6oiu8NQp/M/5quye27G+oCc8NnrfZbMzN8+jvugKz7i3+vPadgdZrC/oAI+NHi5dfvn7QsZxrD8Fjy7oAU8cfv8mCrnjjXUnrtMFH+ddod9UWk731Y31BX3gsdHvL1sm7qUWdUGPr/yl5bajGXWEfMNjo8etnw9PjZh/8g5PfcF/k83GblaNeSbvy3Q8cQdJzDP5haeO4H/Plv59MDHP5PEz9/+Xd2x1oajnO7zai8T/394s8thZOiivG7msB5+f7i23/Ec9As94op7Amx2Oe5Wl0q2yqAt6wFNH8K+S7xN3dRjrBfrAY6MfPPWD41b589ht2zPqAnrCM17xwxOH3leZ1IlREnVEV3jqCH54xjf+TrqoyX1m1J1xAE/dwQ/P+MY/zyf+e8U4Hhgf8NQp/PCMe/xPyXLg0uo7dYpxBM98wA9PHOPvM/P/B3gU6xTjLvLYxTiDZ/5w3Ff+2ZMzx3HFeHrKpplb5nGcMG7gqV/43xLpuztOrkfWI7ktZV2CZ5wwbuCJw79Mn7Yuz+M4YXycJ6LrQzXWLXSGx2YcXGSi310j6oiuH8mkL/f5URd06ieS90ke6xF5/0z8/5XtxryRx49sXnbjZaw75A8+ztMiv/dpdubnGXkjj/DUI/yf2VPb5cOYB/ICT53Cf5zOvtx9HvNDXqSFrrtbywN5gae+4M+St5VzqdXvIk/w2OSxmUo9eJvFukD+4LHJ7zx9bLnf2gxdme/w2OQbPua/0GOcSJ5eZjH/5B2eehHX6Tzzzw/F+R/X44LHRo9ZPpr49cbWgZBveGz0yNPZqxvOYv7RA555ix+ecYZf1oGOXwdYD0Z5r7xuqq088xl/JXv/dIPGB/MWPeGx0XucvzXcdxbnMzrDMy5tnQg8cYyD03Rx4nrjOJ/RHx6bcTBL/f/3Xc4Yx+gPj43ew2zedc/jOJ/REx4bva/zj5p76EZ90RWe+Y//PXupuE0a9UVXeOoC/kU6G7i7cdQL/bIkfVs3rC5EfeBNL9Vvm773XJpEvaJ+BU+9iHU49R1a/mH1OOixTaT/7aYx/+Qd/jj9OHI9ud9PFkfuuhF5bOo0PDZ1GR6bv/OR+P/7m0Yd0a+bz07c0zDqhU7w1CP8l/nHm7tPYx2iLsHHdbvQD544/Fn60nc/y6gX+sFTp/C/pbOWfn9bjEvqEjz6ojc8cfgn2d2vOxzHeoT+kS9sxgE845vjvvKpf24prhM2DgJPXYvrSDY+c6taHA+MD3jGPXUMHpvjpvl9220Po47oCk9dwy9D98t/H4OO6ApPvcNfz0TXoemLfq/Z88r9JLGOoA88NvrdJ7PEDZKoF3q85Xctd9iN+SS/s0Su7/Uw1gXyB8+4xA9veQ55H2TjsVs1LJ9FHrN0OHFbP/HDOKNuwGOTP3hs8lvLslf3UIt1hPzBM/7wwxNH3mV96KybLtYX1ota8vbp7rox/+gBzzij/sBjc9xz/txw6zTWHXSDZ/zhhycOXa9zqU99q1PoCU+9wQ9PHOPgLfH/j6oa6w76w0e7GB/+H+c56ezRHb176aQm+Yv1BZ3hsRkHb+mj/13JzOpL0PUwzQZeD/RCp1HWfVs3l3H+R33gTS/VD55xzHFH2VvP3bajXuj0\";\nexport const __FramerMetadata__ = {\"exports\":{\"chunk\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./RoverGeometry1.map","// Part 2 of 6 of the rover geometry: base64 of gzipped JSON (see RoverStory.tsx).\nexport const chunk=\"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\";\nexport const __FramerMetadata__ = {\"exports\":{\"chunk\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./RoverGeometry2.map","// Part 3 of 6 of the rover geometry: base64 of gzipped JSON (see RoverStory.tsx).\nexport const chunk=\"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\";\nexport const __FramerMetadata__ = {\"exports\":{\"chunk\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./RoverGeometry3.map","// Part 4 of 6 of the rover geometry: base64 of gzipped JSON (see RoverStory.tsx).\nexport const chunk=\"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\";\nexport const __FramerMetadata__ = {\"exports\":{\"chunk\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./RoverGeometry4.map","// Part 5 of 6 of the rover geometry: base64 of gzipped JSON (see RoverStory.tsx).\nexport const chunk=\"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\";\nexport const __FramerMetadata__ = {\"exports\":{\"chunk\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./RoverGeometry5.map","// Part 6 of 6 of the rover geometry: base64 of gzipped JSON (see RoverStory.tsx).\nexport const chunk=\"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\";\nexport const __FramerMetadata__ = {\"exports\":{\"chunk\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./RoverGeometry6.map"],"mappings":"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"}