{"version":3,"sources":["node_modules/browser-pack/_prelude.js","node_modules/webvr-polyfill/package.json","node_modules/webvr-polyfill/src/dpdb/dpdb.json","package.json","src/core/a-register-element.js","src/style/aframe.css","src/style/rStats.css","../../node_modules/three/build/three.js","../../node_modules/three/examples/js/loaders/ColladaLoader.js","../../node_modules/three/examples/js/loaders/GLTFLoader.js","../../node_modules/three/examples/js/loaders/MTLLoader.js","../../node_modules/three/examples/js/loaders/OBJLoader.js","node_modules/@tweenjs/tween.js/src/Tween.js","node_modules/an-array/index.js","node_modules/as-number/index.js","node_modules/base64-js/index.js","node_modules/browserify-css/browser.js","node_modules/browserify/node_modules/process/browser.js","node_modules/buffer-equal/index.js","node_modules/buffer/index.js","node_modules/buffer/node_modules/isarray/index.js","node_modules/debug/browser.js","node_modules/debug/debug.js","node_modules/deep-assign/index.js","node_modules/document-register-element/build/document-register-element.js","node_modules/dtype/index.js","node_modules/flatten-vertex-data/index.js","node_modules/for-each/index.js","node_modules/global/window.js","node_modules/ieee754/index.js","node_modules/inherits/inherits_browser.js","node_modules/is-buffer/index.js","node_modules/is-function/index.js","node_modules/is-obj/index.js","node_modules/layout-bmfont-text/index.js","node_modules/load-bmfont/browser.js","node_modules/load-bmfont/lib/is-binary.js","node_modules/object-assign/index.js","node_modules/parse-bmfont-ascii/index.js","node_modules/parse-bmfont-binary/index.js","node_modules/parse-bmfont-xml/lib/browser.js","node_modules/parse-bmfont-xml/lib/parse-attribs.js","node_modules/parse-headers/parse-headers.js","node_modules/present/lib/present-browser.js","node_modules/promise-polyfill/Promise.js","node_modules/quad-indices/index.js","node_modules/style-attr/lib/index.js","node_modules/three-bmfont-text/index.js","node_modules/three-bmfont-text/lib/utils.js","node_modules/three-bmfont-text/lib/vertices.js","node_modules/three-buffer-vertex-data/index.js","node_modules/trim/index.js","node_modules/webvr-polyfill/src/base.js","node_modules/webvr-polyfill/src/cardboard-distorter.js","node_modules/webvr-polyfill/src/cardboard-ui.js","node_modules/webvr-polyfill/src/cardboard-vr-display.js","node_modules/webvr-polyfill/src/deps/wglu-preserve-state.js","node_modules/webvr-polyfill/src/device-info.js","node_modules/webvr-polyfill/src/display-wrappers.js","node_modules/webvr-polyfill/src/distortion/distortion.js","node_modules/webvr-polyfill/src/dpdb/dpdb.js","node_modules/webvr-polyfill/src/main.js","node_modules/webvr-polyfill/src/math-util.js","node_modules/webvr-polyfill/src/mouse-keyboard-vr-display.js","node_modules/webvr-polyfill/src/node-entry.js","node_modules/webvr-polyfill/src/rotate-instructions.js","node_modules/webvr-polyfill/src/sensor-fusion/complementary-filter.js","node_modules/webvr-polyfill/src/sensor-fusion/fusion-pose-sensor.js","node_modules/webvr-polyfill/src/sensor-fusion/pose-predictor.js","node_modules/webvr-polyfill/src/sensor-fusion/sensor-sample.js","node_modules/webvr-polyfill/src/touch-panner.js","node_modules/webvr-polyfill/src/util.js","node_modules/webvr-polyfill/src/viewer-selector.js","node_modules/webvr-polyfill/src/wakelock.js","node_modules/webvr-polyfill/src/webvr-polyfill.js","node_modules/word-wrapper/index.js","node_modules/xhr/index.js","node_modules/xml-parse-from-string/index.js","node_modules/xtend/immutable.js","src/components/camera.js","src/components/collada-model.js","src/components/cursor.js","src/components/daydream-controls.js","src/components/gearvr-controls.js","src/components/geometry.js","src/components/gltf-model.js","src/components/hand-controls.js","src/components/index.js","src/components/laser-controls.js","src/components/light.js","src/components/line.js","src/components/link.js","src/components/look-controls.js","src/components/material.js","src/components/obj-model.js","src/components/oculus-touch-controls.js","src/components/position.js","src/components/raycaster.js","src/components/rotation.js","src/components/scale.js","src/components/scene/background.js","src/components/scene/debug.js","src/components/scene/embedded.js","src/components/scene/fog.js","src/components/scene/inspector.js","src/components/scene/keyboard-shortcuts.js","src/components/scene/pool.js","src/components/scene/screenshot.js","src/components/scene/stats.js","src/components/scene/vr-mode-ui.js","src/components/shadow.js","src/components/sound.js","src/components/text.js","src/components/tracked-controls.js","src/components/visible.js","src/components/vive-controls.js","src/components/wasd-controls.js","src/components/windows-motion-controls.js","src/constants/animation.js","src/constants/index.js","src/constants/keyboardevent.js","src/core/a-animation.js","src/core/a-assets.js","src/core/a-cubemap.js","src/core/a-entity.js","src/core/a-mixin.js","src/core/a-node.js","src/core/component.js","src/core/geometry.js","src/core/propertyTypes.js","src/core/scene/a-scene.js","src/core/scene/metaTags.js","src/core/scene/postMessage.js","src/core/scene/scenes.js","src/core/scene/wakelock.js","src/core/schema.js","src/core/shader.js","src/core/system.js","src/extras/components/index.js","src/extras/components/pivot.js","src/extras/primitives/getMeshMixin.js","src/extras/primitives/index.js","src/extras/primitives/primitives.js","src/extras/primitives/primitives/a-camera.js","src/extras/primitives/primitives/a-collada-model.js","src/extras/primitives/primitives/a-cursor.js","src/extras/primitives/primitives/a-curvedimage.js","src/extras/primitives/primitives/a-gltf-model.js","src/extras/primitives/primitives/a-image.js","src/extras/primitives/primitives/a-light.js","src/extras/primitives/primitives/a-link.js","src/extras/primitives/primitives/a-obj-model.js","src/extras/primitives/primitives/a-sky.js","src/extras/primitives/primitives/a-sound.js","src/extras/primitives/primitives/a-text.js","src/extras/primitives/primitives/a-video.js","src/extras/primitives/primitives/a-videosphere.js","src/extras/primitives/primitives/meshPrimitives.js","src/geometries/box.js","src/geometries/circle.js","src/geometries/cone.js","src/geometries/cylinder.js","src/geometries/dodecahedron.js","src/geometries/icosahedron.js","src/geometries/index.js","src/geometries/octahedron.js","src/geometries/plane.js","src/geometries/ring.js","src/geometries/sphere.js","src/geometries/tetrahedron.js","src/geometries/torus.js","src/geometries/torusKnot.js","src/geometries/triangle.js","src/index.js","src/lib/rStatsAframe.js","src/lib/three.js","src/shaders/flat.js","src/shaders/index.js","src/shaders/ios10hls.js","src/shaders/msdf.js","src/shaders/sdf.js","src/shaders/standard.js","src/systems/camera.js","src/systems/geometry.js","src/systems/index.js","src/systems/light.js","src/systems/material.js","src/systems/shadow.js","src/systems/tracked-controls.js","src/utils/bind.js","src/utils/coordinates.js","src/utils/debug.js","src/utils/device.js","src/utils/entity.js","src/utils/forceCanvasResizeSafariMobile.js","src/utils/index.js","src/utils/material.js","src/utils/object-pool.js","src/utils/src-loader.js","src/utils/styleParser.js","src/utils/tracked-controls.js","vendor/rStats.extras.js","vendor/rStats.js","vendor/wakelock/util.js","vendor/wakelock/wakelock.js"],"names":["global","factory","exports","module","define","amd","THREE","this","EventDispatcher","Vector2","x","y","Matrix4","elements","arguments","length","console","error","Quaternion","z","w","_x","_y","_z","_w","undefined","Vector3","Matrix3","Texture","image","mapping","wrapS","wrapT","magFilter","minFilter","format","type","anisotropy","encoding","Object","defineProperty","value","textureId","uuid","_Math","generateUUID","name","DEFAULT_IMAGE","mipmaps","DEFAULT_MAPPING","ClampToEdgeWrapping","LinearFilter","LinearMipMapLinearFilter","RGBAFormat","UnsignedByteType","offset","repeat","center","rotation","matrixAutoUpdate","matrix","generateMipmaps","premultiplyAlpha","flipY","unpackAlignment","LinearEncoding","version","onUpdate","Vector4","WebGLRenderTarget","width","height","options","scissor","scissorTest","viewport","texture","depthBuffer","stencilBuffer","depthTexture","WebGLRenderTargetCube","call","activeCubeFace","activeMipMapLevel","DataTexture","data","NearestFilter","CubeTexture","images","CubeReflectionMapping","UniformContainer","seq","map","flatten","array","nBlocks","blockSize","firstElem","n","r","arrayCacheF32","Float32Array","toArray","i","allocTexUnits","renderer","arrayCacheI32","Int32Array","allocTextureUnit","setValue1f","gl","v","uniform1f","addr","setValue1i","uniform1i","setValue2fv","uniform2fv","uniform2f","setValue3fv","uniform3f","g","b","uniform3fv","setValue4fv","uniform4fv","uniform4f","setValue2fm","uniformMatrix2fv","setValue3fm","uniformMatrix3fv","mat3array","set","setValue4fm","uniformMatrix4fv","mat4array","setValueT1","unit","setTexture2D","emptyTexture","setValueT6","setTextureCube","emptyCubeTexture","setValue2iv","uniform2iv","setValue3iv","uniform3iv","setValue4iv","uniform4iv","getSingularSetter","setValue1fv","uniform1fv","setValue1iv","uniform1iv","setValueV2a","size","setValueV3a","setValueV4a","setValueM2a","setValueM3a","setValueM4a","setValueT1a","units","setValueT6a","getPureArraySetter","SingleUniform","id","activeInfo","setValue","PureArrayUniform","StructuredUniform","addUniform","container","uniformObject","push","parseUniform","path","pathLength","RePathPart","lastIndex","match","exec","matchEnd","idIsIndex","subscript","next","WebGLUniforms","program","getProgramParameter","ACTIVE_UNIFORMS","info","getActiveUniform","getUniformLocation","Color","setRGB","Box2","min","max","Infinity","WebGLFlareRenderer","state","textures","capabilities","init","vertices","faces","Uint16Array","vertexBuffer","createBuffer","elementBuffer","bindBuffer","ARRAY_BUFFER","bufferData","STATIC_DRAW","ELEMENT_ARRAY_BUFFER","tempTexture","createTexture","occlusionTexture","bindTexture","TEXTURE_2D","texImage2D","RGB","UNSIGNED_BYTE","texParameteri","TEXTURE_WRAP_S","CLAMP_TO_EDGE","TEXTURE_WRAP_T","TEXTURE_MAG_FILTER","NEAREST","TEXTURE_MIN_FILTER","RGBA","shader","vertexShader","join","fragmentShader","createProgram","attributes","vertex","getAttribLocation","uv","uniforms","renderType","occlusionMap","opacity","color","scale","screenPosition","createShader","FRAGMENT_SHADER","VERTEX_SHADER","prefix","precision","shaderSource","compileShader","attachShader","linkProgram","render","flares","scene","camera","tempPosition","invAspect","halfViewportWidth","halfViewportHeight","screenPositionPixels","validArea","useProgram","initAttributes","enableAttribute","disableUnusedAttributes","vertexAttribPointer","FLOAT","disable","CULL_FACE","buffers","depth","setMask","l","flare","matrixWorld","applyMatrix4","matrixWorldInverse","projectionMatrix","copy","containsPoint","activeTexture","TEXTURE0","TEXTURE1","copyTexImage2D","BLEND","enable","DEPTH_TEST","drawElements","TRIANGLES","UNSIGNED_SHORT","positionScreen","customUpdateCallback","updateLensFlares","j","jl","lensFlares","sprite","setBlending","blending","blendEquation","blendSrc","blendDst","reset","CanvasTexture","canvas","needsUpdate","WebGLSpriteRenderer","position","uvOffset","uvScale","modelViewMatrix","fogType","fogDensity","fogNear","fogFar","fogColor","fogDepth","alphaTest","document","createElementNS","context","getContext","fillStyle","fillRect","painterSortStable","a","renderOrder","spritePosition","spriteRotation","spriteScale","sprites","oldFogType","sceneFogType","fog","isFog","near","far","isFogExp2","density","multiplyMatrices","sort","material","visible","onBeforeRender","decompose","blendEquationAlpha","blendSrcAlpha","blendDstAlpha","premultipliedAlpha","setTest","depthTest","depthWrite","colorWrite","onAfterRender","Material","materialId","lights","NormalBlending","side","FrontSide","flatShading","vertexColors","NoColors","transparent","SrcAlphaFactor","OneMinusSrcAlphaFactor","AddEquation","depthFunc","LessEqualDepth","clippingPlanes","clipIntersection","clipShadows","polygonOffset","polygonOffsetFactor","polygonOffsetUnits","dithering","overdraw","userData","MeshDepthMaterial","parameters","depthPacking","BasicDepthPacking","skinning","morphTargets","alphaMap","displacementMap","displacementScale","displacementBias","wireframe","wireframeLinewidth","setValues","MeshDistanceMaterial","referencePosition","nearDistance","farDistance","Box3","Sphere","radius","Plane","normal","constant","Frustum","p0","p1","p2","p3","p4","p5","planes","WebGLShadowMap","_renderer","_objects","maxTextureSize","getDepthMaterial","object","isPointLight","lightPositionWorld","shadowCameraNear","shadowCameraFar","geometry","result","materialVariants","_depthMaterials","customMaterial","customDepthMaterial","_distanceMaterials","customDistanceMaterial","useMorphing","isBufferGeometry","morphAttributes","isGeometry","isSkinnedMesh","warn","useSkinning","variantIndex","_MorphingFlag","_SkinningFlag","localClippingEnabled","keyA","keyB","materialsForVariant","_materialCache","cachedMaterial","clone","scope","renderSingleSided","DoubleSide","renderReverseSided","BackSide","linewidth","isMeshDistanceMaterial","renderObject","shadowCamera","layers","test","isMesh","isLine","isPoints","castShadow","frustumCulled","_frustum","intersectsObject","update","Array","isArray","groups","k","kl","group","groupMaterial","materialIndex","depthMaterial","_lightPositionWorld","renderBufferDirect","children","_projScreenMatrix","_shadowMapSize","_maxShadowMapSize","_lookTarget","_NumberOfMaterialVariants","cubeDirections","cubeUps","cube2DViewPorts","RGBADepthPacking","distanceMaterial","enabled","autoUpdate","PCFShadowMap","_gl","_state","setClear","setScissorTest","faceCount","il","light","shadow","mapSize","vpWidth","vpHeight","pars","updateProjectionMatrix","isSpotLightShadow","shadowMap","shadowMatrix","setFromMatrixPosition","makeTranslation","target","lookAt","updateMatrixWorld","multiply","setRenderTarget","clear","face","add","up","vpDimensions","setFromMatrix","WebGLAttributes","attribute","bufferType","usage","dynamic","DYNAMIC_DRAW","buffer","onUploadCallback","Float64Array","Int16Array","SHORT","Uint32Array","UNSIGNED_INT","INT","Int8Array","BYTE","Uint8Array","bytesPerElement","BYTES_PER_ELEMENT","updateBuffer","updateRange","count","bufferSubData","subarray","get","isInterleavedBufferAttribute","remove","deleteBuffer","Euler","order","_order","DefaultOrder","Layers","mask","Object3D","onRotationChange","quaternion","setFromEuler","onQuaternionChange","setFromQuaternion","object3DId","parent","DefaultUp","onChange","defineProperties","enumerable","normalMatrix","DefaultMatrixAutoUpdate","matrixWorldNeedsUpdate","receiveShadow","Camera","OrthographicCamera","left","right","top","bottom","zoom","view","Face3","c","isVector3","vertexNormals","isColor","Geometry","geometryId","colors","faceVertexUvs","morphNormals","skinWeights","skinIndices","lineDistances","boundingBox","boundingSphere","elementsNeedUpdate","verticesNeedUpdate","uvsNeedUpdate","normalsNeedUpdate","colorsNeedUpdate","lineDistancesNeedUpdate","groupsNeedUpdate","BufferAttribute","itemSize","normalized","TypeError","Int8BufferAttribute","Uint8BufferAttribute","Uint8ClampedBufferAttribute","Uint8ClampedArray","Int16BufferAttribute","Uint16BufferAttribute","Int32BufferAttribute","Uint32BufferAttribute","Float32BufferAttribute","Float64BufferAttribute","DirectGeometry","indices","normals","uvs","uvs2","arrayMax","BufferGeometry","bufferGeometryId","index","drawRange","start","BoxGeometry","widthSegments","heightSegments","depthSegments","fromBufferGeometry","BoxBufferGeometry","mergeVertices","buildPlane","u","udir","vdir","gridX","gridY","ix","iy","segmentWidth","segmentHeight","widthHalf","heightHalf","depthHalf","gridX1","gridY1","vertexCounter","groupCount","vector","numberOfVertices","d","addGroup","groupStart","Math","floor","setIndex","addAttribute","PlaneGeometry","PlaneBufferGeometry","width_half","height_half","segment_width","segment_height","MeshBasicMaterial","lightMap","lightMapIntensity","aoMap","aoMapIntensity","specularMap","envMap","combine","MultiplyOperation","reflectivity","refractionRatio","wireframeLinecap","wireframeLinejoin","ShaderMaterial","defines","clipping","extensions","derivatives","fragDepth","drawBuffers","shaderTextureLOD","defaultAttributeValues","uv2","index0AttributeName","Ray","origin","direction","Line3","end","Triangle","Mesh","random","drawMode","TrianglesDrawMode","updateMorphTargets","WebGLBackground","geometries","renderList","forceClear","background","clearColor","clearAlpha","autoClear","autoClearColor","autoClearDepth","autoClearStencil","isCubeTexture","boxMesh","ShaderLib","cube","removeAttribute","copyPosition","tCube","isTexture","planeCamera","planeMesh","alpha","getClearColor","setClearColor","getClearAlpha","setClearAlpha","reversePainterSortStable","WebGLRenderList","renderItemsIndex","opaque","renderItem","renderItems","WebGLRenderLists","hash","list","lists","dispose","absNumericalSort","abs","WebGLMorphtargets","objectInfluences","morphTargetInfluences","influences","influencesList","influence","morphInfluences","getUniforms","WebGLIndexedBufferRenderer","infoRender","setMode","mode","calls","POINTS","points","renderInstances","extension","drawElementsInstancedANGLE","maxInstancedCount","WebGLBufferRenderer","drawArrays","drawArraysInstancedANGLE","WebGLGeometries","infoMemory","onGeometryDispose","event","buffergeometry","removeEventListener","wireframeAttributes","addEventListener","_bufferGeometry","setFromObject","geometryAttributes","getWireframeAttribute","geometryIndex","UniformsCache","shadowBias","shadowRadius","shadowMapSize","distance","coneCos","penumbraCos","decay","skyColor","groundColor","halfWidth","halfHeight","WebGLLights","setup","shadows","directionalLength","pointLength","spotLength","rectAreaLength","hemiLength","viewMatrix","intensity","isAmbientLight","isDirectionalLight","cache","multiplyScalar","vector3","sub","transformDirection","bias","directionalShadowMap","directionalShadowMatrix","directional","isSpotLight","cos","angle","penumbra","spotShadowMap","spotShadowMatrix","spot","isRectAreaLight","matrix42","identity","matrix4","premultiply","extractRotation","rectArea","pointShadowMap","pointShadowMatrix","point","isHemisphereLight","normalize","hemi","ambient","WebGLObjects","frame","updateList","updateFromObject","addLineNumbers","string","lines","split","WebGLShader","getShaderParameter","COMPILE_STATUS","getShaderInfoLog","getEncodingComponents","sRGBEncoding","RGBEEncoding","RGBM7Encoding","RGBM16Encoding","RGBDEncoding","GammaEncoding","Error","getTexelDecodingFunction","functionName","components","getTexelEncodingFunction","getToneMappingFunction","toneMapping","toneMappingName","LinearToneMapping","ReinhardToneMapping","Uncharted2ToneMapping","CineonToneMapping","generateExtensions","rendererExtensions","envMapCubeUV","bumpMap","normalMap","logarithmicDepthBuffer","filter","filterEmptyLine","generateDefines","chunks","fetchAttributeLocations","ACTIVE_ATTRIBUTES","getActiveAttrib","replaceLightNums","replace","numDirLights","numSpotLights","numRectAreaLights","numPointLights","numHemiLights","parseIncludes","include","ShaderChunk","pattern","unrollLoops","snippet","unroll","parseInt","WebGLProgram","code","shadowMapTypeDefine","shadowMapType","PCFSoftShadowMap","envMapTypeDefine","envMapModeDefine","envMapBlendingDefine","CubeRefractionMapping","CubeUVReflectionMapping","CubeUVRefractionMapping","EquirectangularReflectionMapping","EquirectangularRefractionMapping","SphericalReflectionMapping","MixOperation","AddOperation","prefixVertex","prefixFragment","gammaFactorDefine","gammaFactor","customExtensions","customDefines","isRawShaderMaterial","supportsVertexTextures","maxBones","useFog","fogExp","emissiveMap","roughnessMap","metalnessMap","useVertexTexture","doubleSided","flipSided","numClippingPlanes","shadowMapEnabled","sizeAttenuation","gradientMap","numClipIntersection","physicallyCorrectLights","NoToneMapping","outputEncoding","mapEncoding","envMapEncoding","emissiveMapEncoding","isShaderMaterial","vertexGlsl","fragmentGlsl","glVertexShader","glFragmentShader","bindAttribLocation","programLog","getProgramInfoLog","vertexLog","fragmentLog","runnable","haveDiagnostics","LINK_STATUS","getError","VALIDATE_STATUS","diagnostics","log","deleteShader","cachedUniforms","cachedAttributes","getAttributes","destroy","deleteProgram","programIdCount","usedTimes","WebGLPrograms","allocateBones","skeleton","bones","floatVertexTextures","nVertexUniforms","maxVertexUniforms","nVertexMatrices","getTextureEncodingFromMap","gammaOverrideLinear","isWebGLRenderTarget","programs","shaderIDs","MeshNormalMaterial","MeshLambertMaterial","MeshPhongMaterial","MeshToonMaterial","MeshStandardMaterial","MeshPhysicalMaterial","LineBasicMaterial","LineDashedMaterial","PointsMaterial","ShadowMaterial","parameterNames","getParameters","nClipPlanes","nClipIntersection","shaderID","getMaxPrecision","currentRenderTarget","getRenderTarget","vertexTextures","gammaOutput","gammaInput","envMapMode","maxMorphTargets","maxMorphNormals","getProgramCode","onBeforeCompile","toString","acquireProgram","p","pl","programInfo","releaseProgram","indexOf","pop","WebGLTextures","properties","utils","clampToMaxSize","maxSize","drawImage","isPowerOfTwo","makePowerOfTwo","HTMLImageElement","HTMLCanvasElement","ImageBitmap","floorPowerOfTwo","textureNeedsPowerOfTwo","textureNeedsGenerateMipmaps","filterFallback","f","NearestMipMapNearestFilter","NearestMipMapLinearFilter","LINEAR","onTextureDispose","deallocateTexture","onRenderTargetDispose","renderTarget","deallocateRenderTarget","textureProperties","__image__webglTextureCube","deleteTexture","__webglInit","__webglTexture","renderTargetProperties","isWebGLRenderTargetCube","deleteFramebuffer","__webglFramebuffer","__webglDepthbuffer","deleteRenderbuffer","slot","__version","complete","uploadTexture","TEXTURE_CUBE_MAP","pixelStorei","UNPACK_FLIP_Y_WEBGL","isCompressed","isCompressedTexture","isDataTexture","cubeImage","maxCubemapSize","isPowerOfTwoImage","glFormat","convert","glType","setTextureParameters","mipmap","RGBFormat","getCompressedTextureFormats","compressedTexImage2D","TEXTURE_CUBE_MAP_POSITIVE_X","generateMipmap","setTextureCubeDynamic","textureType","FloatType","HalfFloatType","__currentAnisotropy","texParameterf","TEXTURE_MAX_ANISOTROPY_EXT","getMaxAnisotropy","UNPACK_PREMULTIPLY_ALPHA_WEBGL","UNPACK_ALIGNMENT","isDepthTexture","internalFormat","DEPTH_COMPONENT","_isWebGL2","DEPTH_COMPONENT32F","DEPTH_COMPONENT16","DepthFormat","UnsignedShortType","UnsignedIntType","DepthStencilFormat","DEPTH_STENCIL","UnsignedInt248Type","setupFrameBufferTexture","framebuffer","attachment","textureTarget","bindFramebuffer","FRAMEBUFFER","framebufferTexture2D","setupRenderBufferStorage","renderbuffer","bindRenderbuffer","RENDERBUFFER","renderbufferStorage","framebufferRenderbuffer","DEPTH_ATTACHMENT","DEPTH_STENCIL_ATTACHMENT","RGBA4","setupDepthTexture","webglDepthTexture","setupDepthRenderbuffer","isCube","createRenderbuffer","setupRenderTarget","isTargetPowerOfTwo","createFramebuffer","COLOR_ATTACHMENT0","updateRenderTargetMipmap","webglTexture","WebGL2RenderingContext","window","WebGLProperties","WebGLState","ColorBuffer","locked","currentColorMask","currentColorClear","colorMask","setLocked","lock","equals","DepthBuffer","currentDepthMask","currentDepthFunc","currentDepthClear","depthMask","setFunc","NeverDepth","NEVER","AlwaysDepth","ALWAYS","LessDepth","LESS","LEQUAL","EqualDepth","EQUAL","GreaterEqualDepth","GEQUAL","GreaterDepth","GREATER","NotEqualDepth","NOTEQUAL","clearDepth","StencilBuffer","currentStencilMask","currentStencilFunc","currentStencilRef","currentStencilFuncMask","currentStencilFail","currentStencilZFail","currentStencilZPass","currentStencilClear","stencilTest","STENCIL_TEST","stencilMask","stencilFunc","stencilRef","setOp","stencilFail","stencilZFail","stencilZPass","stencilOp","stencil","clearStencil","newAttributes","enabledAttributes","enableVertexAttribArray","attributeDivisors","vertexAttribDivisorANGLE","enableAttributeAndDivisor","meshPerAttribute","disableVertexAttribArray","compressedTextureFormats","formats","getParameter","COMPRESSED_TEXTURE_FORMATS","currentProgram","NoBlending","CustomBlending","currentBlending","currentPremultipledAlpha","AdditiveBlending","blendEquationSeparate","FUNC_ADD","blendFuncSeparate","ONE","blendFunc","SRC_ALPHA","SubtractiveBlending","ZERO","ONE_MINUS_SRC_COLOR","ONE_MINUS_SRC_ALPHA","MultiplyBlending","SRC_COLOR","currentBlendEquation","currentBlendSrc","currentBlendDst","currentBlendEquationAlpha","currentBlendSrcAlpha","currentBlendDstAlpha","setMaterial","setFlipSided","colorBuffer","setPolygonOffset","currentFlipSided","frontFace","CW","CCW","setCullFace","cullFace","CullFaceNone","currentCullFace","CullFaceBack","BACK","CullFaceFront","FRONT","FRONT_AND_BACK","setLineWidth","currentLineWidth","lineWidthAvailable","lineWidth","factor","POLYGON_OFFSET_FILL","currentPolygonOffsetFactor","currentPolygonOffsetUnits","SCISSOR_TEST","webglSlot","maxTextures","currentTextureSlot","webglType","boundTexture","currentBoundTextures","emptyTextures","apply","currentScissor","currentViewport","maxVertexAttributes","MAX_VERTEX_ATTRIBS","MAX_COMBINED_TEXTURE_IMAGE_UNITS","parseFloat","VERSION","WebGLCapabilities","maxAnisotropy","MAX_TEXTURE_MAX_ANISOTROPY_EXT","getShaderPrecisionFormat","HIGH_FLOAT","MEDIUM_FLOAT","maxPrecision","MAX_TEXTURE_IMAGE_UNITS","maxVertexTextures","MAX_VERTEX_TEXTURE_IMAGE_UNITS","MAX_TEXTURE_SIZE","MAX_CUBE_MAP_TEXTURE_SIZE","maxAttributes","MAX_VERTEX_UNIFORM_VECTORS","maxVaryings","MAX_VARYING_VECTORS","maxFragmentUniforms","MAX_FRAGMENT_UNIFORM_VECTORS","floatFragmentTextures","PerspectiveCamera","fov","aspect","focus","filmGauge","filmOffset","ArrayCamera","cameras","WebVRManager","onVRDisplayPresentChange","device","isPresenting","eyeParameters","getEyeParameters","renderWidth","renderHeight","currentPixelRatio","getPixelRatio","currentSize","getSize","setDrawingBufferSize","frameData","VRFrameData","standingMatrix","standingMatrixInverse","cameraL","bounds","cameraR","cameraVR","standing","getDevice","setDevice","getCamera","depthNear","depthFar","getFrameData","pose","fromArray","orientation","stageParameters","sittingToStandingTransform","getInverse","leftViewMatrix","rightViewMatrix","leftProjectionMatrix","rightProjectionMatrix","getLayers","layer","leftBounds","rightBounds","getStandingMatrix","submitFrame","WebGLExtensions","getExtension","WebGLClipping","resetGlobalState","uniform","globalState","numGlobalPlanes","numPlanes","numIntersection","projectPlanes","dstOffset","skipTransform","nPlanes","dstArray","flatSize","viewNormalMatrix","getNormalMatrix","i4","plane","renderingShadows","enableLocalClipping","beginShadows","endShadows","setState","fromCache","nGlobal","lGlobal","clippingState","WebGLUtils","RepeatWrapping","REPEAT","MirroredRepeatWrapping","MIRRORED_REPEAT","NEAREST_MIPMAP_NEAREST","NEAREST_MIPMAP_LINEAR","LinearMipMapNearestFilter","LINEAR_MIPMAP_NEAREST","LINEAR_MIPMAP_LINEAR","UnsignedShort4444Type","UNSIGNED_SHORT_4_4_4_4","UnsignedShort5551Type","UNSIGNED_SHORT_5_5_5_1","UnsignedShort565Type","UNSIGNED_SHORT_5_6_5","ByteType","ShortType","IntType","HALF_FLOAT_OES","AlphaFormat","ALPHA","LuminanceFormat","LUMINANCE","LuminanceAlphaFormat","LUMINANCE_ALPHA","SubtractEquation","FUNC_SUBTRACT","ReverseSubtractEquation","FUNC_REVERSE_SUBTRACT","ZeroFactor","OneFactor","SrcColorFactor","OneMinusSrcColorFactor","DstAlphaFactor","DST_ALPHA","OneMinusDstAlphaFactor","ONE_MINUS_DST_ALPHA","DstColorFactor","DST_COLOR","OneMinusDstColorFactor","ONE_MINUS_DST_COLOR","SrcAlphaSaturateFactor","SRC_ALPHA_SATURATE","RGB_S3TC_DXT1_Format","RGBA_S3TC_DXT1_Format","RGBA_S3TC_DXT3_Format","RGBA_S3TC_DXT5_Format","COMPRESSED_RGB_S3TC_DXT1_EXT","COMPRESSED_RGBA_S3TC_DXT1_EXT","COMPRESSED_RGBA_S3TC_DXT3_EXT","COMPRESSED_RGBA_S3TC_DXT5_EXT","RGB_PVRTC_4BPPV1_Format","RGB_PVRTC_2BPPV1_Format","RGBA_PVRTC_4BPPV1_Format","RGBA_PVRTC_2BPPV1_Format","COMPRESSED_RGB_PVRTC_4BPPV1_IMG","COMPRESSED_RGB_PVRTC_2BPPV1_IMG","COMPRESSED_RGBA_PVRTC_4BPPV1_IMG","COMPRESSED_RGBA_PVRTC_2BPPV1_IMG","RGB_ETC1_Format","COMPRESSED_RGB_ETC1_WEBGL","MinEquation","MaxEquation","MIN_EXT","MAX_EXT","UNSIGNED_INT_24_8_WEBGL","WebGLRenderer","getTargetPixelRatio","_currentRenderTarget","_pixelRatio","initGLContext","_currentScissor","_scissor","_currentViewport","_viewport","_infoMemory","objects","_infoRender","morphtargets","programCache","_this","renderLists","_premultipliedAlpha","bufferRenderer","indexedBufferRenderer","flareRenderer","spriteRenderer","onContextLost","preventDefault","_isContextLost","onContextRestore","onMaterialDispose","deallocateMaterial","releaseMaterialProgramReference","renderObjectImmediate","renderBufferImmediate","setupVertexAttributes","startIndex","isInstancedBufferGeometry","programAttributes","materialDefaultAttributeValues","programAttribute","geometryAttribute","stride","isInstancedInterleavedBuffer","isInstancedBufferAttribute","vertexAttrib2fv","vertexAttrib3fv","vertexAttrib4fv","vertexAttrib1fv","isAnimating","vr","requestAnimationFrame","loop","time","onAnimationFrame","projectObject","sortObjects","isLight","lightsArray","shadowsArray","isSprite","intersectsSprite","spritesArray","isLensFlare","flaresArray","isImmediateRenderObject","_vector3","currentRenderList","renderObjects","overrideMaterial","isArrayCamera","_currentArrayCamera","camera2","_width","_height","setProgram","_currentGeometryProgram","initMaterial","materialProperties","_clipping","programChange","UniformsUtils","numSupportedMorphTargets","numSupportedMorphNormals","lightsHash","ambientLightColor","directionalLights","spotLights","rectAreaLights","pointLights","hemisphereLights","progUniforms","uniformsList","seqWithValue","_usedTextureUnits","_clippingEnabled","_localClippingEnabled","_currentCamera","useCache","_currentMaterialId","refreshProgram","refreshMaterial","refreshLights","p_uniforms","m_uniforms","LN2","isMeshPhongMaterial","isMeshStandardMaterial","uCamPos","cameraPosition","isMeshLambertMaterial","isMeshBasicMaterial","setOptional","boneTexture","sqrt","ceilPowerOfTwo","boneMatrices","boneTextureSize","toneMappingExposure","toneMappingWhitePoint","markUniformsLightsNeedsUpdate","refreshUniformsFog","refreshUniformsCommon","refreshUniformsLambert","isMeshToonMaterial","refreshUniformsToon","refreshUniformsPhong","isMeshPhysicalMaterial","refreshUniformsPhysical","refreshUniformsStandard","isMeshDepthMaterial","refreshUniformsDepth","refreshUniformsDistance","isMeshNormalMaterial","refreshUniformsNormal","isLineBasicMaterial","refreshUniformsLine","isLineDashedMaterial","refreshUniformsDash","isPointsMaterial","refreshUniformsPoints","isShadowMaterial","ltcMat","UniformsLib","LTC_MAT_TEXTURE","ltcMag","LTC_MAG_TEXTURE","upload","diffuse","emissive","emissiveIntensity","flipEnvMap","uvScaleMap","setUvTransform","uvTransform","dashSize","totalSize","gapSize","specular","shininess","bumpScale","normalScale","roughness","metalness","envMapIntensity","clearCoat","clearCoatRoughness","textureUnit","REVISION","_canvas","_context","_alpha","_depth","_stencil","_antialias","antialias","_preserveDrawingBuffer","preserveDrawingBuffer","domElement","_currentFramebuffer","_currentScissorTest","_scissorTest","memory","contextAttributes","rangeMin","rangeMax","getContextAttributes","forceContextLoss","loseContext","forceContextRestore","restoreContext","setPixelRatio","setSize","updateStyle","style","setViewport","getDrawingBufferSize","pixelRatio","setScissor","boolean","bits","COLOR_BUFFER_BIT","DEPTH_BUFFER_BIT","STENCIL_BUFFER_BIT","clearTarget","hasPositions","hasNormals","hasUvs","hasColors","positionArray","normalArray","nx","ny","nz","uvArray","colorArray","geometryProgram","updateBuffers","rangeFactor","dataCount","rangeStart","rangeCount","drawStart","drawEnd","drawCount","LINES","TriangleStripDrawMode","TRIANGLE_STRIP","TriangleFanDrawMode","TRIANGLE_FAN","isLineSegments","isLineLoop","LINE_LOOP","LINE_STRIP","compile","traverse","animate","callback","isCamera","opaqueObjects","transparentObjects","setFaceCulling","frontFaceDirection","FrontFaceDirectionCW","warned","setTexture","readRenderTargetPixels","restore","textureFormat","IMPLEMENTATION_COLOR_READ_FORMAT","IMPLEMENTATION_COLOR_READ_TYPE","checkFramebufferStatus","FRAMEBUFFER_COMPLETE","readPixels","FogExp2","Fog","Scene","LensFlare","SpriteMaterial","Sprite","LOD","levels","Skeleton","boneInverses","slice","calculateInverses","Bone","SkinnedMesh","bindMode","bindMatrix","bindMatrixInverse","initBones","bind","normalizeSkinWeights","linecap","linejoin","Line","LineSegments","LineLoop","Points","Group","VideoTexture","video","readyState","HAVE_CURRENT_DATA","CompressedTexture","DepthTexture","WireframeGeometry","o","ol","e","edge1","edge2","key","edge","edges","keys","index1","index2","getX","fromBufferAttribute","ParametricGeometry","func","slices","stacks","ParametricBufferGeometry","pu","pv","sliceCount","subVectors","crossVectors","PolyhedronGeometry","detail","PolyhedronBufferGeometry","subdivideFace","cols","pow","aj","lerp","bj","rows","pushVertex","correctSeam","uvBuffer","x0","x1","x2","getVertexByIndex","correctUVs","centroid","uvA","uvB","uvC","divideScalar","azi","azimuth","correctUV","PI","atan2","inclination","computeVertexNormals","normalizeNormals","TetrahedronGeometry","TetrahedronBufferGeometry","OctahedronGeometry","OctahedronBufferGeometry","IcosahedronGeometry","IcosahedronBufferGeometry","t","DodecahedronGeometry","DodecahedronBufferGeometry","TubeGeometry","tubularSegments","radialSegments","closed","taper","bufferGeometry","TubeBufferGeometry","tangents","binormals","generateSegment","P","getPointAt","N","frames","B","sin","generateIndices","generateUVs","computeFrenetFrames","TorusKnotGeometry","tube","q","heightScale","TorusKnotBufferGeometry","calculatePositionOnCurve","cu","su","quOverP","cs","P1","P2","T","addVectors","cx","cy","TorusGeometry","arc","TorusBufferGeometry","ExtrudeGeometry","shapes","ExtrudeBufferGeometry","addShapeList","TextGeometry","text","TextBufferGeometry","font","isFont","generateShapes","curveSegments","amount","bevelThickness","bevelSize","bevelEnabled","SphereGeometry","phiStart","phiLength","thetaStart","thetaLength","SphereBufferGeometry","thetaEnd","grid","verticesRow","RingGeometry","innerRadius","outerRadius","thetaSegments","phiSegments","RingBufferGeometry","segment","radiusStep","thetaSegmentLevel","LatheGeometry","segments","LatheBufferGeometry","clamp","base","inverseSegments","phi","n1","n2","ShapeGeometry","ShapeBufferGeometry","addShape","shape","shapeHole","indexOffset","extractPoints","shapeVertices","shapeHoles","holes","ShapeUtils","isClockWise","reverse","triangulateShape","concat","EdgesGeometry","thresholdAngle","geometry2","thresholdDot","DEG2RAD","computeFaceNormals","sourceVertices","face1","face2","dot","CylinderGeometry","radiusTop","radiusBottom","openEnded","CylinderBufferGeometry","generateCap","centerIndexStart","centerIndexEnd","sign","theta","cosTheta","sinTheta","indexArray","slope","indexRow","ConeGeometry","ConeBufferGeometry","CircleGeometry","CircleBufferGeometry","s","RawShaderMaterial","STANDARD","PHYSICAL","TOON","LoadingManager","onLoad","onProgress","onError","isLoading","itemsLoaded","itemsTotal","urlModifier","onStart","itemStart","url","itemEnd","itemError","resolveURL","setURLModifier","transform","FileLoader","manager","DefaultLoadingManager","CompressedTextureLoader","_parser","DataTextureLoader","ImageLoader","CubeTextureLoader","TextureLoader","Light","HemisphereLight","updateMatrix","LightShadow","SpotLightShadow","SpotLight","power","PointLight","DirectionalLightShadow","DirectionalLight","AmbientLight","RectAreaLight","Interpolant","parameterPositions","sampleValues","sampleSize","resultBuffer","_cachedIndex","constructor","valueSize","CubicInterpolant","_weightPrev","_offsetPrev","_weightNext","_offsetNext","LinearInterpolant","DiscreteInterpolant","KeyframeTrackConstructor","times","values","interpolation","AnimationUtils","convertArray","TimeBufferType","ValueBufferType","setInterpolation","DefaultInterpolation","validate","optimize","VectorKeyframeTrack","QuaternionLinearInterpolant","QuaternionKeyframeTrack","NumberKeyframeTrack","StringKeyframeTrack","BooleanKeyframeTrack","ColorKeyframeTrack","KeyframeTrack","AnimationClip","duration","tracks","resetDuration","MaterialLoader","BufferGeometryLoader","Loader","onLoadStart","onLoadProgress","onLoadComplete","JSONLoader","withCredentials","ObjectLoader","texturePath","CatmullRom","v0","v1","t2","QuadraticBezierP0","QuadraticBezierP1","QuadraticBezierP2","QuadraticBezier","CubicBezierP0","CubicBezierP1","CubicBezierP2","CubicBezierP3","CubicBezier","Curve","arcLengthDivisions","LineCurve","v2","CurvePath","curves","autoClose","EllipseCurve","aX","aY","xRadius","yRadius","aStartAngle","aEndAngle","aClockwise","aRotation","SplineCurve","CubicBezierCurve","v3","QuadraticBezierCurve","Path","currentPoint","setFromPoints","Shape","ShapePath","subPaths","currentPath","Font","FontLoader","AudioLoader","StereoCamera","eyeSep","CubeCamera","cubeResolution","cameraPX","cameraNX","cameraPY","cameraNY","cameraPZ","cameraNZ","AudioListener","AudioContext","gain","createGain","connect","destination","Audio","listener","getInput","autoplay","startTime","playbackRate","isPlaying","hasPlaybackControl","sourceType","filters","PositionalAudio","panner","createPanner","AudioAnalyser","audio","fftSize","analyser","createAnalyser","frequencyBinCount","getOutput","PropertyMixer","binding","typeName","mixFunction","_slerp","_select","_lerp","_mixBufferRegion","cumulativeWeight","useCount","referenceCount","Composite","targetGroup","optionalParsedPath","parsedPath","PropertyBinding","parseTrackName","_targetGroup","_bindings","subscribe_","rootNode","node","findNode","nodeName","AnimationObjectGroup","prototype","nCachedObjects_","_indicesByUUID","_paths","_parsedPaths","_bindingsIndicesByPath","stats","total","inUse","bindingsPerObject","AnimationAction","mixer","clip","localRoot","_mixer","_clip","_localRoot","nTracks","interpolants","interpolantSettings","endingStart","ZeroCurvatureEnding","endingEnd","interpolant","createInterpolant","settings","_interpolantSettings","_interpolants","_propertyBindings","_cacheIndex","_byClipCacheIndex","_timeScaleInterpolant","_weightInterpolant","LoopRepeat","_loopCount","_startTime","timeScale","_effectiveTimeScale","weight","_effectiveWeight","repetitions","paused","clampWhenFinished","zeroSlopeAtStart","zeroSlopeAtEnd","AnimationMixer","root","_root","_initMemoryManager","_accuIndex","Uniform","InstancedBufferGeometry","InterleavedBufferAttribute","interleavedBuffer","InterleavedBuffer","InstancedInterleavedBuffer","InstancedBufferAttribute","Raycaster","ray","params","threshold","PointCloud","ascSort","intersectObject","raycaster","intersects","recursive","raycast","Clock","autoStart","oldTime","elapsedTime","running","Spherical","Cylindrical","ImmediateRenderObject","VertexNormalsHelper","hex","nNormals","objGeometry","positions","SpotLightHelper","cone","getBoneList","boneList","isBone","SkeletonHelper","color1","color2","bone","VertexColors","PointLightHelper","sphereSize","RectAreaLightHelper","line","HemisphereLightHelper","rotateY","getAttribute","GridHelper","divisions","step","halfSize","PolarGridHelper","radials","circles","FaceNormalsHelper","DirectionalLightHelper","lightPlane","targetLine","CameraHelper","addLine","addPoint","pointMap","FaceColors","colorFrustum","colorCone","colorUp","colorTarget","colorCross","BoxHelper","Box3Helper","box","computeBoundingSphere","PlaneHelper","positions2","ArrowHelper","dir","headLength","headWidth","lineGeometry","coneGeometry","translate","setDirection","setLength","AxesHelper","CubicPoly","t0","t1","c0","c1","c2","c3","initCatmullRom","x3","tension","initNonuniformCatmullRom","dt0","dt1","dt2","calc","CatmullRomCurve3","curveType","CubicBezierCurve3","QuadraticBezierCurve3","LineCurve3","ArcCurve","aRadius","Face4","MeshFaceMaterial","materials","MultiMaterial","isMultiMaterial","Particle","ParticleSystem","PointCloudMaterial","ParticleBasicMaterial","ParticleSystemMaterial","Vertex","DynamicBufferAttribute","setDynamic","Int8Attribute","Uint8Attribute","Uint8ClampedAttribute","Int16Attribute","Uint16Attribute","Int32Attribute","Uint32Attribute","Float32Attribute","Float64Attribute","ClosedSplineCurve3","SplineCurve3","Spline","AxisHelper","BoundingBoxHelper","EdgesHelper","WireframeHelper","XHRLoader","BinaryTextureLoader","Projector","projectVector","project","unprojectVector","unproject","pickingRay","CanvasRenderer","Number","EPSILON","isInteger","isFinite","Function","assign","output","source","nextKey","hasOwnProperty","_listeners","listeners","hasEventListener","listenerArray","splice","dispatchEvent","MOUSE","LEFT","MIDDLE","RIGHT","RGBEFormat","RAD2DEG","chars","rnd","euclideanModulo","m","mapLinear","a1","a2","b1","b2","smoothstep","smootherstep","randInt","low","high","randFloat","randFloatSpread","range","degToRad","degrees","radToDeg","radians","ceil","isVector2","setScalar","scalar","setX","setY","setComponent","getComponent","addScalar","addScaledVector","subScalar","divide","applyMatrix3","clampScalar","minVal","maxVal","clampLength","round","roundToZero","negate","lengthSq","manhattanLength","distanceTo","distanceToSquared","dx","dy","manhattanDistanceTo","lerpVectors","getY","rotateAround","isMatrix4","n11","n12","n13","n14","n21","n22","n23","n24","n31","n32","n33","n34","n41","n42","n43","n44","te","me","extractBasis","xAxis","yAxis","zAxis","setFromMatrixColumn","makeBasis","scaleX","scaleY","scaleZ","makeRotationFromEuler","euler","isEuler","ae","af","be","bf","ce","cf","de","df","ac","ad","bc","bd","makeRotationFromQuaternion","y2","z2","xx","xy","xz","yy","yz","zz","wx","wy","wz","eye","a11","a12","a13","a14","a21","a22","a23","a24","a31","a32","a33","a34","a41","a42","a43","a44","b11","b12","b13","b14","b21","b22","b23","b24","b31","b32","b33","b34","b41","b42","b43","b44","applyToBufferAttribute","getZ","setXYZ","determinant","transpose","tmp","setPosition","throwOnDegenerate","t11","t12","t13","t14","det","msg","detInv","getMaxScaleOnAxis","scaleXSq","scaleYSq","scaleZSq","makeRotationX","makeRotationY","makeRotationZ","makeRotationAxis","axis","tx","ty","makeScale","makeShear","compose","sx","sy","sz","invSX","invSY","invSZ","setFromRotationMatrix","makePerspective","makeOrthographic","h","slerp","qa","qb","qm","slerpFlat","dst","src0","srcOffset0","src1","srcOffset1","y0","z0","w0","y1","z1","w1","sqrSin","len","tDir","onChangeCallback","s1","s2","s3","setFromAxisAngle","halfAngle","m11","m12","m13","m21","m22","m23","m31","m32","m33","trace","setFromUnitVectors","vFrom","vTo","inverse","conjugate","multiplyQuaternions","qax","qay","qaz","qaw","qbx","qby","qbz","qbw","cosHalfTheta","sinHalfTheta","halfTheta","ratioA","ratioB","setZ","multiplyVectors","applyEuler","applyQuaternion","applyAxisAngle","qx","qy","qz","qw","iz","iw","cross","ax","ay","az","bx","by","bz","projectOnVector","projectOnPlane","planeNormal","reflect","angleTo","acos","dz","setFromSpherical","sinPhiRadius","setFromCylindrical","setFromMatrixScale","isMatrix3","setFromMatrix4","transposeIntoArray","rotate","toJSON","meta","isRootObject","metadata","generator","wrap","ImageData","putImageData","toDataURL","transformUv","isVector4","setW","setAxisAngleFromQuaternion","setAxisAngleFromRotationMatrix","getW","create","ColorKeywords","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkgrey","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","green","greenyellow","grey","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightgrey","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rebeccapurple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","tan","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen","setHex","setStyle","setHSL","hue2rgb","handleAlpha","charAt","copyGammaToLinear","copyLinearToGamma","safeInverse","convertGammaToLinear","convertLinearToGamma","getHex","getHexString","getHSL","optionalTarget","hue","saturation","hsl","lightness","delta","getStyle","offsetHSL","addColors","common","specularmap","envmap","aomap","lightmap","emissivemap","bumpmap","normalmap","displacementmap","roughnessmap","metalnessmap","gradientmap","merge","merged","uniforms_src","uniforms_dst","parameter_src","alphamap_fragment","alphamap_pars_fragment","alphatest_fragment","aomap_fragment","aomap_pars_fragment","begin_vertex","beginnormal_vertex","bsdfs","bumpmap_pars_fragment","clipping_planes_fragment","clipping_planes_pars_fragment","clipping_planes_pars_vertex","clipping_planes_vertex","color_fragment","color_pars_fragment","color_pars_vertex","color_vertex","cube_uv_reflection_fragment","defaultnormal_vertex","displacementmap_pars_vertex","displacementmap_vertex","emissivemap_fragment","emissivemap_pars_fragment","encodings_fragment","encodings_pars_fragment","envmap_fragment","envmap_pars_fragment","envmap_pars_vertex","envmap_vertex","fog_vertex","fog_pars_vertex","fog_fragment","fog_pars_fragment","gradientmap_pars_fragment","lightmap_fragment","lightmap_pars_fragment","lights_lambert_vertex","lights_pars","lights_phong_fragment","lights_phong_pars_fragment","lights_physical_fragment","lights_physical_pars_fragment","lights_template","logdepthbuf_fragment","logdepthbuf_pars_fragment","logdepthbuf_pars_vertex","logdepthbuf_vertex","map_fragment","map_pars_fragment","map_particle_fragment","map_particle_pars_fragment","metalnessmap_fragment","metalnessmap_pars_fragment","morphnormal_vertex","morphtarget_pars_vertex","morphtarget_vertex","normal_fragment","normalmap_pars_fragment","packing","premultiplied_alpha_fragment","project_vertex","dithering_fragment","dithering_pars_fragment","roughnessmap_fragment","roughnessmap_pars_fragment","shadowmap_pars_fragment","shadowmap_pars_vertex","shadowmap_vertex","shadowmask_pars_fragment","skinbase_vertex","skinning_pars_vertex","skinning_vertex","skinnormal_vertex","specularmap_fragment","specularmap_pars_fragment","tonemapping_fragment","tonemapping_pars_fragment","uv_pars_fragment","uv_pars_vertex","uv_vertex","uv2_pars_fragment","uv2_pars_vertex","uv2_vertex","worldpos_vertex","cube_frag","cube_vert","depth_frag","depth_vert","distanceRGBA_frag","distanceRGBA_vert","equirect_frag","equirect_vert","linedashed_frag","linedashed_vert","meshbasic_frag","meshbasic_vert","meshlambert_frag","meshlambert_vert","meshphong_frag","meshphong_vert","meshphysical_frag","meshphysical_vert","normal_frag","normal_vert","points_frag","points_vert","shadow_frag","shadow_vert","basic","lambert","phong","standard","dashed","tFlip","equirect","tEquirect","distanceRGBA","physical","makeEmpty","expandByPoint","setFromCenterAndSize","isEmpty","getCenter","expandByVector","expandByScalar","containsBox","intersectsBox","clampPoint","distanceToPoint","intersect","union","isMaterial","newValue","currentValue","extractFromCache","isRoot","JSON","stringify","parse","srcPlanes","dstPlanes","isBox3","setFromArray","minX","minY","minZ","maxX","maxY","maxZ","setFromBufferAttribute","expandByObject","intersectsSphere","closestPoint","sphere","intersectsPlane","getBoundingSphere","optionalCenter","maxRadiusSq","empty","radiusSum","deltaLengthSq","getBoundingBox","setComponents","setFromNormalAndCoplanarPoint","setFromCoplanarPoints","inverseNormalLength","distanceToSphere","projectPoint","intersectLine","denominator","intersectsLine","startSign","endSign","coplanarPoint","m1","optionalNormalMatrix","referencePoint","frustum","me0","me1","me2","me3","me4","me5","me6","me7","me8","me9","me10","me11","me12","me13","me14","me15","negRadius","d1","d2","RotationOrders","asin","setFromVector3","reorder","newOrder","toVector3","optionalResult","channel","toggle","isObject3D","applyMatrix","setRotationFromAxisAngle","setRotationFromEuler","setRotationFromMatrix","setRotationFromQuaternion","rotateOnAxis","q1","rotateOnWorldAxis","rotateX","rotateZ","translateOnAxis","translateX","translateY","translateZ","localToWorld","worldToLocal","getObjectById","getObjectByProperty","getObjectByName","child","getWorldPosition","getWorldQuaternion","getWorldRotation","getWorldScale","getWorldDirection","traverseVisible","traverseAncestors","force","serialize","library","element","uuids","isOrthographicCamera","setViewOffset","fullWidth","fullHeight","offsetX","offsetY","clearViewOffset","zoomW","zoomH","scaleW","scaleH","computeBoundingBox","obj","addFace","tempNormals","tempUVs","tempUVs2","cb","ab","fl","vA","vB","vC","areaWeighted","vl","computeFlatVertexNormals","computeMorphNormals","__originalFaceNormal","__originalVertexNormals","tmpGeo","faceNormals","faceNormal","dstNormalsFace","dstNormalsVertex","computeLineDistances","materialIndexOffset","vertexOffset","vertices1","vertices2","faces1","faces2","uvs1","colors1","colors2","vertexCopy","faceCopy","faceVertexNormals","faceVertexColors","uvCopy","mergeMesh","mesh","verticesMap","unique","changes","faceIndicesToRemove","idx","diff","sortFacesByMaterialIndex","materialIndexSort","_id","newUvs1","newUvs2","setBit","getNormalIndex","normalsHash","getColorIndex","colorsHash","getUvIndex","uvsHash","hasFaceVertexUv","hasFaceNormal","hasFaceVertexNormal","hasFaceColor","hasFaceVertexColor","faceType","uvsCopy","morphTarget","morphNormal","srcVertexNormal","destVertexNormal","isBufferAttribute","setArray","copyAt","copyArray","copyColorsArray","copyIndicesArray","copyVector2sArray","vectors","copyVector3sArray","copyVector4sArray","setXY","setXYZW","onUpload","computeGroups","fromGeometry","morphTargetsPosition","hasFaceVertexUv2","morphTargetsLength","morphTargetsNormal","morphNormalsLength","hasSkinIndices","hasSkinWeights","vertexUvs","getIndex","clearGroups","setDrawRange","direct","__directGeometry","lineDistance","fromDirectGeometry","TypeArray","isNaN","pA","pB","pC","attribute1","attributeArray1","attribute2","attributeArray2","attributeSize","toNonIndexed","array2","morphAttribute","at","recast","closestPointToPoint","directionDistance","distanceSqToPoint","distanceSqToSegment","segCenter","segDir","optionalPointOnRay","optionalPointOnSegment","s0","sqrDist","extDet","segExtent","a01","b0","invDet","intersectSphere","tca","radius2","thc","distanceToPlane","intersectPlane","distToPoint","intersectBox","tmin","tmax","tymin","tymax","tzmin","tzmax","invdirx","invdiry","invdirz","intersectTriangle","backfaceCulling","DdN","DdQxE2","DdE1xQ","QdN","distanceSq","closestPointToPointParameter","startP","startEnd","clampToLine","startEnd2","startEnd_startP","resultLengthSq","barycoordFromPoint","dot00","dot01","dot02","dot11","dot12","denom","invDenom","setFromPointsAndIndices","i0","i1","i2","triangle","area","midpoint","edgeList","projectedPoint","minDistance","setDrawMode","morphTargetDictionary","ml","String","uvIntersection","uv1","uv3","barycoord","checkIntersection","intersectionPointWorld","checkBufferGeometryIntersection","intersection","intersectionPoint","faceIndex","inverseMatrix","tempA","tempB","tempC","fvA","fvB","fvC","faceMaterial","tl","targets","uvs_f","isPerspectiveCamera","setFocalLength","focalLength","vExtentSlope","getFilmHeight","atan","getFocalLength","getEffectiveFOV","getFilmWidth","skew","vecX","vecY","wantedRotation","isSpriteMaterial","intersectPoint","worldPosition","worldScale","guessSizeSq","level","addLevel","getObjectForDistance","matrixPosition","offsetMatrix","identityMatrix","gbone","pos","rotq","scl","sw","vec","skinWeight","linePrecision","precisionSq","vStart","vEnd","interSegment","interRay","distSq","nbVertices","testPoint","rayPointDistanceSq","localThresholdSq","distanceToRay","localThreshold","contour","triangulate","snip","verts","px","py","bX","bY","cX","cY","apx","apy","bpx","bpy","cpx","cpy","cCROSSap","bCROSScp","aCROSSbp","vertIndices","nv","removeDupEndPts","point_in_segment_2D_colin","inSegPt1","inSegPt2","inOtherPt","intersect_segments_2D","inSeg1Pt1","inSeg1Pt2","inSeg2Pt1","inSeg2Pt2","inExcludeAdjacentSegs","seg1dx","seg1dy","seg2dx","seg2dy","seg1seg2dx","seg1seg2dy","limit","perpSeg1","perpSeg2","factorSeg1","seg1Pt","seg2Pt","seg1min","seg1max","seg1minVal","seg1maxVal","seg2min","seg2max","seg2minVal","seg2maxVal","isPointInsideAngle","inVertex","inLegFromPt","inLegToPt","legFromPtX","legFromPtY","legToPtX","legToPtY","otherPtX","otherPtY","from2toAngle","from2otherAngle","other2toAngle","forEach","allPointsMap","allpoints","hl","shapeWithoutHoles","hole","holeIndex","shapeIndex","shapePt","holePt","holeIdx","cutKey","tmpShape1","tmpShape2","tmpHole1","tmpHole2","indepHoles","failedCuts","minShapeIndex","counter","h2","inShapeIdx","inHoleIdx","lastShapeIdx","prevShapeIdx","nextShapeIdx","insideAngle","lastHoleIdx","prevHoleIdx","nextHoleIdx","inShapePt","inHolePt","sIdx","nextIdx","ihIdx","chkHole","hIdx","triangles","pts","getArrays","positionAttribute","verticesArray","uvAttribute","IndexAttribute","sl","arrays","scalePt2","pt","getBevelVec","inPt","inPrev","inNext","v_trans_x","v_trans_y","shrink_by","v_prev_x","v_prev_y","v_next_x","v_next_y","v_prev_lensq","collinear0","v_prev_len","v_next_len","ptPrevShift_x","ptPrevShift_y","ptNextShift_x","ptNextShift_y","sf","v_trans_lensq","direction_eq","sidewalls","layeroffset","steps","bevelSegments","slen1","vlen","slen2","f4","placeholder","f3","addVertex","nextIndex","uvgen","generateTopUV","addUV","generateSideWallUV","indicesArray","vector2","extrudePts","splineTube","binormal","position2","extrudePath","extrudeByPath","UVGenerator","WorldUVGenerator","getSpacedPoints","ahole","shapePoints","bs","vert","flen","contourMovements","oneHoleMovements","holesMovements","verticesMovements","extrudeMaterial","indexA","indexB","indexC","a_x","a_y","b_x","b_y","c_x","c_y","indexD","a_z","b_z","c_z","d_x","d_y","d_z","Geometries","freeze","Materials","Cache","files","file","loading","load","cached","setTimeout","dataUriRegex","dataUriRegexResult","mimeType","isBase64","decodeURIComponent","atob","response","responseType","toLowerCase","charCodeAt","Blob","parser","DOMParser","parseFromString","request","XMLHttpRequest","open","callbacks","status","overrideMimeType","header","requestHeader","setRequestHeader","send","setPath","setResponseType","setWithCredentials","setMimeType","loader","loaded","texDatas","mipmapCount","isCubemap","texData","crossOrigin","substr","src","setCrossOrigin","urls","isJPEG","search","arraySlice","from","to","isTypedArray","forceClone","ArrayBuffer","isView","DataView","getKeyframeOrder","compareTime","sortedArray","nValues","srcOffset","flattenJSON","jsonKeys","valuePropertyName","evaluate","pp","validate_interval","seek","linear_scan","forward_scan","giveUpAt","afterEnd_","t1global","beforeStart_","mid","intervalChanged_","interpolate_","DefaultSettings_","getSettings_","copySampleValue_","iPrev","iNext","tPrev","tNext","halfDt","o1","o0","oP","oN","wP","wN","ppp","sP","sN","offset1","offset0","weight1","weight0","KeyframeTrackPrototype","InterpolantFactoryMethodDiscrete","getValueSize","InterpolantFactoryMethodLinear","InterpolantFactoryMethodSmooth","factoryMethod","message","ValueTypeName","getInterpolation","shift","timeOffset","trim","endTime","nKeys","valid","prevTime","currTime","smoothInterpolation","writeIndex","keep","offsetP","offsetN","readOffset","writeOffset","json","trackType","_getTrackTypeForValueTypeName","track","jsonTracks","frameTime","fps","clipTracks","CreateFromMorphTargetSequence","morphTargetSequence","noLoop","numMorphTargets","findByName","objectOrClipArray","clipArray","animations","CreateClipsFromMorphTargetSequences","animationToMorphTargets","parts","animationMorphTargets","clips","parseAnimation","animation","addNonemptyTrack","trackName","animationKeys","propertyName","destTracks","clipName","hierarchyTracks","hierarchy","morphTargetNames","morphTargetName","animationKey","boneName","setTextures","getTexture","shading","typedArray","TYPED_ARRAYS","drawcalls","offsets","Handlers","handlers","regex","extractUrlBase","initMaterials","createMaterial","BlendingMode","textureLoader","materialLoader","loadTexture","fullPath","mapDiffuseRepeat","mapDiffuseOffset","mapDiffuseWrap","mapDiffuseAnisotropy","mapEmissiveRepeat","mapEmissiveOffset","mapEmissiveWrap","mapEmissiveAnisotropy","mapLightRepeat","mapLightOffset","mapLightWrap","mapLightAnisotropy","mapAORepeat","mapAOOffset","mapAOWrap","mapAOAnisotropy","mapBumpRepeat","mapBumpOffset","mapBumpWrap","mapBumpAnisotropy","mapNormalRepeat","mapNormalOffset","mapNormalWrap","mapNormalAnisotropy","mapSpecularRepeat","mapSpecularOffset","mapSpecularWrap","mapSpecularAnisotropy","mapMetalnessRepeat","mapMetalnessOffset","mapMetalnessWrap","mapMetalnessAnisotropy","mapRoughnessRepeat","mapRoughnessOffset","mapRoughnessWrap","mapRoughnessAnisotropy","mapAlphaRepeat","mapAlphaOffset","mapAlphaWrap","mapAlphaAnisotropy","setTexturePath","parseModel","isBitSet","fi","zLength","colorIndex","normalIndex","uvIndex","isQuad","hasMaterial","faceA","faceB","uvLayer","nUvLayers","parseSkin","influencesPerVertex","parseMorphing","dstVertices","srcVertices","morphColors","parseAnimations","outputAnimations","morphAnimationClips","substring","lastIndexOf","parseGeometries","parseImages","parseTextures","parseMaterials","parseObject","geometryLoader","bufferGeometryLoader","details","parseConstant","TEXTURE_MAPPING","TEXTURE_WRAPPING","TEXTURE_FILTER","getGeometry","getMaterial","UVMapping","getPoint","getUtoTmapping","getPoints","getLength","lengths","getLengths","cacheArcLengths","current","last","sum","updateArcLengths","targetArcLength","arcLengths","comparison","lengthBefore","getTangent","pt1","getTangentAt","mat","MAX_VALUE","tz","isLineCurve","curve","closePath","startPoint","endPoint","curveLengths","getCurveLengths","segmentLength","lens","cacheLengths","sums","resolution","isEllipseCurve","isSplineCurve","twoPi","deltaAngle","samePoints","intPoint","isCubicBezierCurve","isQuadraticBezierCurve","PathPrototype","moveTo","lineTo","quadraticCurveTo","aCPx","aCPy","bezierCurveTo","aCP1x","aCP1y","aCP2x","aCP2y","splineThru","npts","absarc","absellipse","ellipse","firstPoint","lastPoint","getPointsHoles","holesPts","toShapes","isCCW","noHoles","toShapesNoHoles","inSubpaths","tmpPath","tmpShape","solid","holesFirst","tmpPoints","betterShapeHoles","newShapes","newShapeHoles","mainIdx","ambiguous","toChange","sLen","sho","ho","hole_unassigned","s2Idx","inPolygon","polyLen","inside","edgeLowPt","edgeHighPt","edgeDx","edgeDy","perpEdge","froms","tos","tmpHoles","createPath","glyph","glyphs","cpx0","cpy0","cpx1","cpy1","cpx2","cpy2","laste","outline","_cachedOutline","action","ha","paths","line_height","yMax","yMin","underlineThickness","char","ret","webkitAudioContext","setContext","decodeAudioData","audioBuffer","instance","eyeRight","eyeLeft","xmin","xmax","eyeSepOnProjection","ymax","removeFilter","disconnect","getFilter","setFilter","getMasterVolume","setMasterVolume","positionX","setValueAtTime","currentTime","positionY","positionZ","forwardX","forwardY","forwardZ","upX","upY","upZ","setOrientation","setNodeSource","audioNode","setBuffer","play","createBufferSource","onended","onEnded","pause","stop","getFilters","setFilters","setPlaybackRate","getPlaybackRate","getLoop","setLoop","getVolume","setVolume","getRefDistance","refDistance","setRefDistance","getRolloffFactor","rolloffFactor","setRolloffFactor","getDistanceModel","distanceModel","setDistanceModel","getMaxDistance","maxDistance","setMaxDistance","getFrequencyData","getByteFrequencyData","getAverageFrequency","accumulate","accuIndex","currentWeight","mix","originalValueOffset","saveOriginalState","getValue","restoreOriginalState","firstValidIndex","bindings","unbind","isAnimationObjectGroup","sanitizeNodeName","directoryRe","nodeRe","objectRe","propertyRe","trackRe","RegExp","supportedObjectNames","matches","results","objectName","objectIndex","propertyIndex","lastDot","searchNodeSubtree","childNode","subTreeNode","_getValue_unavailable","_setValue_unavailable","BindingType","Direct","EntireArray","ArrayElement","HasFromToArray","Versioning","None","NeedsUpdate","MatrixWorldNeedsUpdate","GetterByBindingType","resolvedProperty","SetterByBindingTypeAndVersioning","targetObject","dest","targetArray","sourceArray","nodeProperty","versioning","bindingType","_getValue_unbound","_setValue_unbound","nObjects","nCachedObjects","indicesByUUID","parsedPaths","nBindings","knownObject","firstActiveIndex","lastCachedObject","bindingsForPath","lastCached","lastCachedIndex","firstActiveObject","firstActive","uncache","lastObject","indicesByPath","unsubscribe_","lastBindingsIndex","lastBindings","_activateAction","_deactivateAction","stopFading","stopWarping","isRunning","_isActiveAction","isScheduled","startAt","setEffectiveWeight","getEffectiveWeight","fadeIn","_scheduleFading","fadeOut","crossFadeFrom","fadeOutAction","warp","fadeInDuration","fadeOutDuration","startEndRatio","endStartRatio","crossFadeTo","fadeInAction","weightInterpolant","_takeBackControlInterpolant","setEffectiveTimeScale","getEffectiveTimeScale","setDuration","syncWith","halt","startTimeScale","endTimeScale","now","_lendControlInterpolant","timeScaleInterpolant","getMixer","getClip","getRoot","_update","deltaTime","timeDirection","_updateWeight","timeRunning","_updateTimeScale","clipTime","_updateTime","propertyMixers","interpolantValue","loopCount","_setEndings","handle_stop","pingPong","loopDelta","pending","atStart","atEnd","weightNow","weightThen","_bindAction","prototypeAction","rootUuid","bindingsByRoot","_bindingsByRootAndName","bindingsByName","_addInactiveBinding","clipUuid","actionsForClip","_actionsByClip","knownActions","_addInactiveAction","_lendBinding","_lendAction","_takeBackBinding","_takeBackAction","_actions","_nActiveActions","_nActiveBindings","_controlInterpolants","_nActiveControlInterpolants","actions","controlInterpolants","actionsByClip","actionByRoot","_removeInactiveAction","lastInactiveAction","cacheIndex","knownActionsForClip","lastKnownAction","byClipCacheIndex","_removeInactiveBindingsForAction","_removeInactiveBinding","prevIndex","lastActiveIndex","firstInactiveAction","firstInactiveIndex","lastActiveAction","bindingByName","propBinding","lastInactiveBinding","remove_empty_map","_","firstInactiveBinding","lastActiveBinding","_controlInterpolantsResultBuffer","__cacheIndex","lastActiveInterpolant","clipAction","optionalRoot","clipObject","existingAction","newAction","stopAllAction","nActions","uncacheClip","actionsToRemove","uncacheRoot","uncacheAction","isInterleavedBuffer","setFromCamera","coords","intersectObjects","performance","Date","getElapsedTime","getDelta","newTime","other","makeSafe","vec3","objPos","objNorm","coneLength","coneWidth","boneMatrix","matrixWorldInv","hx","hy","setPoint","setColor","pz","isCatmullRomCurve3","isCubicBezierCurve3","isQuadraticBezierCurve3","isLineCurve3","isArcCurve","SceneUtils","createMultiMaterialObject","detach","attach","construct","createPointsGeometry","createGeometry","createSpacedPointsGeometry","fromPoints","initFromArray","getControlPointsArray","reparametrizeByArcLength","setColors","isIntersectionBox","isIntersectionSphere","random16","nearestPowerOfTwo","nextPowerOfTwo","flattenToArrayOffset","multiplyVector3","multiplyVector3Array","applyToBuffer","applyToVector3Array","extractPosition","getPosition","multiplyToArray","multiplyVector4","rotateAxis","crossVector","rotateByAxis","makeFrustum","isIntersectionLine","isIntersectionPlane","extractAllPoints","extrude","makeGeometry","fromAttribute","distanceToManhattan","lengthManhattan","setEulerFromRotationMatrix","setEulerFromQuaternion","getPositionFromMatrix","getScaleFromMatrix","getColumnFromMatrix","applyProjection","computeTangents","getChildByName","renderDepth","eulerOrder","useQuaternion","setLens","onlyShadow","shadowCameraFov","shadowCameraLeft","shadowCameraRight","shadowCameraTop","shadowCameraBottom","shadowCameraVisible","shadowDarkness","shadowMapWidth","shadowMapHeight","addIndex","addDrawCall","clearDrawCalls","computeOffsets","wrapAround","wrapRGB","metal","getCurrentRenderTarget","getPrecision","resetGLState","supportsFloatTextures","supportsHalfFloatTextures","supportsStandardDerivatives","supportsCompressedTextureS3TC","supportsCompressedTexturePVRTC","supportsBlendMinMax","supportsInstancedArrays","enableScissorTest","addPrePlugin","addPostPlugin","updateShadowMap","shadowMapCullFace","getData","updateCubeMap","GeometryUtils","geometry1","ImageUtils","loadTextureCube","loadCompressedTexture","loadCompressedTextureCube","CullFaceFrontBack","FrontFaceDirectionCCW","BasicShadowMap","FlatShading","SmoothShading","LoopOnce","LoopPingPong","InterpolateDiscrete","InterpolateLinear","InterpolateSmooth","ZeroSlopeEnding","WrapAroundEnding","LogLuvEncoding","CubeGeometry","LineStrip","LinePieces","ColladaLoader","convertUpAxis","getElementsByTagName","xml","childNodes","parseStrings","parseFloats","parseInts","parseId","generateId","parseAssetUnit","parseAssetUpAxis","textContent","parseLibrary","libraryName","buildLibrary","builder","build","getBuild","sources","samplers","channels","nodeType","parseSource","parseAnimationSampler","parseAnimationChannel","inputs","semantic","sid","arraySyntax","memberSyntax","member","sampler","buildAnimation","inputId","INPUT","outputId","OUTPUT","inputSource","outputSource","buildAnimationChannel","createKeyframeTracks","getAnimation","nodes","object3D","getNode","transforms","defaultMatrix","keyframes","prepareAnimationData","ascending","transformAnimationData","positionData","quaternionData","scaleData","keyframe","property","defaultValue","createMissingKeyframes","prev","getPrev","getNext","interpolate","parseAnimationClip","buildAnimationClip","animationTracks","getAnimationClip","parseController","skin","controllers","bindShapeMatrix","joints","parseJoints","vertexWeights","parseVertexWeights","vcount","buildController","buildSkin","weights","descending","jointOffset","JOINT","weightOffset","WEIGHT","jointSource","inverseSource","INV_BIND_MATRIX","jointCount","vertexSkinData","skinIndex","weightId","boneInverse","getController","parseImage","init_from","buildImage","getImage","parseEffect","profile","parseEffectProfileCOMMON","effects","surfaces","parseEffectNewparam","technique","parseEffectTechnique","parseEffectSurface","parseEffectSampler","parseEffectParameters","parseEffectParameter","extra","parseEffectParameterTexture","parseEffectParameterTextureExtra","parseEffectParameterTextureExtraTechnique","toUpperCase","buildEffect","getEffect","parseMaterial","buildMaterial","textureObject","effect","surface","wrapU","wrapV","offsetU","offsetV","repeatU","repeatV","parameter","float","parseCamera","optics","parseCameraOptics","parseCameraTechnique","parseCameraParameters","buildCamera","yfov","aspect_ratio","znear","zfar","ymag","xmag","aspectRatio","parseLight","parseLightTechnique","parseLightParameters","falloffAngle","buildLight","getLight","parseGeometry","primitives","parseGeometryVertices","parseGeometryPrimitive","accessor","primitive","groupPrimitives","buildGeometry","groupedPrimitives","buildGeometryType","materialKeys","triangleCount","input","buildGeometryData","pushVector","sourceStride","maxcount","parseKinematicsModel","links","parseKinematicsTechniqueCommon","kinematicsModels","buildKinematicsModel","getKinematicsModel","parseKinematicsJoint","parseKinematicsLink","parseKinematicsJointParameter","limits","static","zeroPosition","middlePosition","attachments","parseKinematicsAttachment","parseKinematicsTransform","joint","parseKinematicsScene","bindJointAxis","parseKinematicsBindJointAxis","kinematicsScenes","param","tmpJointIndex","jointIndex","buildKinematicsScene","getKinematicsScene","buildTransformList","collada","querySelector","prepareNodes","hasAttribute","setAttribute","parseNode","instanceCameras","instanceControllers","instanceLights","instanceGeometries","instanceNodes","parseNodeInstance","skeletons","instances","symbol","buildSkeleton","boneData","sortedBoneData","buildBoneHierarchy","processed","buildNode","controller","newObjects","buildObjects","resolveMaterialBinding","instanceMaterials","parseVisualScene","visualScenes","buildVisualScene","getVisualScene","timeEnd","asset","upAxis","kinematics","kinematicsModelId","kinematicsSceneId","visualSceneId","kinematicsModel","kinematicsScene","visualScene","jointMap","targetElement","parentVisualElement","parentElement","visualElement","visualElementName","m0","getJointValue","jointData","setJointValue","GLTFLoader","GLTFRegistry","removeAll","GLTFLightsExtension","EXTENSIONS","KHR_LIGHTS","lightId","lightNode","constantAttenuation","linearAttenuation","quadraticAttenuation","fallOffAngle","fallOffExponent","GLTFMaterialsCommonExtension","KHR_MATERIALS_COMMON","GLTFBinaryExtension","KHR_BINARY_GLTF","content","body","headerView","BINARY_EXTENSION_HEADER_LENGTH","magic","convertUint8ArrayToString","getUint32","BINARY_EXTENSION_HEADER_MAGIC","chunkView","chunkIndex","byteLength","chunkLength","chunkType","BINARY_EXTENSION_CHUNK_TYPES","contentArray","BIN","byteOffset","GLTFMaterialsPbrSpecularGlossinessExtension","KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS","specularGlossinessParams","getMaterialType","extendParams","pbrSpecularGlossiness","specularMapParsFragmentChunk","glossinessMapParsFragmentChunk","specularMapFragmentChunk","glossinessMapFragmentChunk","lightPhysicalFragmentChunk","glossiness","glossinessMap","diffuseFactor","diffuseTexture","assignTexture","glossinessFactor","specularFactor","specularGlossinessTexture","specGlossIndex","Promise","all","isGLTFSpecularGlossinessMaterial","cloneMaterial","refreshUniforms","offsetRepeat","USE_GLOSSINESSMAP","USE_ROUGHNESSMAP","_each","thisObj","resolve","fns","then","TextDecoder","decode","fromCharCode","createDefaultMaterial","addMorphTargets","meshDef","primitiveDef","dependencies","normalAttribute","attributeName","POSITION","accessors","NORMAL","GLTFParser","fileLoader","extensionsUsed","scenes","materialParams","khrMaterial","materialValues","specularTexture","shininessFactor","WEBGL_CONSTANTS","FLOAT_MAT3","FLOAT_MAT4","FLOAT_VEC2","FLOAT_VEC3","FLOAT_VEC4","SAMPLER_2D","WEBGL_COMPONENT_TYPES","5120","5121","5122","5123","5125","5126","WEBGL_FILTERS","9728","9729","9984","9985","9986","9987","WEBGL_WRAPPINGS","33071","33648","10497","WEBGL_TEXTURE_FORMATS","6406","6407","6408","6409","6410","WEBGL_TEXTURE_DATATYPES","32819","32820","33635","WEBGL_TYPE_SIZES","SCALAR","VEC2","VEC3","VEC4","MAT2","MAT3","MAT4","PATH_PROPERTIES","translation","INTERPOLATION","CATMULLROMSPLINE","CUBICSPLINE","STEP","ALPHA_MODES","OPAQUE","MASK","_withDependencies","_dependencies","dependency","fnName","fn","getDependencies","catch","getDependency","cacheKey","defs","def","loadBuffer","bufferIndex","bufferDef","uri","reject","loadBufferView","bufferViewIndex","bufferViewDef","bufferViews","loadAccessors","bufferView","TypedArray","componentType","elementBytes","itemBytes","byteStride","ib","textureIndex","URL","webkitURL","textureDef","sourceURI","isObjectURL","blob","createObjectURL","revokeObjectURL","textureName","loadMaterials","materialType","materialExtensions","khcExtension","sgExtension","pbrMetallicRoughness","metallicRoughness","baseColorFactor","baseColorTexture","metallicFactor","roughnessFactor","metallicRoughnessTexture","alphaMode","alphaCutoff","normalTexture","strength","emissiveFactor","emissiveTexture","_material","extras","loadGeometries","attributeId","attributeEntry","bufferAttribute","loadMeshes","meshes","meshIndex","useVertexColors","useFlatShading","specGlossExtension","loadCamera","cameraIndex","cameraDef","xfov","loadSkins","skins","inverseBindMatrices","loadAnimations","animationId","inputAccessor","outputAccessor","TypedKeyframeTrack","targetName","targetNames","loadNodes","meshReferences","meshUses","nodeIndex","nodeDef","__nodes","skinnedMeshes","skinEntry","skinnedMesh","jointId","jointNode","loadScenes","buildNodeHierachy","nodeId","parentObject","allNodes","_node","_scene","MTLLoader","setBaseUrl","setMaterialOptions","materialOptions","delimiter_pattern","materialsInfo","ss","materialCreator","MaterialCreator","setManager","setMaterials","baseUrl","materialsArray","nameLookup","converted","mn","covmat","prop","save","lprop","normalizeRGB","ignoreZeroRGBs","preload","materialName","getAsArray","createMaterial_","setMapForType","mapType","texParams","getTextureParams","matParams","items","OBJLoader","ParserState","materialLibraries","startObject","fromDeclaration","previousMaterial","currentMaterial","_finalize","smooth","startMaterial","libraries","previous","inherited","mtllib","groupEnd","cloned","lastMultiMaterial","mi","declared","finalize","parseVertexIndex","parseNormalIndex","parseUVIndex","addVertexLine","addNormal","addColor","addUVLine","ua","ub","uc","na","nb","nc","vLen","ia","ic","uvLen","nLen","addLineGeometry","vi","uvi","object_pattern","material_library_pattern","material_use_pattern","lineFirstChar","trimLeft","lineData","vertexData","faceVertices","vertexParts","lineParts","lineVertices","lineUVs","li","llen","createdMaterials","miLen","sourceMaterial","materialLine","_Group","_tweens","_tweensAddedDuringUpdate","getAll","tweenId","tween","getId","preserve","tweenIds","TWEEN","_isPlaying","_nextId","nextId","process","hrtime","getTime","Tween","_object","_valuesStart","_valuesEnd","_valuesStartRepeat","_duration","_repeat","_repeatDelayTime","_yoyo","_reversed","_delayTime","_easingFunction","Easing","Linear","_interpolationFunction","Interpolation","_chainedTweens","_onStartCallback","_onStartCallbackFired","_onUpdateCallback","_onCompleteCallback","_onStopCallback","_group","stopChainedTweens","numChainedTweens","delay","repeatDelay","yoyo","easing","chain","onComplete","onStop","elapsed","Quadratic","In","Out","InOut","Cubic","Quartic","Quintic","Sinusoidal","Exponential","Circular","Elastic","Back","Bounce","Utils","Bezier","pw","bn","Bernstein","fc","Factorial","anArray","arr","str","num","placeHoldersCount","b64","toByteArray","placeHolders","Arr","L","revLookup","tripletToBase64","lookup","encodeChunk","uint8","fromByteArray","extraBytes","len2","createLink","href","head","link","createElement","rel","appendChild","createStyle","cssText","sheet","innerHTML","styleSheet","createTextNode","defaultSetTimout","defaultClearTimeout","runTimeout","fun","cachedSetTimeout","runClearTimeout","marker","cachedClearTimeout","clearTimeout","cleanUpNextTick","draining","currentQueue","queue","queueIndex","drainQueue","timeout","run","Item","noop","nextTick","args","title","browser","env","argv","versions","on","addListener","once","off","removeListener","removeAllListeners","emit","prependListener","prependOnceListener","cwd","chdir","umask","Buffer","require","isBuffer","typedArraySupport","__proto__","foo","kMaxLength","TYPED_ARRAY_SUPPORT","that","RangeError","arg","encodingOrOffset","allocUnsafe","fromArrayBuffer","fromString","fromObject","assertSize","alloc","fill","checked","isEncoding","actual","write","fromArrayLike","isnan","SlowBuffer","loweredCase","utf8ToBytes","base64ToBytes","slowToString","hexSlice","utf8Slice","asciiSlice","latin1Slice","base64Slice","utf16leSlice","swap","bidirectionalIndexOf","val","arrayIndexOf","read","buf","indexSize","readUInt16BE","arrLength","valLength","foundIndex","found","hexWrite","remaining","strLen","parsed","utf8Write","blitBuffer","asciiWrite","asciiToBytes","latin1Write","base64Write","ucs2Write","utf16leToBytes","base64","res","firstByte","codePoint","bytesPerSequence","secondByte","thirdByte","fourthByte","tempCodePoint","decodeCodePointsArray","codePoints","MAX_ARGUMENTS_LENGTH","out","toHex","bytes","checkOffset","ext","checkInt","objectWriteUInt16","littleEndian","objectWriteUInt32","checkIEEE754","writeFloat","noAssert","ieee754","writeDouble","base64clean","stringtrim","INVALID_BASE64_RE","leadSurrogate","byteArray","hi","lo","INSPECT_MAX_BYTES","poolSize","_augment","Symbol","species","configurable","allocUnsafeSlow","_isBuffer","compare","swap16","swap32","swap64","inspect","thisStart","thisEnd","thisCopy","targetCopy","includes","_arr","newBuf","sliceLen","readUIntLE","mul","readUIntBE","readUInt8","readUInt16LE","readUInt32LE","readUInt32BE","readIntLE","readIntBE","readInt8","readInt16LE","readInt16BE","readInt32LE","readInt32BE","readFloatLE","readFloatBE","readDoubleLE","readDoubleBE","writeUIntLE","writeUIntBE","writeUInt8","writeUInt16LE","writeUInt16BE","writeUInt32LE","writeUInt32BE","writeIntLE","writeIntBE","writeInt8","writeInt16LE","writeInt16BE","writeInt32LE","writeInt32BE","writeFloatLE","writeFloatBE","writeDoubleLE","writeDoubleBE","targetStart","useColors","documentElement","firebug","exception","table","navigator","userAgent","$1","formatArgs","namespace","lastC","namespaces","storage","removeItem","debug","localstorage","localStorage","chrome","local","formatters","selectColor","prevColor","disabled","self","coerce","formatter","skips","names","stack","toObject","assignKey","isObj","getOwnPropertySymbols","symbols","propIsEnumerable","propertyIsEnumerable","st","gt","ot","it","ut","F","querySelectorAll","E","R","ft","lt","currentTarget","attrChange","attrName","Y","attributeChangedCallback","prevValue","ct","$","ht","G","vt","U","Z","dt","nt","observe","X","Q","tt","createdCallback","created","I","S","contains","mt","rt","et","C","isPrototypeOf","getOwnPropertyDescriptor","A","getOwnPropertyNames","O","getPrototypeOf","M","setPrototypeOf","D","yt","H","MutationObserver","WebKitMutationObserver","HTMLElement","Element","Node","cloneNode","W","characterData","attributeOldValue","V","J","webkitRequestAnimationFrame","mozRequestAnimationFrame","msRequestAnimationFrame","K","CustomEvent","bubbles","className","addedNodes","removedNodes","oldValue","childList","subtree","innerHTMLHelper","dtype","flattenVertexData","dim","dstLength","Ctor","iterator","isFunction","forEachArray","forEachString","forEachObject","win","isLE","mLen","nBytes","eLen","eMax","eBias","nBits","NaN","ctor","superCtor","super_","writable","TempCtor","isSlowBuffer","alert","confirm","prompt","TextLayout","opt","_measure","computeMetrics","addGetter","wrapper","getGlyphById","glyphIdx","findChar","getXHeight","X_HEIGHTS","getMGlyph","M_WIDTHS","getCapHeight","CAP_HEIGHTS","getKerning","kernings","kern","first","second","getAlignType","align","ALIGN_CENTER","ALIGN_RIGHT","ALIGN_LEFT","wordWrap","xtend","number","TAB_ID","SPACE_ID","measure","_opt","tabSize","_setupSpaceGlyphs","minWidth","maxLineWidth","reduce","lineHeight","baseline","descender","letterSpacing","_descender","_baseline","_xHeight","_capHeight","_lineHeight","_ascender","lineIndex","lastGlyph","getGlyph","xadvance","_linesTotal","_fallbackSpaceGlyph","_fallbackTabGlyph","space","tabWidth","xoffset","yoffset","curPen","curWidth","nextPen","nextWidth","isArrayBuffer","getBinaryOpts","xml2","req","xhr","parseASCII","parseXML","readBinary","isBinaryFormat","binary","err","statusCode","headers","equal","HEADER","shouldUseNative","test1","test2","test3","letter","splitLine","parseData","parseIntList","pages","readBlock","blockID","readInfo","readCommon","readPages","readChars","readKernings","bitField","unicode","italic","bold","fixedHeight","charset","stretchH","aa","padding","spacing","readStringNT","packed","alphaChnl","redChnl","greenChnl","blueChnl","readNameNT","page","chnl","every","byte","getAttribs","getAttribList","dict","attrib","mapName","nodeValue","attribs","NAME_MAP","parseAttributes","scaleh","scalew","stretchh","lineheight","alphachnl","redchnl","greenchnl","bluechnl","xmlRoot","pageRoot","childTag","GLYPH_DESIGNER_ERROR","row","present","dateNow","navigationStart","timing","performanceNow","noConflict","conflict","thisArg","_value","_deferreds","doResolve","handle","deferred","asap","onFulfilled","onRejected","finale","Handler","done","reason","ex","setTimeoutFunc","setImmediate","race","_setImmediateFn","clockwise","numIndices","raw","opts","preserveNumbers","getKeyValueChunks","Boolean","item","isNumeric","nextSplit","hasUnclosedUrl","chunk","Base","createLayout","inherits","createIndices","layout","texWidth","texHeight","bitmap","visibleGlyphs","attr","multipage","computeSphere","bbox","computeBox","bw","bh","u0","u1","isR69","newAttrib","updateAttribute","rebuildAttribute","needsNewBuffer","attribLength","VRDisplay","isPolyfilled","displayId","nextDisplayId","displayName","isConnected","hasPosition","hasOrientation","hasExternalDisplay","canPresent","maxLayers","waitingForPresent_","layer_","fullscreenElement_","fullscreenWrapper_","fullscreenElementCachedStyle_","fullscreenEventTarget_","fullscreenChangeHandler_","fullscreenErrorHandler_","wakelock_","WakeLock","VRDevice","hardwareUnitId","deviceId","deviceName","HMDVRDevice","PositionSensorVRDevice","Util","hasShowDeprecationWarning","defaultLeftBounds","defaultRightBounds","frameDataFromPose","getPose","getImmediatePose","cancelAnimationFrame","wrapForFullscreen","isIOS","cssProperties","screen","classList","removeFullscreenWrapper","insertBefore","removeChild","firstChild","requestPresent","wasPresenting","incomingLayer","predistorted","fullscreenElement","onFullscreenChange","actualFullscreenElement","getFullscreenElement","beginPresent_","unlock","release","endPresent_","removeFullscreenListeners_","fireVRDisplayPresentChange_","onFullscreenError","addFullscreenListeners_","requestFullscreen","isWebViewAndroid","exitFullscreen","exitPresent","display","fireVRDisplayConnect_","changeHandler","errorHandler","fullscreenEnabled","webkitFullscreenEnabled","mozFullScreenEnabled","msFullscreenEnabled","whichEye","CardboardDistorter","ctxAttribs","meshWidth","meshHeight","bufferScale","WebVRConfig","BUFFER_SCALE","bufferWidth","drawingBufferWidth","bufferHeight","drawingBufferHeight","realBindFramebuffer","realEnable","realDisable","realColorMask","realClearColor","realViewport","realCanvasWidth","realCanvasHeight","isPatched","lastBoundFramebuffer","blend","texCoord","distortionVS","distortionFS","getProgramUniforms","viewportOffsetScale","setTextureBounds","indexBuffer","indexCount","depthStencilBuffer","patch","onResize","CARDBOARD_UI_DISABLED","cardboardUI","CardboardUI","WGLUPreserveGLState","unpatch","glState","RENDERBUFFER_BINDING","TEXTURE_BINDING_2D","STENCIL_INDEX8","STENCIL_ATTACHMENT","getScreenWidth","getScreenHeight","FRAMEBUFFER_BINDING","pname","COLOR_WRITEMASK","COLOR_CLEAR_VALUE","VIEWPORT","safariCssSizeWorkaround","DIRTY_SUBMIT_FRAME_BINDINGS","CURRENT_PROGRAM","ARRAY_BUFFER_BINDING","ELEMENT_ARRAY_BUFFER_BINDING","renderNoState","updateDeviceInfo","deviceInfo","computeMeshVertices_","computeMeshIndices_","lensFrustum","getLeftEyeVisibleTanAngles","noLensFrustum","getLeftEyeNoLensTanAngles","getLeftEyeVisibleScreenRect","vidx","distortion","distortInverse","widthMeters","heightMeters","halfwidth","halfheight","iidx","getOwnPropertyDescriptor_","proto","descriptor","uiVS","uiFS","gearOffset","gearVertexCount","arrowOffset","arrowVertexCount","projMat","kAnglePerGearSection","kOuterRimEndAngle","kInnerRimBeginAngle","kOuterRadius","kMiddleRadius","kInnerRadius","kCenterLineThicknessDp","kButtonWidthDp","kTouchSlopFactor","Angles","listen","optionsCallback","backCallback","midline","clientWidth","buttonSize","clientX","clientY","clientHeight","addGearSegment","buttonScale","addArrowVertex","buttonBorder","physicalPixels","devicePixelRatio","scalingRatio","dps","segmentTheta","angledLineWidth","orthoMatrix","projectionMat","CardboardVRDisplay","bufferScale_","poseSensor_","FusionPoseSensor","distorter_","cardboardUI_","dpdb_","Dpdb","onDeviceParamsUpdated_","deviceInfo_","DeviceInfo","getDeviceParams","viewerSelector_","ViewerSelector","onViewerChanged_","setViewer","getCurrentViewer","ROTATE_INSTRUCTIONS_DISABLED","rotateInstructions_","RotateInstructions","onResize_","Eye","getOrientation","linearVelocity","linearAcceleration","angularVelocity","angularAcceleration","resetPose","fieldOfView","viewer","interLensDistance","getFieldOfViewLeftEye","getFieldOfViewRightEye","newParams","isDebug","updateDeviceParams","updateBounds_","show","stopPropagation","isLandscapeMode","isMobile","showTemporarily","orientationHandler","onOrientationChange_","vrdisplaypresentchangeHandler","fireVRDisplayDeviceParamsChange_","hide","lastWidth","lastHeight","vrdisplay","boundValues","TEXTURE_BINDING_CUBE_MAP","TEXTURE31","ACTIVE_TEXTURE","boundValue","Device","bevelMeters","deviceParams","Viewers","CardboardV2","Distortion","distortionCoefficients","CardboardViewer","label","baselineLensDistance","screenLensDistance","inverseCoefficients","MathUtil","DEFAULT_ANDROID","DEFAULT_IOS","CardboardV1","DEFAULT_LEFT_CENTER","DEFAULT_RIGHT_CENTER","determineDevice_","metersPerPixelX","xdpi","metersPerPixelY","ydpi","bevelMm","getDistortedFieldOfViewLeftEye","eyeToScreenDistance","outerDist","innerDist","bottomDist","topDist","outerAngle","distort","innerAngle","bottomAngle","topAngle","leftDegrees","rightDegrees","downDegrees","upDegrees","fovLeft","fovTop","fovRight","fovBottom","verticalLensOffset","centerX","centerY","centerZ","screenLeft","screenTop","screenRight","screenBottom","undistortedFrustum","dist","eyeX","eyeY","opt_isUndistorted","getUndistortedFieldOfViewLeftEye","getUndistortedParams_","getUndistortedViewportLeftEye","screenWidth","screenHeight","xPxPerTanAngle","yPxPerTanAngle","eyePosX","eyePosY","halfLensDistance","maxFov","viewerMax","VRDisplayHMDDevice","VRDisplayPositionSensorDevice","currentFieldOfView","maximumFieldOfView","minimumFieldOfView","recommendedFieldOfView","eyeTranslation","renderRect","setFieldOfView","opt_fovLeft","opt_fovRight","opt_zNear","opt_zFar","getState","resetState","positionDevice","coefficients","r0","r1","dr0","dr1","r2","fetchOnline","onDeviceParamsUpdated","dpdb","DPDB_CACHE","recalculateDeviceParams_","ONLINE_DPDB_URL","DeviceParams","newDeviceParams","calcDeviceParams_","db","devices","vendor","opera","rules","matched","rule","matchRule_","dpi","resX","resY","WebVRPolyfill","extend","FORCE_ENABLE_VR","K_FILTER","PREDICTION_TIME_S","TOUCH_PANNER_DISABLED","YAW_ONLY","MOUSE_KEYBOARD_CONTROLS_DISABLED","DEFER_INITIALIZATION","ENABLE_DEPRECATED_API","ALWAYS_APPEND_POLYFILL_DISPLAY","GET_VR_DISPLAYS_TIMEOUT","InitializeWebVRPolyfill","invScalar","setFromEulerXYZ","setFromEulerYXZ","MouseKeyboardVRDisplay","onKeyDown_","onMouseDown_","onMouseMove_","onMouseUp_","phi_","theta_","targetAngle_","angleAnimation_","orientation_","rotateStart_","rotateEnd_","rotateDelta_","isDragging_","orientationOut_","KEY_SPEED","KEY_ANIMATION_DURATION","MOUSE_SPEED_X","MOUSE_SPEED_Y","keyCode","animatePhi_","animateTheta_","targetAngle","animateKeyTransitions_","angleName","startAngle","percent","isPointerLocked_","movementX","mozMovementX","movementY","mozMovementY","pointerLockElement","mozPointerLockElement","webkitPointerLockElement","loadIcon_","overlay","backgroundColor","fontFamily","zIndex","img","icon","marginLeft","marginTop","textAlign","fontSize","margin","snackbar","boxSizing","snackbarText","snackbarButton","fontWeight","textTransform","borderLeft","paddingLeft","textDecoration","ms","timer","disableShowTemporarily","ComplementaryFilter","kFilter","currentAccelMeasurement","SensorSample","currentGyroMeasurement","previousGyroMeasurement","filterQ","previousFilterQ","accelQ","isOrientationInitialized","estimatedGravity","measuredGravity","gyroIntegralQ","addAccelMeasurement","timestampS","addGyroMeasurement","deltaT","isTimestampDeltaValid","run_","accelToQuaternion_","sample","gyroDeltaQ","gyroToQuaternionDelta_","invFilterQ","deltaQ","getQuaternionAngle","toFixed","targetQ","accel","normAccel","quat","gyro","accelerometer","gyroscope","posePredictor","PosePredictor","touchPanner","TouchPanner","filterToWorldQ","inverseWorldToScreenQ","worldToScreenQ","originalPoseAdjustQ","setScreenTransform_","resetQ","isFirefoxAndroid","predictedQ","getPrediction","previousTimestampS","resetSensor","onDeviceMotion_","deviceMotion","updateDeviceMotion_","accGravity","accelerationIncludingGravity","rotRate","rotationRate","timeStamp","deltaS","MIN_TIMESTEP","MAX_TIMESTEP","isR7","beta","gamma","screenOrientation","onMessage_","deviceMotionEvent","onDeviceMotionCallback_","onOrientationChangeCallback_","onMessageCallback_","isInsideCrossDomainIFrame","predictionTimeS","previousQ","outQ","currentQ","angularSpeed","predictAngle","sensorSample","onTouchStart_","onTouchMove_","onTouchEnd_","isTouching","rotateStart","rotateEnd","rotateDelta","ROTATE_SPEED","touches","pageX","pageY","promises","platform","isSafari","rtn","timestampDeltaS","webkitRequestFullscreen","mozRequestFullScreen","msRequestFullscreen","webkitExitFullscreen","mozCancelFullScreen","msExitFullscreen","webkitFullscreenElement","mozFullScreenElement","msFullscreenElement","vertexSource","fragmentSource","attribLocationMap","attribName","uniformCount","uniformName","lr","bt","nf","check","getQueryParameter","location","mat4_perspectiveFromFieldOfView","upTan","piOver180","rad45","downTan","leftTan","rightTan","xScale","yScale","mat4_fromRotationTranslation","mat4_translate","a00","a02","a03","a10","a20","mat4_invert","a30","b00","b01","b02","b03","b04","b05","b06","b07","b08","b09","b10","updateEyeMatrices","projection","vrDisplay","defaultOrientation","defaultPosition","timestamp","isFramed","refDomain","getDomainFromUrl","referrer","thisDomain","domain","selectedKey","getItem","VIEWER_KEY","DEFAULT_VIEWER","dialog","createDialog_","onChangeCallbacks_","CLASS_NAME","getSelectedKey_","fireOnChange_","onSave_","setItem","overflow","boxShadow","createH1_","createChoice_","createButton_","h1","marginBottom","div","onclick","button","border","AndroidWakeLock","addSourceToVideo","dataURI","iOSWakeLock","setInterval","clearInterval","getWakeLock","displays","devicesPopulated","nativeWebVRAvailable","isWebVRAvailable","nativeLegacyWebVRAvailable","isDeprecatedWebVRAvailable","nativeGetVRDisplaysFunc","getVRDisplays","enablePolyfill","enableDeprecatedPolyfill","InstallWebVRSpecShim","connectDisplay","populateDevices","isCardboardCompatible","NativeVRFrameData","nativeFrameData","nativeGetFrameData","vrEnabled","isFullScreenAvailable","getVRDevices","polyfillDisplays","timeoutId","vrDisplaysNative","timeoutPromise","nativeDisplays","getVRDDevices","mozGetVRDevices","idxOf","chr","isWhitespace","whitespace","pre","lineStart","isNewline","newline","lineEnd","measured","greedy","testWidth","newLine","newlineChar","nextStart","monospace","initParams","createXHR","_createXHR","readystatechange","loadFunc","getBody","responseText","getXml","isJson","errorFunc","evt","timeoutTimer","failureResponse","aborted","useXDR","method","rawRequest","getAllResponseHeaders","parseHeaders","called","cors","XDomainRequest","sync","onreadystatechange","onload","onerror","onprogress","onabort","ontimeout","username","password","abort","beforeSend","responseXML","firefoxBugTakenEffect","ActiveXObject","xmlDoc","async","loadXML","registerComponent","Component","schema","active","default","spectator","el","setObject3D","oldData","innerWidth","innerHeight","updateActiveCamera","updateSpectatorCamera","system","activeCameraEl","setActiveCamera","disableActiveCamera","spectatorCameraEl","setSpectatorCamera","disableSpectatorCamera","removeObject3D","model","colladaModel","EVENTS","CLICK","FUSING","MOUSEENTER","MOUSEDOWN","MOUSELEAVE","MOUSEUP","STATES","HOVERING","HOVERED","CANVAS_EVENTS","DOWN","UP","downEvents","fuse","fuseTimeout","upEvents","rayOrigin","oneOf","cursorDownEl","intersectedEl","canvasBounds","getBoundingClientRect","updateCanvasBounds","debounce","sceneEl","eventDetail","intersectedEventDetail","cursorEl","onCursorDown","onCursorUp","onIntersection","onIntersectionCleared","onMouseMove","updateMouseEventListeners","addEventListeners","removeEventListeners","removeState","addCanvasListeners","downEvent","upEvent","mouse","rayCasterConfig","checkIntersections","twoWayEmit","els","intersections","clearCurrentIntersection","setIntersection","clearedEls","addState","evtName","checkControllerPresentAndSetup","trackedControlsUtils","emitIfAxesChanged","onButtonEvent","DAYDREAM_CONTROLLER_MODEL_BASE_URL","DAYDREAM_CONTROLLER_MODEL_OBJ_URL","DAYDREAM_CONTROLLER_MODEL_OBJ_MTL","GAMEPAD_ID_PREFIX","hand","buttonColor","buttonTouchedColor","buttonHighlightColor","rotationOffset","armModel","axes","trackpad","buttons","bindMethods","onModelLoaded","onControllersUpdate","checkIfControllerPresent","removeControllersUpdateListener","onAxisMoved","animationActive","onButtonChanged","onButtonDown","onButtonUp","onButtonTouchStart","onButtonTouchEnd","controllerPresent","lastControllerCheck","controllerEventsActive","addControllersUpdateListener","injectTrackedControls","idPrefix","mtl","buttonMeshes","controllerObject3D","menu","updateModel","buttonName","updateButtonModel","GEARVR_CONTROLLER_MODEL_BASE_URL","GEARVR_CONTROLLER_MODEL_OBJ_URL","GEARVR_CONTROLLER_MODEL_OBJ_MTL","trigger","geometryNames","dummyGeometry","skipCache","previousData","unuseGeometry","getOrCreateGeometry","getObject3D","updateSchema","newGeometryType","currentGeometryType","extendSchema","gltfModel","getGestureEventName","gesture","eventName","isViveController","trackedControls","controllerId","MODEL_URLS","ANIMATIONS","pointThumb","fist","hold","thumbUp","thumb","pressedButtons","touchedButtons","onGripDown","handleButton","onGripUp","onTrackpadDown","onTrackpadUp","onTrackpadTouchStart","onTrackpadTouchEnd","onTriggerDown","onTriggerUp","onTriggerTouchStart","onTriggerTouchEnd","onGripTouchStart","onGripTouchEnd","onThumbstickDown","onThumbstickUp","onAorXTouchStart","onAorXTouchEnd","onBorYTouchStart","onBorYTouchEnd","onSurfaceTouchStart","onSurfaceTouchEnd","onControllerConnected","setModelVisibility","onControllerDisconnected","tick","previousHand","controlConfiguration","lastGesture","isPressed","isTouched","determineGesture","animateGesture","emitGestureEvents","isGripActive","isSurfaceActive","isTrackpadActive","isTriggerActive","isABXYActive","isVive","playAnimation","fromAction","toAction","PingPong","createRay","controllerConfig","config","raycasterConfig","showLine","modelReady","cursor","hideRay","daydream-controls","gearvr-controls","oculus-touch-controls","vive-controls","windows-motion-controls","if","defaultTarget","registerLight","diffData","shadowsLoaded","hasLoaded","onSetTarget","updateShadow","setLight","newLight","cameraHelper","targetEl","isEqualVec3","multiple","geoNeedsUpdate","registerShader","borderColor","highlighted","highlightedColor","peekMode","titleColor","visualAspectEnabled","navigate","previousQuaternion","quaternionClone","hiddenEls","initVisualAspect","strokeColor","updateEventListener","updatePeekMode","sphereEl","hideAll","showAll","semiSphereEl","textEl","pano","segmentsWidth","segmentsHeight","borderEnabled","cameraWorldPosition","elWorldPosition","cameraPortalOrientation","calculateCameraPortalOrientation","peekCameraPortalOrientation","cameraEl","mat4","portalNormal","portalPosition","is","PolyfillControls","GRABBING_CLASS","PI_2","checkHasPositionalTracking","touchEnabled","hmdEnabled","pointerLockEnabled","reverseMouseDrag","previousHMDPosition","hmdQuaternion","hmdEuler","savedRotation","savedPosition","polyfillObject","polyfillControls","deltaRotation","savedPose","pointerLocked","setupMouseControls","onEnterVR","updateGrabCursor","pitchObject","yawObject","exitPointerLock","updateOrientation","onMouseDown","onMouseUp","onTouchStart","onTouchMove","onTouchEnd","onExitVR","onPointerLockChange","onPointerLockError","mouseDown","canvasEl","checkHeadsetConnected","previousMouseEvent","screenX","screenY","requestPointerLock","mozRequestPointerLock","touchStart","touchStarted","deltaY","saveCameraPose","restoreCameraPose","enableGrabCursor","disableGrabCursor","hasPositionalTracking","parseSide","parseVertexColors","coloring","disposeMaterial","unregisterMaterial","component","shaders","shaderNames","npot","updateShader","updateMaterial","newShader","currentShader","updateBehavior","tickProperties","addBehavior","removeBehavior","shaderName","shaderInstance","Shader","defaultMaterial","registerMaterial","waitForMesh","objLoader","mtlLoader","loadObj","objUrl","mtlUrl","objModel","TOUCH_CONTROLLER_MODEL_BASE_URL","TOUCH_CONTROLLER_MODEL_OBJ_URL_L","TOUCH_CONTROLLER_MODEL_OBJ_MTL_L","TOUCH_CONTROLLER_MODEL_OBJ_URL_R","TOUCH_CONTROLLER_MODEL_OBJ_MTL_R","PIVOT_OFFSET","buttonTouchColor","thumbstick","previousButtonValues","updateControllerModel","analogValue","grip","leftHand","xbutton","abutton","ybutton","bbutton","OBSERVER_SELECTOR_RE","OBSERVER_CONFIG","autoRefresh","interval","useWorldCoordinates","clearedIntersectedEls","unitLineEndVec3","intersectedEls","newIntersectedEls","newIntersections","prevCheckTime","prevIntersectedEls","updateOriginDirection","setDirty","observer","dirty","lineEndVec3","otherLineEndVec3","intersectedClearedDetail","intersectionClearedDetail","drawLine","refreshObjects","flattenChildrenShallow","lineLength","rawIntersections","originVec3","endVec3","zeroScale","register","enterVREl","removeFullScreenStyles","addFullScreenStyles","getFog","isScene","systems","updateMaterials","getFuzzyPatchVersion","AFRAME_INJECTED","pkg","INSPECTOR_DEV_URL","INSPECTOR_RELEASE_URL","INSPECTOR_URL","INSPECTOR_VERSION","LOADING_MESSAGE","LOADING_ERROR_MESSAGE","onKeydown","onMessage","initOverlay","loadingMessageEl","shortcutPressed","ctrlKey","altKey","injectInspector","showLoader","hideLoader","script","AFRAME","INSPECTOR","inspectorInjected","shouldCaptureKeyEvent","enterVR","exitVR","enterVREnabled","mixin","initPool","availableEls","usedEls","createEntity","wrapPlay","playMethod","requestEntity","returnEntity","cubeMapSize","quad","ctx","onKeyDown","onCameraActive","resize","cameraParent","shiftKey","capture","setCapture","cubeCamera","renderCapture","saveCapture","getCanvas","imageData","pixels","flipPixelsVertically","flippedPixels","toBlob","fileName","linkEl","click","createStats","threeStats","ThreeStats","aframeStats","AFrameStats","plugins","RStats","css","caption","below","HIDDEN_CLASS","getUrlParameter","statsEl","hideBound","showBound","parentNode","createEnterVRButton","onClick","vrButton","ENTER_VR_CLASS","constants","ENTER_VR_BTN_CLASS","createOrientationModal","modal","ORIENTATION_MODAL_CLASS","exit","insideLoader","orientationModalEl","updateEnterVRInterface","toggleOrientationModalIfNeeded","onEnterVRButtonClick","onModalClick","uiElement","toggleEnterVRButtonIfNeeded","isLandscape","cast","receive","onMeshChanged","setShadowMapEnabled","updateDescendants","positional","volume","audioLoader","pool","mustPlay","playSound","srcChanged","setupSound","sound","isPaused","stopSound","oldEvt","audioListener","pauseSound","coerceData","loadFont","yOffset","loadBMFont","ch","shaderObject","computeWidth","wrapPixels","wrapCount","widthFactor","computeFontWidthFactor","digitsum","digits","PromiseCache","promiseGenerator","createTextGeometry","coreShader","DEFAULT_WIDTH","MAX_ANISOTROPY","FONT_BASE_URL","FONTS","aileronsemibold","dejavu","exo2bold","exo2semibold","kelsonsans","monoid","mozillavr","roboto","sourcecodepro","MSDF_FONTS","DEFAULT_FONT","fontWidthFactors","anchor","fontImage","whiteSpace","xOffset","zOffset","shaderData","createOrUpdateMaterial","currentFont","getFontImageSrc","updateFont","updateGeometry","updateLayout","hasChangedShader","NewShader","fontSrc","lookupFont","coercedData","fontImgSrc","fontObj","textRenderWidth","textScale","geometryComponent","ascender","controllerUtils","DEFAULT_CAMERA_HEIGHT","DEFAULT_HANDEDNESS","EYES_TO_ELBOW","FOREARM","headElement","buttonStates","changedAxes","targetControllerNumber","axisMoveEventDetail","changed","deltaControllerPosition","controllerQuaternion","controllerEuler","updateGamepad","updatePose","updateButtons","defaultUserHeight","getHeadElement","findMatchingController","applyArmModel","controllerPosition","headEl","headObject3D","userHeight","buttonState","pressed","touched","handleAxes","handlePress","handleTouch","handleValue","controllerAxes","previousAxis","previousButtonState","VIVE_CONTROLLER_MODEL_OBJ_URL","VIVE_CONTROLLER_MODEL_OBJ_MTL","controllerIndex","setButtonColor","isEmptyObject","KEYCODE_TO_CODE","keyboardevent","CLAMP_VELOCITY","MAX_DELTA","KEYS","acceleration","adAxis","adEnabled","adInverted","fly","wsAxis","wsEnabled","wsInverted","velocity","onBlur","onFocus","onKeyUp","onVisibilityChange","attachVisibilityEventListeners","currentPosition","movementVector","updateVelocity","getMovementVector","removeKeyEventListeners","removeVisibilityEventListeners","attachKeyEventListeners","adSign","wsSign","KeyA","ArrowLeft","KeyD","ArrowRight","KeyW","ArrowUp","KeyS","ArrowDown","directionVector","rotationEuler","xRotation","hidden","MODEL_BASE_URL","MODEL_FILENAMES","GAMEPAD_ID_PATTERN","pair","hideDisconnected","axisMeshNames","buttonMeshNames","pointingPoseMeshName","onModelError","loadedMeshInfo","axisMeshes","createdFromMesh","sourceUrl","createControllerModelUrl","loadModel","forceDefault","filename","trackedControlsComponent","defaultUrl","getImmediateChildByName","object3d","meshName","meshInfo","controllerModel","unpressed","calculateRayOriginFromMesh","lerpAxisTransform","axisValue","axisMeshInfo","lerpValue","lerpButtonTransform","buttonValue","buttonMeshInfo","numAxes","modelVisible","DIRECTIONS","alternate","alternateReverse","EASING_FUNCTIONS","linear","ease","ease-in","ease-out","ease-in-out","ease-cubic","ease-in-cubic","ease-out-cubic","ease-in-out-cubic","ease-quad","ease-in-quad","ease-out-quad","ease-in-out-quad","ease-quart","ease-in-quart","ease-out-quart","ease-in-out-quart","ease-quint","ease-in-quint","ease-out-quint","ease-in-out-quint","ease-sine","ease-in-sine","ease-out-sine","ease-in-out-sine","ease-expo","ease-in-expo","ease-out-expo","ease-in-out-expo","ease-circ","ease-in-circ","ease-out-circ","ease-in-out-circ","ease-elastic","ease-in-elastic","ease-out-elastic","ease-in-out-elastic","ease-back","ease-in-back","ease-out-back","ease-in-out-back","ease-bounce","ease-in-bounce","ease-out-bounce","ease-in-out-bounce","FILLS","backwards","both","forwards","none","REPEATS","indefinite","DEFAULTS","begin","dur","defaults","directions","easingFunctions","fills","repeats","38","37","40","39","87","65","83","68","cloneValue","getAnimationValues","dataFrom","dataTo","getForColorComponent","partialSetAttribute","attributeSplit","rgbVectorToHex","componentPropName","componentName","getComponentProperty","parseProperty","isCoordinates","coordinates","strToBool","boolToNum","bool","componentToHex","convertToIntegerColor","ANode","animationConstants","registerElement","entity","AAnimation","attachedCallback","handleMixinUpdate","oldVal","newVal","detachedCallback","getTween","animationValues","toTemp","getDirection","initialValue","onCompleted","prevDirection","onStateAdded","onStateRemoved","evts","splitString","elData","mixinData","mixinEl","getElData","mediaElementLoaded","checkProgress","secondsBuffered","buffered","fixUpMediaElement","mediaEl","newMediaEl","tagName","extractDomain","host","inferResponseType","dotLastIndex","isAssets","mediaEls","imgEl","imgEls","srcObject","isAssetItem","loadedBytes","totalBytes","srcs","checkComponentDefined","defaultComponents","attrValue","isComponentMixedIn","mixinEls","inMixin","mergeComponentData","extraData","styleParser","isComponent","MULTIPLE_COMPONENT_DELIMITER","COMPONENTS","getRotation","entityEl","rotationObj","AEntity","initializingComponents","componentsToUpdate","isEntity","object3DMap","parentEl","states","justInitialized","setEntityAttribute","assetsEl","addToParent","removeComponent","removeFromParent","updateComponents","updateComponent","getDOMAttribute","oldObj","getOrCreateObject3D","Constructor","attachedToParent","getChildEntities","childEntities","initComponent","isDependency","componentId","componentInfo","initComponentDependencies","initialized","tryRemoveLater","evtDetail","extraComponents","componentCache","getExtraComponents","clobber","isDefault","updateProperties","resetProperty","mixinUpdate","entities","computedMixinStr","newMixins","oldMixins","updateMixins","arg1","arg2","newAttrValue","delimiterIndex","isDebugMode","flushToDOM","getComputedAttribute","stateIndex","isMixin","cacheAttribute","closestScene","cacheAttributes","updateEntities","parseAttrValueForCache","isNode","MIXIN_OBSERVER_CONFIG","mixinObservers","mixins","closest","selector","mozMatchesSelector","msMatchesSelector","oMatchesSelector","webkitMatchesSelector","childFilter","childrenLoaded","getChildren","newMixinIdArray","oldMixinIdArray","newMixinIds","oldMixinIds","unregisterMixin","registerMixin","getElementById","compositedMixinIds","attachMixinListener","mixinId","removeMixinListener","mutations","cloneData","parsedProperty","isObjectOrArray","extendProperties","isSinglePropSchema","hasBehavior","tock","wrapPause","pauseMethod","shouldPlay","parseProperties","processSchema","isSingleProp","isSingleProperty","stringifyProperties","stringifyProperty","aframeScript","currentScript","upperCaseRegExp","previousAttrValue","throttledEmitComponentChanged","throttle","prevData","silent","updateCachedAttrValue","parsedValue","skipTypeChecking","buildData","deepEqual","schemaAddon","extendedSchema","newData","componentDefined","keysLength","registrationOrderWarnings","definition","NewComponent","compareDocumentPosition","DOCUMENT_POSITION_FOLLOWING","registerGeometry","NewGeometry","registerPropertyType","propertyTypes","defaultParse","defaultStringify","arrayParse","arrayStringify","assetParse","parsedUrl","boolParse","intParse","numberParse","selectorParse","nonCharRegex","selectorAllParse","selectorStringify","selectorAllStringify","srcParse","vecParse","isValidDefaultValue","defaultVal","isValidDefaultCoordinate","possibleCoordinates","dimensions","getCanvasSize","embedded","offsetHeight","offsetWidth","shouldAntiAlias","setupCanvas","onFullScreenChange","activeElement","blur","dataset","aframeCanvas","initMetaTags","inject","initWakelock","re","initPostMessageAPI","AScene","inspector","keyboard-shortcuts","screenshot","vr-mode-ui","systemNames","behaviors","originalHTML","setupRenderer","initSystems","onVRPresentChangeBound","onVRPresentChange","enterVRBound","exitVRBound","exitVRTrueBound","pointerRestrictedBound","pointerRestricted","pointerUnrestrictedBound","pointerUnrestricted","initSystem","sceneIndex","behavior","behaviorArr","behaviorType","getPointerLockElement","fromExternal","enterVRSuccess","enterVRFailure","vrManager","getVRDisplay","setPoseTarget","exitVRSuccess","forceCanvasResizeSafariMobile","exitVRFailure","componentPropValue","vrDevice","isVRPresenting","renderStarted","startRender","mark","clock","timeDelta","Meta","attrs","exists","Link","createTag","tagObj","MOBILE_HEAD_TAGS","MOBILE_IOS_HEAD_TAGS","createAndInjectTag","tag","headScriptEl","headTags","postMessageAPIHandler","isIframed","Wakelock","wakelock","processPropertyDefinition","propDefinition","isCustomType","propType","PropertyTypes","propName","propNames","propData","getPartialData","propValue","stringifiedData","propertyToThreeMapping","int","vec2","vec4","initVariables","varType","variables","updateVariables","materialKey","parseValue","setMapOnTextureLoad","updateMapMaterialFromData","System","rawData","registerSystem","NewSystem","findAllScenes","originalPosition","originalRotation","originalParent","originalGroup","outerGroup","addMapping","htmlAttrName","materialMappings","mappings","addComponentMapping","definePrimitive","registerPrimitive","extendDeep","setComponentProperty","defaultAttributes","defaultComponentsFromPrimitive","deprecated","deprecatedMappings","resolveMappingCollisions","newAttribute","isUndefined","isPureObject","mixinComponents","getComponentPropertyPath","look-controls","wasd-controls","look-controls-enabled","wasd-controls-enabled","reverse-mouse-drag","getMeshMixin","radiusOuter","radiusInner","segmentsTheta","fuse-timeout","segmentsRadial","open-ended","theta-length","theta-start","ground-color","meshMixin","obj-model","meshPrimitives","segments-height","segments-width","unCamelCase","geometryName","geometryHyphened","segmentsDepth","segmentsPhi","radiusTubular","segmentsTubular","rotateVector","uvMinVector","uvMaxVector","uvScaleVector","vertexA","vertexB","vertexC","hasNativeWebVRImplementation","protocol","isIOSOlderThan10","isBrowserEnvironment","AComponent","_rS","getEntityCount","getEntriesByName","_start","_end","_attach","fractions","getMaterialData","textureSrc","updateMap","ambientOcclusionMap","ambientOcclusionMapIntensity","CubeLoader","texturePromises","ambientOcclusionTextureOffset","ambientOcclusionTextureRepeat","displacementTextureOffset","displacementTextureRepeat","metalnessTextureOffset","metalnessTextureRepeat","normalTextureOffset","normalTextureRepeat","roughnessTextureOffset","roughnessTextureRepeat","sphericalEnvMap","updateDistortionMap","updateEnvMap","isLoadingEnvMap","handleTextureEvents","srcLoader","validateCubemapSrc","removeDefaultCamera","defaultCamera","DEFAULT_CAMERA_ATTR","setupDefaultCamera","defaultCameraEl","removeDefaultOffset","addDefaultOffset","cameraEls","newCameraEl","newCamera","previousCamera","defaultCameraWrapper","spectatorCamera","isVREnabled","geometryType","GeometryClass","geometryInstance","toBufferGeometry","decrementCacheCount","cacheCount","incrementCacheCount","doBuffer","clearCache","cachedGeometry","DEFAULT_LIGHT_ATTR","defaultLightsEnabled","defaultLights","userDefinedLights","setupDefaultLights","removeDefaultLights","ambientLight","directionalLight","calculateVideoCacheHash","videoEl","videoAttributes","loadImageTexture","doLoadImageTexture","resolveTexture","setTextureProperties","statusText","createVideoEl","fixVideoAttributes","controls","isHLS","textureCounts","textureCache","onMaterialTextureLoaded","clearTextureCache","loadImageCb","loadImage","loadVideoCb","loadVideo","loadCanvas","childElementCount","validateSrc","handleImageTextureLoaded","handleVideoTextureLoaded","videoTextureResult","hashVideo","needsCorrectionBGRA","needsCorrectionFlipY","SHADOW_MAP_TYPE_MAP","pcf","pcfsoft","updateControllerList","getGamepads","throttledUpdateControllerList","gamepads","gamepad","prevCount","prependedArgs","defaultVec","coordinate","vecParseFloat","isCoordinate","getDebugNamespaceType","getDebugNamespaceColor","debugLib","ls","logs","isGearVR","isTablet","mockUserAgent","polyfilledVRDisplay","POLYFILL_VRDISPLAY_ID","_isMobile","isNodeEnvironment","delimiter","propertyPathCache","splitName","deepAssign","objectAssign","objectPool","functionToThrottle","minimumInterval","optionalContext","lastTime","sinceLastTime","throttleTick","wait","immediate","later","callNow","arrayPool","createPool","keysA","keysB","valA","valB","use","recycle","aVal","bVal","bKey","isComparingObjects","metaKey","copyAttribute","matchingElements","allElements","splitCache","HLS_MIMETYPES","dataName","checkSetMap","materialSrcs","setMap","longType","shortType","defaultObjectFactory","clearObject","EMPTY_SLOT","objectFactory","objToUse","nextFreeSlot","objPool","grow","currentLength","isImageCb","isVideoCb","checkIsImage","isImage","validatedUrls","aCubemap","cubemapSrcRegex","parseUrl","validateAndGetQuerySelector","parsedSrc","onResult","contentType","getResponseHeader","checkIsImageFallback","startsWith","tester","Image","toCamelCase","camelCase","transformKeysToCamelCase","camelCaseObj","camelCaseKey","parsedData","isControllerPresent","queryObject","trackedControlsSystem","filterControllerIndex","filterIdExact","filterIdPrefix","filterHand","matchingControllerOccurence","targetControllerMatch","NUM_HANDS","AXIS_LABELS","isPresent","axesMapping","buttonTypes","glStats","_h","_totalDrawArraysCalls","_totalDrawElementsCalls","_totalBindTexures","_totalUseProgramCalls","_totalFaces","_totalVertices","_totalPoints","WebGLRenderingContext","allcalls","over","drawelements","drawarrays","renderer.info.memory.geometries","renderer.info.memory.textures","renderer.info.programs","renderer.info.render.calls","renderer.info.render.faces","renderer.info.render.points","renderer.info.render.vertices","BrowserStats","_size","log1024","_usedJSHeapSize","usedJSHeapSize","_totalJSHeapSize","totalJSHeapSize","_values","average","avgMs","_groups","_fractions","nowOffset","rStats","iterateKeys","importCSS","Graph","_dom","_defArg","_draw","alarm","_current","_max","_ctx","_alarmCanvas","_elHeight","_dotCanvas","_def","_dotCtx","globalAlpha","_alarmCtx","_elWidth","draw","StackGraph","_num","th","_colours","PerfCounter","_average","_accumValue","_accumSamples","_accumStart","_averageValue","_time","_settings","userTimingAPI","_started","_tick","_spanValueText","_graph","_frame","_total","_set","_spanId","_spanValue","_div","_perf","idArg","_perfCounters","graph","colours","_cssRStats","CSSPath","_base","legend","isIFrame","appendQueryParameter"],"mappings":"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AKozN,eAAeoB,KAItCxhB,EAAW,GAAIzxC,kBAAiB,SAAUmzD,GACxCl3D,EAAK0uD,kBAAkBwI,EAAU,GAAG16E,iBAEtCg5D,EAASjzC,QAAQotD,EAASgG,uBAC1BnzN,KAAKozN,eAAeoB,GAAWxhB,MAInCkZ,mBACEhqN,MAAO,cAWTkwJ,MACElwJ,MAAO,WACL,GAAI4C,KAEJ,OAAO,UAAUvC,EAAMsoD,EAAQ03G,EAAS0sD,OACtB/tN,KAAZqhK,IAAyBA,GAAU,GACvCz9J,EAAKy9J,UAAYA,EACjBz9J,EAAK+lD,OAASA,EAGVokK,IAAanqN,EAAOy5B,MAAM0oJ,UAAWgoC,EAAWnqN,IAEpD9E,KAAKquE,cAAc,GAAIi0F,aAAY//J,EAAMuC,QAG7Cu/J,SAAUp/H,OAAO83H;;A1H3SvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;A2HgUA,QAAS43D,WAAW7vN,GAClB,GACI8vN,GACAlrK,EAFAjuC,IAGJ,KAAKiuC,IAAO5kD,GACV8vN,EAAiB9vN,EAAK4kD,GACtBjuC,EAAMiuC,GAAOmrK,gBAAgBD,GAAkBr2L,MAAM9iB,MAAMm5M,GAAkBA,CAE/E,OAAOn5M,GAWT,QAASq5M,kBAAkBlgG,EAAM/mD,EAAQknJ,GACvC,OAAIA,GAAkC,OAAXlnJ,GAAqC,gBAAXA,GAC9CtvC,MAAM0oJ,OAAOryD,EAAM/mD,GAD0DA,EAOtF,QAASmnJ,aAAavlB,GACpB,MAAOA,GAAUvI,MAAQuI,EAAUwlB,KASrC,QAASC,WAAWC,GAClB,MAAO,YACL,GAAI71B,GAAUt/L,KAAK48L,GAAG0C,OACjBt/L,MAAK4+D,YACVu2J,EAAYzwN,KAAK1E,MACjBA,KAAK4+D,WAAY,EAEZo2J,YAAYh1N,OACjBs/L,EAAQ8Q,eAAepwM,QAW3B,QAASs2M,UAAUC,GACjB,MAAO,YACL,GAAIjX,GAAUt/L,KAAK48L,GAAG0C,QAClB81B,EAAap1N,KAAK48L,GAAGh+H,YAAc5+D,KAAK4+D,SACvC5+D,MAAKoxN,aAAgBgE,IAC1B7e,EAAW7xM,KAAK1E,MAChBA,KAAK4+D,WAAY,EAEZo2J,YAAYh1N,OACjBs/L,EAAQ6Q,YAAYnwM,QAIxB,QAAS60N,iBAAiB3yN,GACxB,MAAOA,KAAUA,EAAM81D,cAAgBh2D,QAAUE,EAAM81D,cAAgBn7C,OA5jBzE,GAAI2/K,QAAS7pC,QAAQ,YACjBpY,OAASoY,QAAQ,kBACjByhD,QAAUzhD,QAAQ,YAClBp0H,MAAQo0H,QAAQ,aAEhB/9H,WAAah1B,OAAOD,QAAQi1B,cAC5BygM,gBAAkB74B,OAAO64B,gBACzBjK,cAAgB5uB,OAAO4uB,cACvBkK,cAAgB94B,OAAO3xC,QACvB0qE,aAAe/4B,OAAOg5B,iBACtBC,oBAAsBj5B,OAAOi5B,oBAC7BC,kBAAoBl5B,OAAOk5B,kBAC3BxG,YAAc3wL,MAAM2wL,YACpBp0M,KAAOyjB,MAAMw+H,MAAM,uBAEnB44D,aAAe/hN,SAASgiN,cACxBC,gBAAkB,GAAI3iG,QAAO,UAe7BqpE,UAAY38L,OAAOD,QAAQ48L,UAAY,SAAUK,EAAIgyB,EAAW7kN,GAClE,GAAIyzJ,GAAOx9J,IACXA,MAAK48L,GAAKA,EACV58L,KAAK+J,GAAKA,EACV/J,KAAKk/J,SAAWl/J,KAAKuC,MAAQwH,EAAK,KAAOA,EAAK,IAC9C/J,KAAKsxN,WAAavnN,GAAI/J,KAAK+J,GAAIxH,KAAMvC,KAAKuC,MAC1CvC,KAAKoxN,aAAc,EACnBpxN,KAAK48L,GAAGhoK,WAAW50B,KAAKk/J,UAAYl/J,KAGpCA,KAAK88L,YAAU57L,GAGflB,KAAK81N,sBAAoB50N,GACzBlB,KAAK+1N,8BAAgCx3L,MAAMy3L,SAAS,WAClDp5B,EAAGxqC,KAAK,mBAAoBoL,EAAK8zD,WAAW,IAC3C,KACHtxN,KAAK4xN,iBAAiBhD,GA2WxB,IAxWAryB,UAAUp7H,WAKRq7H,UAOApwL,KAAM,aASNwQ,OAAQ,SAAUq5M,KAElB3xB,iBAAcpjM,GAUdgmM,SAAMhmM,GAUN+zN,SAAM/zN,GAKNivH,KAAM,aAKNI,MAAO,aAOP1uG,OAAQ,aAUR+yE,MAAO,SAAU1yF,EAAOg0N,GACtB,GAAI15B,GAASx8L,KAAKw8L,MAClB,OAAI+4B,cAAa/4B,GAAkB4uB,cAAclpN,EAAOs6L,GACjD64B,gBAAgBnG,YAAYt6H,MAAM1yF,GAAQs6L,GAAQ,EAAMx8L,KAAKuC,KAAM2zN,IAY5EvhI,UAAW,SAAU7vF,GACnB,GAAI03L,GAASx8L,KAAKw8L,MAClB,OAAoB,gBAAT13L,GAA4BA,EACnCywN,aAAa/4B,GAAkBk5B,kBAAkB5wN,EAAM03L,IAC3D13L,EAAO2wN,oBAAoB3wN,EAAM03L,GAC1B0yB,YAAYv6H,UAAU7vF,KAS/BqxN,sBAAuB,SAAUj0N,EAAOwvN,GACtC,GAEIhoF,GAFAklF,EAAY5uN,KAAKizN,uBAAuB/wN,GACxC6yN,EAAqBQ,aAAav1N,KAAKw8L,OAE3C,QAAct7L,KAAVgB,EAGJ,GAAK6yN,GAAuBrD,EAS5B1xN,KAAK4uN,UAAYA,MATjB,CACE5uN,KAAK4uN,UAAY5uN,KAAK4uN,UAAY+F,UAAU30N,KAAK4uN,aACjD,KAAKllF,IAAYklF,GACf5uN,KAAK4uN,UAAUllF,GAAYklF,EAAUllF,KAiB3CupF,uBAAwB,SAAU/wN,GAChC,GAAIk0N,EACJ,OAAqB,gBAAVl0N,GAA6BA,GACpCqzN,aAAav1N,KAAKw8L,QAQO,iBAP3B45B,EAAcp2N,KAAKw8L,OAAO5nG,MAAM1yF,MAOOk0N,EAAcl0N,GAGrDk0N,EAAclH,YAAYt6H,MAAM1yF,GAE3Bk0N,IAST3D,WAAY,SAAUd,GACpB,GAAI/C,GAAY+C,EAAY3xN,KAAK8E,KAAO9E,KAAK4uN,SACxCA,IACL3pL,OAAOw8H,YAAYtgG,UAAUmxE,aAAa5tI,KAAK1E,KAAK48L,GAAI58L,KAAKk/J,SACrBl/J,KAAK20F,UAAUi6H,KAUzDgD,iBAAkB,SAAUhD,EAAW8C,GACrC,GACIqD,GACArrK,EACA2sK,EAHAz5B,EAAK58L,KAAK48L,GAIVE,EAAU98L,KAAK88L,OAInB,KAAKF,EAAG2M,UAEN,WADAvpM,MAAKm2N,sBAAsBvH,EAS7B,IALAmG,EAAqBQ,aAAav1N,KAAKw8L,QAGvC65B,EAAiC,OAAdzH,GAAwD,gBAA3B5uN,MAAK81N,mBAClClH,IAAc5uN,KAAK81N,kBAChB,CACpB,IAAKpsK,IAAO1pD,MAAK4uN,UACf,KAAMllK,IAAOklK,IAAY,CACvByH,GAAmB,CACnB,OAGJ,IAAK3sK,IAAOklK,GACV,KAAMllK,IAAO1pD,MAAK4uN,WAAY,CAC5ByH,GAAmB,CACnB,QAiBN,GAXAr2N,KAAK81N,kBAAoBlH,EAGzBA,EAAY5uN,KAAKizN,uBAAuBrE,GACxC5uN,KAAKm2N,sBAAsBvH,EAAW8C,GAElC1xN,KAAKskM,cACPtkM,KAAKskM,aAAatkM,KAAKs2N,UAAUt2N,KAAK4uN,WAAW,GAAO,IAE1D5uN,KAAK8E,KAAO9E,KAAKs2N,UAAUt2N,KAAK4uN,UAAW8C,GAAS,EAAO2E,GAEtDr2N,KAAKoxN,YAmBH,CAEL,GAAI7yL,MAAMg4L,UAAUv2N,KAAK88L,QAAS98L,KAAK8E,MAAS,MAEhD9E,MAAK88L,QAAUg4B,oBAAqB90N,KAAK8E,KAAMiwN,GAE/C/0N,KAAK4c,OAAOkgL,GACZ98L,KAAK+1N,oCA1BgB,CAErB,GAAIn5B,EAAG8yB,uBAAuB1vN,KAAKuC,MAAS,MAE5Cq6L,GAAG8yB,uBAAuB1vN,KAAKuC,OAAQ,EAEvCvC,KAAKoM,OACLpM,KAAKoxN,aAAc,QACZx0B,GAAG8yB,uBAAuB1vN,KAAKuC,MAGtCu6L,EAAYi4B,GACgD,gBAA1C3J,mBAAclqN,GAAWlB,KAAKw8L,YAA6Bt7L,MAE7ElB,KAAK88L,QAAUg4B,oBAAqB90N,KAAK8E,KAAMiwN,GAC/C/0N,KAAK4c,OAAOkgL,GAERF,EAAGh+H,WAAa5+D,KAAKmwH,OACzBysE,EAAGxqC,KAAK,uBAAwBpyJ,KAAKsxN,WAAW,KAkBpDO,cAAe,SAAUvxG,GACvB,GAAIi1G,aAAav1N,KAAKw8L,QACpBx8L,KAAK4uN,cAAY1tN,OACZ,CACL,KAAMo/G,IAAgBtgH,MAAK4uN,WAAc,aAClC5uN,MAAK4uN,UAAUtuG,GAExBtgH,KAAK4xN,iBAAiB5xN,KAAK4uN,YAY7BnqB,aAAc,SAAU+xB,GAEtB,GAAIC,GAAiBl4L,MAAM0oJ,UAAWryJ,WAAW50B,KAAKuC,MAAMi6L,OAE5Dj+J,OAAM0oJ,OAAOwvC,EAAgBD,GAC7Bx2N,KAAKw8L,OAAS84B,cAAcmB,GAC5Bz2N,KAAK48L,GAAGxqC,KAAK,iBAAkBq9C,UAAWzvM,KAAKuC,QAsBjD+zN,UAAW,SAAUI,EAAShF,EAASwE,EAAQG,GAC7C,GAAIM,GACA7xN,EACA6kI,EACA9/E,EACA+sK,EACA1J,EAEAlnN,EAGAk+L,EAJA1H,EAASx8L,KAAKw8L,OAEdu4B,EAAqBQ,aAAa/4B,GAClCsyB,EAAW9uN,KAAK48L,GAAGkyB,QASvB,IALA6H,EAAmBD,GAAWA,EAAQ1+J,cAAgBn7C,MAClD65M,EAAQl2N,WACIU,KAAZw1N,GAAqC,OAAZA,EAGzB3B,EAGFjwN,EAAO+vN,gBAAgBr4B,EAAOE,SAAWn+J,MAAM9iB,MAAM+gL,EAAOE,SAAWF,EAAOE,YAS9E,KANAwH,GAAgBwtB,GAAW1xN,KAAK4uN,UAGhC9pN,EAA+B,gBAAjBo/L,GAA4BywB,UAAUzwB,MAG/Cl+L,EAAI,EAAG6jD,EAAO7nD,OAAO6nD,KAAK2yI,GAASo6B,EAAa/sK,EAAKrpD,OAAQwF,EAAI4wN,EAAY5wN,IAChF2jI,EAAe6yD,EAAO3yI,EAAK7jD,IAAI02L,YACTx7L,KAAlB4D,EAAK+kD,EAAK7jD,MAEdlB,EAAK+kD,EAAK7jD,IAAM6uN,gBAAgBlrF,GAAgBprG,MAAM9iB,MAAMkuH,GAAgBA,EAKhF,KAAK3jI,EAAI,EAAGA,EAAI8oN,EAAStuN,OAAQwF,KAC/BknN,EAAY4B,EAAS9oN,GAAGohE,aAAapnE,KAAKk/J,aAExCp6J,EAAOgwN,iBAAiBhwN,EAAMooN,EAAW6H,GAK7C,IAAI4B,EAAkB,CACpB,GAAI5B,EACF,OAAyB,IAArBsB,EAAoCK,EACjCtL,cAAcsL,EAASl6B,EAEhC13L,GAAOgwN,iBAAiBhwN,EAAM4xN,EAAS3B,OAClC,CACL,IAAyB,IAArBsB,EAA6B,MAAOvxN,EAExC,IAAIiwN,EAAsB,MAAO3J,eAActmN,EAAM03L,GAGvD,OAAyB,IAArB65B,EAAoCvxN,EACjCuwN,gBAAgBvwN,EAAM03L,MAAQt7L,GAAWlB,KAAKuC,KAAM2zN,KAK3DjxL,OAAO83H,MACT,GAAI85D,2BAA4Bj3N,OAAOD,QAAQk3N,4BAUjDj3N,QAAOD,QAAQ28L,kBAAoB,SAAU/5L,EAAMu0N,GACjD,GAAIC,GACA58C,IA2BJ,IAxBIvmK,SAASgiN,eAAiBhiN,SAASgiN,gBAAkBD,cACvDp7E,OAAOnrC,QAAQ,SAAwBkwF,GAEjCA,EAAQiK,WAGR31L,SAASgiN,cAAcoB,wBAAwB13B,KAC/C39B,KAAKs1D,8BAETn8M,KAAK,kBAAoBvY,EAAO,mNAK5B0iC,OAAO83H,QAAS85D,0BAA0Bt0N,IAAQ,OAIvB,IAA/BszN,gBAAgBz5M,KAAK7Z,IACvBuY,KAAK,uBAAyBvY,EAAO,kIAEOA,EAAK01G,cAAgB,MAGvC,IAAxB11G,EAAK47B,QAAQ,MACf,KAAM,IAAI1J,OAAM,uBAAyBlyB,EAAO,8HAalD,IAPAP,OAAO6nD,KAAKitK,GAAY1nH,QAAQ,SAAU1lD,GACxCywH,EAAMzwH,IACJxnD,MAAO40N,EAAWptK,GAClB26G,UAAU,KAIVzvI,WAAWryB,GACb,KAAM,IAAIkyB,OAAM,kBAAoBlyB,EAAO,iJA0B7C,OAtBAw0N,GAAe,SAAUn6B,EAAI3sB,EAAMlmK,GACjCwyL,UAAU73L,KAAK1E,KAAM48L,EAAI3sB,EAAMlmK,IAGjCgtN,EAAa51J,UAAYn/D,OAAOo+E,OAAOm8G,UAAUp7H,UAAWg5G,GAC5D48C,EAAa51J,UAAU5+D,KAAOA,EAC9Bw0N,EAAa51J,UAAUnJ,YAAc++J,EACrCA,EAAa51J,UAAUg8H,OAASiX,SAAWA,QAAQA,QAAQ7xM,GAC3Dw0N,EAAa51J,UAAUgvD,KAAOmmF,SAASygB,EAAa51J,UAAUgvD,MAC9D4mG,EAAa51J,UAAUovD,MAAQ2kG,UAAU6B,EAAa51J,UAAUovD,OAEhE37F,WAAWryB,IACTg6L,UAAWw6B,EACXj9E,aAAci9E,EAAa51J,UAAU24E,aACrCy7E,aAAcA,aAAawB,EAAa51J,UAAUq7H,QAClDuN,SAAUgtB,EAAa51J,UAAU4oI,SACjCn1G,MAAOmiI,EAAa51J,UAAUyzB,MAC9Bq+H,uBAAwB8D,EAAa51J,UAAU8xJ,uBAC/Cz2B,OAAQj+J,MAAM0oJ,OAAOquC,cAAcyB,EAAa51J,UAAUq7H,OAAQu6B,EAAa51J,UAAU5+D,OACzFoyF,UAAWoiI,EAAa51J,UAAUwzB,UAClC9yF,KAAMk1N,EAAa51J,UAAUt/D,MAExBk1N;;AC7eT,GAAIv6B,QAAS7pC,QAAQ,YAEjB2iE,cAAgB94B,OAAO3xC,QACvBt/H,WAAa3rB,OAAOD,QAAQ4rB,cAC5Bw4K,cAAgBnkM,OAAOD,QAAQokM,iBAC/BhkM,MAAQ4yJ,QAAQ,gBAOhBzuI,SAAWtkB,OAAOD,QAAQukB,SAAW,YAEzCA,UAASi9C,WAKPq7H,UAMApwL,KAAM,SAAUtH,GAEd,MADA9E,MAAKia,SAAW,GAAIla,OAAMmkB,SACnBlkB,KAAKia,UASd2C,OAAQ,SAAU9X,MAUpBlF,OAAOD,QAAQu3N,iBAAmB,SAAU30N,EAAMu0N,GAChD,GAAIK,GACAh9C,IAUJ,IAPAn4K,OAAO6nD,KAAKitK,GAAY1nH,QAAQ,SAA2B1lD,GACzDywH,EAAMzwH,IACJxnD,MAAO40N,EAAWptK,GAClB26G,UAAU,KAIV94I,WAAWhpB,GACb,KAAM,IAAIkyB,OAAM,iBAAmBlyB,EAAO,gCAW5C,OATA40N,GAAc,WAAcjzM,SAASxf,KAAK1E,OAC1Cm3N,EAAYh2J,UAAYn/D,OAAOo+E,OAAOl8D,SAASi9C,UAAWg5G,GAC1Dg9C,EAAYh2J,UAAU5+D,KAAOA,EAC7B40N,EAAYh2J,UAAUnJ,YAAcm/J,EACpC5rM,WAAWhpB,IACT2hB,SAAUizM,EACV36B,OAAQ84B,cAAc6B,EAAYh2J,UAAUq7H,SAE9CuH,cAAcx5L,KAAKhI,GACZ40N;;AChCT,QAASC,sBAAsBv1N,EAAM8nI,EAAc/0C,EAAOD,GACxD,GAAI,QAAU0iI,eAEZ,WADA32N,OAAM,iBAAmBmB,EAAO,0BAIlCw1N,eAAcx1N,IACZ66L,QAAS/yD,EACT/0C,MAAOA,GAAS0iI,aAChB3iI,UAAWA,GAAa4iI,kBAK5B,QAASC,YAAYt1N,GAInB,QAAS67G,GAAMwwC,GAAO,MAAOA,GAAIxwC,OAHjC,MAAIlhG,OAAMC,QAAQ5a,GAAiBA,EAC9BA,GAA0B,gBAAVA,GACdA,EAAM2xB,MAAM,KAAKxuB,IAAI04G,MAI9B,QAAS05G,gBAAgBv1N,GACvB,MAAOA,GAAMgM,KAAK,MAWpB,QAASwpN,YAAYx1N,GACnB,GAAI06L,GACA+6B,CAGJ,OAAqB,gBAAVz1N,GAA6BA,GAGxCy1N,EAAYz1N,EAAM2I,MAAM,gBACpB8sN,EAAoBA,EAAU,GAGV,MAApBz1N,EAAM6nF,OAAO,IACf6yG,EAAKhpL,SAASygN,eAAenyN,EAAM8jH,UAAU,KAIxB,WAAf42E,EAAGgxB,SAAuC,UAAfhxB,EAAGgxB,SAAsC,QAAfhxB,EAAGgxB,QACnDhxB,EAEFA,EAAGx1H,aAAa,WAEzBtsD,MAAK,IAAM5Y,EAAQ,sBAKdA,GAGT,QAASo1N,cAAcp1N,GACrB,MAAOA,GAGT,QAASq1N,kBAAkBr1N,GACzB,MAAc,QAAVA,EAAyB,OACtBA,EAAM27B,WAGf,QAAS+5L,WAAW11N,GAClB,MAAiB,UAAVA,IAA+B,IAAVA,EAG9B,QAAS21N,UAAU31N,GACjB,MAAO80B,UAAS90B,EAAO,IAGzB,QAAS41N,aAAa51N,GACpB,MAAOgrC,YAAWhrC,EAAO,IAG3B,QAAS61N,eAAe71N,GACtB,MAAKA,GACgB,gBAAVA,GAA6BA,EACvB,MAAbA,EAAM,IAAe81N,aAAa57M,KAAKla,GAKpC0R,SAASu+H,cAAcjwI,GAFrB0R,SAASygN,eAAenyN,EAAM8jH,UAAU,IAL5B,KAUvB,QAASiyG,kBAAkB/1N,GACzB,MAAKA,GACgB,gBAAVA,GAA6BA,EACjC2a,MAAMskD,UAAUtZ,MAAMnjD,KAAKkP,SAAS+qJ,iBAAiBz8J,GAAQ,GAF/C,KAKvB,QAASg2N,mBAAmBh2N,GAC1B,MAAIA,GAAMklE,aACD,IAAMllE,EAAMklE,aAAa,MAE3BmwJ,iBAAiBr1N,GAG1B,QAASi2N,sBAAsBj2N,GAC7B,MAAIA,aAAiB2a,OACZ3a,EAAMmD,IAAI,SAAU01F,GACzB,MAAO,IAAMA,EAAQ3zB,aAAa,QACjCl5D,KAAK,MAEHqpN,iBAAiBr1N,GAG1B,QAASk2N,UAAUl2N,GAEjB,MADA4Y,MAAK,2DACE48M,WAAWx1N,GAGpB,QAASm2N,UAAUn2N,GACjB,MAAOopN,aAAY12H,MAAM1yF,EAAOlC,KAAK08L,SAUvC,QAAS47B,qBAAqBz2N,EAAM02N,GAClC,OAAa,UAAT12N,GAA0C,gBAAf02N,QAClB,UAAT12N,IAAqBgb,MAAMC,QAAQy7M,OAC1B,UAAT12N,GAA0C,gBAAf02N,OAClB,YAAT12N,GAA4C,iBAAf02N,OACpB,UAAT12N,GAA0C,gBAAf02N,OAClB,QAAT12N,GAAwC,gBAAf02N,OAChB,WAAT12N,GAA2C,gBAAf02N,OACnB,QAAT12N,GAAwC,gBAAf02N,OAChB,UAAT12N,GAA0C,gBAAf02N,OAClB,aAAT12N,GAA6C,gBAAf02N,IACf,OAAfA,MACS,gBAAT12N,GAAgD,gBAAf02N,IAClB,OAAfA,MACS,QAAT12N,GAAwC,gBAAf02N,OAChB,WAAT12N,GAA2C,gBAAf02N,OACnB,SAAT12N,GAAyC,gBAAf02N,MACjB,SAAT12N,EAA0B22N,yBAAyBD,EAAY,GACtD,SAAT12N,EAA0B22N,yBAAyBD,EAAY,GACtD,SAAT12N,GAA0B22N,yBAAyBD,EAAY,iBAYrE,QAASC,0BAA0BC,EAAqBC,GACtD,GAA4B,OAAxBD,EAAgC,OAAO,CAC3C,IAAmC,gBAAxBA,GAAoC,OAAO,CAEtD,IAAIz2N,OAAO6nD,KAAK4uK,GAAqBj4N,SAAWk4N,EAC9C,OAAO,CAEP,IAAIv4N,GAAIs4N,EAAoBt4N,EACxBC,EAAIq4N,EAAoBr4N,EACxBQ,EAAI63N,EAAoB73N,EACxBC,EAAI43N,EAAoB53N,CAE5B,OAAiB,gBAANV,IAA+B,gBAANC,OAChCs4N,EAAa,GAAkB,gBAAN93N,OACzB83N,EAAa,GAAkB,gBAAN73N,KAxNjC,GAAIyqN,aAAc34D,QAAQ,wBACtBoK,MAAQpK,QAAQ,SAEhBjyJ,MAAQq8J,MAAM,2BACdjiJ,KAAOiiJ,MAAM,2BAEbs6D,cAAgBz3N,OAAOD,QAAQ03N,iBAC/BW,aAAe,YAGnBZ,sBAAqB,QAAS,GAAIM,YAClCN,qBAAqB,WAAaI,WAAYC,gBAC9CL,qBAAqB,QAAS,GAAIM,YAClCN,qBAAqB,WAAW,EAAOQ,WACvCR,qBAAqB,QAAS,OAAQE,aAAcC,kBACpDH,qBAAqB,MAAO,EAAGS,UAC/BT,qBAAqB,SAAU,EAAGU,aAClCV,qBAAqB,MAAO,GAAIM,YAChCN,qBAAqB,QAAS,GAAIM,YAClCN,qBAAqB,WAAY,KAAMW,cAAeG,mBACtDd,qBAAqB,cAAe,KAAMa,iBAAkBE,sBAC5Df,qBAAqB,MAAO,GAAIgB,UAChChB,qBAAqB,SAAU,GAAIE,aAAcC,kBACjDH,qBAAqB,OAAQ,EAAGS,UAChCT,qBAAqB,QAASj3N,EAAG,EAAGC,EAAG,GAAIi4N,SAAU/M,YAAY32H,WACjEyiI,qBAAqB,QAASj3N,EAAG,EAAGC,EAAG,EAAGQ,EAAG,GAAIy3N,SAAU/M,YAAY32H,WACvEyiI,qBAAqB,QAASj3N,EAAG,EAAGC,EAAG,EAAGQ,EAAG,EAAGC,EAAG,GAAIw3N,SAAU/M,YAAY32H,WAwB7E/0F,OAAOD,QAAQy3N,qBAAuBA,qBA+ItCx3N,OAAOD,QAAQ24N,oBAAsBA,oBA4BrC14N,OAAOD,QAAQ64N,yBAA2BA;;ACma1C,QAASG,eAAetqB,EAAUuqB,GAChC,MAAIA,IAEA50N,OAAQqqM,EAASx5D,cAAcgkF,aAC/B90N,MAAOsqM,EAASx5D,cAAcikF,cAIhC90N,OAAQihC,OAAO+3J,YACfj5L,MAAOkhC,OAAO83J,YAIlB,QAASnoB,mBAAmB9hK,IAExBA,EAAO8hK,mBACP9hK,EAAO0+K,yBACP1+K,EAAO2+K,sBACP3+K,EAAO4+K,qBACS9kJ,MAAM95B,GAG1B,QAASgiK,kBACHlhK,SAASkhK,eACXlhK,SAASkhK,iBACAlhK,SAASg+K,oBAClBh+K,SAASg+K,sBACAh+K,SAAS+9K,sBAClB/9K,SAAS+9K,uBAUb,QAASonC,iBAAiBz5B,GAExB,MAA0C,QAAtCA,EAAQl4H,aAAa,aACsB,SAAtCk4H,EAAQl4H,aAAa,cAItBk4H,EAAQngB,SAIlB,QAAS65C,aAAa15B,GAuBpB,QAAS25B,KAELrlN,SAASogK,mBACTpgK,SAASm+K,sBACTn+K,SAASk+K,yBAEUwN,EAAQyW,SAC7BniM,SAASslN,cAAcC,OACvBvlN,SAAS0iI,KAAK5nG,QA9BhB,GAAI2/J,EAEJA,GAAWz6L,SAAS+7I,cAAc,UAClC0+C,EAAS96B,UAAUxzJ,IAAI,YAEvBsuL,EAAS+qB,QAAQC,cAAe,EAChC/5B,EAAQzvC,YAAYw+C,GAEpBz6L,SAAS8b,iBAAiB,mBAAoBupM,GAC9CrlN,SAAS8b,iBAAiB,sBAAuBupM,GACjDrlN,SAAS8b,iBAAiB,yBAA0BupM,GAGpD5qB,EAAS3+K,iBAAiB,YAAa,SAAUJ,GAASA,EAAM0pB,mBAGhEsmJ,EAAQxsL,OAASu7L,EACjB/O,EAAQltC,KAAK,wBAAyB5yI,OAAQ6uL,IAG9C72F,WAAWnvD,KAAKi3I,EAAQyX,OAAQzX,GAAU,GArsB5C,GAAIg6B,cAAe3mE,QAAQ,cAAc4mE,OACrCC,aAAe7mE,QAAQ,cACvB8mE,GAAK9mE,QAAQ,yBACbpY,OAASoY,QAAQ,YACjByhD,QAAUzhD,QAAQ,aAAayhD,QAC/Br0M,MAAQ4yJ,QAAQ,mBAChBlI,MAAQkI,QAAQ,qBAChBp0H,MAAQo0H,QAAQ,gBAEhB88D,QAAU98D,QAAQ,eAClBi5D,MAAQj5D,QAAQ,aAChB+mE,mBAAqB/mE,QAAQ,iBAE7BtqG,KAAO9pB,MAAM8pB,KACb+qH,MAAQ70I,MAAM0Q,OAAOmkI,QACrB+L,SAAW5gJ,MAAM0Q,OAAOkwI,WACxB2sC,gBAAkB2N,GAAG3N,gBACrBhxM,KAAOyjB,MAAMw+H,MAAM,oBAiBvBn9J,QAAOD,QAAQg6N,OAAS7N,gBAAgB,WACtC3qJ,UAAWn/D,OAAOo+E,OAAOqvI,QAAQtuJ,WAC/BwtJ,mBACEzsN,OACE03N,UAAa,GACbC,qBAAsB,GACtBC,WAAc,GACdC,aAAc,KAIlB55D,iBACEj+J,MAAO,WACLlC,KAAKozK,MAAQA,MACbpzK,KAAKm/K,SAAWA,SAChBn/K,KAAKm0M,SAAU,EACfn0M,KAAK8oI,SAAW,GAAI/oI,OAAMsnD,MAC1BrnD,KAAKyP,OAAS44C,KAAKroD,KAAKyP,OAAQzP,MAChCA,KAAKo0M,WACLp0M,KAAKg6N,eACLh6N,KAAK06C,KAAO,EACZ16C,KAAKoM,SAITA,MACElK,MAAO,WACLlC,KAAKi6N,WAAa/yB,QAAU+tB,SAC5Bj1N,KAAKupM,WAAY,EACjBvpM,KAAK4+D,WAAY,EACjB5+D,KAAKk6N,aAAel6N,KAAKiwJ,UACzBjwJ,KAAK2/B,aAAe,KACpBq5L,YAAYh5N,MACZA,KAAKm6N,gBACLn6N,KAAK+2M,SACL/2M,KAAKi0M,sBACLylB,mBAAmB15N,OAErBqkK,UAAU,GAGZ4vC,qBACE/xM,MAAO,WACQ0R,SAASsoJ,gBACfqX,UAAUxzJ,IAAI,UACrBnM,SAAS0iI,KAAKi9B,UAAUxzJ,IAAI,UAC5B/f,KAAKuzK,UAAUxzJ,IAAI,gBAIvBi0L,wBACE9xM,MAAO,WACQ0R,SAASsoJ,gBACfqX,UAAU1xJ,OAAO,UACxBjO,SAAS0iI,KAAKi9B,UAAU1xJ,OAAO,UAC/B7hB,KAAKuzK,UAAU1xJ,OAAO,gBAI1BoqM,kBACE/pN,MAAO,WACL,GAAI60M,GACAv5C,EAAOx9J,IAEXs5N,cAAat5N,MACbw5N,aAAax5N,MACbA,KAAKo6N,cAELrjB,EAAS1uJ,KAAKroD,KAAK+2M,OAAQ/2M,MAC3BilC,OAAOvV,iBAAiB,OAAQqnL,GAChC9xK,OAAOvV,iBAAiB,SAAU,WAM5B1vB,KAAKozK,MACP57D,WAAWu/F,EAAQ,KAEnBA,MAGJ/2M,KAAKmwH,OAGLoqB,OAAOhwI,KAAKvK,MAGZA,KAAKq6N,uBAAyBhyK,KAAKroD,KAAKs6N,kBAAmBt6N,MAC3DilC,OAAOvV,iBAAiB,yBAA0B1vB,KAAKq6N,wBAGvDr6N,KAAKu6N,aAAe,WAAc/8D,EAAKs4C,WACvC91M,KAAKw6N,YAAc,WAAch9D,EAAKu4C,UACtC/1M,KAAKy6N,gBAAkB,WAAcj9D,EAAKu4C,QAAO,IACjD/1M,KAAK06N,uBAAyB,WAAcl9D,EAAKm9D,qBACjD36N,KAAK46N,yBAA2B,WAAcp9D,EAAKq9D,uBAGnD51L,OAAOvV,iBAAiB,oBAAqB1vB,KAAKu6N,cAGlDt1L,OAAOvV,iBAAiB,sBAAuB1vB,KAAKw6N,aAGpDv1L,OAAOvV,iBAAiB,sBAAuB1vB,KAAKy6N,iBAIpDx1L,OAAOvV,iBAAiB,6BAA8B1vB,KAAK06N,wBAI3Dz1L,OAAOvV,iBAAiB,+BAAgC1vB,KAAK46N,2BAE/Dv2D,SAAUp/H,OAAO83H,OAMnBq9D,aACEl4N,MAAO,WACLF,OAAO6nD,KAAKuqJ,SAAShlG,QAAQ/mD,KAAKroD,KAAK86N,WAAY96N,SAOvD86N,YACE54N,MAAO,SAAUK,GACXvC,KAAKo0M,QAAQ7xM,KACjBvC,KAAKo0M,QAAQ7xM,GAAQ,GAAI6xM,SAAQ7xM,GAAMvC,MACvCA,KAAKg6N,YAAYzvN,KAAKhI,MAO1B8pN,kBACEnqN,MAAO,WAEL,GAAI64N,GAAaxgF,OAAOp8G,QAAQn+B,KAChCu6I,QAAOnsE,OAAO2sJ,EAAY,GAE1B91L,OAAOzV,oBAAoB,yBAA0BxvB,KAAKq6N,wBAC1Dp1L,OAAOzV,oBAAoB,oBAAqBxvB,KAAKu6N,cACrDt1L,OAAOzV,oBAAoB,sBAAuBxvB,KAAKw6N,aACvDv1L,OAAOzV,oBAAoB,mBAAoBxvB,KAAKu6N,cACpDt1L,OAAOzV,oBAAoB,sBAAuBxvB,KAAKy6N,iBACvDx1L,OAAOzV,oBAAoB,6BAA8BxvB,KAAK06N,wBAC9Dz1L,OAAOzV,oBAAoB,+BAAgCxvB,KAAK46N,4BASpEzqB,aACEjuM,MAAO,SAAU84N,GACf,GAAIC,GAEAC,EADAjB,EAAYj6N,KAAKi6N,SAIrB,KAAKiB,IAAgBjB,GACde,EAASE,KACdD,EAAcj7N,KAAKi6N,UAAUiB,IACU,IAAnCD,EAAY98L,QAAQ68L,IACtBC,EAAY1wN,KAAKywN,MASzBG,uBACEj5N,MAAO,WACL,MAAO0R,UAASo2K,oBAElB3lB,SAAUp/H,OAAO83H,OAMnBuxC,uBACEpsM,MAAOq8B,MAAM0Q,OAAOq/J,sBACpBjqC,SAAUp/H,OAAO83H,OAYnB+4C,SACE5zM,MAAO,SAAUk5N,GAkBf,QAASC,KACP79D,EAAKujC,SAAS,WACdvjC,EAAKpL,KAAK,YAAa5yI,OAAQg+I,IAE3BA,EAAK2hB,UAAY7L,OAAOziI,aAAeyiI,OAAOziI,YAAYnL,MAC5D4tI,OAAOziI,YAAYnL,KAAK,aAE1B83H,EAAKy2C,sBAMAz2C,EAAK2hB,UAAa3hB,EAAK8wC,yBAC1B15B,kBAAkBpX,EAAK1qJ,QAEzB0qJ,EAAKu5C,SAGP,QAASukB,GAAgBnyD,GACvB,KAAIA,IAAOA,EAAIzrD,QACP,GAAIjpF,OAAM,+CAAiD00I,EAAIzrD,SAE/D,GAAIjpF,OAAM,+CAxCpB,GACImgK,GADAp3B,EAAOx9J,KAEPu7N,EAAY/9D,EAAKt3J,SAASq0C,EAE9B,OAAIv6C,MAAKksM,GAAG,WAAqBxzD,QAAQU,QAAQ,kBAE5CgiF,IAAiBp7N,KAAKsuM,0BAA2BtuM,KAAKm/K,UAQ3Dk8C,IACO3iF,QAAQU,YARbw7C,EAAYr2J,MAAM0Q,OAAOusL,eACzBD,EAAUjrL,UAAUskJ,GACpB2mC,EAAUp9M,SAAU,EACpBo9M,EAAUE,cAAcz7N,KAAK4P,OAAOgtL,GAAG9zD,UAChC8rD,EAAUhhB,iBAAiB/lG,OAAQ7tE,KAAK8S,UAC9BwmI,KAAK+hF,EAAgBC,KAgC1Cj3D,UAAU,GAUZ0xC,QACE7zM,MAAO,SAAUk5N,GAqBf,QAASM,KACPl+D,EAAK0iC,YAAY,WAEb1iC,EAAK2hB,UAAY7L,OAAOziI,aAAeyiI,OAAOziI,YAAYwjI,QAC5Df,OAAOziI,YAAYwjI,SAGjB7W,EAAKnrB,aAAa,aAAemrB,EAAKw2C,yBAC1Cx2C,EAAKu5C,SACDv5C,EAAK4V,OAAS70I,MAAMo9L,8BAA8B37N,KAAK8S,QAC3D0qJ,EAAKpL,KAAK,WAAY5yI,OAAQg+I,IAGhC,QAASo+D,GAAezyD,GACtB,KAAIA,IAAOA,EAAIzrD,QACP,GAAIjpF,OAAM,2CAA6C00I,EAAIzrD,SAE3D,GAAIjpF,OAAM,2CArCpB,GACImgK,GADAp3B,EAAOx9J,IAIX,OAAKA,MAAKksM,GAAG,YAEbp3B,iBAGKsmD,IAAiBp7N,KAAKsuM,0BAA2BtuM,KAAKm/K,UAO3Du8C,IAEOhjF,QAAQU,YARbp5I,KAAKkG,SAASq0C,GAAGp8B,SAAU,EAC3By2K,EAAYr2J,MAAM0Q,OAAOusL,eAClB5mC,EAAU7f,cAAcz7B,KAAKoiF,EAAeE,KARnBljF,QAAQU,QAAQ,eAqCpDirB,UAAU,GAGZs2D,mBACEz4N,MAAO,WACL,GAAIlC,KAAK8S,OAAQ,CACf,GAAIk3K,GAAqBhqL,KAAKm7N,uBAC1BnxC,IAAsBA,IAAuBhqL,KAAK8S,QAAUc,SAAS85L,iBAEvE95L,SAAS85L,kBAGP1tM,KAAK8S,OAAO47L,oBACd1uM,KAAK8S,OAAO47L,wBAMpBmsB,qBACE34N,MAAO,WACL,GAAI8nL,GAAqBhqL,KAAKm7N,uBAC1BnxC,IAAsBA,IAAuBhqL,KAAK8S,QAAUc,SAAS85L,iBACvE95L,SAAS85L,oBASf4sB,mBACEp4N,MAAO,SAAUu4L,GAIf,IAFcA,EAAIzlB,SAAWylB,EAAI5vI,OAAOmqH,SAE5B9lI,aAEV,WADAlvC,MAAK81M,SAAQ,EAIf91M,MAAK+1M,QAAO,KAQhB3uI,cACEllE,MAAO,SAAU+tK,GACf,GAAIktB,GAASn9L,KAAKo0M,QAAQnkC,EAC1B,OAAIktB,GAAiBA,EAAOr4L,KACrB2qN,QAAQtuJ,UAAUiG,aAAa1iE,KAAK1E,KAAMiwK,KAQrDyiD,sBACExwN,MAAO,SAAU+tK,GACfn1J,KAAK,qEACL9a,KAAKonE,aAAa6oG,KAQtBugD,iBACEtuN,MAAO,SAAU+tK,GACf,GAAIktB,GAASn9L,KAAKo0M,QAAQnkC,EAC1B,OAAIktB,GAAiBA,EAAOr4L,KACrB2qN,QAAQtuJ,UAAUqvJ,gBAAgB9rN,KAAK1E,KAAMiwK,KASxD39B,cACEpwI,MAAO,SAAU+tK,EAAM/tK,EAAO25N,GAC5B,GAAI1+B,GAASn9L,KAAKo0M,QAAQnkC,EAC1B,IAAIktB,EAGF,MAFAyuB,OAAMzqJ,UAAUmxE,aAAa5tI,KAAK1E,KAAMiwK,EAAM/tK,OAC9Ci7L,GAAOy0B,iBAAiB1vN,EAG1ButN,SAAQtuJ,UAAUmxE,aAAa5tI,KAAK1E,KAAMiwK,EAAM/tK,EAAO25N,KAO3DzrB,gBACEluM,MAAO,SAAU84N,GACf,GAAIC,GACAC,EAEAz0M,EADAwzM,EAAYj6N,KAAKi6N,SAIrB,KAAKiB,IAAgBjB,GACde,EAASE,KACdD,EAAcj7N,KAAKi6N,UAAUiB,IAEd,KADfz0M,EAAQw0M,EAAY98L,QAAQ68L,KACRC,EAAY7sJ,OAAO3nD,EAAO,MAKpDswL,QACE70M,MAAO,WACL,GAGIkH,GACA0yN,EACAC,EALAnsN,EAAS5P,KAAK4P,OACdkD,EAAS9S,KAAK8S,OACd8lN,EAAW54N,KAAKonE,aAAa,cAAgBpnE,KAAKksM,GAAG,UAIzD4vB,GAAW97N,KAAKkG,SAASq0C,GAAGlK,YAC5B0rL,EAAiB/7N,KAAKkG,SAASq0C,GAAGp8B,SAAW29M,GAAYA,EAAS5sL,cAM7Dt/B,IAAWkD,GAAW9S,KAAKksM,GAAG,aAAelsM,KAAKm/K,UAAY48C,KAEnE3yN,EAAOuvN,cAAc7lN,EAAQ8lN,GAC7BhpN,EAAO6+B,OAASrlC,EAAKrF,MAAQqF,EAAKpF,OAClC4L,EAAOsP,yBAEPlf,KAAKkG,SAASm9C,QAAQj6C,EAAKrF,MAAOqF,EAAKpF,QAAQ,KAEjDqgK,UAAU,GAGZ81D,eACEj4N,MAAO,WACL,GAAIgE,EACJA,GAAWlG,KAAKkG,SAAW,GAAInG,OAAM23C,eACnC5kC,OAAQ9S,KAAK8S,OACbsvC,UAAW22K,gBAAgB/4N,MAC3B2sB,OAAO,IAETzmB,EAASk9C,cAAcne,OAAOm3I,kBAC9Bl2K,EAAS20C,aAAc,GAEzBwpH,SAAUp/H,OAAO83H,OAOnB5sC,MACEjuH,MAAO,WACL,GAAIs7J,GAAOx9J,IACX,IAAIA,KAAKg8N,cAEP,WADAvM,SAAQtuJ,UAAUgvD,KAAKzrH,KAAK1E,KAI9BA,MAAK0vB,iBAAiB,SAAU,WAU9B,QAASusM,GAAa38B,GAChBA,EAAQ08B,gBAEZ18B,EAAQyX,SAGJzX,EAAQp5L,WACN++B,OAAO84F,aACT94F,OAAO84F,YAAYm+F,KAAK,kBAE1B58B,EAAQ68B,MAAQ,GAAIp8N,OAAMwlE,MAC1B+5H,EAAQ7vL,SACR6vL,EAAQ08B,eAAgB,EACxB18B,EAAQltC,KAAK,iBAnBjB,GAHAq9D,QAAQtuJ,UAAUgvD,KAAKzrH,KAAK1E,MAGxBA,KAAK4P,OAEP,WADAqsN,GAAYj8N,KAGdA,MAAK0vB,iBAAiB,oBAAqB,WAAcusM,EAAYj8N,UAqBvEw3G,WAAW,WACTi4G,QAAQtuJ,UAAUm2C,KAAK5yG,KAAK84J,OASlC+yD,iBACEruN,MAAO,SAAUgpN,GACXA,IAAiB9W,UACrBqb,QAAQtuJ,UAAUovJ,gBAAgB3jL,MAAM5sC,KAAMO,aASlD2mM,MACEhlM,MAAO,SAAUw4C,EAAM0hL,GACrB,GAAIp2N,GACAouM,EAAUp0M,KAAKo0M,OAMnB,KAHA3pD,MAAM7tI,SAGD5W,EAAI,EAAGA,EAAIhG,KAAKi6N,UAAU/yB,KAAK1mM,OAAQwF,IACrChG,KAAKi6N,UAAU/yB,KAAKlhM,GAAG42L,GAAGh+H,WAC/B5+D,KAAKi6N,UAAU/yB,KAAKlhM,GAAGkhM,KAAKxsJ,EAAM0hL,EAIpC,KAAKp2N,EAAI,EAAGA,EAAIhG,KAAKg6N,YAAYx5N,OAAQwF,IAClCouM,EAAQp0M,KAAKg6N,YAAYh0N,IAAIkhM,MAClCkN,EAAQp0M,KAAKg6N,YAAYh0N,IAAIkhM,KAAKxsJ,EAAM0hL,KAU9CnH,MACE/yN,MAAO,SAAUw4C,EAAM0hL,GACrB,GAAIp2N,GACAouM,EAAUp0M,KAAKo0M,OAGnB,KAAKpuM,EAAI,EAAGA,EAAIhG,KAAKi6N,UAAUhF,KAAKz0N,OAAQwF,IACrChG,KAAKi6N,UAAUhF,KAAKjvN,GAAG42L,GAAGh+H,WAC/B5+D,KAAKi6N,UAAUhF,KAAKjvN,GAAGivN,KAAKv6K,EAAM0hL,EAIpC,KAAKp2N,EAAI,EAAGA,EAAIhG,KAAKg6N,YAAYx5N,OAAQwF,IAClCouM,EAAQp0M,KAAKg6N,YAAYh0N,IAAIivN,MAClC7gB,EAAQp0M,KAAKg6N,YAAYh0N,IAAIivN,KAAKv6K,EAAM0hL,KAY9C3sN,QACEvN,MAAO,WACL,GAAI2oF,GAAgC,IAAxB7qF,KAAKm8N,MAAMj+F,WACnBh4H,EAAWlG,KAAKkG,QACpBlG,MAAK06C,KAAgC,IAAzB16C,KAAKm8N,MAAMz2J,YAEnB1lE,KAAK4+D,WAAa5+D,KAAKknM,KAAKlnM,KAAK06C,KAAMmwC,GAE3C3kF,EAAS+/C,QAAQjmD,KAAKyP,QACtBvJ,EAASuJ,OAAOzP,KAAK8oI,SAAU9oI,KAAK4P,OAAQ5P,KAAK2/B,cAE7C3/B,KAAK4+D,WAAa5+D,KAAKi1N,KAAKj1N,KAAK06C,KAAMmwC,IAE7Cw5E,UAAU,OA4DhBzkK,OAAOD,QAAQo5N,gBAAkBA,gBAoCjCn5N,OAAOD,QAAQq5N,YAAcA;;ACjsB7B,QAASqD,MAAMC,GACb,OACE1O,QAAS,OACTv/M,WAAYiuN,EACZC,OAAQ,WAAc,MAAO3oN,UAASu+H,cAAc,cAAgBmqF,EAAM/5N,KAAO,QAIrF,QAASi6N,MAAMF,GACb,OACE1O,QAAS,OACTv/M,WAAYiuN,EACZC,OAAQ,WAAc,MAAO3oN,UAASu+H,cAAc,aAAemqF,EAAM1sE,IAAM,QA2CnF,QAAS6sE,WAAWC,GAClB,GAAKA,GAAWA,EAAO9O,QAAvB,CACA,GAAItuI,GAAO1rE,SAAS+7I,cAAc+sE,EAAO9O,QAEzC,OADAtuI,GAAKgzD,aAAa8mE,UAAU7E,gBAAiB,IACtCttB,OAAO3nG,EAAMo9I,EAAOruN,aA7E7B,GAAI+qM,WAAYzmD,QAAQ,oBACpBs0B,OAASt0B,QAAQ,eAAes0B,OAEhC01C,iBAAmB/8N,OAAOD,QAAQg9N,kBACpCN,MAAM95N,KAAM,WAAY8zI,QAAS,oGAGjCgmF,MAAM95N,KAAM,yBAA0B8zI,QAAS,QAC/CgmF,MAAM95N,KAAM,cAAe8zI,QAAS,WAGlCumF,sBAEFP,MAAM95N,KAAM,+BAAgC8zI,QAAS,QACrDgmF,MAAM95N,KAAM,wCAAyC8zI,QAAS,UAC9DmmF,MAAM5sE,IAAK,mBAAoBJ,KAAM,iDA+BvC5vJ,QAAOD,QAAQ45N,OAAS,SAAyB5pN,GAW/C,QAASktN,GAAoBH,GACtBA,IAAUA,EAAOH,WAEtBO,EAAML,UAAUC,MAGZK,EACFA,EAAahkB,WAAWtlC,aAAaqpD,EAAKC,GAE1C3c,EAAOvwD,YAAYitE,GAGrBE,EAASzyN,KAAKuyN,IAtBhB,GAEIA,GAFA1c,EAASxsM,SAAS67I,KAClBstE,EAAe3c,EAAOjuE,cAAc,UAEpC6qF,IAKJ,OAJAL,kBAAiBvtH,QAAQytH,GACrBltN,EAAMyjK,OACRwpD,qBAAqBxtH,QAAQytH,GAExBG;;ACzCT,QAASC,uBAAuB3tM,GAC9B,GAAI3f,GAAQ3P,IACZ,IAAKsvB,EAAMxqB,KAEX,OAAQwqB,EAAMxqB,KAAKjD,MACjB,IAAK,KACH,OAAQytB,EAAMxqB,KAAKA,MACjB,IAAK,QACH6K,EAAMmmM,SACN,MACF,KAAK,OACHnmM,EAAMomM,WAzBhB,GAAI1tJ,MAAOsqG,QAAQ,oBACfuqE,UAAYvqE,QAAQ,gBAAgBuqE,SAMxCt9N,QAAOD,QAAU,SAA6BgQ,GAEvCutN,aAELj4L,OAAOvV,iBAAiB,UAAW24B,KAAK40K,sBAAuBttN;;ACRjE/P,OAAOD;;ACHP,GAAIw9N,UAAWxqE,QAAQ,oCAEvB/yJ,QAAOD,QAAU,SAAuBgQ,GACtC,GAAKA,EAAMwvK,SAAX,CAEA,GAAIi+C,GAAWztN,EAAMytN,SAAW,GAAID,SACpCxtN,GAAM+f,iBAAiB,WAAY,WAAc0tM,EAAS7kH,YAC1D5oG,EAAM+f,iBAAiB,UAAW,WAAc0tM,EAAS9oD;;ACQ3D,QAASkhD,kBAAkBh5B,GACzB,MAAI,QAAUA,GACkB,gBAAhBA,GAAO36L,KAEhB,WAAa26L,GAgCtB,QAAS6gC,2BAA2BC,EAAgBpS,GAClD,GACIqS,GACAC,EAFAjF,EAAa+E,EAAe5gC,QAG5B98H,EAAW09J,EAAez7N,IA6C9B,OA1CKy7N,GAAez7N,KAWe,SAAxBy7N,EAAez7N,KACxB+9D,EAAW,UACsB,UAAxB09J,EAAez7N,OACxB+9D,EAAW,UARTA,MALiB1+D,KAAfq3N,GACuB,iBAAfA,IAAkD,gBAAfA,GAGpC17M,MAAMC,QAAQy7M,GACZ,QAGA,eALOA,GAatBiF,EAAWnG,cAAcz3J,GACpB49J,GACH1iN,KAAK,wCAA0CowM,EAAgB,MAAQtrJ,GAIzE29J,IAAiBD,EAAe1oI,MAChC0oI,EAAe1oI,MAAQ0oI,EAAe1oI,OAAS4oI,EAAS5oI,MACxD0oI,EAAe3oI,UAAY2oI,EAAe3oI,WAAa6oI,EAAS7oI,UAGhE2oI,EAAez7N,KAAO+9D,EAGlB,WAAa09J,GAEVC,GAAiBjF,oBAAoB14J,EAAU24J,IAClDz9M,KAAK,kBAAoBy9M,EAAa,0BAA4B34J,EAC7D,mBAAqBsrJ,EAAgB,KAI5CoS,EAAe5gC,QAAU8gC,EAAS9gC,QAG7B4gC,EAmDT,QAASlS,eAAelpN,EAAOo7N,GAO7B,WALcp8N,KAAVgB,GAAiC,OAAVA,GAA4B,KAAVA,IAC3CA,EAAQo7N,EAAe5gC,QACnB7/K,MAAMC,QAAQ5a,KAAUA,EAAQA,EAAM2lD,UAGrCy1K,EAAe1oI,MAAM1yF,EAAOo7N,EAAe5gC,SA8BpD,QAASg5B,mBAAmBxzN,EAAOo7N,GAKjC,MAAqB,gBAAVp7N,GAA6BA,EAEnCo7N,GAA4B,OAAVp7N,EAChBo7N,EAAe3oI,UAAUzyF,GADgBwyF,KAAKC,UAAUzyF,GAnMjE,GAAIq8B,OAAQo0H,QAAQ,aAChB8qE,cAAgB9qE,QAAQ,mBAExBoK,MAAQx+H,MAAMw+H,MACdu7D,oBAAsBmF,cAAcnF,oBACpCjB,cAAgBoG,cAAcpG,cAE9Bv8M,KAAOiiJ,MAAM,mBAcjBn9J,QAAOD,QAAQ61N,iBAAmBA,iBASlC51N,OAAOD,QAAQkrJ,QAAU,SAAU2xC,EAAQ0uB,GACzC,GAAIwS,EAGJ,IAAIlI,iBAAiBh5B,GACnB,MAAO6gC,2BAA0B7gC,EAAQ0uB,EAI3C,KAAKwS,IAAYlhC,GACfA,EAAOkhC,GAAYL,0BAA0B7gC,EAAOkhC,GAAWxS,EAEjE,OAAO1uB,IA4DT58L,OAAOD,QAAQ09N,0BAA4BA,0BAY3Cz9N,OAAOD,QAAQ01N,gBAAkB,WAC/B,GAAIsI,KAEJ,OAAO,UAAUC,EAAUphC,EAAQqhC,EAAgB3S,EAAegL,GAChE,GAAIlwN,GACA03N,EACAJ,EACAQ,CAEJH,GAAUn9N,OAAS,CACnB,KAAKk9N,IAAaG,GAAiBD,EAAWphC,EAAWmhC,EAAUpzN,KAAKmzN,EAExE,IAAiB,OAAbE,GAAyC,gBAAbA,GAAyB,MAAOA,EAGhE,KAAKF,IAAYE,GACVphC,EAAOkhC,IAAcxH,GACxBp7M,KAAK,qBAAuB4iN,EACvB,2BAA6BxS,EAAgB,KAItD,KAAKllN,EAAI,EAAGA,EAAI23N,EAAUn9N,OAAQwF,IAAK,CAIrC,GAHA03N,EAAWC,EAAU33N,GACrBs3N,EAAiB9gC,EAAOkhC,GACxBI,EAAYF,EAASF,IACflhC,EAAOkhC,GAAc,MAC3BE,GAASF,GAAYtS,cAAc0S,EAAWR,GAGhD,MAAOM,OAgBXh+N,OAAOD,QAAQyrN,cAAgBA,cAK/BxrN,OAAOD,QAAQ81N,oBAAsB,SAAUmI,EAAUphC,GACvD,GAAIkhC,GACAJ,EACAQ,EAEA57N,EADA67N,IAGJ,KAAKL,IAAYE,GACfN,EAAiB9gC,EAAOkhC,GACxBI,EAAYF,EAASF,GACrBx7N,EAAQ47N,EACa,gBAAV57N,KACTA,EAAQwzN,kBAAkBoI,EAAWR,GAChCA,GAAkBxiN,KAAK,+BAAiC4iN,IAE/DK,EAAgBL,GAAYx7N,CAE9B,OAAO67N,IAgBTn+N,OAAOD,QAAQ+1N,kBAAoBA;;ACtMnC,GAAIl5B,QAAS7pC,QAAQ,YAEjB2iE,cAAgB94B,OAAO3xC,QACvB6kD,QAAU9vM,OAAOD,QAAQ+vM,WACzBC,YAAc/vM,OAAOD,QAAQgwM,eAC7B5vM,MAAQ4yJ,QAAQ,gBAChBp0H,MAAQo0H,QAAQ,YAGhBqrE,wBACFz4N,MAAO,KACPsJ,MAAO,KACPovN,IAAK,IACL33D,OAAQ,IACRjhK,IAAK,IACLq1C,KAAM,IACNwjL,KAAM,KACN5/F,KAAM,KACN6/F,KAAM,MAUJ5tB,OAAS3wM,OAAOD,QAAQ4wM,OAAS,YAErCA,QAAOpvI,WAKLq7H,UAEAvuL,aACE,wFAIFE,eACE,yDAQF/B,KAAM,SAAUtH,GASd,MARA9E,MAAKqO,WAAarO,KAAKo+N,cAAct5N,EAAM,aAC3C9E,KAAKyO,SAAWzO,KAAKo+N,cAAct5N,EAAM,WACzC9E,KAAKmV,SAAW,IAAKnV,KAAK8uK,IAAM/uK,MAAMk1D,kBAAoBl1D,MAAMiqB,iBAE9Dvb,SAAUzO,KAAKyO,SACfR,aAAcjO,KAAKiO,aACnBE,eAAgBnO,KAAKmO,iBAEhBnO,KAAKmV,UAGdipN,cAAe,SAAUt5N,EAAMjD,GAC7B,GAAI6nD,GAGA20K,EAFA7hC,EAASx8L,KAAKw8L,OACd8hC,IAGJ,KAAK50K,IAAO8yI,GACNA,EAAO9yI,GAAKwiJ,KAAOrqM,IACvBw8N,EAAUL,uBAAuBxhC,EAAO9yI,GAAK7nD,MAC7Cy8N,EAAU50K,IACR7nD,KAAMw8N,EACNn8N,UAAOhB,IAGX,OAAOo9N,IAST1hN,OAAQ,SAAU9X,GAChB9E,KAAKu+N,gBAAgBz5N,EAAM,aAC3B9E,KAAKu+N,gBAAgBz5N,EAAM,YAG7By5N,gBAAiB,SAAUz5N,EAAMjD,GAC/B,GAAI6nD,GACA80K,EAEAF,EADA9hC,EAASx8L,KAAKw8L,MAGlB8hC,GAAqB,YAATz8N,EAAqB7B,KAAKyO,SAAWzO,KAAKqO,UACtD,KAAKq7C,IAAO5kD,GACV,GAAK03L,EAAO9yI,IAAQ8yI,EAAO9yI,GAAKwiJ,KAAOrqM,EAEvC,GAAyB,QAArB26L,EAAO9yI,GAAK7nD,KAchBy8N,EAAU50K,GAAKxnD,MAAQlC,KAAKy+N,WAAWjiC,EAAO9yI,GAAK7nD,KAAMiD,EAAK4kD,IAC9D40K,EAAU50K,GAAK32C,aAAc,MAf7B,CAEE,IAAKurN,EAAU50K,IAAQ40K,EAAU50K,GAAKxnD,QAAU4C,EAAK4kD,GAAQ,QAG7D80K,GAAc,YAAc90K,EAG5B1pD,KAAK0+N,oBAAoBJ,EAAW50K,EAAK80K,GAGzCjgM,MAAMppB,SAASwpN,0BAA0BH,EAAa90K,EAAK1pD,KAAM8E,KAQvE25N,WAAY,SAAU58N,EAAMK,GAC1B,GAAI2M,EACJ,QAAQhN,GACN,IAAK,OACH,MAAO,IAAI9B,OAAMG,QAAQgC,EAAM/B,EAAG+B,EAAM9B,EAE1C,KAAK,OACH,MAAO,IAAIL,OAAMoB,QAAQe,EAAM/B,EAAG+B,EAAM9B,EAAG8B,EAAMtB,EAEnD,KAAK,OACH,MAAO,IAAIb,OAAM8D,QAAQ3B,EAAM/B,EAAG+B,EAAM9B,EAAG8B,EAAMtB,EAAGsB,EAAMrB,EAE5D,KAAK,QAEH,MADAgO,GAAQ,GAAI9O,OAAM2L,MAAMxJ,GACjB,GAAInC,OAAMoB,QAAQ0N,EAAMjJ,EAAGiJ,EAAM3H,EAAG2H,EAAM1H,EAEnD,KAAK,MACH,MAAOpH,OAAM+kI,WAAW/iB,YAAY7/G,EAEtC,SACE,MAAOA,KAKbw8N,oBAAqB,SAAUJ,EAAW50K,EAAK80K,GAC7C,GAAIhhE,GAAOx9J,IACXA,MAAK48L,GAAGltK,iBAAiB,wBAAyB,WAChD4uM,EAAU50K,GAAKxnD,MAAQs7J,EAAKroJ,SAASqpN,GACrCF,EAAU50K,GAAK32C,aAAc,MAYnCnT,OAAOD,QAAQsqM,eAAiB,SAAU1nM,EAAMu0N,GAC9C,GAAI1Y,GACAjkC,IAUJ,IAPAn4K,OAAO6nD,KAAKitK,GAAY1nH,QAAQ,SAAU1lD,GACxCywH,EAAMzwH,IACJxnD,MAAO40N,EAAWptK,GAClB26G,UAAU,KAIVqrC,QAAQntM,GACV,KAAM,IAAIkyB,OAAM,cAAgBlyB,EAAO,+BAWzC,OATA67M,GAAY,WAAc7N,OAAO7rM,KAAK1E,OACtCo+M,EAAUj9I,UAAYn/D,OAAOo+E,OAAOmwH,OAAOpvI,UAAWg5G,GACtDikC,EAAUj9I,UAAU5+D,KAAOA,EAC3B67M,EAAUj9I,UAAUnJ,YAAcomJ,EAClC1O,QAAQntM,IACNguM,OAAQ6N,EACR5hB,OAAQ84B,cAAclX,EAAUj9I,UAAUq7H,SAE5CmT,YAAYplM,KAAKhI,GACV67M;;ACzLT,GAAIxpL,YAAa+9H,QAAQ,eACrB6pC,OAAS7pC,QAAQ,YACjBp0H,MAAQo0H,QAAQ,aAEhB0iE,gBAAkB74B,OAAO64B,gBACzBjK,cAAgB5uB,OAAO4uB,cACvBkK,cAAgB94B,OAAO3xC,QACvB0qE,aAAe/4B,OAAOg5B,iBACtBtG,YAAc3wL,MAAM2wL,YAEpB9a,QAAUx0M,OAAOD,QAAQy0M,WAmBzBwqB,OAASh/N,OAAOD,QAAQi/N,OAAS,SAAUt/B,GAC7C,GAAImQ,GAAY76K,YAAcA,WAAWA,WAAW50B,KAAKuC,KAGzDvC,MAAK48L,GAAK0C,EACVt/L,KAAKs/L,QAAUA,EAGXmQ,IAAaA,EAAUlT,UAAUp7H,UAAUg8H,OAASn9L,MAGxDA,KAAKs2N,YACLt2N,KAAKoM,OACLpM,KAAK4c,WAGPgiN,QAAOz9J,WAILq7H,UAMApwL,KAAM,aAMNwQ,OAAQ,SAAUkgL,KAOlB80B,iBAAkB,SAAUiN,GAC1B,GAAI/hC,GAAU98L,KAAK8E,IACd9C,QAAO6nD,KAAK2yI,QAAQh8L,SACzBR,KAAKs2N,UAAUuI,GACf7+N,KAAK4c,OAAOkgL,KAMdw5B,UAAW,SAAUuI,GACnB,GAAIriC,GAASx8L,KAAKw8L,MACbx6L,QAAO6nD,KAAK2yI,GAAQh8L,SACzBq+N,EAAUA,GAAW55L,OAAOw8H,YAAYtgG,UAAUiG,aAAa1iE,KAAK1E,KAAKs/L,QAASt/L,KAAKuC,MACnFgzN,aAAa/4B,GACfx8L,KAAK8E,KAAOsmN,cAAcyT,EAASriC,GAEnCx8L,KAAK8E,KAAOuwN,gBAAgBnG,YAAYt6H,MAAMiqI,OAAgBriC,KAYlE0K,SAAMhmM,GAUN+zN,SAAM/zN,GAKNivH,KAAM,aAKNI,MAAO,cAUT3wH,OAAOD,QAAQm/N,eAAiB,SAAUv8N,EAAMu0N,GAC9C,GAAI9wN,GACA+4N,EACA5kD,KACA5/B,EAASh8G,MAAMygM,cAAcprN,SAUjC,IAPA5R,OAAO6nD,KAAKitK,GAAY1nH,QAAQ,SAAU1lD,GACxCywH,EAAMzwH,IACJxnD,MAAO40N,EAAWptK,GAClB26G,UAAU,KAIV+vC,QAAQ7xM,GACV,KAAM,IAAIkyB,OAAM,eAAiBlyB,EAAO,2IAY1C,KARAw8N,EAAY,SAAUz/B,GAAWs/B,OAAOl6N,KAAK1E,KAAMs/L,IACnDy/B,EAAU59J,UAAYn/D,OAAOo+E,OAAOw+I,OAAOz9J,UAAWg5G,GACtD4kD,EAAU59J,UAAU5+D,KAAOA,EAC3Bw8N,EAAU59J,UAAUnJ,YAAc+mK,EAClCA,EAAU59J,UAAUq7H,OAASj+J,MAAM0oJ,OAAOquC,cAAcyJ,EAAU59J,UAAUq7H,SAC5E4X,QAAQ7xM,GAAQw8N,EAGX/4N,EAAI,EAAGA,EAAIu0I,EAAO/5I,OAAQwF,IAAOu0I,EAAOv0I,GAAG80N,WAAWv4N;;AC1J7DowJ,QAAQ;;ACAR,GAAI2pC,mBAAoB3pC,QAAQ,wBAAwB2pC,kBACpDv8L,MAAQ4yJ,QAAQ,mBAEhBssE,iBAAmB,GAAIl/N,OAAMoB,QAC7B+9N,iBAAmB,GAAIn/N,OAAMoB,OAKjCm7L,mBAAkB,SAChBxiD,cAAe,YAEf0iD,QAAS36L,KAAM,QAEfuK,KAAM,WACJ,GAAItH,GAAO9E,KAAK8E,KACZ83L,EAAK58L,KAAK48L,GACVuiC,EAAiBviC,EAAG9zD,SAASlmH,OAC7Bw8M,EAAgBxiC,EAAG9zD,SACnBu2F,EAAa,GAAIt/N,OAAM8oD,KAE3Bo2K,kBAAiB7tN,KAAKguN,EAAcnsN,UACpCisN,iBAAiB9tN,KAAKguN,EAAcj8N,UAGpCg8N,EAAet9M,OAAOu9M,GACtBC,EAAWt/M,IAAIq/M,GAGfD,EAAep/M,IAAIs/M,GAGnBziC,EAAG9zD,SAAWu2F,EAGdD,EAAcnsN,SAASpL,KAAK,EAAI/C,EAAK3E,GAAI,EAAI2E,EAAK1E,GAAI,EAAI0E,EAAKlE,GAI/Dy+N,EAAWpsN,SAASpL,IAAI/C,EAAK3E,EAAI8+N,iBAAiB9+N,EAAG2E,EAAK1E,EAAI6+N,iBAAiB7+N,EACvD0E,EAAKlE,EAAIq+N,iBAAiBr+N,GAGlDy+N,EAAWl8N,SAASiO,KAAKguN,EAAcj8N,UACvCi8N,EAAcj8N,SAAS0E,IAAI,EAAG,EAAG;;ACjCrC,QAASy3N,YAAYh6E,GAEnB,GAAIi6E,GAAej6E,EAAKnvH,QAAQ,kBAAmB,SAAS8hF,aAC/C,SAATqtC,IAAkBi6E,EAAe,gBACxB,YAATj6E,IAAsBi6E,EAAe,oBACzCC,iBAAiBD,GAAgB,YAAcj6E,EAbjD,GAAI1wH,YAAa+9H,QAAQ,wBAAwB/9H,WAC7C86K,QAAU/8C,QAAQ,qBAAqB+8C,QACvCnxK,MAAQo0H,QAAQ,gBAEhB6sE,mBACJx9N,QAAO6nD,KAAKj1B,WAAWzf,SAASqnL,QAAQptF,QAAQkwH,YAChDt9N,OAAO6nD,KAAK6lJ,QAAQz8G,SAASupG,QAAQptF,QAAQkwH,YAU7C1/N,OAAOD,QAAU,WACf,OACEgvN,mBAAoBx5M,aACpBsqN,SAAUlhM,MAAM0oJ,UAAWu4C;;ACtB/B7sE,QAAQ,yBACRA,QAAQ,gCACRA,QAAQ,yBACRA,QAAQ,8BACRA,QAAQ,6BACRA,QAAQ,wBACRA,QAAQ,wBACRA,QAAQ,uBACRA,QAAQ,4BACRA,QAAQ,sBACRA,QAAQ,wBACRA,QAAQ,uBACRA,QAAQ,wBACRA,QAAQ,8BACRA,QAAQ;;ACyJR,QAAS+sE,qBAAqBxU,EAAeuU,GAC3C,GAAIjjC,GAAS5nK,WAAWs2L,GAAe1uB,MACvCx6L,QAAO6nD,KAAK2yI,GAAQn3L,IAAI,SAAUigJ,GAEhC,GAAI4Z,GAAW5Z,EAAKnvH,QAAQ,kBAAmB,SAAS8hF,kBAE7B/2G,KAAvBu+N,EAASvgE,KAA2BA,EAAWgsD,EAAgB,IAAM5lE,GACzEm6E,EAASvgE,GAAYgsD,EAAgB,IAAM5lE,IAO/C,QAASq6E,iBAAiB/R,EAASe,EAAmB8Q,GAEpDA,EAAWA,MAGXz9N,OAAO6nD,KAAK8kK,GAAmBtpN,IAAI,SAAwB6lN,GACzDwU,oBAAoBxU,EAAeuU,KAIrC7/N,OAAOD,QAAQigO,kBAAkBhS,EAASrvL,MAAMshM,cAAe,MAC7DlR,kBAAmBA,EACnB8Q,SAAUA,KAjMd,GAAIhQ,SAAU98D,QAAQ,uBAClB/9H,WAAa+9H,QAAQ,wBAAwB/9H,WAC7Ck3L,gBAAkBn5D,QAAQ,iCAAiCm5D,gBAC3DvtL,MAAQo0H,QAAQ,gBAEhBoK,MAAQx+H,MAAMw+H,MACd+iE,qBAAuBvhM,MAAMwtL,OAAO+T,qBACpCjlM,IAAMkiI,MAAM,2BACZjiJ,KAAOiiJ,MAAM,0BAEbxtB,WAAa3vI,OAAOD,QAAQ4vI,aAEhC3vI,QAAOD,QAAQigO,kBAAoB,SAA4Br9N,EAAMu0N,GACnEv0N,EAAOA,EAAK01G,cACZp9E,IAAI,mBAAoBt4B,GAGpBu0N,EAAWiJ,mBACbjlN,KAAK,iFAGP,IAAI60H,GAAYm8E,gBAAgBvpN,GAC9B4+D,UAAWn/D,OAAOo+E,OAAOqvI,QAAQtuJ,WAC/B6+J,gCACE99N,MAAO40N,EAAWnI,mBAAqBmI,EAAWiJ,uBAEpDE,YAAa/9N,MAAO40N,EAAWmJ,YAAc,MAC7CC,oBAAqBh+N,MAAO40N,EAAWoJ,wBACvCT,UAAWv9N,MAAO40N,EAAW2I,cAE7Bt/D,iBACEj+J,MAAO,WACD40N,EAAWmJ,YAAcx/N,QAAQqa,KAAKg8M,EAAWmJ,YACrDjgO,KAAKmgO,6BAQTA,0BACEj+N,MAAO,WACL,GAAIu9N,GAAWz/N,KAAKy/N,SAChBjiE,EAAOx9J,IACXgC,QAAO6nD,KAAK41K,GAAUrwH,QAAQ,SAA2B1lD,GACvD,GAAI02K,EACA12K,KAAQA,EAAIuuD,eAAiBn9F,KAAK,mEAAqE4uC,EAAM,0BAC7G90B,WAAW80B,KACb02K,EAAeX,EAAS/1K,GAAKvzB,QAAQ,IAAK,KAC1CspM,EAASW,GAAgBX,EAAS/1K,SAC3B+1K,GAAS/1K,GAChBjpD,QAAQqa,KAAK,iBAAmB0iJ,EAAKowD,QAAQ31G,cAAgB,2CAC7BvuD,EAAM,wEACC02K,QAM/C3O,oBACEvvN,MAAO,WA8CL,QAAS+kL,GAAQl1H,EAAMljC,GACrB,MAAIwxM,GAAYtuK,GACP3gD,EAAKyd,GAEVwxM,EAAYxxM,GACPzd,EAAK2gD,GAEVuuK,EAAavuK,IAASuuK,EAAazxM,GAC9B0P,MAAMshM,WAAW9tK,EAAMljC,GAEzBzd,EAAKyd,GAGd,QAASwxM,GAAan+N,GACpB,WAAwB,KAAVA,EAGhB,QAASkP,GAAMlP,GACb,MAAIo+N,GAAap+N,GACRq8B,MAAMshM,cAAe39N,GAEvBA,EAGT,QAASo+N,GAAcp+N,GACrB,MAAiB,QAAVA,GAAkBA,EAAM81D,cAAgBh2D,OAtEjD,GAAIiuK,GACAnrK,EACAkB,EACAzE,EACA8xN,EACA5oN,EACA+yJ,EAAOx9J,IAkBX,KAfA8E,EAAOy5B,MAAM9iB,MAAMzb,KAAKggO,gCAGxB3M,EAASrzN,KAAKonE,aAAa,SACvBisJ,IACFA,EAASA,EAAOt1G,OAAOlqF,MAAM,KAC7Bw/L,EAAOjkH,QAAQ,SAAqBolH,GAClC,GAAI+L,GAAkB/iE,EAAK8hC,QAAQntD,cAAc,IAAMqiF,GAAShD,cAChExvN,QAAO6nD,KAAK02K,GAAiBnxH,QAAQ,SAAuB7sG,GAC1DuC,EAAKvC,GAAQ0kL,EAAOniL,EAAKvC,GAAOg+N,EAAgBh+N,SAMjDyD,EAAI,EAAGA,EAAIhG,KAAKqO,WAAW7N,OAAQwF,IACtCiqK,EAAOjwK,KAAKqO,WAAWrI,IACvBzE,EAAUvB,KAAKy/N,SAASxvD,EAAK1tK,SAE3BkI,EAAO8zB,MAAMwtL,OAAOyU,yBAAyBj/N,GACzCkJ,EAAKutD,cAAgBn7C,OACvB/X,EAAK2F,EAAK,IAAM3F,EAAK2F,EAAK,QAC1B3F,EAAK2F,EAAK,IAAIA,EAAK,IAAMwlK,EAAK/tK,MAAM67G,QAEpCj5G,EAAK2F,GAAQwlK,EAAK/tK,MAAM67G,OAM9B,OAAOj5G,KAyCXs6J,0BACEl9J,MAAO,SAAU+tK,EAAMk8C,EAAQjqN,GAC7B,GAAIgpN,GAAgBlrN,KAAKy/N,SAASxvD,EAE9BA,KAAQjwK,MAAKkgO,oBACfz/N,QAAQqa,KAAK9a,KAAKkgO,mBAAmBjwD,IAGlCA,GAASi7C,GAGd4U,qBAAqB9/N,KAAMkrN,EAAehpN,QAQlD,OADAqtI,YAAWhtI,GAAQotI,EACZA,GAmCT/vI,OAAOD,QAAQggO,gBAAkBA;;ACpMjC,GAAIC,mBAAoBjtE,QAAQ,iBAAiBitE,iBAEjDA,mBAAkB,YAChBjR,mBACE/+M,UACA6wN,mBACAC,oBAGFjB,UACEhjC,OAAQ,gBACR3nL,IAAK,aACL05B,IAAK,aACLmyL,wBAAyB,wBACzB9rN,KAAM,cACN+rN,wBAAyB,wBACzBC,qBAAsB,iCACtBl9M,KAAM;;ACjBV,GAAIi8M,mBAAoBjtE,QAAQ,iBAAiBitE,iBAEjDA,mBAAkB,mBAChBH,UACE5lH,IAAK;;ACJT,GAAIinH,cAAenuE,QAAQ,mBACvBitE,kBAAoBjtE,QAAQ,iBAAiBitE,kBAC7CrhM,MAAQo0H,QAAQ,kBAEpBitE,mBAAkB,WAAYrhM,MAAMshM,cAAeiB,gBACjDnS,mBACEhmB,UACA1uL,UACE01H,UAAW,OACXoxF,YAAa,KACbC,YAAa,IACbC,cAAe,IAEjB9rN,UACEtG,MAAO,OACPb,OAAQ,OACRY,QAAS,IAEXqE,UACE9S,EAAG,EACHC,EAAG,EACHQ,GAAI,IAIR6+N,UACE3qN,IAAK,gBACL6pL,KAAM,cACNuiC,eAAgB,qBAChB7uB,SAAU,qBACVj6J,QAAS;;AC9Bb,GAAI0oL,cAAenuE,QAAQ,mBACvBitE,kBAAoBjtE,QAAQ,iBAAiBitE,kBAC7CrhM,MAAQo0H,QAAQ,kBAEpBitE,mBAAkB,gBAAiBrhM,MAAMshM,cAAeiB,gBACtDnS,mBACE10M,UACEjW,OAAQ,EACR2rI,UAAW,WACXh3H,OAAQ,EACRwoN,eAAgB,GAChBtwK,YAAa,IACbmD,WAAW,EACXpD,WAAY,GAEdz7C,UACEtG,MAAO,OACPb,OAAQ,OACRoI,KAAM,SACNK,aAAa,EACbxT,OAAQ,SAIZw8N,UACEz7N,OAAQ,kBACRo9N,aAAc,qBACdzoN,OAAQ,kBACRi5C,SAAU,0BACVjrC,MAAO,sBACP06M,eAAgB,uBAChBC,cAAe,sBACfv9N,MAAS;;AChCb,GAAI67N,mBAAoBjtE,QAAQ,iBAAiBitE,iBAEjDA,mBAAkB,gBAChBH,UACE5lH,IAAK;;ACJT,GAAIinH,cAAenuE,QAAQ,mBACvBitE,kBAAoBjtE,QAAQ,iBAAiBitE,kBAC7CrhM,MAAQo0H,QAAQ,kBAEpBitE,mBAAkB,UAAWrhM,MAAMshM,cAAeiB,gBAChDnS,mBACE10M,UACE01H,UAAW,SAEbx6H,UACEtG,MAAO,OACPb,OAAQ,OACRoI,KAAM,SACNK,aAAa,IAIjBgpN,UACEz7N,OAAQ,kBACRD,MAAO;;ACnBX,GAAI67N,mBAAoBjtE,QAAQ,iBAAiBitE,iBAEjDA,mBAAkB,WAChBjR,mBACE/vM,UAGF6gN,UACEttM,MAAO,cACPtjB,MAAO,cACP0yN,eAAgB,oBAChBhxM,MAAO,cACPH,SAAU,iBACViB,UAAW,kBACXe,SAAU,iBACVvwB,KAAM,aACN2d,OAAQ;;AChBZ,GAAIogN,mBAAoBjtE,QAAQ,iBAAiBitE,iBAEjDA,mBAAkB,UAChBjR,qBAEA8Q,UACEjwE,KAAM,YACNluJ,MAAO,aACPmwJ,MAAO;;ACRX,GAAI+vE,WAAY7uE,QAAQ,qBACpBitE,kBAAoBjtE,QAAQ,iBAAiBitE,kBAC7CrhM,MAAQo0H,QAAQ,kBAEpBitE,mBAAkB,cAAerhM,MAAMshM,cAAe2B,WACpD7S,mBACE8S,gBAGFhC,UACE5lH,IAAK,gBACLupF,IAAK;;ACXT,GAAI09B,cAAenuE,QAAQ,mBACvBitE,kBAAoBjtE,QAAQ,iBAAiBitE,kBAC7CrhM,MAAQo0H,QAAQ,mBAChB+uE,eAAiB/uE,QAAQ,mBAE7BitE,mBAAkB,QAASrhM,MAAMshM,cAAeiB,gBAC9CnS,mBACE10M,UACE01H,UAAW,SACXh3H,OAAQ,IACR2yL,cAAe,GACfC,eAAgB,IAElBp2L,UACEtG,MAAO,OACPb,OAAQ,OACR4hM,MAAM,GAER9gM,MAAO,UAGT2wN,SAAUlhM,MAAMshM,cAAe6B,eAAe,YAAYvgK,UAAUs+J;;ACrBtE,GAAIG,mBAAoBjtE,QAAQ,iBAAiBitE,iBAEjDA,mBAAkB,WAChBjR,mBACE3T,UAGFykB,UACE5lH,IAAK,YACLi4C,GAAI,WACJrzF,SAAU,iBACVhkB,KAAM,aACNggK,OAAQ;;ACXZ,GAAIklB,iBAAkBhtE,QAAQ,iBAAiBgtE,eAC/CA,iBAAgB,UAAW5vK,MAAOwtJ,OAAQ,QAASx5M,MAAO;;ACF1D,GAAI+8N,cAAenuE,QAAQ,mBACvBitE,kBAAoBjtE,QAAQ,iBAAiBitE,kBAC7CrhM,MAAQo0H,QAAQ,kBAEpBitE,mBAAkB,UAAWrhM,MAAMshM,cAAeiB,gBAChDnS,mBACE10M,UACE01H,UAAW,SAEbx6H,UACEtG,MAAO,OACPb,OAAQ,OACRoI,KAAM,SACNK,aAAa,IAIjBgpN,UACEz7N,OAAQ,kBACRD,MAAO;;ACnBX,GAAI+8N,cAAenuE,QAAQ,mBACvBitE,kBAAoBjtE,QAAQ,iBAAiBitE,kBAC7CrhM,MAAQo0H,QAAQ,kBAEpBitE,mBAAkB,gBAAiBrhM,MAAMshM,cAAeiB,gBACtDnS,mBACE10M,UACE01H,UAAW,SACXh3H,OAAQ,IACR2yL,cAAe,GACfC,eAAgB,IAElBp2L,UACEtG,MAAO,OACPb,OAAQ,OACR4hM,MAAM,GAER9gM,MAAO,UAGT2wN,UACE9mN,OAAQ,kBACRgpN,kBAAmB,0BACnBC,iBAAkB;;ACYtB,QAASC,aAAatzE,GACpB,MAAOA,GAAIp4H,QAAQ,kBAAmB,SAAS8hF,cAjCjD,GAAI6oH,cAAenuE,QAAQ,mBACvBpnI,WAAaonI,QAAQ,0BAA0BpnI,WAC/Cw4K,cAAgBpxC,QAAQ,0BAA0BoxC,cAClD67B,kBAAoBjtE,QAAQ,iBAAiBitE,kBAC7CrhM,MAAQo0H,QAAQ,mBAGhB+uE,eAAiB9hO,OAAOD,UAG5BokM,eAAc30F,QAAQ,SAAgC0yH,GACpD,GAAI7nN,GAAWsR,WAAWu2M,GACtBC,EAAmBF,YAAYC,GAG/BrC,IACJz9N,QAAO6nD,KAAK5vC,EAASuiL,QAAQptF,QAAQ,SAAwBs6B,GAC3D+1F,EAASoC,YAAYn4F,IAAa,YAAcA,GAIlD,IAAIkkF,GAAU,KAAOmU,EACjBpyF,EAAYiwF,kBAAkBhS,EAASrvL,MAAMshM,cAAeiB,gBAC9DnS,mBAAoB10M,UAAW01H,UAAWmyF,IAC1CrC,SAAUA,IAEZiC,gBAAe9T,GAAWj+E;;AC7B5B,GAAIunF,kBAAmBvkE,QAAQ,oBAAoBukE,iBAC/Cn3N,MAAQ4yJ,QAAQ,eAEpBukE,kBAAiB,OACf16B,QACE5rL,OAAQ8rL,QAAS,EAAG7wL,IAAK,GACzB7H,QAAS04L,QAAS,EAAG7wL,IAAK,GAC1B9H,OAAQ24L,QAAS,EAAG7wL,IAAK,GACzB0/L,gBAAiB7O,QAAS,EAAG7wL,IAAK,EAAGC,IAAK,GAAIjK,KAAM,OACpDypM,eAAgB5O,QAAS,EAAG7wL,IAAK,EAAGC,IAAK,GAAIjK,KAAM,OACnDmgO,eAAgBtlC,QAAS,EAAG7wL,IAAK,EAAGC,IAAK,GAAIjK,KAAM,QAGrDuK,KAAM,SAAUtH,GACd9E,KAAKia,SAAW,GAAIla,OAAM6mB,YACxB9hB,EAAKf,MAAOe,EAAKd,OAAQc,EAAK8L,MAC9B9L,EAAKwmM,cAAexmM,EAAKymM,eAAgBzmM,EAAKk9N;;AChBpD,GAAI9K,kBAAmBvkE,QAAQ,oBAAoBukE,iBAC/Cn3N,MAAQ4yJ,QAAQ,gBAEhB9iF,SAAW9vE,MAAM0oB,KAAKonD,QAE1BqnJ,kBAAiB,UACf16B,QACE7jL,QAAS+jL,QAAS,EAAG7wL,IAAK,GAC1B+lD,UAAW8qI,QAAS,GAAI7wL,IAAK,EAAGhK,KAAM,OACtCgvD,aAAc6rI,QAAS,IAAK7wL,IAAK,GACjC+kD,YAAa8rI,QAAS,IAGxBtwL,KAAM,SAAUtH,GACd9E,KAAKia,SAAW,GAAIla,OAAM+0D,eACxBhwD,EAAK6T,OAAQ7T,EAAK8sD,SAAUie,SAAS/qE,EAAK8rD,YAAaif,SAAS/qE,EAAK+rD;;ACf3E,GAAIqmK,kBAAmBvkE,QAAQ,oBAAoBukE,iBAC/Cn3N,MAAQ4yJ,QAAQ,gBAEhB9iF,SAAW9vE,MAAM0oB,KAAKonD,QAE1BqnJ,kBAAiB,QACf16B,QACEx4L,QAAS04L,QAAS,EAAG7wL,IAAK,GAC1BmoD,WAAY0oI,SAAS,GACrB3oI,cAAe2oI,QAAS,EAAG7wL,IAAK,GAChCioD,WAAY4oI,QAAS,IAAM7wL,IAAK,GAChC0/L,gBAAiB7O,QAAS,GAAI7wL,IAAK,EAAGhK,KAAM,OAC5Cs/N,gBAAiBzkC,QAAS,GAAI7wL,IAAK,EAAGhK,KAAM,OAC5CgvD,aAAc6rI,QAAS,IAAK7wL,IAAK,GACjC+kD,YAAa8rI,QAAS,IAGxBtwL,KAAM,SAAUtH,GACd9E,KAAKia,SAAW,GAAIla,OAAM8zD,iBACtB/uD,EAAKgvD,UAAWhvD,EAAKivD,aAAcjvD,EAAKd,OAAQc,EAAKq8N,eACrDr8N,EAAKymM,eAAgBzmM,EAAKkvD,UAAW6b,SAAS/qE,EAAK8rD,YACnDif,SAAS/qE,EAAK+rD;;ACrBtB,GAAIqmK,kBAAmBvkE,QAAQ,oBAAoBukE,iBAC/Cn3N,MAAQ4yJ,QAAQ,gBAEhB9iF,SAAW9vE,MAAM0oB,KAAKonD,QAE1BqnJ,kBAAiB,YACf16B,QACEx4L,QAAS04L,QAAS,EAAG7wL,IAAK,GAC1BmoD,WAAY0oI,SAAS,GACrB/jL,QAAS+jL,QAAS,EAAG7wL,IAAK,GAC1B0/L,gBAAiB7O,QAAS,GAAI7wL,IAAK,EAAGhK,KAAM,OAC5Cs/N,gBAAiBzkC,QAAS,GAAI7wL,IAAK,EAAGhK,KAAM,OAC5CgvD,aAAc6rI,QAAS,IAAK7wL,IAAK,GACjC+kD,YAAa8rI,QAAS,IAGxBtwL,KAAM,SAAUtH,GACd9E,KAAKia,SAAW,GAAIla,OAAM8zD,iBACtB/uD,EAAK6T,OAAQ7T,EAAK6T,OAAQ7T,EAAKd,OAAQc,EAAKq8N,eAAgBr8N,EAAKymM,eACjEzmM,EAAKkvD,UAAW6b,SAAS/qE,EAAK8rD,YAAaif,SAAS/qE,EAAK+rD;;ACnBjE,GAAIqmK,kBAAmBvkE,QAAQ,oBAAoBukE,iBAC/Cn3N,MAAQ4yJ,QAAQ,eAEpBukE,kBAAiB,gBACf16B,QACE3xI,QAAS6xI,QAAS,EAAG7wL,IAAK,EAAGC,IAAK,EAAGjK,KAAM,OAC3C8W,QAAS+jL,QAAS,EAAG7wL,IAAK,IAG5BO,KAAM,SAAUtH,GACd9E,KAAKia,SAAW,GAAIla,OAAMmtD,qBAAqBpoD,EAAK6T,OAAQ7T,EAAK+lD;;ACVrE,GAAIqsK,kBAAmBvkE,QAAQ,oBAAoBukE,iBAC/Cn3N,MAAQ4yJ,QAAQ,eAEpBukE,kBAAiB,eACf16B,QACE3xI,QAAS6xI,QAAS,EAAG7wL,IAAK,EAAGC,IAAK,EAAGjK,KAAM,OAC3C8W,QAAS+jL,QAAS,EAAG7wL,IAAK,IAG5BO,KAAM,SAAUtH,GACd9E,KAAKia,SAAW,GAAIla,OAAMgtD,oBAAoBjoD,EAAK6T,OAAQ7T,EAAK+lD;;ACVpE8nG,QAAQ,YACRA,QAAQ,eACRA,QAAQ,aACRA,QAAQ,iBACRA,QAAQ,qBACRA,QAAQ,oBACRA,QAAQ,mBACRA,QAAQ,cACRA,QAAQ,aACRA,QAAQ,eACRA,QAAQ,oBACRA,QAAQ,cACRA,QAAQ,kBACRA,QAAQ;;ACbR,GAAIukE,kBAAmBvkE,QAAQ,oBAAoBukE,iBAC/Cn3N,MAAQ4yJ,QAAQ,eAEpBukE,kBAAiB,cACf16B,QACE3xI,QAAS6xI,QAAS,EAAG7wL,IAAK,EAAGC,IAAK,EAAGjK,KAAM,OAC3C8W,QAAS+jL,QAAS,EAAG7wL,IAAK,IAG5BO,KAAM,SAAUtH,GACd9E,KAAKia,SAAW,GAAIla,OAAM8sD,mBAAmB/nD,EAAK6T,OAAQ7T,EAAK+lD;;ACVnE,GAAIqsK,kBAAmBvkE,QAAQ,oBAAoBukE,iBAC/Cn3N,MAAQ4yJ,QAAQ,eAEpBukE,kBAAiB,SACf16B,QACEx4L,QAAS04L,QAAS,EAAG7wL,IAAK,GAC1B9H,OAAQ24L,QAAS,EAAG7wL,IAAK,GACzB0/L,gBAAiB7O,QAAS,EAAG7wL,IAAK,EAAGC,IAAK,GAAIjK,KAAM,OACpDypM,eAAgB5O,QAAS,EAAG7wL,IAAK,EAAGC,IAAK,GAAIjK,KAAM,QAGrDuK,KAAM,SAAUtH,GACd9E,KAAKia,SAAW,GAAIla,OAAM8oB,cAAc/jB,EAAKf,MAAOe,EAAKd,OAAQc,EAAKwmM,cAAexmM,EAAKymM;;ACZ9F,GAAI2rB,kBAAmBvkE,QAAQ,oBAAoBukE,iBAC/Cn3N,MAAQ4yJ,QAAQ,gBAEhB9iF,SAAW9vE,MAAM0oB,KAAKonD,QAE1BqnJ,kBAAiB,QACf16B,QACEwkC,aAActkC,QAAS,GAAK7wL,IAAK,GACjCk1N,aAAcrkC,QAAS,IAAK7wL,IAAK,GACjCo2N,aAAcvlC,QAAS,GAAI7wL,IAAK,EAAGhK,KAAM,OACzCo/N,eAAgBvkC,QAAS,GAAI7wL,IAAK,EAAGhK,KAAM,OAC3CgvD,aAAc6rI,QAAS,IAAK7wL,IAAK,GACjC+kD,YAAa8rI,QAAS,IAGxBtwL,KAAM,SAAUtH,GACd9E,KAAKia,SAAW,GAAIla,OAAMmxD,aACtBpsD,EAAKk8N,YAAal8N,EAAKi8N,YAAaj8N,EAAKm8N,cAAen8N,EAAKm9N,YAC7DpyJ,SAAS/qE,EAAK8rD,YAAaif,SAAS/qE,EAAK+rD;;AClBjD,GAAIqmK,kBAAmBvkE,QAAQ,oBAAoBukE,iBAC/Cn3N,MAAQ4yJ,QAAQ,gBAEhB9iF,SAAW9vE,MAAM0oB,KAAKonD,QAE1BqnJ,kBAAiB,UACf16B,QACE7jL,QAAS+jL,QAAS,EAAG7wL,IAAK,GAC1B8kD,WAAY+rI,QAAS,KACrBhsI,UAAWgsI,QAAS,EAAG7wL,IAAK,GAC5BglD,aAAc6rI,QAAS,IAAK7wL,IAAK,GACjC+kD,YAAa8rI,QAAS,GACtB6O,gBAAiB7O,QAAS,GAAI7wL,IAAK,EAAGhK,KAAM,OAC5CypM,eAAgB5O,QAAS,GAAI7wL,IAAK,EAAGhK,KAAM,QAG7CuK,KAAM,SAAUtH,GACd9E,KAAKia,SAAW,GAAIla,OAAM0wD,eACxB3rD,EAAK6T,OAAQ7T,EAAKwmM,cAAexmM,EAAKymM,eAAgB17H,SAAS/qE,EAAK4rD,UACpEmf,SAAS/qE,EAAK6rD,WAAYkf,SAAS/qE,EAAK8rD,YAAaif,SAAS/qE,EAAK+rD;;ACnBzE,GAAIqmK,kBAAmBvkE,QAAQ,oBAAoBukE,iBAC/Cn3N,MAAQ4yJ,QAAQ,eAEpBukE,kBAAiB,eACf16B,QACE3xI,QAAS6xI,QAAS,EAAG7wL,IAAK,EAAGC,IAAK,EAAGjK,KAAM,OAC3C8W,QAAS+jL,QAAS,EAAG7wL,IAAK,IAG5BO,KAAM,SAAUtH,GACd9E,KAAKia,SAAW,GAAIla,OAAM4sD,oBAAoB7nD,EAAK6T,OAAQ7T,EAAK+lD;;ACVpE,GAAIqsK,kBAAmBvkE,QAAQ,oBAAoBukE,iBAC/Cn3N,MAAQ4yJ,QAAQ,gBAEhB9iF,SAAW9vE,MAAM0oB,KAAKonD,QAE1BqnJ,kBAAiB,SACf16B,QACEhtI,KAAMktI,QAAS,KACf/jL,QAAS+jL,QAAS,EAAG7wL,IAAK,GAC1Bq2N,eAAgBxlC,QAAS,GAAK7wL,IAAK,GACnCs1N,gBAAiBzkC,QAAS,GAAI7wL,IAAK,EAAGhK,KAAM,OAC5CsgO,iBAAkBzlC,QAAS,GAAI7wL,IAAK,EAAGhK,KAAM,QAG/CuK,KAAM,SAAUtH,GACd9E,KAAKia,SAAW,GAAIla,OAAMwvD,cACxBzqD,EAAK6T,OAA6B,EAArB7T,EAAKo9N,cAAmBp9N,EAAKq8N,eAAgBr8N,EAAKq9N,gBAC/DtyJ,SAAS/qE,EAAK0qD;;ACjBpB,GAAI0nK,kBAAmBvkE,QAAQ,oBAAoBukE,iBAC/Cn3N,MAAQ4yJ,QAAQ,eAEpBukE,kBAAiB,aACf16B,QACEz+J,GAAI2+J,QAAS,EAAG7wL,IAAK,GACrB4iD,GAAIiuI,QAAS,EAAG7wL,IAAK,GACrB8M,QAAS+jL,QAAS,EAAG7wL,IAAK,GAC1Bq2N,eAAgBxlC,QAAS,GAAK7wL,IAAK,GACnCs1N,gBAAiBzkC,QAAS,EAAG7wL,IAAK,EAAGhK,KAAM,OAC3CsgO,iBAAkBzlC,QAAS,IAAK7wL,IAAK,EAAGhK,KAAM,QAGhDuK,KAAM,SAAUtH,GACd9E,KAAKia,SAAW,GAAIla,OAAMwuD,kBACxBzpD,EAAK6T,OAA6B,EAArB7T,EAAKo9N,cAAmBp9N,EAAKq9N,gBAAiBr9N,EAAKq8N,eAChEr8N,EAAKi5B,EAAGj5B,EAAK2pD;;AChBnB,GAAIyoK,kBAAmBvkE,QAAQ,oBAAoBukE,iBAC/Cn3N,MAAQ4yJ,QAAQ,gBAEhBpwI,WAAa,GAAIxiB,OAAMY,WACvByhO,aAAe,GAAIriO,OAAMoB,QAAQ,EAAG,EAAG,GACvCkhO,YAAc,GAAItiO,OAAMG,QACxBoiO,YAAc,GAAIviO,OAAMG,QACxBqiO,cAAgB,GAAIxiO,OAAMG,OAE9Bg3N,kBAAiB,YACf16B,QACEgmC,SAAU3gO,KAAM,OAAQ66L,SAAUv8L,EAAG,EAAGC,EAAG,GAAKQ,EAAG,IACnD6hO,SAAU5gO,KAAM,OAAQ66L,SAAUv8L,GAAI,GAAKC,GAAI,GAAKQ,EAAG,IACvD8hO,SAAU7gO,KAAM,OAAQ66L,SAAUv8L,EAAG,GAAKC,GAAI,GAAKQ,EAAG,KAGxDwL,KAAM,SAAUtH,GACd,GAAImV,GACApB,EACA2tF,EACAz6C,EACAC,EACAC,CAEJu6C,GAAW,GAAIzmG,OAAMirB,SACrBw7E,EAASryF,EAAEtM,IAAI/C,EAAK09N,QAAQriO,EAAG2E,EAAK09N,QAAQpiO,EAAG0E,EAAK09N,QAAQ5hO,GAC5D4lG,EAASr/F,EAAEU,IAAI/C,EAAK29N,QAAQtiO,EAAG2E,EAAK29N,QAAQriO,EAAG0E,EAAK29N,QAAQ7hO,GAC5D4lG,EAAS1iF,EAAEjc,IAAI/C,EAAK49N,QAAQviO,EAAG2E,EAAK49N,QAAQtiO,EAAG0E,EAAK49N,QAAQ9hO,GAC5DiY,EAAS2tF,EAAS3tF,SAGlB0J,WAAW05D,mBAAmBpjE,EAAQupN,cACtCr2K,EAAMy6C,EAASryF,EAAEsH,QAAQ8hE,gBAAgBh7D,YACzCypC,EAAMw6C,EAASr/F,EAAEsU,QAAQ8hE,gBAAgBh7D,YACzC0pC,EAAMu6C,EAAS1iF,EAAErI,QAAQ8hE,gBAAgBh7D,YAIzC8/M,YAAYx6N,IAAI4gB,KAAK5c,IAAIkgD,EAAI5rD,EAAG6rD,EAAI7rD,EAAG8rD,EAAI9rD,GAAIsoB,KAAK5c,IAAIkgD,EAAI3rD,EAAG4rD,EAAI5rD,EAAG6rD,EAAI7rD,IAC1EkiO,YAAYz6N,IAAI4gB,KAAK3c,IAAIigD,EAAI5rD,EAAG6rD,EAAI7rD,EAAG8rD,EAAI9rD,GAAIsoB,KAAK3c,IAAIigD,EAAI3rD,EAAG4rD,EAAI5rD,EAAG6rD,EAAI7rD,IAC1EmiO,cAAc16N,IAAI,EAAG,GAAG6iD,WAAW43K,YAAaD,aAChDt2K,GAAM,GAAIhsD,OAAMG,SAAUwqD,WAAWqB,EAAKs2K,aAAazxJ,OAAO2xJ,eAC9Dv2K,GAAM,GAAIjsD,OAAMG,SAAUwqD,WAAWsB,EAAKq2K,aAAazxJ,OAAO2xJ,eAC9Dt2K,GAAM,GAAIlsD,OAAMG,SAAUwqD,WAAWuB,EAAKo2K,aAAazxJ,OAAO2xJ,eAE9DtoN,EAAWja,KAAKia,SAAW,GAAIla,OAAMmkB,SACrCjK,EAAS5N,SAAS9B,KAAKi8F,EAASryF,GAChC8F,EAAS5N,SAAS9B,KAAKi8F,EAASr/F,GAChC8S,EAAS5N,SAAS9B,KAAKi8F,EAAS1iF,GAChC7J,EAAS3N,MAAM/B,KAAK,GAAIxK,OAAM8jB,MAAM,EAAG,EAAG,EAAGhL,IAC7CoB,EAASoK,cAAc,KAAO0nC,EAAKC,EAAKC;;ACjD5ChnB,OAAO09L,+BAAiC19L,OAAOq3H,UAAUq7B,iBAAmB1yJ,OAAOq3H,UAAUi8B,aAE7FtzJ,OAAO6wI,YAAc7wI,OAAO6wI,cAC1BC,aAAc,EACd2B,uBAAuB,EACvBkG,8BAA8B,EAC9ByJ,uBAAuB,EACvBE,kCAAkC,GAIpC50B,QAAQ,iBAER,IAAIp0H,OAAQo0H,QAAQ,YAEhBoK,MAAQx+H,MAAMw+H,MACdr8J,MAAQq8J,MAAM,iBACdjiJ,KAAOiiJ,MAAM,eAEb93H,QAAOrxB,SAASgiN,eAAiB3wL,OAAOrxB,SAASgiN,cAAc7c,aAC/D9zK,OAAOrxB,SAAS67I,OAASxqH,OAAO83H,OAClCjiJ,KAAK,qKAM0B,UAA7BmqB,OAAO2tJ,SAASgwC,UAClBliO,MACE,uQAOJukC,OAAOyzG,QAAUzzG,OAAOyzG,SAAWia,QAAQ,oBAIvCp0H,MAAM0Q,OAAO4zL,iBAAiB59L,OAAOq3H,UAAUC,aACjDt3H,OAAO6wI,YAAYC,aAAe,EAAI9wI,OAAOm3I,kBAG/CzpB,QAAQ,WAGJp0H,MAAM0Q,OAAO6zL,uBACfnwE,QAAQ,sBACRA,QAAQ,sBAIV,IAAIgnE,QAAShnE,QAAQ,wBAAwBgnE,OACzC/kM,WAAa+9H,QAAQ,oBAAoB/9H,WACzC0nK,kBAAoB3pC,QAAQ,oBAAoB2pC,kBAChD46B,iBAAmBvkE,QAAQ,mBAAmBukE,iBAC9C0I,kBAAoBjtE,QAAQ,kCAAkCitE,kBAC9D31B,eAAiBt3C,QAAQ,iBAAiBs3C,eAC1C60B,eAAiBnsE,QAAQ,iBAAiBmsE,eAC1CpvB,QAAU/8C,QAAQ,iBAAiB+8C,QACnC0E,QAAUzhD,QAAQ,iBAAiByhD,QAEnCr0M,MAAQklC,OAAOllC,MAAQ4yJ,QAAQ,eAC/BlI,MAAQxlH,OAAOwlH,MAAQkI,QAAQ,qBAE/B6hD,IAAM7hD,QAAQ,aAElBA,SAAQ,sBACRA,QAAQ,sBACRA,QAAQ,mBACRA,QAAQ,kBACR,IAAIi5D,OAAQj5D,QAAQ,iBAChB88D,QAAU98D,QAAQ,kBAEtBA,SAAQ,sBACRA,QAAQ,mBACRA,QAAQ,oBACRA,QAAQ,kBAGRA,QAAQ,wBACRA,QAAQ,wBAERlyJ,QAAQo6B,IAAI,8DACZp6B,QAAQo6B,IAAI,iBAAkB25K,IAAI16D,aAAoB,OACtDr5I,QAAQo6B,IAAI,0BAA2B25K,IAAI16D,aAAa,mBAExDl6I,OAAOD,QAAUslC,OAAOywK,QACtBqtB,WAAYpwE,QAAQ,oBAAoB4pC,UACxCkzB,QAASA,QACT7D,MAAOA,MACP+N,OAAQA,OACR/kM,WAAYA,WACZrJ,WAAYonI,QAAQ,mBAAmBpnI,WACvC+wK,kBAAmBA,kBACnBwvB,gBAAiBn5D,QAAQ,6BAA6Bm5D,gBACtDoL,iBAAkBA,iBAClB0I,kBAAmBA,kBACnB31B,eAAgBA,eAChB60B,eAAgBA,eAChBvvF,YACEuxF,aAAcnuE,QAAQ,oCACtBpjB,WAAYojB,QAAQ,kCAAkCpjB,YAExDgL,OAAQoY,QAAQ,uBAChB6pC,OAAQ7pC,QAAQ,iBAChB+8C,QAASA,QACT0E,QAASA,QACTr0M,MAAOA,MACP0qJ,MAAOA,MACPlsH,MAAOA,MACP56B,QAAS6wM,IAAI7wM;;ACjHfshC,OAAOkzK,YAAc,SAAUxoM,GAgB7B,QAASipH,KACPoqG,EAAI,MAAMn7N,IAAIo7N,KACVh+L,OAAO84F,YAAYmlG,kBACrBF,EAAI,MAAMn7N,IAAIo9B,OAAO84F,YAAYmlG,iBAAiB,kBAAkB,GAAGxkK,UAAU2uH,QAAQ,IAI7F,QAAS41C,KACP,GAAI3iO,GAAW8jJ,EAAOua,iBAAiB,IAIvC,OAHA9hJ,OAAMskD,UAAUtZ,MAAMnjD,KAAKpE,GAAUq1B,OAAO,SAAUinK,GACpD,MAAOA,GAAGgzB,WAELtvN,EAASE,OAGlB,QAAS2iO,MAET,QAASC,MAET,QAASC,GAASz9N,GAChBo9N,EAAMp9N,EAnCR,GAAIo9N,GAAM,KACN5+E,EAASz0I,CAqCb,QACEiN,OAAQg8G,EACRjyG,MAAOw8M,EACPp4M,IAAKq4M,EACL1jG,OAAQ2jG,EACR1qK,QAxCAqa,IACEwlI,QAAS,YAEXz5C,IACEy5C,QAAS,cAqCXz7L,SAjCAy7L,QAAS,UACT7/I,QAAU,KAAM,QAiChB2qK,eAIkB,gBAAX1jO,UACTA,OAAOD,SACLw4M,YAAalzK,OAAOkzK;;;ACpDxB,GAAIp4M,OAAQN,OAAOM,MAAQ4yJ,QAAQ,QAM/B5yJ,OAAM82D,gBACR92D,MAAM82D,cAAcsK,UAAUw4C,YAAc,aAI1C55G,MAAM42D,cACR52D,MAAM42D,YAAYwK,UAAUw4C,YAAc,aAIxC55G,MAAMm3G,QACRn3G,MAAMm3G,MAAM/4F,SAAU,GAIxBw0I,QAAQ,wCACRA,QAAQ,uCACRA,QAAQ,uCACRA,QAAQ,2CAER5yJ,MAAMmmI,cAAc/kE,UAAUw4C,YAAc,YAC5C55G,MAAMq1I,WAAWj0E,UAAUw4C,YAAc,YACzC55G,MAAMskJ,UAAUljF,UAAUw4C,YAAc,YACxC55G,MAAMsmJ,UAAUllF,UAAUw4C,YAAc,YAExC/5G,OAAOD,QAAUI;;;;ACwBjB,QAASwjO,iBAAiBz+N,GACxB,OACE6P,IAAK7P,EAAK6P,IACV9F,MAAO,GAAI9O,OAAM2L,MAAM5G,EAAK+J,OAC5BqJ,UAAWpT,EAAKoT,UAChBC,mBAAoBrT,EAAKqT,oBA5D7B,GAAI8xL,gBAAiBt3C,QAAQ,kBAAkBs3C,eAC3ClqM,MAAQ4yJ,QAAQ,gBAChBp0H,MAAQo0H,QAAQ,YAKpB/yJ,QAAOD,QAAQ4wM,OAAStG,eAAe,QACrCzN,QACE3tL,OAAQhN,KAAM,SACd8S,KAAM+nL,SAAS,GACf14L,QAAS04L,QAAS,KAClB15L,QAASnB,KAAM,OAAQ66L,SAAUv8L,EAAG,EAAGC,EAAG,IAC1C6C,QAASpB,KAAM,OAAQ66L,SAAUv8L,EAAG,EAAGC,EAAG,IAC1Cy5G,KAAMh4G,KAAM,OACZkC,OAAQ24L,QAAS,KACjBxkL,WAAYwkL,SAAS,GACrBvkL,oBAAqBukL,QAAS,IAOhCtwL,KAAM,SAAUtH,GACd9E,KAAKwjO,WAAa,KAClBxjO,KAAKmV,SAAW,GAAIpV,OAAMopB,kBAAkBo6M,gBAAgBz+N,IAC5Dy5B,MAAMppB,SAASsuN,UAAUzjO,KAAM8E,IAGjC8X,OAAQ,SAAU9X,GAChB9E,KAAK8vM,eAAehrM,GACpBy5B,MAAMppB,SAASsuN,UAAUzjO,KAAM8E,IAQjCgrM,eAAgB,SAAUhrM,GACxB,GAAIqQ,GAAWnV,KAAKmV,QACpBrQ,GAAOy+N,gBAAgBz+N,GACvB9C,OAAO6nD,KAAK/kD,GAAMsqG,QAAQ,SAAU1lD,GAClCv0C,EAASu0C,GAAO5kD,EAAK4kD;;AC5C3BipG,QAAQ,UACRA,QAAQ,cACRA,QAAQ,SACRA,QAAQ,UACRA,QAAQ;;ACJR,GAAIs3C,gBAAiBt3C,QAAQ,kBAAkBs3C,cAM/CrqM,QAAOD,QAAQ4wM,OAAStG,eAAe,YACrCzN,QACE3iF,KAAMh4G,KAAM,MAAOqqM,GAAI,WACvBt9L,SAAU/M,KAAM,SAAUqqM,GAAI,UAAWxP,QAAS,IAGpDzuL,cACE,oBACA,oBACA,4EACA,cACA,KACAC,KAAK,MAEPC,gBACE,yBACA,yBACA,oBACA,gBACA,8BACA,8BACA,8GACA,6CACA,KACAD,KAAK;;AC9BT,GAAI+7L,gBAAiBt3C,QAAQ,kBAAkBs3C,cAM/CrqM,QAAOD,QAAQ4wM,OAAStG,eAAe,QACrCzN,QACE7oL,WAAY9R,KAAM,SAAUqqM,GAAI,UAAWxP,QAAS,IACpD7tL,OAAQhN,KAAM,QAASqqM,GAAI,UAAWxP,QAAS,SAC/Cr3L,KAAMxD,KAAM,MAAOqqM,GAAI,WACvB96H,QAASvvE,KAAM,UAAWqqM,GAAI,UAAWxP,SAAS,GAClD9tL,SAAU/M,KAAM,SAAUqqM,GAAI,UAAWxP,QAAS,IAGpD5tB,KAAK,EAEL7gK,cACE,qBACA,2BACA,iCACA,gCACA,oBACA,oBACA,4EACA,cACA,KACAC,KAAK,MAEPC,gBACE,qCACA,iDACA,SAEA,yBAEA,2BACA,+DACA,yBACA,yBACA,0DACA,yBACA,sBACA,yBACA,2BACA,uBACA,oBAEA,4CACA,8CACA,IACA,gBACA,2CACA,kBACA,6BACA,MACA,gEACA,kEACA,6BACA,iDACA,qDAGA,oCACA,8CACA,+DACA,MAIA,6EAGA,qEACA,qDACA,KACAD,KAAK;;AC5ET,GAAI+7L,gBAAiBt3C,QAAQ,kBAAkBs3C,cAM/CrqM,QAAOD,QAAQ4wM,OAAStG,eAAe,OACrCzN,QACE7oL,WAAY9R,KAAM,SAAUqqM,GAAI,UAAWxP,QAAS,IACpD7tL,OAAQhN,KAAM,QAASqqM,GAAI,UAAWxP,QAAS,SAC/Cr3L,KAAMxD,KAAM,MAAOqqM,GAAI,WACvBt9L,SAAU/M,KAAM,SAAUqqM,GAAI,UAAWxP,QAAS,IAGpD5tB,KAAK,EAEL7gK,cACE,qBACA,2BACA,iCACA,gCACA,oBACA,oBACA,4EACA,cACA,KACAC,KAAK,MAEPC,gBACE,qCACA,iDACA,SAEA,yBAEA,2BACA,+DACA,yBACA,yBACA,0DACA,yBACA,sBACA,yBACA,2BACA,oBACA,qCACA,4CACA,wDACA,IACA,QACA,6CACA,4DACA,IACA,SACA,gBACA,qCAEA,mBACA,wCACA,6BACA,gCACA,wCACA,6BACA,+CACA,qDAGA,oCACA,8CACA,oDACA,MAGA,0CACA,4CACA,+BACA,iDACA,mDACA,mDACA,mDACA,gBACA,MAIA,6EAGA,qEACA,QACA,yCACA,8BAGA,kFACA,0CAGA,uJACA,mFACA,mDACA,qBACA,uDACA,SACA,iDACA,KACAD,KAAK;;ACmDT,QAASq1N,iBAAiBz+N,GACxB,GAAI4xN,IACF7nN,MAAO,GAAI9O,OAAM2L,MAAM5G,EAAK+J,OAC5B6xC,SAAU,GAAI3gD,OAAM2L,MAAM5G,EAAK47C,UAC/BC,kBAAmB77C,EAAK67C,kBACxBhsC,IAAK7P,EAAK6P,IACV6sC,UAAW18C,EAAK08C,UAChBD,UAAWz8C,EAAKy8C,UAChBrpC,UAAWpT,EAAKoT,UAChBC,mBAAoBrT,EAAKqT,mBAY3B,OATIrT,GAAK2wB,YAAaihM,EAAQp1K,YAAcx8C,EAAKw8C,aAE7Cx8C,EAAK4+N,sBAAuBhN,EAAQntM,eAAiBzkB,EAAK6+N,8BAE1D7+N,EAAKiT,kBACP2+M,EAAQ1+M,kBAAoBlT,EAAKkT,kBACjC0+M,EAAQz+M,iBAAmBnT,EAAKmT,kBAG3By+M,EAlLT,GAAIzsB,gBAAiBt3C,QAAQ,kBAAkBs3C,eAC3ClqM,MAAQ4yJ,QAAQ,gBAChBp0H,MAAQo0H,QAAQ,aAEhBixE,WAAa,GAAI7jO,OAAM62D,kBACvBitK,kBAKJjkO,QAAOD,QAAQ4wM,OAAStG,eAAe,YACrCzN,QACEknC,qBAAsB7hO,KAAM,OAC5B8hO,8BAA+BjnC,QAAS,GACxConC,+BAAgCjiO,KAAM,QACtCkiO,+BAAgCliO,KAAM,OAAQ66L,SAAUv8L,EAAG,EAAGC,EAAG,IAEjEyO,OAAQhN,KAAM,SAEdkW,iBAAkBlW,KAAM,OACxBmW,mBAAoB0kL,QAAS,GAC7BzkL,kBAAmBykL,QAAS,IAC5BsnC,2BAA4BniO,KAAM,QAClCoiO,2BAA4BpiO,KAAM,OAAQ66L,SAAUv8L,EAAG,EAAGC,EAAG,IAC7DsgD,UAAW7+C,KAAM,QAAS66L,QAAS,QACnC/7I,mBAAoB+7I,QAAS,GAC7BjzK,QAASizK,QAAS,IAElB/nL,KAAM+nL,SAAS,GACf14L,QAAS04L,QAAS,KAElBl7I,WAAYk7I,QAAS,EAAK7wL,IAAK,EAAKC,IAAK,GACzCgtB,cAAej3B,KAAM,OACrBqiO,wBAAyBriO,KAAM,QAC/BsiO,wBAAyBtiO,KAAM,OAAQ66L,SAAUv8L,EAAG,EAAGC,EAAG,IAE1Dq1B,WAAY5zB,KAAM,OAClBy/C,aAAcz/C,KAAM,OAAQ66L,SAAUv8L,EAAG,EAAGC,EAAG,IAC/CgkO,qBAAsBviO,KAAM,QAC5BwiO,qBAAsBxiO,KAAM,OAAQ66L,SAAUv8L,EAAG,EAAGC,EAAG,IAEvD4C,QAASnB,KAAM,OAAQ66L,SAAUv8L,EAAG,EAAGC,EAAG,IAC1C6C,QAASpB,KAAM,OAAQ66L,SAAUv8L,EAAG,EAAGC,EAAG,IAE1CmhD,WAAYm7I,QAAS,GAAK7wL,IAAK,EAAKC,IAAK,GACzC+sB,cAAeh3B,KAAM,OACrByiO,wBAAyBziO,KAAM,QAC/B0iO,wBAAyB1iO,KAAM,OAAQ66L,SAAUv8L,EAAG,EAAGC,EAAG,IAE1DokO,iBAAkB3iO,KAAM,OACxBg4G,KAAMh4G,KAAM,OACZkC,OAAQ24L,QAAS,KACjBxkL,WAAYwkL,SAAS,GACrBvkL,oBAAqBukL,QAAS,IAOhCtwL,KAAM,SAAUtH,GACd9E,KAAKmV,SAAW,GAAIpV,OAAMw8B,qBAAqBgnM,gBAAgBz+N,IAC/Dy5B,MAAMppB,SAASsuN,UAAUzjO,KAAM8E,GAC3BA,EAAK2wB,WAAa8I,MAAMppB,SAASsvN,oBAAoB,SAAUzkO,KAAM8E,GACrEA,EAAKiT,iBAAmBwmB,MAAMppB,SAASsvN,oBAAoB,eAAgBzkO,KAAM8E,GACjFA,EAAK4+N,qBAAuBnlM,MAAMppB,SAASsvN,oBAAoB,mBAAoBzkO,KAAM8E,GACzFA,EAAKg0B,cAAgByF,MAAMppB,SAASsvN,oBAAoB,YAAazkO,KAAM8E,GAC3EA,EAAK+zB,cAAgB0F,MAAMppB,SAASsvN,oBAAoB,YAAazkO,KAAM8E,GAC/E9E,KAAK0kO,aAAa5/N,IAGpB8X,OAAQ,SAAU9X,GAChB9E,KAAK8vM,eAAehrM,GACpBy5B,MAAMppB,SAASsuN,UAAUzjO,KAAM8E,GAC3BA,EAAK2wB,WAAa8I,MAAMppB,SAASsvN,oBAAoB,SAAUzkO,KAAM8E,GACrEA,EAAKiT,iBAAmBwmB,MAAMppB,SAASsvN,oBAAoB,eAAgBzkO,KAAM8E,GACjFA,EAAK4+N,qBAAuBnlM,MAAMppB,SAASsvN,oBAAoB,mBAAoBzkO,KAAM8E,GACzFA,EAAKg0B,cAAgByF,MAAMppB,SAASsvN,oBAAoB,YAAazkO,KAAM8E,GAC3EA,EAAK+zB,cAAgB0F,MAAMppB,SAASsvN,oBAAoB,YAAazkO,KAAM8E,GAC/E9E,KAAK0kO,aAAa5/N,IASpBgrM,eAAgB,SAAUhrM,GACxB,GAAIqQ,GAAWnV,KAAKmV,QACpBrQ,GAAOy+N,gBAAgBz+N,GACvB9C,OAAO6nD,KAAK/kD,GAAMsqG,QAAQ,SAAU1lD,GAClCv0C,EAASu0C,GAAO5kD,EAAK4kD,MAOzBg7K,aAAc,SAAU5/N,GACtB,GAAI04J,GAAOx9J,KACPmV,EAAWnV,KAAKmV,SAChBsU,EAAS3kB,EAAK2kB,OACd+6M,EAAkB1/N,EAAK0/N,eAG3B,QAAM/6M,IAAW+6M,GAAoBxkO,KAAK2kO,iBACxCxvN,EAASsU,OAAS,UAClBtU,EAASpC,aAAc,KAGzB/S,KAAK2kO,iBAAkB,EAGnBH,MACFxkO,MAAK48L,GAAG0C,QAAQ8U,QAAQj/L,SAAS4sG,YAAYyiH,GAAkB3qH,IAAK2qH,GAAkB,SAAwBngO,GAC5Gm5J,EAAKmnE,iBAAkB,EACvBtgO,EAAQ9C,QAAUxB,MAAM+3B,2BACxB3iB,EAASsU,OAASplB,EAClBk6B,MAAMppB,SAASyvN,oBAAoBpnE,EAAKo/B,GAAIv4L,GAC5C8Q,EAASpC,aAAc,IAMvB8wN,gBAAgBp6M,OAClBo6M,iBAAgBp6M,GAAQ6vH,KAAK,SAAUltH,GACrCoxI,EAAKmnE,iBAAkB,EACvBxvN,EAASsU,OAAS2C,EAClBmS,MAAMppB,SAASyvN,oBAAoBpnE,EAAKo/B,GAAIxwK,GAC5CjX,EAASpC,aAAc,SAM3B8wN,gBAAgBp6M,GAAU,GAAIivH,SAAQ,SAAUU,GAC9C76G,MAAMsmM,UAAUC,mBAAmBr7M,EAAQ,SAAqBswF,GAC9D6pH,WAAWtsH,KAAKyC,EAAM,SAAU3tF,GAE9BoxI,EAAKmnE,iBAAkB,EACvBxvN,EAASsU,OAAS2C,EAClBmS,MAAMppB,SAASyvN,oBAAoBpnE,EAAKo/B,GAAIxwK,GAC5CgtH,EAAQhtH;;AhLhJlB;;ACAA;;AgLmKA,QAAS24M,qBAAqBzlC,GAC5B,GAAI0lC,EACS1lC,GAAQ1vL,SAIrBo1N,EAAgB1lC,EAAQntD,cAAc,IAAM8yF,oBAAsB,OAElE3lC,EAAQ5rB,YAAYsxD,GA3KtB,GAAI38K,MAAOsqG,QAAQ,iBACfymD,UAAYzmD,QAAQ,iBACpBmsE,eAAiBnsE,QAAQ,kBAAkBmsE,eAE3CmG,oBAAsB,4BAO1BrlO,QAAOD,QAAQi/N,OAASE,eAAe,UACrC1yN,KAAM,WACJpM,KAAKo9L,eAAiB,KAItBp9L,KAAKs/L,QAAQ5vK,iBAAiB,SAAU24B,KAAKroD,KAAKklO,mBAAoBllO,QAQxEklO,mBAAoB,WAClB,GACIC,GADA7lC,EAAUt/L,KAAKs/L,OAInB,IAAIA,EAAQ1vL,SAAW0vL,EAAQ1vL,OAAOgtL,GAAGx1H,aAAa,UAAUu1H,UAE9D,WADA2C,GAAQltC,KAAK,gBAAiB05C,SAAUxM,EAAQ1vL,OAAOgtL,IAKzDuoC,GAAkBvxN,SAAS+7I,cAAc,YACzCw1E,EAAgB7yF,aAAa,UAAWmqD,QAAQ,IAChD0oC,EAAgB7yF,aAAa,gBAAiB,IAC9C6yF,EAAgB7yF,aAAa,gBAAiB,IAC9C6yF,EAAgB7yF,aAAa8mE,UAAU7E,gBAAiB,IACxD4wB,EAAgB7yF,aAAa,YAC3BnyI,EAAG,EACHC,EAAGg5M,UAAU2F,sBACbn+M,EAAG,IAEL0+L,EAAQzvC,YAAYs1E,GACpB7lC,EAAQ5vK,iBAAiB,WAAY1vB,KAAKolO,qBAC1C9lC,EAAQ5vK,iBAAiB,UAAW1vB,KAAKqlO,kBACzC/lC,EAAQltC,KAAK,gBAAiB05C,SAAUq5B,KAS1C7nC,oBAAqB,WACnB,GAAIgoC,GAAYtlO,KAAKs/L,QAAQ3gC,iBAAiB,WACtB2mE,GAAUA,EAAU9kO,OAAS,GACnC8xI,aAAa,SAAU,UAAU,IAUrD+qD,gBAAiB,SAAUkoC,GACzB,GAAIz5B,GACAw5B,EACAt/N,EACAw/N,EACAC,EAAiBzlO,KAAKo9L,eACtBkC,EAAUt/L,KAAKs/L,OAInB,KADAkmC,EAAYD,EAAYlhC,YAAY,YAClBkhC,IAAgBvlO,KAAKo9L,eAAvC,CAGA,GAAIsoC,GAAuBpmC,EAAQntD,cAAc,IAAM8yF,oBAAsB,KACzEE,EAAkBO,GACAA,EAAqBvzF,cAAc,WAiBzD,KAdIozF,IAAgBJ,GAAmBJ,oBAAoBzlC,GAG3Dt/L,KAAKo9L,eAAiBmoC,EACtBvlO,KAAKo9L,eAAejtE,OACpBmvE,EAAQ1vL,OAAS41N,EAGbC,GACFA,EAAenzF,aAAa,SAAU,UAAU,GAIlDgzF,EAAYhmC,EAAQ3gC,iBAAiB,YAChC34J,EAAI,EAAGA,EAAIs/N,EAAU9kO,OAAQwF,IAChC8lM,EAAWw5B,EAAUt/N,GAChB8lM,EAAS8jB,UAAY2V,IAAgBz5B,IAC1CA,EAASx5D,aAAa,SAAU,UAAU,GAC1Cw5D,EAASv7E,QAEX+uE,GAAQltC,KAAK,qBAAsB05C,SAAUy5B,MAQ/C/nC,mBAAoB,SAAU+nC,GAC5B,GAAIC,GAGAjoC,EAFAkoC,EAAiBzlO,KAAKu9L,kBACtB+B,EAAUt/L,KAAKs/L,SAInBkmC,EAAYD,EAAYlhC,YAAY,YAClBkhC,IAAgBvlO,KAAKu9L,oBAGnCkoC,GACFA,EAAenzF,aAAa,SAAU,aAAa,GAGrDirD,EAAoBv9L,KAAKu9L,kBAAoBgoC,EAC7ChoC,EAAkBjrD,aAAa,SAAU,UAAU,GACnDirD,EAAkBptE,OAElBmvE,EAAQltC,KAAK,wBAAyB05C,SAAUy5B,MAMlD9nC,uBAAwB,WACtBz9L,KAAKu9L,sBAAoBr8L,IAG3B+zN,KAAM,WACJ,GAAI0Q,GACArmC,EAAUt/L,KAAKs/L,QACfsmC,EAActmC,EAAQp5L,SAASq0C,GAAGp8B,OACjCne,MAAKu9L,oBAAqB+B,EAAQngB,WACvCwmD,EAAkB3lO,KAAKu9L,kBAAkB3oK,WAAWhlB,OAAOA,OAC3D0vL,EAAQp5L,SAASq0C,GAAGp8B,SAAU,EAC9BmhL,EAAQp5L,SAASuJ,OAAO6vL,EAAQx2D,SAAU68F,GAC1CrmC,EAAQp5L,SAASq0C,GAAGp8B,QAAUynN;;ACzDlC,QAAS/lG,gBAAgB/6H,GACvB,GAAI+gO,GAAe/gO,EAAK6qI,UACpBm2F,EAAgBv6M,WAAWs6M,IAAiBt6M,WAAWs6M,GAAc3hN,SACrE6hN,EAAmB,GAAID,EAE3B,KAAKA,EAAiB,KAAM,IAAIrxM,OAAM,qBAAuBoxM,EAAe,IAG5E,OADAE,GAAiB35N,KAAKtH,GACfkhO,iBAAiBD,EAAiB9rN,SAAUnV,EAAK2b,QAM1D,QAASwlN,qBAAqBC,EAAY34M,GACxC24M,EAAW34M,KAMb,QAAS44M,qBAAqBD,EAAY34M,GACxC24M,EAAW34M,OAA6BrsB,KAArBglO,EAAW34M,GAAsB,EAAI24M,EAAW34M,GAAQ,EAU7E,QAASy4M,kBAAkB/rN,EAAUmsN,GACnC,GAAI34K,EACJ,OAAK24K,IAEL34K,GAAiB,GAAI1tD,OAAMwmB,gBAAiBw6E,aAAa9mF,GACzDwzC,EAAe+xB,UAAY39E,KAAMoY,EAASpY,KAAM4V,WAAYwC,EAASxC,gBACrEwC,EAASyT,UACF+/B,GALiBxzC,EAnI1B,GAAIsR,YAAaonI,QAAQ,oBAAoBpnI,WACzCuzM,eAAiBnsE,QAAQ,kBAAkBmsE,eAC3C/+N,MAAQ4yJ,QAAQ,eAUpB/yJ,QAAOD,QAAQi/N,OAASE,eAAe,YACrC1yN,KAAM,WACJpM,KAAKwxB,SACLxxB,KAAKkmO,eAMPG,WAAY,WACVrmO,KAAKwxB,SACLxxB,KAAKkmO,eAQP9hC,oBAAqB,SAAUt/L,GAC7B,GACIwhO,GACA/4M,EAFAiE,EAAQxxB,KAAKwxB,KAKjB,OAAI1sB,GAAKm/L,UAAoBpkE,eAAe/6H,IAG5CyoB,EAAOvtB,KAAKutB,KAAKzoB,GACjBwhO,EAAiB90M,EAAMjE,GACvB44M,oBAAoBnmO,KAAKkmO,WAAY34M,GAEjC+4M,IAGJA,EAAiBzmG,eAAe/6H,GAGhC0sB,EAAMjE,GAAQ+4M,EACPA,KAMTniC,cAAe,SAAUr/L,GACvB,GAEImV,GACAsT,EAHAiE,EAAQxxB,KAAKwxB,MACb00M,EAAalmO,KAAKkmO,UAIlBphO,GAAKm/L,YAET12K,EAAOvtB,KAAKutB,KAAKzoB,GAEZ0sB,EAAMjE,KAEX04M,oBAAoBC,EAAY34M,GAG5B24M,EAAW34M,GAAQ,IAGvBtT,EAAWuX,EAAMjE,GACjBtT,EAASyT,gBACF8D,GAAMjE,SACN24M,GAAW34M,OAQpBA,KAAM,SAAUzoB,GACd,MAAO4vF,MAAKC,UAAU7vF;;ACvF1B6tJ,QAAQ,YACRA,QAAQ,cACRA,QAAQ,WACRA,QAAQ,cACRA,QAAQ,YACRA,QAAQ;;ACLR,GAAImsE,gBAAiBnsE,QAAQ,kBAAkBmsE,eAC3Cz2K,KAAOsqG,QAAQ,iBACfymD,UAAYzmD,QAAQ,iBAEpB4zE,mBAAqB,2BAWzB3mO,QAAOD,QAAQi/N,OAASE,eAAe,SACrCtiC,QACEgqC,sBAAuB9pC,SAAS,IAGlCtwL,KAAM,WACJpM,KAAKymO,eAAgB,EACrBzmO,KAAK0mO,mBAAoB,EAIzB1mO,KAAKs/L,QAAQ5vK,iBAAiB,SAAU24B,KAAKroD,KAAK2mO,mBAAoB3mO,QAQxEopM,cAAe,SAAUxM,GAClBA,EAAGvqD,aAAak0F,sBAEnBvmO,KAAK4mO,sBACL5mO,KAAK0mO,mBAAoB,IAI7BE,oBAAqB,WACnB,GAAIH,GACAnnC,EAAUt/L,KAAKs/L,OAEnB,IAAKt/L,KAAKymO,cAAV,CACAA,EAAgB7yN,SAAS+qJ,iBAAiB,IAAM4nE,mBAAqB,IACrE,KAAK,GAAIvgO,GAAI,EAAGA,EAAIygO,EAAcjmO,OAAQwF,IACxCs5L,EAAQ5rB,YAAY+yD,EAAczgO,GAEpChG,MAAKymO,eAAgB,IAQvBE,mBAAoB,WAClB,GACIE,GACAC,EAFAxnC,EAAUt/L,KAAKs/L,OAIft/L,MAAK0mO,mBAAqB1mO,KAAKymO,gBAAkBzmO,KAAK8E,KAAK0hO,uBAI/DK,EAAejzN,SAAS+7I,cAAc,YACtCk3E,EAAav0F,aAAa,SAAUzjI,MAAO,OAAQhN,KAAM,YACzDglO,EAAav0F,aAAai0F,mBAAoB,IAC9CM,EAAav0F,aAAa8mE,UAAU7E,gBAAiB,IACrDjV,EAAQzvC,YAAYg3E,GAEpBC,EAAmBlzN,SAAS+7I,cAAc,YAC1Cm3E,EAAiBx0F,aAAa,SAAUzjI,MAAO,OAAQwiB,UAAW,GAAK7U,YAAY,IACnFsqN,EAAiBx0F,aAAa,YAAanyI,GAAI,GAAKC,EAAG,EAAGQ,EAAG,IAC7DkmO,EAAiBx0F,aAAai0F,mBAAoB,IAClDO,EAAiBx0F,aAAa8mE,UAAU7E,gBAAiB,IACzDjV,EAAQzvC,YAAYi3E,GAEpB9mO,KAAKymO,eAAgB;;ACiLzB,QAASM,yBAAyBjiO,EAAMkiO,GACtC,GAAIhhO,GAEAunB,EACA05M,EAFAl9N,EAAKi9N,EAAQ5/J,aAAa,KAI9B,IAAIr9D,EAAM,MAAOA,EAKjB,KAFAwjB,EAAO,GACP05M,EAAkBniO,MACbkB,EAAI,EAAGA,EAAIghO,EAAQ34N,WAAW7N,OAAQwF,IACzCihO,EAAgBD,EAAQ34N,WAAWrI,GAAGzD,MAAQykO,EAAQ34N,WAAWrI,GAAG9D,KAMtE,OAJAF,QAAO6nD,KAAKo9K,GAAiB/xN,OAAOk6F,QAAQ,SAAU7sG,GACpDgrB,GAAQhrB,EAAO,IAAM0kO,EAAgB1kO,GAAQ,MAGxCgrB,EAWT,QAAS25M,kBAAkBrtH,EAAK/0G,GAG9B,QAASqiO,GAAoB/tF,EAAS4F,GAGpC,QAASooF,GAAgB/iO,GACvBgjO,qBAAqBhjO,EAASS,GAC9BT,EAAQ0O,aAAc,EACtBqmI,EAAQ/0I,GAIV,GAT0B,gBAARw1G,GAWhB,WADAutH,GAAe,GAAIrnO,OAAMsB,QAAQw4G,GAMnChjD,eAAcygD,KACZuC,EACAutH,EACA,aACA,SAAUv+D,GACRnoK,MAAM,2DAA4DmoK,EAAIlwD,OAChEkwD,EAAIy+D,cAzBhB,MAAO,IAAI5uF,SAAQyuF,GAoCrB,QAASE,sBAAsBhjO,EAASS,GACtC,GAAI9B,GAAS8B,EAAK9B,SAAW7C,EAAG,EAAGC,EAAG,GAClC6C,EAAS6B,EAAK7B,SAAW9C,EAAG,EAAGC,EAAG,IAC3B0E,EAAK8qM,OAAQ,KAKtBvrM,EAAQ7C,MAAQzB,MAAM4C,oBACtB0B,EAAQ5C,MAAQ1B,MAAM4C,oBACtB0B,EAAQ3C,UAAY3B,MAAM6C,aAC1ByB,EAAQ1C,UAAY5B,MAAM6C,cAIX,IAAbK,EAAO9C,GAAwB,IAAb8C,EAAO7C,IAC3BiE,EAAQ7C,MAAQzB,MAAMyzC,eACtBnvC,EAAQ5C,MAAQ1B,MAAMyzC,eACtBnvC,EAAQpB,OAAO4E,IAAI5E,EAAO9C,EAAG8C,EAAO7C,IAGrB,IAAb4C,EAAO7C,GAAwB,IAAb6C,EAAO5C,GAC3BiE,EAAQrB,OAAO6E,IAAI7E,EAAO7C,EAAG6C,EAAO5C,GAYxC,QAASmnO,eAAe1tH,EAAK91G,EAAOC,GAClC,GAAIgjO,GAAUpzN,SAAS+7I,cAAc,QAarC,OAZAq3E,GAAQjjO,MAAQA,EAChBijO,EAAQhjO,OAASA,EAEjBgjO,EAAQ10F,aAAa,cAAe,IACpC00F,EAAQ10F,aAAa,qBAAsB,IAC3C00F,EAAQvoK,UAAW,EACnBuoK,EAAQvsL,MAAO,EACfusL,EAAQrtH,YAAc,YACtBqtH,EAAQt3M,iBAAiB,QAAS,WAChC5U,KAAK,4BAA6B++F,KACjC,GACHmtH,EAAQntH,IAAMA,EACPmtH,EAgBT,QAASQ,oBAAoBR,GAa3B,MAZAA,GAAQvoK,SAAWuoK,EAAQ30F,aAAa,aAAoD,UAArC20F,EAAQ5/J,aAAa,YAC5E4/J,EAAQS,SAAWT,EAAQ30F,aAAa,aAAoD,UAArC20F,EAAQ5/J,aAAa,YACvC,UAAjC4/J,EAAQ5/J,aAAa,SACvB4/J,EAAQ36M,gBAAgB,QAEc,UAApC26M,EAAQ5/J,aAAa,aACvB4/J,EAAQrhF,QAAU,QAEpBqhF,EAAQrtH,YAAcqtH,EAAQrtH,aAAe,YAE7CqtH,EAAQ10F,aAAa,cAAe,IACpC00F,EAAQ10F,aAAa,qBAAsB,IACpC00F,EAjZT,GAAIlI,gBAAiBnsE,QAAQ,kBAAkBmsE,eAC3C/+N,MAAQ4yJ,QAAQ,gBAChBp0H,MAAQo0H,QAAQ,aAChB+0E,MAAQ/0E,QAAQ,qBAAqB+0E,MAErCr/K,KAAO9pB,MAAM8pB,KACb00G,MAAQx+H,MAAMw+H,MACdr8J,MAAQq8J,MAAM,4BACdlmG,cAAgB,GAAI92D,OAAM82D,cAC1B/7C,KAAOiiJ,MAAM,0BAEjBlmG,eAAcijD,eAAe,aAc7Bl6G,OAAOD,QAAQi/N,OAASE,eAAe,YACrC1yN,KAAM,WACJpM,KAAKkrE,aACLlrE,KAAK2nO,iBACL3nO,KAAK4nO,gBAEL5nO,KAAKs/L,QAAQ5vK,iBACX,wBACA24B,KAAKroD,KAAK6nO,wBAAyB7nO,QAIvC8nO,kBAAmB,WACjB9nO,KAAK4nO,iBAUP7lH,YAAa,SAAUlI,EAAK/0G,EAAMo3F,GAmBhC,QAAS6rI,GAAaluH,GAAO2jD,EAAKwqE,UAAUnuH,EAAK/0G,EAAMo3F,GACvD,QAAS+rI,GAAapuH,GAAO2jD,EAAK0qE,UAAUruH,EAAK/0G,EAAMo3F,GAnBvD,GAAIshE,GAAOx9J,IAGX,OAAoB,WAAhB65G,EAAI+zG,YACN5tN,MAAKmoO,WAAWtuH,EAAK/0G,EAAMo3F,GAKT,UAAhB2d,EAAI+zG,SACD/zG,EAAIA,KAAQA,EAAIw0G,WAAcx0G,EAAIuuH,mBACrCttN,KAAK,oGAEP9a,MAAKkoO,UAAUruH,EAAK/0G,EAAMo3F,QAI5B39D,OAAMsmM,UAAUwD,YAAYxuH,EAAKkuH,EAAaE,IAYhDD,UAAW,SAAUnuH,EAAK/0G,EAAMwjO,GAC9B,GAAI/6M,GAAOvtB,KAAKutB,KAAKzoB,GACjB8iO,EAAe5nO,KAAK4nO,YAGxB,IAAIA,EAAar6M,GAEf,WADAq6M,GAAar6M,GAAM+rH,KAAKgvF,EAK1BV,GAAar6M,GAAQ25M,iBAAiBrtH,EAAK/0G,GAC3C8iO,EAAar6M,GAAM+rH,KAAKgvF,IAU1BH,WAAY,SAAUtuH,EAAK/0G,EAAMo3F,GAE/B2d,EAAI7wD,WAAa,EACjB6wD,EAAI5wD,kBAAoB,EACxBjpD,KAAKkoO,UAAUruH,EAAK/0G,EAAMo3F,IAa5BgsI,UAAW,SAAUruH,EAAK/0G,EAAMo3F,GAO9B,QAASqsI,GAA0BruN,GACjCA,EAAO7V,QAAQ0O,aAAc,EAC7BmpF,EAAGhiF,EAAO7V,QAAS6V,EAAO8sN,SAR5B,GAAIz5M,GACAlpB,EAEA2iO,EACAwB,EAFAZ,EAAe5nO,KAAK4nO,YAUxB,IAAmB,gBAAR/tH,GAAkB,CAI3B,GAFAmtH,EAAUntH,EACVtsF,EAAOvtB,KAAKyoO,UAAU3jO,EAAMkiO,GACxBY,EAAar6M,GAEf,WADAq6M,GAAar6M,GAAM+rH,KAAKivF,EAI1Bf,oBAAmBR,GAQrB,GAJAA,EAAUA,GAAWO,cAAc1tH,EAAK/0G,EAAKf,MAAOe,EAAKd,QAGzDupB,EAAOvtB,KAAKyoO,UAAU3jO,EAAMkiO,GACxBY,EAAar6M,GAEf,WADAq6M,GAAar6M,GAAM+rH,KAAKivF,EAK1BlkO,GAAU,GAAItE,OAAM+oD,aAAak+K,GACjC3iO,EAAQ1C,UAAY5B,MAAM6C,aAC1BykO,qBAAqBhjO,EAASS,GAG1B9E,KAAKs/L,QAAQlsB,OACbs0D,MAAMV,EAAQntH,KAAOmtH,EAAQ5/J,aAAa,OACpC4/J,EAAQnlO,MAAQmlO,EAAQ5/J,aAAa,WAE7C/iE,EAAQzC,OAAS7B,MAAM+C,WACvBuB,EAAQqkO,qBAAsB,EAE9BrkO,EAAQb,OAAQ,EAChBa,EAAQskO,sBAAuB,GAIjCH,GAAsBnkO,QAASA,EAAS2iO,QAASA,GACjDY,EAAar6M,GAAQmrH,QAAQU,QAAQovF,GACrCD,EAAyBC,IAM3Bj7M,KAAM,SAAUzoB,GAMd,MALIA,GAAK+0G,IAAI+zG,UAEX9oN,EAAOy5B,MAAMshM,cAAe/6N,GAC5BA,EAAK+0G,IAAM/0G,EAAK+0G,IAAIA,KAEfnlB,KAAKC,UAAU7vF,IAGxB2jO,UAAW,SAAU3jO,EAAMkiO,GACzB,MAAOD,yBAAwBjiO,EAAMkiO,IAQvCv2B,iBAAkB,SAAUt7L,GAC1BnV,KAAKkrE,UAAU/1D,EAAS/S,MAAQ+S,GASlCq6L,mBAAoB,SAAUr6L,SACrBnV,MAAKkrE,UAAU/1D,EAAS/S,KAG/B,IAAIulO,GAAgB3nO,KAAK2nO,aACzB3lO,QAAO6nD,KAAK10C,GACTwgB,OAAO,SAAU+nM,GAChB,MAAOvoN,GAASuoN,IAAavoN,EAASuoN,GAAUlxM,YAEjD4iF,QAAQ,SAAU68D,KACjB07D,EAAcxyN,EAAS82J,GAAS7pK,OACa,GAC3C+S,EAAS82J,GAASv+I,aAQ1B2mL,gBAAiB,SAAUl/L,GACzB,GAAI+1D,GAAYlrE,KAAKkrE,SACrBlpE,QAAO6nD,KAAKqhB,GAAWkkC,QAAQ,SAAUhtG,GACvC8oE,EAAU9oE,GAAM2Q,aAAc,KAYlC80N,wBAAyB,SAAUt+K,GAC5BvpD,KAAK2nO,cAAcp+K,EAAEsB,OAAOxmD,QAAQjC,QACvCpC,KAAK2nO,cAAcp+K,EAAEsB,OAAOxmD,QAAQjC,MAAQ,GAE9CpC,KAAK2nO,cAAcp+K,EAAEsB,OAAOxmD,QAAQjC;;ACrPxC,GAAI08N,gBAAiBnsE,QAAQ,kBAAkBmsE,eAC3C/+N,MAAQ4yJ,QAAQ,gBAEhBi2E,qBACF91I,MAAO/yF,MAAMqlI,eACbyjG,IAAK9oO,MAAMse,aACXyqN,QAAS/oO,MAAMs3B,iBASjBz3B,QAAOD,QAAQi/N,OAASE,eAAe,UACrCtiC,QACEp+K,YAAas+K,SAAS,GACtB7gL,oBAAqB6gL,SAAS,GAC9B/gL,mBAAoB+gL,SAAS,GAC7B76L,MAAO66L,QAAS,MAAOqC,OAAQ,QAAS,MAAO,aAGjD3yL,KAAM,WACJ,GAAIkzL,GAAUt/L,KAAKs/L,QACfx6L,EAAO9E,KAAK8E,IAEhB9E,MAAKm5B,kBAAmB,EAEnBmmK,EAAQp5L,WAEbo5L,EAAQp5L,SAASkZ,UAAUvd,KAAO+mO,oBAAoB9jO,EAAKjD,MAC3Dy9L,EAAQp5L,SAASkZ,UAAUvD,mBAAqB/W,EAAK+W,mBACrDyjL,EAAQp5L,SAASkZ,UAAUzD,kBAAoB7W,EAAK6W,kBACpD2jL,EAAQp5L,SAASkZ,UAAUhB,WAAatZ,EAAKsZ,WAC7Cpe,KAAKs6M,oBAAoBt6M,KAAKm5B,oBAOhCmhL,oBAAqB,SAAUn8L,GAC7B,GAAIjY,GAAWlG,KAAKs/L,QAAQp5L,QAC5BlG,MAAKm5B,iBAAmBhb,EACpBjY,IACFA,EAASkZ,UAAUjB,QAAUA;;AC9CnC,GAAI2gN,gBAAiBnsE,QAAQ,kBAAkBmsE,eAC3CvgM,MAAQo0H,QAAQ,WAMpB/yJ,QAAOD,QAAQi/N,OAASE,eAAe,oBACrC1yN,KAAM,WACJ,GAAIoxJ,GAAOx9J,IAEXA,MAAKuqI,eAELvqI,KAAK+oO,qBAAqBzsE,UAAU0sE,aAAe1sE,UAAU0sE,eAC7DhpO,KAAKipO,8BAAgC1qM,MAAMy3L,SAASh2N,KAAK+oO,qBAAsB,IAAK/oO,MAE/Es8J,UAAUq7B,eAEf33L,KAAKs/L,QAAQ5vK,iBAAiB,WAAY,WACxC4sI,UAAUq7B,gBAAgBr+C,KAAK,SAAU89C,GACnCA,EAAS52L,SAAUg9J,EAAKo3B,UAAYwC,EAAS,SAKvD8P,KAAM,WACJ,GAAIgiC,EAEJA,GAAW5sE,UAAU0sE,aAAe1sE,UAAU0sE,cAC9ChpO,KAAKipO,8BAA8BC,IAMrCH,qBAAsB,SAAUG,GAC9B,GACIC,GACAnjO,EACAojO,EAHA7+F,EAAcvqI,KAAKuqI,WAKvB,IAAK2+F,EAAL,CAIA,IAFAE,EAAY7+F,EAAY/pI,OACxB+pI,EAAY/pI,OAAS,EAChBwF,EAAI,EAAGA,EAAIkjO,EAAS1oO,SAAUwF,GACjCmjO,EAAUD,EAASljO,KACJmjO,EAAQx4L,MACrB45F,EAAYhgI,KAAK4+N,EAIjB5+F,GAAY/pI,SAAW4oO,GACzBppO,KAAK48L,GAAGxqC,KAAK,yBAAsBlxJ,IAAW;;AC/CpDtB,OAAOD,QAAU,SAAe0+I,EAAIu4D,GAClC,MAAO,UAAWyyB,GAChB,MAAO,YAEL,GAAI73E,GAAO63E,EAAcn2K,OAAOr2C,MAAMskD,UAAUtZ,MAAMnjD,KAAKnE,UAAW,GACtE,OAAO89I,GAAGzxG,MAAMgqK,EAAKplD,KAEtB30I,MAAMskD,UAAUtZ,MAAMnjD,KAAKnE,UAAW;;ACK3C,QAASq0F,OAAO1yF,EAAOonO,GACrB,GAAIC,GACAn/H,CAEJ,OAAIloG,IAASA,YAAiBF,SACxBsnO,IACFpnO,EAAM/B,MAAgBe,KAAZgB,EAAM/B,EAAkBmpO,EAAWnpO,EAAI+B,EAAM/B,EACvD+B,EAAM9B,MAAgBc,KAAZgB,EAAM9B,EAAkBkpO,EAAWlpO,EAAI8B,EAAM9B,EACvD8B,EAAMtB,MAAgBM,KAAZgB,EAAMtB,EAAkB0oO,EAAW1oO,EAAIsB,EAAMtB,EACvDsB,EAAMrB,MAAgBK,KAAZgB,EAAMrB,EAAkByoO,EAAWzoO,EAAIqB,EAAMrB,GAElD2oO,cAActnO,IAGT,OAAVA,OAA4BhB,KAAVgB,EACS,gBAAfonO,GAA0BriD,UAAWqiD,GAAcA,GAGnEC,EAAarnO,EAAM67G,OAAO5nF,QAAQ,OAAQ,KAAKtC,MAAM,KACrDu2E,KACAA,EAAIjqG,EAAIopO,EAAW,IAAMD,GAAcA,EAAWnpO,EAClDiqG,EAAIhqG,EAAImpO,EAAW,IAAMD,GAAcA,EAAWlpO,EAClDgqG,EAAIxpG,EAAI2oO,EAAW,IAAMD,GAAcA,EAAW1oO,EAClDwpG,EAAIvpG,EAAI0oO,EAAW,IAAMD,GAAcA,EAAWzoO,EAC3C2oO,cAAcp/H,IAWvB,QAASzV,WAAW7vF,GAClB,MAAoB,gBAATA,GAA4BA,GAC/BA,EAAK3E,EAAG2E,EAAK1E,EAAG0E,EAAKlE,EAAGkE,EAAKjE,GAAGqN,KAAK,KAAK6vG,OAOpD,QAASstG,eAAenpN,GACtB,MAAOs/G,OAAMplG,KAAKla,GASpB,QAASsnO,eAAep/H,GACtB,GAAI1gD,EACJ,KAAKA,IAAO0gD,OACOlpG,KAAbkpG,EAAI1gD,GAIJ0gD,EAAI1gD,GAAKsO,cAAgBivC,SAC3BmD,EAAI1gD,GAAOxc,WAAWk9D,EAAI1gD,GAAM,WAJzB0gD,GAAI1gD,EAOf,OAAO0gD,GAlFT,GAAI2yD,OAAQpK,QAAQ,WAChBs0B,OAASt0B,QAAQ,iBAEjB73I,KAAOiiJ,MAAM,0BAGbv7C,MAAQ,wEACZ5hH,QAAOD,QAAQ6hH,MAAQA,MAoCvB5hH,OAAOD,QAAQi1F,MAAQA,MAavBh1F,OAAOD,QAAQg1F,UAAYA,UAQ3B/0F,OAAOD,QAAQ0rN,cAAgBA,cAE/BzrN,OAAOD,QAAQ8pO,aAAe,SAAUvnO,GAEtC,MADA4Y,MAAK,gFACEuwM,cAAcnpN,IAoBvBtC,OAAOD,QAAQi5F,UAAY,SAAU0lC,GACnC,MAAO,IAAIv+H,OAAMoB,QAAQm9H,EAAKn+H,EAAGm+H,EAAKl+H,EAAGk+H,EAAK19H;;;ACxDhD,QAAS8oO,uBAAuBhtE,GAC9B,GAAI5mI,GAAS4mI,EAAU7oI,MAAM,IAE7B,OAAOiC,GAAOA,EAAOt1B,OAAS,GAWhC,QAASmpO,wBAAwBjtE,GAC/B,GAAI76J,GAAO6nO,sBAAsBhtE,EAIjC,OAFY95F,UAASx+C,QAAUw+C,SAASx+C,OAAOviB,IAE/B,KAYlB,QAASg7J,WACP,IACE,MAAO53H,QAAOg4H,aACd,MAAO1zG,KApEX,GAAIqgL,UAAWj3E,QAAQ,SACnBs0B,OAASt0B,QAAQ,iBAEjB/vF,UACFx+C,QACE24I,MAAO,OACPr8J,MAAO,MACP6K,KAAM,OACNuP,KAAM,WASNiiJ,MAAQ,SAAUL,GACpB,GAAIp0I,GAAIshN,SAASltE,EAIjB,OAFAp0I,GAAEzZ,MAAQ86N,uBAAuBjtE,GAE1Bp0I,EAET2+J,QAAOlqB,MAAO6sE,SA0Dd,IAAIC,IAAKhtE,SACLgtE,MAAO7yM,SAAS6yM,GAAGC,KAAM,KAAmB,SAAZD,GAAGC,MACrC/sE,MAAMprJ,OAAO,KAEborJ,MAAMprJ,OAAO,yBAGXk5I,QAAQ6G,UAAWzsH,OAAO6kM,KAAO/sE,OAErCn9J,OAAOD,QAAUo9J;;;;;AChFjB,QAASy+D,gBAAkB,MAAO5mC,WAMlC,QAAS0Z,yBAA2B,QAASktB,eAM7C,QAASlvB,8BACP,GAAI1X,GAAY4mC,cAChB,QAAIr8C,aAAc4qD,aACXn1C,GAAaA,EAAUzoL,aAAamlK,aA4B7C,QAAS04D,UAAUC,GAEjB,MAAO,yDAAyD7tN,KADhD6tN,GAAiBhlM,OAAOq3H,UAAUC,WAKpD,QAAS6W,SACP,MAAO,mBAAmBh3J,KAAK6oB,OAAOq3H,UAAU80B,UAIlD,QAAS24C,YACP,MAAO,6BAA6B3tN,KAAK6oB,OAAOq3H,UAAUC,WAI5D,QAASgzB,QACP,MAAO,WAAWnzK,KAAK6oB,OAAOq3H,UAAUC,WAvE1C,GAAIq4B,WACAs1C,oBACAC,sBAAwB,sCAExB7tE,WAAUq7B,eACZr7B,UAAUq7B,gBAAgBr+C,KAAK,SAAU89C,GACvCxC,UAAYwC,EAAS52L,QAAU42L,EAAS,GACxC8yC,oBAAsBt1C,UAAUxjB,cAAgB+4D,wBAKpDvqO,OAAOD,QAAQ67N,aAAeA,aAM9B57N,OAAOD,QAAQ2uM,sBAAwBA,sBAUvC1uM,OAAOD,QAAQ2sM,2BAA6BA,0BAM5C,IAAIntB,UAAW,WACb,GAAIirD,IAAY,CAWhB,OAVA,UAAWj2N,IAEL,2TAA2TiI,KAAKjI,IAAM,0kDAA0kDiI,KAAKjI,EAAEylG,OAAO,EAAG,OACn6DwwH,GAAY,IAEVh3D,SAAW42D,YAAcz6C,UAC3B66C,GAAY,IAEbnlM,OAAOq3H,UAAUC,WAAat3H,OAAOq3H,UAAUiqB,QAAUthJ,OAAOuhJ,OAE5D,WAAc,MAAO4jD,MAE9BxqO,QAAOD,QAAQw/K,SAAWA,SAU1Bv/K,OAAOD,QAAQqqO,SAAWA,SAK1BpqO,OAAOD,QAAQyzK,MAAQA,MAKvBxzK,OAAOD,QAAQoqO,SAAWA,SAK1BnqO,OAAOD,QAAQ4vL,KAAOA,KAMtB3vL,OAAOD,QAAQu6M,YAAc,WAC3B,GAAIrpK,GAAc5L,OAAO4L,WAEzB,OADI0+I,UAAU1+I,GAAe,IACN,KAAhBA,IAAuC,KAAjBA,GAM/BjxC,OAAOD,QAAQkjO,iBAAmB,SAAUtmE,GAC1C,MAAO,kCAAkCngJ,KAAKmgJ,IAUhD38J,OAAOD,QAAQmjO,uBAA2Bj4E,UAAWA,QAAQ6G,SAK7D9xJ,OAAOD,QAAQ0qO,mBAAqBzqO,OAAOD,QAAQmjO,qBAKnDljO,OAAOD,QAAQwsM,iBAAmB,SAA2BvyL,GAC3D,GAAIg2B,EACA3K,QAAO4K,cAAeD,EAAY,GAAI3K,QAAO4K,aACjD7vC,KAAK4c,OAAS,WACZ,GAAI+zB,EACCikJ,YAAcs1C,sBACnBt1C,UAAUlkJ,aAAad,GACvBe,EAAOf,EAAUe,KACQ,OAArBA,EAAKE,aACPj3B,EAAO2I,WAAWquB,UAAUD,EAAKE,aAEb,OAAlBF,EAAK19B,SACP2G,EAAO3G,SAAS29B,UAAUD,EAAK19B,UAE/B2G,EAAO3G,SAASpL,IAAI,EAAG,EAAG;;;;AC/GhC,QAAS24N,0BAA0BjyE,EAAK+7E,GAQtC,MAPAA,GAAYA,GAAa,IACpBC,kBAAkBD,KAAcC,kBAAkBD,QACvB,IAA5B/7E,EAAIpwH,QAAQmsM,GACdC,kBAAkBD,GAAW/7E,GAAOA,EAAI16H,MAAMy2M,GAE9CC,kBAAkBD,GAAW/7E,GAAOA,EAE/Bg8E,kBAAkBD,GAAW/7E,GATtC,GAAIg8E,qBAWJ3qO,QAAOD,QAAQ6gO,yBAA2BA,yBAC1C5gO,OAAOD,QAAQ4qO,kBAAoBA,kBAMnC3qO,OAAOD,QAAQwrN,qBAAuB,SAAUvuB,EAAIr6L,EAAM+nO,GACxD,GAAIE,EAEJ,OADAF,GAAYA,GAAa,KACQ,IAA7B/nO,EAAK47B,QAAQmsM,IACfE,EAAYhK,yBAAyBj+N,EAAM+nO,GACvCE,EAAUxyK,cAAgBivC,OACrB21F,EAAGx1H,aAAaojK,GAElB5tC,EAAGx1H,aAAaojK,EAAU,IAAIA,EAAU,KAE1C5tC,EAAGx1H,aAAa7kE,IAOzB3C,OAAOD,QAAQmgO,qBAAuB,SAAUljC,EAAIr6L,EAAML,EAAOooO,GAC/D,GAAIE,EAEJ,IADAF,EAAYA,GAAa,KACQ,IAA7B/nO,EAAK47B,QAAQmsM,GAOf,MANAE,GAAYhK,yBAAyBj+N,EAAM+nO,QACvCE,EAAUxyK,cAAgBivC,OAC5B21F,EAAGtqD,aAAak4F,EAAWtoO,GAE3B06L,EAAGtqD,aAAak4F,EAAU,GAAIA,EAAU,GAAItoO,GAIhD06L,GAAGtqD,aAAa/vI,EAAML;;AC1DxBtC,OAAOD,QAAU,SAAwC0uM,GACvD,GAAItqM,GAAQsqM,EAAS9qJ,MAAMx/C,MACvBC,EAASqqM,EAAS9qJ,MAAMv/C,MAK5BqqM,GAAS9qJ,MAAMx/C,MAASizB,SAASjzB,EAAO,IAAM,EAAK,KACnDsqM,EAAS9qJ,MAAMv/C,OAAUgzB,SAAShzB,EAAQ,IAAM,EAAK,KACrDwzG,WAAW,WACT62F,EAAS9qJ,MAAMx/C,MAAQA,EACvBsqM,EAAS9qJ,MAAMv/C,OAASA,GACvB;;ACTL,GAAI+4J,OAAQpK,QAAQ,WAChB83E,WAAa93E,QAAQ,eACrB1jH,OAAS0jH,QAAQ,YACjB+3E,aAAe/3E,QAAQ,iBACvBg4E,WAAah4E,QAAQ,iBAErB73I,KAAOiiJ,MAAM,aAEjBn9J,QAAOD,QAAQ0oD,KAAOsqG,QAAQ,UAC9B/yJ,OAAOD,QAAQ2rN,YAAc34D,QAAQ,iBACrC/yJ,OAAOD,QAAQo9J,MAAQA,MACvBn9J,OAAOD,QAAQsvC,OAASA,OACxBrvC,OAAOD,QAAQosN,OAASp5D,QAAQ,YAChC/yJ,OAAOD,QAAQg8N,8BAAgChpE,QAAQ,mCACvD/yJ,OAAOD,QAAQwV,SAAWw9I,QAAQ,cAClC/yJ,OAAOD,QAAQgrO,WAAaA,WAC5B/qO,OAAOD,QAAQuvN,YAAcv8D,QAAQ,iBACrC/yJ,OAAOD,QAAQolM,gBAAkBpyC,QAAQ,sBAEzC/yJ,OAAOD,QAAQ2uM,sBAAwB,WAErC,MADAxzL,MAAK,mFACEm0B,OAAOq/J,sBAAsB/tM,YAEtCX,OAAOD,QAAQoqO,SAAW,WAExB,MADAjvN,MAAK,yDACEm0B,OAAO86L,SAASxpO,YAEzBX,OAAOD,QAAQyzK,MAAQ,WAErB,MADAt4J,MAAK,mDACEm0B,OAAOmkI,MAAM7yK,YAEtBX,OAAOD,QAAQw/K,SAAW,WAExB,MADArkK,MAAK,wDACEm0B,OAAOkwI,SAAS5+K,YAWzBX,OAAOD,QAAQq2N,SAAW,SAAU4U,EAAoBC,EAAiBC,GACvE,GAAIC,EAIJ,OAHID,KACFF,EAAqBhrO,OAAOD,QAAQ0oD,KAAKuiL,EAAoBE,IAExD,WACL,GAAIpwL,GAAOsjF,KAAK1F,MACZ0yG,MAAoC,KAAbD,EAA2BF,EAAkBnwL,EAAOqwL,OACvD,KAAbA,GAA6BC,GAAiBH,KACvDE,EAAWrwL,EACXkwL,EAAmBh+L,MAAM,KAAMrsC,cAcrCX,OAAOD,QAAQsrO,aAAe,SAAUL,EAAoBC,EAAiBC,GAC3E,GAAIC,EAIJ,OAHID,KACFF,EAAqBhrO,OAAOD,QAAQ0oD,KAAKuiL,EAAoBE,IAExD,SAAUpwL,EAAMmwC,GACrB,GAAImgJ,OAAoC,KAAbD,EAA2BlgJ,EAAQnwC,EAAOqwL,OAC7C,KAAbA,GAA6BC,GAAiBH,KACvDE,EAAWrwL,EACXkwL,EAAmBlwL,EAAMswL,MAa/BprO,OAAOD,QAAQ0/L,SAAW,SAAUl1I,EAAM+gL,EAAMC,GAC9C,GAAIh6E,EACJ,OAAO,YACL,GAAIr9I,GAAU9T,KACVwxJ,EAAOjxJ,UACP6qO,EAAQ,WACVj6E,EAAU,KACLg6E,GAAWhhL,EAAKvd,MAAM94B,EAAS09I,IAElC65E,EAAUF,IAAch6E,CAC5BP,cAAaO,GACbA,EAAU35C,WAAW4zH,EAAOF,GACxBG,GAASlhL,EAAKvd,MAAM94B,EAAS09I,KAUrC5xJ,OAAOD,QAAQsnL,OAASyjD,aACxB9qO,OAAOD,QAAQkgO,WAAa4K,WAE5B7qO,OAAOD,QAAQ8b,MAAQ,SAAUogF,GAC/B,MAAOnH,MAAKE,MAAMF,KAAKC,UAAUkH,IAanC,IAAI06H,WAAY,WACd,GAAI+U,GAAYX,WAAWY,WAAW,WAAc,UAEpD,OAAO,UAAUp3N,EAAGhN,GAClB,GAAIuiD,GACA8hL,EACAC,EACAzlO,EACA0lO,EACAC,CAGJ,QAAUzqO,KAANiT,OAAyBjT,KAANiG,GAAyB,OAANgN,GAAoB,OAANhN,KAClDgN,GAAKhN,GAAMgN,EAAE6jD,cAAgBh2D,QAAUmF,EAAE6wD,cAAgBh2D,QAC9CmS,EAAE6jD,cAAgBn7C,OAAS1V,EAAE6wD,cAAgBn7C,OAC5D,MAAO1I,KAAMhN,CAIfqkO,GAAQF,EAAUM,MAClBH,EAAQH,EAAUM,MAClBJ,EAAMhrO,OAAS,EACfirO,EAAMjrO,OAAS,CACf,KAAKkpD,IAAOv1C,GAAKq3N,EAAMjhO,KAAKm/C,EAC5B,KAAKA,IAAOviD,GAAKskO,EAAMlhO,KAAKm/C,EAC5B,IAAI8hL,EAAMhrO,SAAWirO,EAAMjrO,OAGzB,MAFA8qO,GAAUO,QAAQL,GAClBF,EAAUO,QAAQJ,IACX,CAIT,KAAKzlO,EAAI,EAAGA,EAAIwlO,EAAMhrO,SAAUwF,EAI9B,GAHA0lO,EAAOv3N,EAAEq3N,EAAMxlO,IACf2lO,EAAOxkO,EAAEqkO,EAAMxlO,IAEM,gBAAT0lO,IAAqC,gBAATC,IACnC9uN,MAAMC,QAAQ4uN,IAAS7uN,MAAMC,QAAQ6uN,GAAQ,CAChD,GAAID,IAASC,EAAQ,QACrB,KAAKpV,UAAUmV,EAAMC,GAGnB,MAFAL,GAAUO,QAAQL,GAClBF,EAAUO,QAAQJ,IACX,MAEJ,IAAIC,IAASC,EAGlB,MAFAL,GAAUO,QAAQL,GAClBF,EAAUO,QAAQJ,IACX,CAMX,OAFAH,GAAUO,QAAQL,GAClBF,EAAUO,QAAQJ,IACX,KAGX7rO,QAAOD,QAAQ42N,UAAYA,UAW3B32N,OAAOD,QAAQ8+F,KAAO,WACpB,GAAI50C,KAEJ,OAAO,UAAU11C,EAAGhN,EAAGwtH,GACrB,GAAIm3G,GACAC,EACAC,EACAvtI,EACA/0C,EACA1jD,EACAimO,CAEJxtI,GAAOk2B,MAGP9qE,EAAKrpD,OAAS,CACd,KAAKkpD,IAAOv1C,GAAK01C,EAAKt/C,KAAKm/C,EAE3B,KAAKviD,EAAK,MAAOs3F,EAGjB,KAAKutI,IAAQ7kO,IACiB,IAAxB0iD,EAAK1rB,QAAQ6tM,IACfniL,EAAKt/C,KAAKyhO,EAId,KAAKhmO,EAAI,EAAGA,EAAI6jD,EAAKrpD,OAAQwF,IAC3B0jD,EAAMG,EAAK7jD,GACX8lO,EAAO33N,EAAEu1C,GACTqiL,EAAO5kO,EAAEuiD,KACTuiL,EAAqBH,GAAQC,GACTD,EAAK9zK,cAAgBh2D,QAAU+pO,EAAK/zK,cAAgBh2D,UAC5Cu0N,UAAUuV,EAAMC,KACtCE,GAAsBH,IAASC,KACnCttI,EAAK/0C,GAAOqiL,EAGhB,OAAOttI,OASX7+F,OAAOD,QAAQk2M,sBAAwB,SAAUvmL,GAC/C,OAAIA,EAAM48M,SACHt4N,SAASslN,gBAAkBtlN,SAAS0iI,MAU7C12I,OAAOD,QAAQqtN,YAAc,SAAUz+D,EAAK+7E,OACjB,KAAdA,IAA6BA,EAAY,IAEpD,IAAI9oH,GAAQ,GAAI0R,QAAOo3G,EAAW,IAGlC,OAFA/7E,IAAOA,GAAO,IAAIp4H,QAAQqrF,EAAO8oH,GAE1B/7E,EAAI16H,MAAMy2M,IAUnB1qO,OAAOD,QAAQytN,UAAY,SAAUxwB,EAAIgtB,GAIvC,QAASuiB,GAAeziL,GAClBkzI,EAAGvqD,aAAa3oF,KAClB5kD,EAAK4kD,GAAOkzI,EAAGx1H,aAAa1d,IALhCkgK,EAAWA,KACX,IAAI9kN,KAOJ,OANA9C,QAAO6nD,KAAK+/J,GAAUx6G,QAAQ+8H,GAMvBrnO,GAQTlF,OAAOD,QAAQg5M,gBAAkB,SAAUp2M,GAEzCA,EAAOA,EAAK4zB,QAAQ,OAAQ,OAAOA,QAAQ,OAAQ,MACnD,IAAIqrF,GAAQ,GAAI0R,QAAO,SAAW3wH,EAAO,aACrC8wH,EAAU7R,EAAM12G,KAAK8nL,SAAS34E,OAClC,OAAmB,QAAZoZ,EAAmB,GAAKxb,mBAAmBwb,EAAQ,GAAGl9F,QAAQ,MAAO,OAM9Ev2B,OAAOD,QAAQu9N,UAAY,WACzB,MAAOj4L,QAAOxhB,MAAQwhB,OAAOu4H,MAO/B59J,OAAOD,QAAQq/N,cAAgB,SAAUpiC,GAGvC,IAAK,GAFDwvC,MACAC,EAAczvC,EAAGx2D,qBAAqB,KACjCpgI,EAAI,EAAGL,EAAI0mO,EAAY7rO,OAAQwF,EAAIL,EAAGK,IACzCqmO,EAAYrmO,GAAGmuM,SAEjBi4B,EAAiB7hO,KAAK8hO,EAAYrmO,GAGtC,OAAOomO,IAITxsO,OAAOD,QAAQklO,UAAYlyE,QAAQ,gBAKnC/yJ,OAAOD,QAAQk0B,MAAQ,WACrB,GAAIy4M,KAEJ,OAAO,UAAU/9E,EAAK+7E,GAGpB,MAFMA,KAAagC,KAAeA,EAAWhC,OAEzC/7E,IAAO+9E,GAAWhC,GAAqBgC,EAAWhC,GAAW/7E,IAEjE+9E,EAAWhC,GAAW/7E,GAAOA,EAAI16H,MAAMy2M,GAChCgC,EAAWhC,GAAW/7E;;AC9NjC,QAASq2E,qBAAqBhoC,EAAIv4L,GAC3BA,IAELu4L,EAAGxqC,KAAK,yBAA0Bv4C,IAAKx1G,EAAQ/C,MAAO+C,QAASA,IAG1DA,EAAQ/C,OAAmC,UAA1B+C,EAAQ/C,MAAMssN,UAEpCvpN,EAAQ/C,MAAMouB,iBAAiB,aAAc,WAGtCktK,EAAGhoK,YAAegoK,EAAGhoK,WAAWzf,WAEjC9Q,EAAQqkO,qBAAuBrkO,EAAQskO,uBAC+B,KAArE,WAAY,QAAQxqM,QAAQy+J,EAAGhoK,WAAWzf,SAASrQ,KAAKkJ,SAC3D4uL,EAAGtqD,aAAa,WAAY,SAAU,YAGxCsqD,EAAGxqC,KAAK,2BAA4Bv4C,IAAKx1G,EAAQ/C,MAAO+C,QAASA,OAEnEA,EAAQ/C,MAAMouB,iBAAiB,QAAS,WAEtCktK,EAAGxqC,KAAK,sBAAuBv4C,IAAKx1G,EAAQ/C,MAAO+C,QAASA,QAzIhE,GAAItE,OAAQ4yJ,QAAQ,gBAEhB45E,eAAiB,wBAAyB,gCAS9C3sO,QAAOD,QAAQg/N,0BAA4B,SAAU/4E,EAAc4mF,EAAUx+N,EAAQlJ,GAkCnF,QAAS2nO,GAAapoO,GAEhB2J,EAAO0+N,aAAa9mF,KAAkB/rC,GAC1C8yH,EAAOtoO,GAGT,QAASsoO,GAAQtoO,GACf8Q,EAASywI,GAAgBvhJ,EACzB8Q,EAASpC,aAAc,EACvB6xN,oBAAoBhoC,EAAIv4L,GA1C1B,GAAIu4L,GAAK5uL,EAAO4uL,GACZznL,EAAWnH,EAAOmH,SAClB0kG,EAAM/0G,EAAK0nO,EAQf,IAFKx+N,EAAO0+N,eAAgB1+N,EAAO0+N,kBAE9B7yH,EAKH,aAHO7rG,GAAO0+N,aAAa9mF,OAE3B+mF,GAAO,KAKL9yH,KAAQ7rG,EAAO0+N,aAAa9mF,KAGhC53I,EAAO0+N,aAAa9mF,GAAgB/rC,EAGhCA,YAAe95G,OAAMsB,QAAWsrO,EAAO9yH,GAGzC+iF,EAAG0C,QAAQ8U,QAAQj/L,SAAS4sG,YAAYlI,GACrCA,IAAKA,EAAK52G,OAAQ6B,EAAK7B,OAAQD,OAAQ8B,EAAK9B,OAAQ4sM,KAAM9qM,EAAK8qM,MAChE68B,KAsBN7sO,OAAOD,QAAQ8jO,UAAY,SAAUz1N,EAAQlJ,GAC3C,MAAOlF,QAAOD,QAAQg/N,0BAA0B,MAAO,MAAO3wN,EAAQlJ,IAUxElF,OAAOD,QAAQ8kO,oBAAsB,SAAUmI,EAAU5+N,EAAQlJ,GA2B/D,QAAS6nO,GAAQtoO,GACf8Q,EAAS03N,EAAY,OAASxoO,EAC9B8Q,EAASpC,aAAc,EACvB6xN,oBAAoBhoC,EAAIv4L,GA7B1B,GAAIwoO,GAAYD,CACC,sBAAbA,IAAmCC,EAAY,KACnD,IAAIjwC,GAAK5uL,EAAO4uL,GACZznL,EAAWnH,EAAOmH,SAClB0kG,EAAM/0G,EAAK8nO,EAAW,OACtBrhO,IAQJ,IAPAA,EAAKsuG,IAAMA,EAGXtuG,EAAKvI,OAAS8B,EAAK8nO,EAAW,iBAC9BrhO,EAAKtI,OAAS6B,EAAK8nO,EAAW,iBAC9BrhO,EAAKm0E,KAAO56E,EAAK8nO,EAAW,eAExB/yH,EAAK,CACP,GAAIA,IAAQ7rG,EAAO4+N,EAAW,cAAiB,MAK/C,OAFA5+N,GAAO4+N,EAAW,cAAgB/yH,MAClC+iF,GAAG0C,QAAQ8U,QAAQj/L,SAAS4sG,YAAYlI,EAAKtuG,EAAMohO,GAKhDx3N,EAAS9P,KACdsnO,EAAO,OAwCT/sO,OAAOD,QAAQilO,oBAAsBA,oBAQrChlO,OAAOD,QAAQ+nO,MAAQ,SAAU7tH,EAAKh4G,GACpC,SAAIA,IAAQ0qO,cAAc/yE,SAAS33J,EAAKo2G,oBACpC4B,GAAOA,EAAI5B,cAAc95E,QAAQ,SAAW;;AC/IlD,QAAS2uM,wBAA0B,SAiEnC,QAASC,aAAalxI,GACpB,GAAInyC,EACJ,IAAMmyC,EAAI7jC,cAAgBh2D,OAC1B,IAAK0nD,IAAOmyC,GAAOA,EAAInyC,OAAOxoD,GAvEhC,GAAI8rO,YAAahrO,OAAOg1G,OAAOh1G,OAAOo+E,OAAO,MAQ7CxgF,QAAOD,QAAQ4rO,WAAa,SAAqB0B,GAM/C,QAASrB,KACP,GAAIsB,EAOJ,OANqB,QAAjBC,GAAyBA,IAAiBC,EAAQ5sO,QACpD6sO,EAAKD,EAAQ5sO,QAAU,GAEzB0sO,EAAWE,EAAQD,GACnBC,EAAQD,KAAkBH,WAC1BD,YAAYG,GACLA,EAGT,QAASrB,GAAShwI,GAChB,GAAMA,YAAe75F,QACrB,MAAqB,QAAjBmrO,IAA2C,IAAlBA,OAC3BC,EAAQA,EAAQ5sO,QAAUq7F,QAG5BuxI,IAAUD,GAAgBtxI,GAG5B,QAASwxI,GAAM7rN,GACb,GAAI8rN,GACAtnO,CAOJ,IALAwb,MAAkBtgB,KAAVsgB,EAAsB4rN,EAAQ5sO,OAASghB,EAC3CA,EAAQ,GAAqB,MAAhB2rN,IACfA,EAAe,GAGb3rN,EAAQ,EAGV,IAFA8rN,EAAgBF,EAAQ5sO,OACxB4sO,EAAQ5sO,QAAU8sE,OAAO9rD,GACpBxb,EAAIsnO,EAAetnO,EAAIonO,EAAQ5sO,OAAQwF,IAE1ConO,EAAQpnO,GAAKinO,GAIjB,OAAOG,GAAQ5sO,OAGjB,QAAS4I,KACP,MAAOgkO,GAAQ5sO,OA/CjB,GAAI4sO,MACAD,EAAe,IAiDnB,OA/CAF,GAAgBA,GAAiBH,sBAgD/BO,KAAMA,EACN1yB,KAAMyyB,EACNvB,QAASA,EACTziO,KAAMA,EACNwiO,IAAKA,IASThsO,OAAOD,QAAQotO,YAAcA;;AC7D7B,QAAS1E,aAAaxuH,EAAK0zH,EAAWC,GACpCC,aAAa5zH,EAAK,SAAuB6zH,GACvC,GAAIA,EAEF,WADAH,GAAU1zH,EAGZ2zH,GAAU3zH,KAad,QAASirH,oBAAoBjrH,EAAK3d,GAehC,QAASqxI,GAAWx3K,GAClB43K,EAAcpjO,KAAKwrD,GACU,IAAzB43K,EAAcntO,QAChB07F,EAAGyxI,GAjBP,GAAIC,GAEA5nO,EACA+zG,EAFA8zH,EAAkB,GAGlBF,IAEJ,KAAK3nO,EAAI,EAAGA,EAAI,EAAGA,IACjB6nO,GAAmB,6BAarB,IAXAA,GAAmB,6BACnB9zH,EAAOF,EAAIhvG,MAAM,GAAIqoH,QAAO26G,IAW1B,IAAK7nO,EAAI,EAAGA,EAAI,EAAGA,IACjBqiO,YAAYyF,SAAS/zH,EAAK/zG,IAAKunO,OAOnC,IADAK,EAAWG,4BAA4Bl0H,GAEvC,MAAyB,cAArB+zH,EAAShgB,SAA2BggB,EAASnf,KACxCvyH,EAAG0xI,EAASnf,UAGrB3zM,MAAK,8CAA+C++F,GAQtD,QAASi0H,UAAUj0H,GACjB,GAAIm0H,GAAYn0H,EAAIhvG,MAAM,eAC1B,IAAKmjO,EACL,MAAOA,GAAU,GASnB,QAASP,cAAc5zH,EAAKo0H,GAC1B,GAAI11H,EAEJ,IAAIsB,EAAI+zG,QAEN,WADAqgB,GAAyB,QAAhBp0H,EAAI+zG,QAGfr1G,GAAU,GAAIC,gBAGdD,EAAQE,KAAK,OAAQoB,GACrBtB,EAAQ7oF,iBAAiB,OAAQ,SAAUJ,GACzC,GAAI4+M,EACA31H,GAAQI,QAAU,KAAOJ,EAAQI,OAAS,KAC5Cu1H,EAAc31H,EAAQ41H,kBAAkB,gBACrB,MAAfD,EACFE,qBAAqBv0H,EAAKo0H,GAGxBA,EADEC,EAAYG,WAAW,UAChB,GAEA,IAIbD,qBAAqBv0H,EAAKo0H,GAE5B11H,EAAQujF,UAEVvjF,EAAQS,OAGV,QAASo1H,sBAAsBv0H,EAAKo0H,GAGlC,QAAS34K,KAAY24K,GAAS,GAE9B,QAASz4K,KAAay4K,GAAS,GAJ/B,GAAIK,GAAS,GAAIC,MACjBD,GAAO5+M,iBAAiB,OAAQ4lC,GAEhCg5K,EAAO5+M,iBAAiB,QAAS8lC,GAEjC84K,EAAOz0H,IAAMA,EAWf,QAASk0H,6BAA6Bxa,GACpC,IACE,GAAI32B,GAAKhpL,SAASu+H,cAAcohF,EAIhC,OAHK32B,IACH9hL,KAAK,mDAAoDy4M,GAEpD32B,EACP,MAAOrzI,GAEP,WADAzuC,MAAK,+BAAgCy4M,IAlJzC,GAAIx2D,OAAQpK,QAAQ,WAEhB73I,KAAOiiJ,MAAM,wBAqJjBn9J,QAAOD,SACLmuO,SAAUA,SACVzF,YAAaA,YACbvD,mBAAoBA;;ACxHtB,QAAS0J,aAAajgF,GAEpB,QAASkgF,GAAWvnO,GAAK,MAAOA,GAAE,GAAGimI,cADrC,MAAOohB,GAAIp4H,QAAQ,YAAas4M,GAYlC,QAASC,0BAA0B7yI,GACjC,GAAIhyC,GAAO7nD,OAAO6nD,KAAKgyC,GACnB8yI,IAKJ,OAJA9kL,GAAKulD,QAAQ,SAAU1lD,GACrB,GAAIklL,GAAeJ,YAAY9kL,EAC/BilL,GAAaC,GAAgB/yI,EAAInyC,KAE5BilL,EAtDT,GAAIzf,aAAcv8D,QAAQ,aAQ1B/yJ,QAAOD,QAAQi1F,MAAQ,SAAU1yF,GAC/B,GAAI2sO,EACJ,OAAqB,gBAAV3sO,GAA6BA,GACxC2sO,EAAa3f,YAAYt6H,MAAM1yF,GAE3B2sO,EAAW,IAAc3sO,EACtBwsO,yBAAyBG,KASlCjvO,OAAOD,QAAQg1F,UAAY,SAAU7vF,GACnC,MAAoB,gBAATA,GAA4BA,EAChCoqN,YAAYv6H,UAAU7vF,IAa/BlF,OAAOD,QAAQ6uO,YAAcA,YAkB7B5uO,OAAOD,QAAQ+uO,yBAA2BA;;ACT1C,QAASI,qBAAqBr/B,EAAWtM,EAAU4rC,GACjD,GAAI7F,GAEA8F,EADA1vC,EAAUmQ,EAAU7S,GAAG0C,QAEvB2vC,EAAwBF,EAAYtoN,OAAS,CAEjD,SAAK08K,OAEL6rC,EAAwB1vC,GAAWA,EAAQ8U,QAAQ,uBAGnD80B,EAAW8F,EAAsBzkG,cAC5B2+F,EAAS1oO,UAELy/M,uBAAuBipB,EAAU,KAAM/lC,EAAU4rC,EAAYttC,KAAMwtC,KAuB9E,QAAShvB,wBAAwB11E,EAAa2kG,EAAeC,EAAgBC,EAAYH,GACvF,GAAI17F,GACAvtI,EACAqpO,EAA8B,EAC9BC,EAAwBL,GAAyB,CAErD,KAAKjpO,EAAI,EAAGA,EAAIukI,EAAY/pI,OAAQwF,IAGlC,GAFAutI,EAAahJ,EAAYvkI,KAErBmpO,IAA6D,IAA3C57F,EAAWxpI,GAAGo0B,QAAQgxM,MACvCA,GAAkB57F,EAAWxpI,KAAOmlO,MAGrCE,IAAc77F,EAAWkuD,MAAQ2tC,IAAe77F,EAAWkuD,MAA/D,CAUA,GALI2tC,IAAe77F,EAAWkuD,OAC5B6tC,EAAwBC,UAAYN,GAA0BG,IAAepwB,mBAAsB,EAAI,IAIrGqwB,IAAgCC,EAClC,MAAO/7F,KAEP87F,GA/GN,GAAIrwB,oBAAqBrsD,QAAQ,gBAAgBqsD,mBAC7CwwB,aAAe,IAAK,IAAK,IAAK,KAC9BD,UAAY,CAYhB3vO,QAAOD,QAAQshM,+BAAiC,SAAUwO,EAAWtM,EAAU4rC,GAC7E,GAAInyC,GAAK6S,EAAU7S,GACf6yC,EAAYX,oBAAoBr/B,EAAWtM,EAAU4rC,EAUzD,IALIt/B,EAAU3M,oBAAsB2M,EAAUzM,wBAC5CyM,EAAUzP,oBAIRyvC,IAAchgC,EAAU3M,kBAAqB,MAAO2sC,EAExDhgC,GAAU3M,kBAAoB2sC,EAG1BA,GACFhgC,EAAUvM,wBACVuM,EAAUzP,oBACVpD,EAAGxqC,KAAK,uBAAwB7vJ,KAAMktM,EAAUltM,KAAMktM,UAAWA,MAEjEA,EAAUxP,uBACVrD,EAAGxqC,KAAK,0BAA2B7vJ,KAAMktM,EAAUltM,KAAMktM,UAAWA,MA4BxE7vM,OAAOD,QAAQmvO,oBAAsBA,oBAmDrClvO,OAAOD,QAAQsgN,uBAAyBA,uBASxCrgN,OAAOD,QAAQwhM,kBAAoB,SAAUsO,EAAWigC,EAAaj1C,GACnE,GAAIsH,GACA4tC,EACAnwB,EACA30J,EACA7kD,EACAmM,CAGJ,KADAw9N,EAAc3tO,OAAO6nD,KAAK6lL,GACrB1pO,EAAI,EAAGA,EAAI2pO,EAAYnvO,OAAQwF,IAAK,CAIvC,IAHA+7L,EAAO2tC,EAAYC,EAAY3pO,IAE/Bw5M,GAAU,EACLrtM,EAAI,EAAGA,EAAI4vL,EAAKvhM,OAAQ2R,IACvBsoL,EAAI5vI,OAAO20J,QAAQzd,EAAK5vL,MAAOqtM,GAAU,EAG/C,IAAKA,EAAL,CAIA,IADA30J,KACK14C,EAAI,EAAGA,EAAI4vL,EAAKvhM,OAAQ2R,IAC3B04C,EAAO2kL,YAAYr9N,IAAMsoL,EAAI5vI,OAAOiuB,KAAKipH,EAAK5vL,GAEhDs9L,GAAU7S,GAAGxqC,KAAKu9E,EAAY3pO,GAAK,QAAS6kD,MAYhDjrD,OAAOD,QAAQyhM,cAAgB,SAAUr3L,EAAIi3L,EAASyO,EAAWhO,GAC/D,GAAIlgM,GAAUkgM,EAAOgO,EAAUluM,QAAQkgM,GAAQgO,EAAUluM,QACrDkiM,EAAaliM,EAAQ0gM,QAAQl4L,EACjC0lM,GAAU7S,GAAGxqC,KAAKqxC,EAAazC,GAC3ByO,EAAUjM,aACZiM,EAAUjM,YAAYC,EAAYzC;;ACtKtC/7J,OAAO2qM,QAAU,WAYb,QAASC,GAAKzwM,EAAGtb,GACb,MAAO,YACHA,EAAE8oB,MAAO5sC,KAAMO,WACf6+B,EAAEwN,MAAO5sC,KAAMO,YA+CvB,QAASq4H,KACLoqG,EAAK,YAAan7N,IAAKioO,EAAwBC,GAC/C/M,EAAK,gBAAiBn7N,IAAKkoO,GAC3B/M,EAAK,cAAen7N,IAAKioO,GACzB9M,EAAK,eAAgBn7N,IAAKmoO,GAC1BhN,EAAK,cAAen7N,IAAKooO,GACzBjN,EAAK,WAAYn7N,IAAKqoO,GACtBlN,EAAK,cAAen7N,IAAKsoO,GACzBnN,EAAK,YAAan7N,IAAKuoO,GAG3B,QAASjN,KACL2M,EAAwB,EACxBC,EAA0B,EAC1BE,EAAwB,EACxBC,EAAc,EACdC,EAAiB,EACjBC,EAAe,EACfJ,EAAoB,EAGxB,QAAS5M,MAET,QAASC,GAAUz9N,GACfo9N,EAAMp9N,EApFV,GAAIo9N,GAAM,KAEN8M,EAAwB,EACxBC,EAA0B,EAC1BE,EAAwB,EACxBC,EAAc,EACdC,EAAiB,EACjBC,EAAe,EACfJ,EAAoB,CA+ExB,OAtEAK,uBAAsBlvK,UAAUlyC,WAAa4gN,EAAIQ,sBAAsBlvK,UAAUlyC,WAAY,WACzF6gN,IACKvvO,UAAW,IAAOP,KAAK0uB,OAAS0hN,GAAgB7vO,UAAW,GAC3D4vO,GAAkB5vO,UAAW,KAGtC8vO,sBAAsBlvK,UAAUtvD,aAAeg+N,EAAIQ,sBAAsBlvK,UAAUtvD,aAAc,WAC7Fk+N,IACAG,GAAe3vO,UAAW,GAAM,EAChC4vO,GAAkB5vO,UAAW,KAGjC8vO,sBAAsBlvK,UAAUhxD,WAAa0/N,EAAIQ,sBAAsBlvK,UAAUhxD,WAAY,WACzF8/N,MAGJI,sBAAsBlvK,UAAUh0D,YAAc0iO,EAAIQ,sBAAsBlvK,UAAUh0D,YAAa,WAC3F6iO,OAsDApzN,OAAQg8G,EACRjyG,MAAOw8M,EACPp4M,IAAKq4M,EACL1jG,OAAQ2jG,EACR1qK,QAtDA23K,UACIC,KAAM,IACN/3B,QAAS,gBAEbg4B,cACIh4B,QAAS,uBAEbi4B,YACIj4B,QAAS,sBA+Cbz7L,SA1CAy7L,QAAS,QACT7/I,QAAU,WAAY,eAAgB,aAAc,aAAc,cAAe,UAAW,aAAc,cA0C1G2qK,YAtCAvxK,KAAM,WACN6hD,OAAS,eAAgB,kBA0CjC3uE,OAAOgzK,WAAa,SAAW/xM,GAuC3B,QAAS0yH,KAELoqG,EAAK,mCAAoCn7N,IAAK3B,EAASqF,KAAKo3C,OAAOp3B,YACnEy3M,EAAK,0BAA2Bn7N,IAAK3B,EAASqF,KAAK0wB,SAASz7B,QAC5DwiO,EAAK,iCAAkCn7N,IAAK3B,EAASqF,KAAKo3C,OAAOz2C,UACjE82N,EAAK,8BAA+Bn7N,IAAK3B,EAASqF,KAAKkE,OAAOgf,OAC9Du0M,EAAK,8BAA+Bn7N,IAAK3B,EAASqF,KAAKkE,OAAOnD,OAC9D02N,EAAK,+BAAgCn7N,IAAK3B,EAASqF,KAAKkE,OAAOkf,QAC/Dq0M,EAAK,iCAAkCn7N,IAAK3B,EAASqF,KAAKkE,OAAOpD,UAIrE,QAAS82N,MAET,QAASC,MAET,QAASC,GAAUz9N,GACfo9N,EAAMp9N,EAtDV,GAAIo9N,GAAM,IAyDV,QACIpmN,OAAQg8G,EACRjyG,MAAOw8M,EACPp4M,IAAKq4M,EACL1jG,OAAQ2jG,EACR1qK,QA3DA+3K,mCACIl4B,QAAS,cAEbm4B,iCACIn4B,QAAS,YAEbo4B,0BACIp4B,QAAS,YAEbq4B,8BACIr4B,QAAS,SAEbs4B,8BACIt4B,QAAS,QACT+3B,KAAM,KAEVQ,+BACIv4B,QAAS,UAEbw4B,iCACIx4B,QAAS,aAwCbz7L,SAnCAy7L,QAAS,oBACT7/I,QAAU,kCAAmC,yBAA0B,mCAEvE6/I,QAAS,oBACT7/I,QAAU,6BAA8B,6BAA8B,8BAA+B,mCAgCrG2qK,eASRr+L,OAAOgsM,aAAe,WA0ClB,QAASC,GAAQ1qO,GAEb,GACIR,GAAIyiB,KAAKC,MAAOD,KAAKoS,IAAKr0B,GAAM2qO,EACpC,OAAO1oN,MAAKyoD,MAFI,IAEG1qE,EAAgBiiB,KAAKwiC,IAAK,KAAMjlD,IAFnC,IAMpB,QAAS4yH,KACLw4G,EAAkBF,EAAOnzG,YAAYp7E,OAAO0uL,gBAC5CC,EAAmBJ,EAAOnzG,YAAYp7E,OAAO4uL,iBAE7CvO,EAAK,UAAWn7N,IAAKupO,GACrBpO,EAAK,SAAUn7N,IAAKypO,GAGxB,QAASnO,KACLiO,EAAkB,EAGtB,QAAShO,MAET,QAASC,GAAUz9N,GACfo9N,EAAMp9N,EA/DV,GAAIo9N,GAAM,KAENoO,EAAkB,EAClBE,EAAmB,CAElBrsM,QAAO84F,cAAgBA,YAAYp7E,SACpCo7E,YAAYp7E,QACR0uL,eAAgB,EAChBE,gBAAiB,IAImB,IAAvCxzG,YAAYp7E,OAAO4uL,iBACpB9wO,QAAQqa,KAAM,4EAGlB,IAAI02N,IACA7uL,QACI61J,QAAS,cACTi5B,SAAS,EACTC,MAAO,IACPnB,KAAM,IAEV7uK,OACI82I,QAAS,iBAIbm5B,IACAn5B,QAAS,UACT7/I,QAAU,SAAU,WAGpBi5K,IACA7/K,KAAM,QACN6hD,OAAS,YAGTu9H,EAAU1oN,KAAKoS,IAAK,KA4BxB,QACIje,OAAQg8G,EACRjyG,MAAOw8M,EACPp4M,IAAKq4M,EACL1jG,OAAQ2jG,EACR1qK,OAAQ64K,EACRz0N,OAAQ40N,EACRrO,UAAWsO,IAKG,gBAAXhyO,UACTA,OAAOD,SACLiwO,QAAS3qM,OAAO2qM,QAChB33B,WAAYhzK,OAAOgzK,WACnBg5B,aAAchsM,OAAOgsM;;ACnQzB,cAEA,WAES,eAAiBhsM,SAAU,IAC5BA,OAAO84F,eAGX,IAAIA,GAAc94F,OAAO84F,WAEzB,IAAK,OAASA,IAAe,EAAQ,CAEjC,GAAI8zG,GAAY7zG,KAAK1F,KAEhByF,GAAYuvC,QAAUvvC,EAAYuvC,OAAOD,kBAC1CwkE,EAAY9zG,EAAYuvC,OAAOD,iBAGnCtvC,EAAYzF,IAAM,WACd,MAAO0F,MAAK1F,MAAQu5G,GAKvB9zG,EAAYm+F,OACbn+F,EAAYm+F,KAAO,cAGlBn+F,EAAY0oC,UACb1oC,EAAY0oC,QAAU,iBAK9BxhI,OAAO6sM,OAAS,SAAkBlvK,GAE9B,QAASmvK,GAAcxsO,EAAO2gD,GAE1B,IAAM,GADF2D,GAAO7nD,OAAO6nD,KAAMtkD,GACd4M,EAAI,EAAGrB,EAAI+4C,EAAKrpD,OAAQ2R,EAAIrB,EAAGqB,IACrC+zC,EAAU2D,EAAM13C,IAIxB,QAAS6/N,GAAYj8K,GAEjB,GAAIglC,GAAUnnF,SAAS+7I,cAAe,OACtC50D,GAAQy0D,KAAOz5F,EACfglC,EAAQ60D,IAAM,aACd70D,EAAQl5F,KAAO,WACf+R,SAASwyH,qBAAsB,QAAU,GAAIypB,YAAa90D,GAqB9D,QAASk3I,GAAQC,EAAMtzI,EAAKuzI,GAkDxB,QAASC,GAAQ5rO,EAAG6rO,GAChBC,GAA+B,IAAjB9rO,EAAI8rO,GAClBC,GAAQ,IACHD,EAAWC,IAAOA,EAAOD,GAC9BE,EAAK9zM,UAAWojB,EAAS,EAAG,EAAGA,EAAQ/9C,MAAQ,EAAG+9C,EAAQ99C,OAAQ,EAAG,EAAG89C,EAAQ/9C,MAAQ,EAAG+9C,EAAQ99C,QAC9FquO,EACDG,EAAK9zM,UAAW+zM,EAAc3wL,EAAQ/9C,MAAQ,EAAG+9C,EAAQ99C,OAASsuO,EAAWxwL,EAAQ99C,OAASuuO,EAAOG,GAErGF,EAAK9zM,UAAWi0M,EAAY7wL,EAAQ/9C,MAAQ,EAAG+9C,EAAQ99C,OAASsuO,EAAWxwL,EAAQ99C,OAASuuO,EAAOG,GAxD3G,GAAIE,GAAOT,MACPrwL,EAAUluC,SAAS+7I,cAAe,UAClC6iF,EAAO1wL,EAAQ/tC,WAAY,MAC3Bw+N,EAAO,EACPD,EAAW,EAEXxuN,EAAI8uN,EAAK/jO,MAAQ+jO,EAAK/jO,MAAQ,UAE9B8jO,EAAa/+N,SAAS+7I,cAAe,UACrCkjF,EAAUF,EAAW5+N,WAAY,KACrC4+N,GAAW5uO,MAAQ,EACnB4uO,EAAW3uO,OAAS,EAAI0uO,EACxBG,EAAQ7+N,UAAY,UACpB6+N,EAAQ5+N,SAAU,EAAG,EAAG,EAAG,EAAIy+N,GAC/BG,EAAQ7+N,UAAY8P,EACpB+uN,EAAQ5+N,SAAU,EAAGy+N,EAAW,EAAGA,GACnCG,EAAQ7+N,UAAY,UACpB6+N,EAAQC,YAAc,GACtBD,EAAQ5+N,SAAU,EAAGy+N,EAAW,EAAG,GACnCG,EAAQC,YAAc,CAEtB,IAAIL,GAAe7+N,SAAS+7I,cAAe,UACvCojF,EAAYN,EAAa1+N,WAAY,KAwCzC,OAvCA0+N,GAAa1uO,MAAQ,EACrB0uO,EAAazuO,OAAS,EAAI0uO,EAC1BK,EAAU/+N,UAAY,UACtB++N,EAAU9+N,SAAU,EAAG,EAAG,EAAG,EAAIy+N,GACjCK,EAAU/+N,UAAY,UACtB++N,EAAU9+N,SAAU,EAAGy+N,EAAW,EAAGA,GACrCK,EAAUD,YAAc,GACxBC,EAAU/+N,UAAY,UACtB++N,EAAU9+N,SAAU,EAAGy+N,EAAW,EAAG,GACrCK,EAAUD,YAAc,EAExB,WAEIhxL,EAAQ/9C,MAAQivO,EAChBlxL,EAAQ99C,OAAS0uO,EACjB5wL,EAAQyB,MAAMx/C,MAAQ+9C,EAAQ/9C,MAAQ,KACtC+9C,EAAQyB,MAAMv/C,OAAS89C,EAAQ99C,OAAS,KACxC89C,EAAQ0gH,UAAY,YACpB0vE,EAAKriF,YAAa/tG,GAElB0wL,EAAKx+N,UAAY,UACjBw+N,EAAKv+N,SAAU,EAAG,EAAG6tC,EAAQ/9C,MAAO+9C,EAAQ99C,YAmB5CivO,KAAMb,GAKd,QAASc,GAAahB,EAAMiB,GAmBxB,QAASf,GAAQ5rO,GACbgsO,EAAK9zM,UAAWojB,EAAS,EAAG,EAAGA,EAAQ/9C,MAAQ,EAAG+9C,EAAQ99C,OAAQ,EAAG,EAAG89C,EAAQ/9C,MAAQ,EAAG+9C,EAAQ99C,OACnG,IAAIovO,GAAK,CACTrB,GAAavrO,EAAG,SAAW2L,GACvB,GAAI0nE,GAAIrzE,EAAG2L,GAAM2vC,EAAQ99C,MACzBwuO,GAAKx+N,UAAYq/N,EAAUlhO,GAC3BqgO,EAAKv+N,SAAU6tC,EAAQ/9C,MAAQ,EAAGqvO,EAAI,EAAGv5J,GACzCu5J,GAAMv5J,IAxBd,GAAI/3B,GAAUluC,SAAS+7I,cAAe,UAClC6iF,EAAO1wL,EAAQ/tC,WAAY,KA6B/B,OA3BA,YAEI+tC,EAAQ/9C,MAAQivO,EAChBlxL,EAAQ99C,OAAS0uO,EAAYS,EAC7BrxL,EAAQyB,MAAMx/C,MAAQ+9C,EAAQ/9C,MAAQ,KACtC+9C,EAAQyB,MAAMv/C,OAAS89C,EAAQ99C,OAAS,KACxC89C,EAAQ0gH,UAAY,YACpB0vE,EAAKriF,YAAa/tG,GAElB0wL,EAAKx+N,UAAY,UACjBw+N,EAAKv+N,SAAU,EAAG,EAAG6tC,EAAQ/9C,MAAO+9C,EAAQ99C,YAkB5CivO,KAAMb,GAKd,QAASkB,GAAcvpO,EAAImT,GA+BvB,QAASq2N,GAAW/sO,GAChB,GAAKosO,GAAQA,EAAKnB,QAAU,CACxB+B,GAAehtO,EACfitO,GACA,IAAIxmL,GAAI8wE,YAAYzF,KACfrrE,GAAIymL,IAAiBd,EAAKlB,OAAS,OACpCiC,EAAgBH,EAAcC,EAC9BD,EAAc,EACdE,EAAczmL,EACdwmL,EAAgB,IAK5B,QAAStQ,KACLyQ,EAAQ71G,YAAYzF,MAChBu7G,EAAUC,eAAgB/1G,YAAYm+F,KAAMt9H,EAAM,UACtDm1I,GAAW,EAGf,QAAS3Q,KACLz1D,EAAS5vC,YAAYzF,MAAQs7G,EACzBC,EAAUC,gBACV/1G,YAAYm+F,KAAMt9H,EAAM,QACpBm1I,GACAh2G,YAAY0oC,QAAS7nE,EAAKA,EAAM,SAAUA,EAAM,SAGxD20I,EAAU5lE,GAGd,QAASqmE,KACL5Q,IACAD,IAGJ,QAASiP,KACL,GAAI5rO,GAAMosO,GAAQA,EAAKnB,QAAYkC,EAAgBhmE,CACnDsmE,GAAe/nE,UAAYzjJ,KAAKyoD,MAAW,IAAJ1qE,GAAY,GACnD,IAAI2N,GAAMy+N,IAAYA,EAAKn6B,OAAS9qC,EAASilE,EAAKn6B,OAAam6B,EAAKrC,MAAQ5iE,EAASilE,EAAKrC,KAC1F2D,GAAOjB,KAAMtlE,EAAQx5J,GACrB+9N,EAAK1vE,UAAYruJ,EAAI,wBAA0B,kBAInD,QAASggO,KACL,GAAIlnL,GAAI8wE,YAAYzF,MAChB/uE,EAAI0D,EAAI2mL,CACZQ,KACK7qL,EAAI,MAEDokH,EADCilE,IAA6B,IAArBA,EAAK5oG,YACLoqG,EAES,IAATA,EAAgB7qL,EAE7B6qL,EAAS,EACTR,EAAQ3mL,EACRsmL,EAAU5lE,IAIlB,QAAS0mE,GAAO7tO,GACZmnK,EAASnnK,EACT+sO,EAAU5lE,GA5Fd,GACIimE,GADAh1I,EAAM70F,EAEN4jK,EAAS,EACTymE,EAAS,EACTT,EAAgB,EAChBH,EAAc,EACdE,EAAc31G,YAAYzF,MAC1Bm7G,EAAgB,EAChBvB,EAAOt+N,SAAS+7I,cAAe,OAC/B2kF,EAAU1gO,SAAS+7I,cAAe,QAClC4kF,EAAa3gO,SAAS+7I,cAAe,OACrCskF,EAAiBrgO,SAASu8I,eAAgB,IAC1CyiF,EAAOiB,EAAYA,EAAUl7K,OAAQimC,EAAIqZ,eAAkB,KAC3Di8H,EAAS,GAAIjC,GAAOC,EAAMtzI,EAAKg0I,GAC/BmB,GAAW,CAiFf,OA/EAO,GAAQ9xE,UAAY,gBACpB8xE,EAAQxtG,YAAgB8rG,GAAQA,EAAKp6B,QAAYo6B,EAAKp6B,QAAU55G,EAEhE21I,EAAW/xE,UAAY,mBACvB+xE,EAAW1kF,YAAaokF,GAExB/B,EAAKriF,YAAaykF,GAClBpC,EAAKriF,YAAa0kF,GACbr3N,EAAQA,EAAMu5K,IAAI5mC,YAAaqiF,GAC/BsC,EAAK3kF,YAAaqiF,GAEvB0B,EAAQ71G,YAAYzF,OAqEhBzwH,IAAKwsO,EACL1tN,MAAOw8M,EACPj8B,KAAM8sC,EACNjpN,IAAKq4M,EACL7vM,MAAO4gN,EACPjyO,MAAO,WACH,MAAOyrK,IAEXslE,KAAMb,GAsBd,QAASqC,GAAQC,GAEb,GAAI3qO,GAAK2qO,EAAMz8H,aAEf,QADY/2G,KAAP6I,IAAmBA,EAAK,WACxB4qO,EAAe5qO,GAAO,MAAO4qO,GAAe5qO,EAEjD,IAAImT,GAAQ,IACP22N,IAAaA,EAAU92N,QACxBg1N,EAAa8B,EAAU92N,OAAQ,SAAW5K,GACtC,GAAIjL,GAAI2sO,EAAU92N,OAAQia,SAAU7kB,EAAG,IACjC+K,KAAmD,IAA1ChW,EAAEyxD,OAAOx6B,QAASp0B,EAAGkuG,iBAChC/6F,EAAQhW,IAKpB,IAAI62B,GAAI,GAAIu1M,GAAavpO,EAAImT,EAE7B,OADAy3N,GAAe5qO,GAAOg0B,EACfA,EA4EX,QAAS66F,KAELm5G,EAAa8B,EAAUx7B,QAAS,SAAWlmM,GACvC0hO,EAAUx7B,QAASlmM,GAAIyK,WAG3Bm1N,EAAa4C,EAAe,SAAWxiO,GACnCwiO,EAAexiO,GAAI8gO,SAGlBY,GAAaA,EAAUvQ,WACxByO,EAAa8B,EAAUvQ,UAAW,SAAWnxN,GACzC,GAAIitB,GAAIy0M,EAAUvQ,UAAWtsM,SAAU7kB,EAAG,KACtC3L,KACAurD,EAAO4iL,EAAev1M,EAAE2yB,KAAKkmD,cAC5BlmD,KACDA,EAAOA,EAAK7vD,QACZ6vO,EAAa8B,EAAUvQ,UAAWnxN,GAAIyhG,MAAO,SAAW52F,GACpD,GAAIg4C,GAAI6+K,EAAUvQ,UAAWnxN,GAAIyhG,MAAO58E,SAAUha,EAAG,KAAOi7F,cACxD+8C,EAAM2/E,EAAe3/K,EACpBggG,IACDxuJ,EAAE+D,KAAMyqJ,EAAI9yJ,QAAU6vD,MAIlC3yB,EAAEw1M,MAAM3B,KAAMzsO,KApX1B,GAAIqtO,GAAYjxK,MACZywK,EAAWQ,EAAUgB,UAAa,UAAW,UAAW,UAAW,UAAW,WAG9EC,GAAejB,EAAUkB,QAAUlB,EAAUkB,QAAU,IAAO,cAEvDlB,EAAUt7B,MAHN,uEAGyBu8B,IACnC1lI,QAAQ,SAAU2vC,GACnBizF,EAAWjzF,KAGT80F,EAAUl7K,SAASk7K,EAAUl7K,UAEnC,IAAIq8K,GAAOR,EAAM9B,EAAY,GAAIM,EAAW,IACxC2B,IAoXJ,OA/GA,YAEI,GAAKd,EAAUx7B,QAAU,CACfw7B,EAAUl7K,SAASk7K,EAAUl7K,WAC7Bk7K,EAAU92N,SAAS82N,EAAU92N,WAC7B82N,EAAUvQ,YAAYuQ,EAAUvQ,aACtC,KAAM,GAAInxN,GAAI,EAAGA,EAAI0hO,EAAUx7B,QAAQ73M,OAAQ2R,IAC3C0hO,EAAUx7B,QAASlmM,GAAIutH,OAAQ+0G,GAC/B1C,EAAa8B,EAAUx7B,QAASlmM,GAAIwmD,OAAQ,SAAW37C,GACnD62N,EAAUl7K,OAAQ37C,GAAM62N,EAAUx7B,QAASlmM,GAAIwmD,OAAQ37C,KAE3D62N,EAAU92N,OAAS82N,EAAU92N,OAAOm2C,OAAQ2gL,EAAUx7B,QAASlmM,GAAI4K,QACnE82N,EAAUvQ,UAAYuQ,EAAUvQ,UAAUpwK,OAAQ2gL,EAAUx7B,QAASlmM,GAAImxN,eAG7EuQ,GAAUx7B,UAGd28B,GAAQphO,SAAS+7I,cAAe,OAChCqlF,EAAMxyE,UAAY,UAClBgyE,EAAO5gO,SAAS+7I,cAAe,OAC/B6kF,EAAKhyE,UAAY,eACjBgyE,EAAKjxL,MAAMv/C,OAAS,OACpBgxO,EAAMnlF,YAAa2kF,GACnB5gO,SAAS0iI,KAAKuZ,YAAamlF,GAErBnB,IAEDA,EAAU92N,QACXg1N,EAAa8B,EAAU92N,OAAQ,SAAW5K,GACtC,GAAIjL,GAAI2sO,EAAU92N,OAAQia,SAAU7kB,EAAG,KACnCskL,EAAM7iL,SAAS+7I,cAAe,MAClC8mC,GAAIj0B,UAAY,WAChBt7J,EAAEuvL,IAAMA,CACR,IAAIF,GAAK3iL,SAAS+7I,cAAe,KACjC4mC,GAAGzvD,YAAc5/H,EAAEsxM,QACnBjiB,EAAG7mK,iBAAkB,QAAS,SAAW65B,GACrCvpD,KAAKuzK,UAAUx6E,OAAQ,UACvBxvC,EAAEvQ,kBACJqP,KAAMouI,IACR+9C,EAAK3kF,YAAa0mC,GAClBi+C,EAAK3kF,YAAa4mC,KAIrBo9C,EAAUvQ,WACXyO,EAAa8B,EAAUvQ,UAAW,SAAWnxN,GACzC,GAAIitB,GAAIy0M,EAAUvQ,UAAWtsM,SAAU7kB,EAAG,KACtCskL,EAAM7iL,SAAS+7I,cAAe,MAClC8mC,GAAIj0B,UAAY,aAChB,IAAIyyE,GAASrhO,SAAS+7I,cAAe,MACrCslF,GAAOzyE,UAAY,WAEnB,IAAI3oF,GAAI,CACRk4J,GAAa8B,EAAUvQ,UAAWnxN,GAAIyhG,MAAO,SAAW52F,GACpD,GAAI+gB,GAAInqB,SAAS+7I,cAAe,IAChC5xH,GAAE+oG,YAAc+sG,EAAUvQ,UAAWnxN,GAAIyhG,MAAO52F,GAChD+gB,EAAEwlB,MAAM10C,MAAQwkO,EAAUx5J,GAC1Bo7J,EAAOplF,YAAa9xH,GACpB87C,MAEJ48G,EAAI5mC,YAAaolF,GACjBx+C,EAAIlzI,MAAMv/C,OAAS61E,EAAI64J,EAAY,KACnCtzM,EAAEq3J,IAAMA,CACR,IAAIm+C,GAAQ,GAAI1B,GAAYz8C,EAAK58G,EACjCz6C,GAAEw1M,MAAQA,EACVJ,EAAK3kF,YAAa4mC,SA6CvB,SAAW1sL,GACd,MAAKA,GAAY0qO,EAAO1qO,IAEpBgxF,QAASi6I,EACTp4N,OAAQg8G,KAME,gBAAXh5H,UACTA,OAAOD,QAAUslC,OAAO6sM;;ACpb1B,GAAIn/D,QAEJA,MAAKrc,OAAS,SAAS3+C,EAAU2+C,GAC/B,MAAO,QAAU3+C,EAAW,WAAa2+C,GAG3Cqc,KAAKwM,SAAW,WACd,GAAIuT,IAAQ,CAEZ,OADA,UAAUv+K,IAAM,2TAA2TiI,KAAKjI,IAAI,0kDAA0kDiI,KAAKjI,EAAEylG,OAAO,EAAE,OAAI84E,GAAQ,IAAOp2B,UAAUC,WAAWD,UAAUiqB,QAAQthJ,OAAOuhJ,OACx+DkM,GAGT/f,KAAKS,MAAQ,WACX,MAAO,sBAAsBh3J,KAAKkgJ,UAAUC,YAG9CoW,KAAKuiE,SAAW,WACd,IACE,MAAOjwM,QAAOu4H,OAASv4H,OAAOxhB,IAC9B,MAAO8lC,GACP,OAAO,IAIXopH,KAAKwiE,qBAAuB,SAASp/K,EAAKrM,EAAKxnD,GAI7C,MADA6zD,KADiBA,EAAI53B,QAAQ,KAAO,EAAI,IAAM,KAC3BurB,EAAM,IAAMxnD,GAKjCywK,KAAKggB,kBAAoB,SAASpwL,GAChCA,EAAOA,EAAK4zB,QAAQ,OAAQ,OAAOA,QAAQ,OAAQ,MACnD,IAAIqrF,GAAQ,GAAI0R,QAAO,SAAW3wH,EAAO,aACrC8wH,EAAU7R,EAAM12G,KAAK8nL,SAAS34E,OAClC,OAAmB,QAAZoZ,EAAmB,GAAKxb,mBAAmBwb,EAAQ,GAAGl9F,QAAQ,MAAO,OAG9Ew8I,KAAKuM,gBAAkB,WACrB,MAA8B,KAAtBj6I,OAAO4L,cAA4C,IAAvB5L,OAAO4L,aAI7CjxC,OAAOD,QAAUgzK;;ACrCjB,QAASkkB,mBACP,GAAI9tI,GAAQn1C,SAAS+7I,cAAc,QAEnC5mG,GAAMr5B,iBAAiB,QAAS,WAC9Bq5B,EAAMonE,SAGRnwH,KAAKu4G,QAAU,WACTxvD,EAAM6a,SAER7a,EAAM8wD,IAAM84D,KAAKrc,OAAO,aAAc,otFACtCvtG,EAAMonE,SAIVnwH,KAAKs0K,QAAU,WACbvrH,EAAMwnE,QACNxnE,EAAM8wD,IAAM,IAIhB,QAASm9E,eACP,GAAIvL,GAAQ,IAEZzrL,MAAKu4G,QAAU,WACRkzE,IACHA,EAAQwL,YAAY,WAClBhyJ,OAAO2tJ,SAASpjC,KAAO,IACvBh4C,WAAWvyE,OAAOurF,KAAM,IACvB,QAIPxwH,KAAKs0K,QAAU,WACTmX,IACFyL,cAAczL,GACdA,EAAQ,OAMd,QAAS0L,eACP,GAAI56B,GAAYD,UAAUC,WAAaD,UAAUiqB,QAAUthJ,OAAOuhJ,KAClE,OAAIjqB,GAAU1xJ,MAAM,YAAc0xJ,EAAU1xJ,MAAM,SACzCmsL,YAEAH,gBAtDX,GAAIlkB,MAAOhgB,QAAQ,YA0DnB/yJ,QAAOD,QAAUw3L;;CrMzEhB,SAAU13L,EAAQC,GACC,gBAAZC,UAA0C,mBAAXC,QAAyBF,EAAQC,SACrD,kBAAXE,SAAyBA,OAAOC,IAAMD,QAAQ,WAAYH,GAChEA,EAASD,EAAOM,MAAQN,EAAOM,YAC/BC,KAAM,SAAWL,GAAW,YAyG7B,SAASM,MAqXT,QAASC,GAASC,EAAGC,GAEpBJ,KAAKG,EAAIA,GAAK,EACdH,KAAKI,EAAIA,GAAK,EA8ef,QAASC,KAERL,KAAKM,UAEJ,EAAG,EAAG,EAAG,EACT,EAAG,EAAG,EAAG,EACT,EAAG,EAAG,EAAG,EACT,EAAG,EAAG,EAAG,GAILC,UAAUC,OAAS,GAEvBC,QAAQC,MAAO,iFAu4BjB,QAASC,GAAYR,EAAGC,EAAGQ,EAAGC,GAE7Bb,KAAKc,GAAKX,GAAK,EACfH,KAAKe,GAAKX,GAAK,EACfJ,KAAKgB,GAAKJ,GAAK,EACfZ,KAAKiB,OAAaC,KAANL,EAAoBA,EAAI,EA2lBrC,QAASM,GAAShB,EAAGC,EAAGQ,GAEvBZ,KAAKG,EAAIA,GAAK,EACdH,KAAKI,EAAIA,GAAK,EACdJ,KAAKY,EAAIA,GAAK,EA8sBf,QAASQ,KAERpB,KAAKM,UAEJ,EAAG,EAAG,EACN,EAAG,EAAG,EACN,EAAG,EAAG,GAIFC,UAAUC,OAAS,GAEvBC,QAAQC,MAAO,iFAqXjB,QAASW,GAASC,EAAOC,EAASC,EAAOC,EAAOC,EAAWC,EAAWC,EAAQC,EAAMC,EAAYC,GAE/FC,OAAOC,eAAgBjC,KAAM,MAAQkC,MAAOC,OAE5CnC,KAAKoC,KAAOC,GAAMC,eAElBtC,KAAKuC,KAAO,GAEZvC,KAAKsB,UAAkBJ,KAAVI,EAAsBA,EAAQD,EAAQmB,cACnDxC,KAAKyC,WAELzC,KAAKuB,YAAsBL,KAAZK,EAAwBA,EAAUF,EAAQqB,gBAEzD1C,KAAKwB,UAAkBN,KAAVM,EAAsBA,EAAQmB,GAC3C3C,KAAKyB,UAAkBP,KAAVO,EAAsBA,EAAQkB,GAE3C3C,KAAK0B,cAA0BR,KAAdQ,EAA0BA,EAAYkB,GACvD5C,KAAK2B,cAA0BT,KAAdS,EAA0BA,EAAYkB,GAEvD7C,KAAK8B,eAA4BZ,KAAfY,EAA2BA,EAAa,EAE1D9B,KAAK4B,WAAoBV,KAAXU,EAAuBA,EAASkB,GAC9C9C,KAAK6B,SAAgBX,KAATW,EAAqBA,EAAOkB,GAExC/C,KAAKgD,OAAS,GAAI9C,GAAS,EAAG,GAC9BF,KAAKiD,OAAS,GAAI/C,GAAS,EAAG,GAC9BF,KAAKkD,OAAS,GAAIhD,GAAS,EAAG,GAC9BF,KAAKmD,SAAW,EAEhBnD,KAAKoD,kBAAmB,EACxBpD,KAAKqD,OAAS,GAAIjC,GAElBpB,KAAKsD,iBAAkB,EACvBtD,KAAKuD,kBAAmB,EACxBvD,KAAKwD,OAAQ,EACbxD,KAAKyD,gBAAkB,EAMvBzD,KAAK+B,aAAwBb,KAAba,EAAyBA,EAAW2B,GAEpD1D,KAAK2D,QAAU,EACf3D,KAAK4D,SAAW,KA8QjB,QAASC,GAAS1D,EAAGC,EAAGQ,EAAGC,GAE1Bb,KAAKG,EAAIA,GAAK,EACdH,KAAKI,EAAIA,GAAK,EACdJ,KAAKY,EAAIA,GAAK,EACdZ,KAAKa,MAAYK,KAANL,EAAoBA,EAAI,EAinBpC,QAASiD,GAAmBC,EAAOC,EAAQC,GAE1CjE,KAAKoC,KAAOC,GAAMC,eAElBtC,KAAK+D,MAAQA,EACb/D,KAAKgE,OAASA,EAEdhE,KAAKkE,QAAU,GAAIL,GAAS,EAAG,EAAGE,EAAOC,GACzChE,KAAKmE,aAAc,EAEnBnE,KAAKoE,SAAW,GAAIP,GAAS,EAAG,EAAGE,EAAOC,GAE1CC,EAAUA,UAEiB/C,KAAtB+C,EAAQtC,YAA0BsC,EAAQtC,UAAYiB,IAE3D5C,KAAKqE,QAAU,GAAIhD,OAASH,OAAWA,GAAW+C,EAAQzC,MAAOyC,EAAQxC,MAAOwC,EAAQvC,UAAWuC,EAAQtC,UAAWsC,EAAQrC,OAAQqC,EAAQpC,KAAMoC,EAAQnC,WAAYmC,EAAQlC,UAEhL/B,KAAKsE,gBAAsCpD,KAAxB+C,EAAQK,aAA4BL,EAAQK,YAC/DtE,KAAKuE,kBAA0CrD,KAA1B+C,EAAQM,eAA8BN,EAAQM,cACnEvE,KAAKwE,iBAAwCtD,KAAzB+C,EAAQO,aAA6BP,EAAQO,aAAe,KA2DjF,QAASC,GAAuBV,EAAOC,EAAQC,GAE9CH,EAAkBY,KAAM1E,KAAM+D,EAAOC,EAAQC,GAE7CjE,KAAK2E,eAAiB,EACtB3E,KAAK4E,kBAAoB,EAa1B,QAASC,GAAaC,EAAMf,EAAOC,EAAQpC,EAAQC,EAAMN,EAASC,EAAOC,EAAOC,EAAWC,EAAWG,EAAYC,GAEjHV,EAAQqD,KAAM1E,KAAM,KAAMuB,EAASC,EAAOC,EAAOC,EAAWC,EAAWC,EAAQC,EAAMC,EAAYC,GAEjG/B,KAAKsB,OAAUwD,KAAMA,EAAMf,MAAOA,EAAOC,OAAQA,GAEjDhE,KAAK0B,cAA0BR,KAAdQ,EAA0BA,EAAYqD,GACvD/E,KAAK2B,cAA0BT,KAAdS,EAA0BA,EAAYoD,GAEvD/E,KAAKsD,iBAAkB,EACvBtD,KAAKwD,OAAQ,EACbxD,KAAKyD,gBAAkB,EAaxB,QAASuB,GAAaC,EAAQ1D,EAASC,EAAOC,EAAOC,EAAWC,EAAWC,EAAQC,EAAMC,EAAYC,GAEpGkD,MAAoB/D,KAAX+D,EAAuBA,KAChC1D,MAAsBL,KAAZK,EAAwBA,EAAU2D,GAE5C7D,EAAQqD,KAAM1E,KAAMiF,EAAQ1D,EAASC,EAAOC,EAAOC,EAAWC,EAAWC,EAAQC,EAAMC,EAAYC,GAEnG/B,KAAKwD,OAAQ,EA+Ed,QAAS2B,KAERnF,KAAKoF,OACLpF,KAAKqF,OAkBN,QAASC,GAASC,EAAOC,EAASC,GAEjC,GAAIC,GAAYH,EAAO,EAEvB,IAAKG,GAAa,GAAKA,EAAY,EAAI,MAAOH,EAI9C,IAAII,GAAIH,EAAUC,EACjBG,EAAIC,GAAeF,EASpB,QAPWzE,KAAN0E,IAEJA,EAAI,GAAIE,cAAcH,GACtBE,GAAeF,GAAMC,GAIL,IAAZJ,EAAgB,CAEpBE,EAAUK,QAASH,EAAG,EAEtB,KAAM,GAAII,GAAI,EAAGhD,EAAS,EAAGgD,IAAMR,IAAYQ,EAE9ChD,GAAUyC,EACVF,EAAOS,GAAID,QAASH,EAAG5C,GAMzB,MAAO4C,GAMR,QAASK,GAAeC,EAAUP,GAEjC,GAAIC,GAAIO,GAAeR,OAEZzE,KAAN0E,IAEJA,EAAI,GAAIQ,YAAYT,GACpBQ,GAAeR,GAAMC,EAItB,KAAM,GAAII,GAAI,EAAGA,IAAML,IAAMK,EAC5BJ,EAAGI,GAAME,EAASG,kBAEnB,OAAOT,GAWR,QAASU,GAAYC,EAAIC,GAExBD,EAAGE,UAAWzG,KAAK0G,KAAMF,GAI1B,QAASG,GAAYJ,EAAIC,GAExBD,EAAGK,UAAW5G,KAAK0G,KAAMF,GAM1B,QAASK,GAAaN,EAAIC,OAEZtF,KAARsF,EAAErG,EAENoG,EAAGO,WAAY9G,KAAK0G,KAAMF,GAI1BD,EAAGQ,UAAW/G,KAAK0G,KAAMF,EAAErG,EAAGqG,EAAEpG,GAMlC,QAAS4G,GAAaT,EAAIC,OAEZtF,KAARsF,EAAErG,EAENoG,EAAGU,UAAWjH,KAAK0G,KAAMF,EAAErG,EAAGqG,EAAEpG,EAAGoG,EAAE5F,OAElBM,KAARsF,EAAEZ,EAEbW,EAAGU,UAAWjH,KAAK0G,KAAMF,EAAEZ,EAAGY,EAAEU,EAAGV,EAAEW,GAIrCZ,EAAGa,WAAYpH,KAAK0G,KAAMF,GAM5B,QAASa,GAAad,EAAIC,OAEZtF,KAARsF,EAAErG,EAENoG,EAAGe,WAAYtH,KAAK0G,KAAMF,GAIzBD,EAAGgB,UAAWvH,KAAK0G,KAAMF,EAAErG,EAAGqG,EAAEpG,EAAGoG,EAAE5F,EAAG4F,EAAE3F,GAQ7C,QAAS2G,GAAajB,EAAIC,GAEzBD,EAAGkB,iBAAkBzH,KAAK0G,MAAM,EAAOF,EAAElG,UAAYkG,GAItD,QAASkB,GAAanB,EAAIC,OAELtF,KAAfsF,EAAElG,SAENiG,EAAGoB,iBAAkB3H,KAAK0G,MAAM,EAAOF,IAIvCoB,GAAUC,IAAKrB,EAAElG,UACjBiG,EAAGoB,iBAAkB3H,KAAK0G,MAAM,EAAOkB,KAMzC,QAASE,GAAavB,EAAIC,OAELtF,KAAfsF,EAAElG,SAENiG,EAAGwB,iBAAkB/H,KAAK0G,MAAM,EAAOF,IAIvCwB,GAAUH,IAAKrB,EAAElG,UACjBiG,EAAGwB,iBAAkB/H,KAAK0G,MAAM,EAAOsB,KAQzC,QAASC,GAAY1B,EAAIC,EAAGN,GAE3B,GAAIgC,GAAOhC,EAASG,kBACpBE,GAAGK,UAAW5G,KAAK0G,KAAMwB,GACzBhC,EAASiC,aAAc3B,GAAK4B,GAAcF,GAI3C,QAASG,GAAY9B,EAAIC,EAAGN,GAE3B,GAAIgC,GAAOhC,EAASG,kBACpBE,GAAGK,UAAW5G,KAAK0G,KAAMwB,GACzBhC,EAASoC,eAAgB9B,GAAK+B,GAAkBL,GAMjD,QAASM,GAAajC,EAAIC,GAEzBD,EAAGkC,WAAYzI,KAAK0G,KAAMF,GAI3B,QAASkC,GAAanC,EAAIC,GAEzBD,EAAGoC,WAAY3I,KAAK0G,KAAMF,GAI3B,QAASoC,GAAarC,EAAIC,GAEzBD,EAAGsC,WAAY7I,KAAK0G,KAAMF,GAM3B,QAASsC,GAAmBjH,GAE3B,OAASA,GAER,IAAK,MAAQ,MAAOyE,EACpB,KAAK,OAAQ,MAAOO,EACpB,KAAK,OAAQ,MAAOG,EACpB,KAAK,OAAQ,MAAOK,EAEpB,KAAK,OAAQ,MAAOG,EACpB,KAAK,OAAQ,MAAOE,EACpB,KAAK,OAAQ,MAAOI,EAEpB,KAAK,OAAQ,IAAK,OAAQ,MAAOG,EACjC,KAAK,OAAQ,MAAOI,EAEpB,KAAK,MAAQ,IAAK,OAAQ,MAAO1B,EACjC,KAAK,OAAQ,IAAK,OAAQ,MAAO6B,EACjC,KAAK,OAAQ,IAAK,OAAQ,MAAOE,EACjC,KAAK,OAAQ,IAAK,OAAQ,MAAOE,IAQnC,QAASG,GAAaxC,EAAIC,GAEzBD,EAAGyC,WAAYhJ,KAAK0G,KAAMF,GAG3B,QAASyC,GAAa1C,EAAIC,GAEzBD,EAAG2C,WAAYlJ,KAAK0G,KAAMF,GAM3B,QAAS2C,GAAa5C,EAAIC,GAEzBD,EAAGO,WAAY9G,KAAK0G,KAAMpB,EAASkB,EAAGxG,KAAKoJ,KAAM,IAIlD,QAASC,GAAa9C,EAAIC,GAEzBD,EAAGa,WAAYpH,KAAK0G,KAAMpB,EAASkB,EAAGxG,KAAKoJ,KAAM,IAIlD,QAASE,GAAa/C,EAAIC,GAEzBD,EAAGe,WAAYtH,KAAK0G,KAAMpB,EAASkB,EAAGxG,KAAKoJ,KAAM,IAMlD,QAASG,GAAahD,EAAIC,GAEzBD,EAAGkB,iBAAkBzH,KAAK0G,MAAM,EAAOpB,EAASkB,EAAGxG,KAAKoJ,KAAM,IAI/D,QAASI,GAAajD,EAAIC,GAEzBD,EAAGoB,iBAAkB3H,KAAK0G,MAAM,EAAOpB,EAASkB,EAAGxG,KAAKoJ,KAAM,IAI/D,QAASK,GAAalD,EAAIC,GAEzBD,EAAGwB,iBAAkB/H,KAAK0G,MAAM,EAAOpB,EAASkB,EAAGxG,KAAKoJ,KAAM,KAM/D,QAASM,GAAanD,EAAIC,EAAGN,GAE5B,GAAIP,GAAIa,EAAEhG,OACTmJ,EAAQ1D,EAAeC,EAAUP,EAElCY,GAAG2C,WAAYlJ,KAAK0G,KAAMiD,EAE1B,KAAM,GAAI3D,GAAI,EAAGA,IAAML,IAAMK,EAE5BE,EAASiC,aAAc3B,EAAGR,IAAOoC,GAAcuB,EAAO3D,IAMxD,QAAS4D,GAAarD,EAAIC,EAAGN,GAE5B,GAAIP,GAAIa,EAAEhG,OACTmJ,EAAQ1D,EAAeC,EAAUP,EAElCY,GAAG2C,WAAYlJ,KAAK0G,KAAMiD,EAE1B,KAAM,GAAI3D,GAAI,EAAGA,IAAML,IAAMK,EAE5BE,EAASoC,eAAgB9B,EAAGR,IAAOuC,GAAkBoB,EAAO3D,IAQ9D,QAAS6D,GAAoBhI,GAE5B,OAASA,GAER,IAAK,MAAQ,MAAOkH,EACpB,KAAK,OAAQ,MAAOI,EACpB,KAAK,OAAQ,MAAOE,EACpB,KAAK,OAAQ,MAAOC,EAEpB,KAAK,OAAQ,MAAOC,EACpB,KAAK,OAAQ,MAAOC,EACpB,KAAK,OAAQ,MAAOC,EAEpB,KAAK,OAAQ,MAAOC,EACpB,KAAK,OAAQ,MAAOE,EAEpB,KAAK,MAAQ,IAAK,OAAQ,MAAOX,EACjC,KAAK,OAAQ,IAAK,OAAQ,MAAOT,EACjC,KAAK,OAAQ,IAAK,OAAQ,MAAOE,EACjC,KAAK,OAAQ,IAAK,OAAQ,MAAOE,IAQnC,QAASkB,GAAeC,EAAIC,EAAYtD,GAEvC1G,KAAK+J,GAAKA,EACV/J,KAAK0G,KAAOA,EACZ1G,KAAKiK,SAAWnB,EAAmBkB,EAAWnI,MAM/C,QAASqI,GAAkBH,EAAIC,EAAYtD,GAE1C1G,KAAK+J,GAAKA,EACV/J,KAAK0G,KAAOA,EACZ1G,KAAKoJ,KAAOY,EAAWZ,KACvBpJ,KAAKiK,SAAWJ,EAAoBG,EAAWnI,MAMhD,QAASsI,GAAmBJ,GAE3B/J,KAAK+J,GAAKA,EAEV5E,EAAiBT,KAAM1E,MAmCxB,QAASoK,GAAYC,EAAWC,GAE/BD,EAAUjF,IAAImF,KAAMD,GACpBD,EAAUhF,IAAKiF,EAAcP,IAAOO,EAIrC,QAASE,GAAcR,EAAYtD,EAAM2D,GAExC,GAAII,GAAOT,EAAWzH,KACrBmI,EAAaD,EAAKjK,MAKnB,KAFAmK,GAAWC,UAAY,IAEX,CAEX,GAAIC,GAAQF,GAAWG,KAAML,GAC5BM,EAAWJ,GAAWC,UAEtBb,EAAKc,EAAO,GACZG,EAA2B,MAAfH,EAAO,GACnBI,EAAYJ,EAAO,EAIpB,IAFKG,IAAYjB,GAAU,OAER7I,KAAd+J,GAAyC,MAAdA,GAAqBF,EAAW,IAAML,EAAa,CAIlFN,EAAYC,MAAyBnJ,KAAd+J,EACtB,GAAInB,GAAeC,EAAIC,EAAYtD,GACnC,GAAIwD,GAAkBH,EAAIC,EAAYtD,GAEvC,OAMA,GAAIrB,GAAMgF,EAAUhF,IAAK6F,EAAO7F,EAAK0E,OAEvB7I,KAATgK,IAEJA,EAAO,GAAIf,GAAmBJ,GAC9BK,EAAYC,EAAWa,IAIxBb,EAAYa,GAUf,QAASC,GAAe5E,EAAI6E,EAASlF,GAEpCf,EAAiBT,KAAM1E,MAEvBA,KAAKkG,SAAWA,CAIhB,KAAM,GAFFP,GAAIY,EAAG8E,oBAAqBD,EAAS7E,EAAG+E,iBAElCtF,EAAI,EAAGA,EAAIL,IAAMK,EAAI,CAE9B,GAAIuF,GAAOhF,EAAGiF,iBAAkBJ,EAASpF,GACxCyE,EAAOc,EAAKhJ,IAGbiI,GAAce,EAFNhF,EAAGkF,mBAAoBL,EAASX,GAEdzK,OAuF5B,QAAS0L,GAAO9F,EAAGsB,EAAGC,GAErB,WAAWjG,KAANgG,OAAyBhG,KAANiG,EAGhBnH,KAAK6H,IAAKjC,GAIX5F,KAAK2L,OAAQ/F,EAAGsB,EAAGC,GAoxC3B,QAASyE,GAAMC,EAAKC,GAEnB9L,KAAK6L,QAAgB3K,KAAR2K,EAAsBA,EAAM,GAAI3L,GAAW6L,EAAAA,EAAYA,EAAAA,GACpE/L,KAAK8L,QAAgB5K,KAAR4K,EAAsBA,EAAM,GAAI5L,IAAW6L,EAAAA,GAAYA,EAAAA,GAuNrE,QAASC,GAAoB9F,EAAUK,EAAI0F,EAAOC,EAAUC,GAO3D,QAASC,KAER,GAAIC,GAAW,GAAIvG,gBAChB,GAAK,EAAG,EAAG,EACX,GAAK,EAAG,EAAG,EACX,EAAG,EAAG,EAAG,GACT,EAAG,EAAG,EAAG,IAGRwG,EAAQ,GAAIC,cACf,EAAG,EAAG,EACN,EAAG,EAAG,GAKPC,GAAejG,EAAGkG,eAClBC,EAAgBnG,EAAGkG,eAEnBlG,EAAGoG,WAAYpG,EAAGqG,aAAcJ,GAChCjG,EAAGsG,WAAYtG,EAAGqG,aAAcP,EAAU9F,EAAGuG,aAE7CvG,EAAGoG,WAAYpG,EAAGwG,qBAAsBL,GACxCnG,EAAGsG,WAAYtG,EAAGwG,qBAAsBT,EAAO/F,EAAGuG,aAIlDE,EAAczG,EAAG0G,gBACjBC,EAAmB3G,EAAG0G,gBAEtBhB,EAAMkB,YAAa5G,EAAG6G,WAAYJ,GAClCzG,EAAG8G,WAAY9G,EAAG6G,WAAY,EAAG7G,EAAG+G,IAAK,GAAI,GAAI,EAAG/G,EAAG+G,IAAK/G,EAAGgH,cAAe,MAC9EhH,EAAGiH,cAAejH,EAAG6G,WAAY7G,EAAGkH,eAAgBlH,EAAGmH,eACvDnH,EAAGiH,cAAejH,EAAG6G,WAAY7G,EAAGoH,eAAgBpH,EAAGmH,eACvDnH,EAAGiH,cAAejH,EAAG6G,WAAY7G,EAAGqH,mBAAoBrH,EAAGsH,SAC3DtH,EAAGiH,cAAejH,EAAG6G,WAAY7G,EAAGuH,mBAAoBvH,EAAGsH,SAE3D5B,EAAMkB,YAAa5G,EAAG6G,WAAYF,GAClC3G,EAAG8G,WAAY9G,EAAG6G,WAAY,EAAG7G,EAAGwH,KAAM,GAAI,GAAI,EAAGxH,EAAGwH,KAAMxH,EAAGgH,cAAe,MAChFhH,EAAGiH,cAAejH,EAAG6G,WAAY7G,EAAGkH,eAAgBlH,EAAGmH,eACvDnH,EAAGiH,cAAejH,EAAG6G,WAAY7G,EAAGoH,eAAgBpH,EAAGmH,eACvDnH,EAAGiH,cAAejH,EAAG6G,WAAY7G,EAAGqH,mBAAoBrH,EAAGsH,SAC3DtH,EAAGiH,cAAejH,EAAG6G,WAAY7G,EAAGuH,mBAAoBvH,EAAGsH,SAE3DG,GAECC,cAEC,+BAEA,+BACA,sBACA,0BAEA,kCAEA,2BACA,qBAEA,oBACA,6BAEA,gBAEA,cAEA,yBAEA,6BAEA,qEACA,iEACA,iEACA,iEACA,iEACA,iEACA,iEACA,iEACA,iEAEA,+CACA,+CACA,+CACA,+CAEA,2EACA,2EAEA,MAEA,yFAEA,KAECC,KAAM,MAERC,gBAEC,+BAEA,yBACA,yBACA,sBAEA,oBACA,6BAEA,gBAIA,6BAEA,iDAIA,oCAEA,4CAIA,aAEA,4CACA,0CACA,8BACA,iCAEA,MAEA,KAECD,KAAM,OAIT9C,EAAUgD,EAAeJ,GAEzBK,GACCC,OAAQ/H,EAAGgI,kBAAmBnD,EAAS,YACvCoD,GAAIjI,EAAGgI,kBAAmBnD,EAAS,OAGpCqD,GACCC,WAAYnI,EAAGkF,mBAAoBL,EAAS,cAC5C/F,IAAKkB,EAAGkF,mBAAoBL,EAAS,OACrCuD,aAAcpI,EAAGkF,mBAAoBL,EAAS,gBAC9CwD,QAASrI,EAAGkF,mBAAoBL,EAAS,WACzCyD,MAAOtI,EAAGkF,mBAAoBL,EAAS,SACvC0D,MAAOvI,EAAGkF,mBAAoBL,EAAS,SACvCjI,SAAUoD,EAAGkF,mBAAoBL,EAAS,YAC1C2D,eAAgBxI,EAAGkF,mBAAoBL,EAAS,mBA8LlD,QAASgD,GAAeJ,GAEvB,GAAI5C,GAAU7E,EAAG6H,gBAEbD,EAAiB5H,EAAGyI,aAAczI,EAAG0I,iBACrChB,EAAe1H,EAAGyI,aAAczI,EAAG2I,eAEnCC,EAAS,aAAehD,EAAaiD,UAAY,WAarD,OAXA7I,GAAG8I,aAAclB,EAAgBgB,EAASnB,EAAOG,gBACjD5H,EAAG8I,aAAcpB,EAAckB,EAASnB,EAAOC,cAE/C1H,EAAG+I,cAAenB,GAClB5H,EAAG+I,cAAerB,GAElB1H,EAAGgJ,aAAcnE,EAAS+C,GAC1B5H,EAAGgJ,aAAcnE,EAAS6C,GAE1B1H,EAAGiJ,YAAapE,GAETA,EAhXR,GAAIoB,GAAcE,EACdsB,EAAQ5C,EAASiD,EAAYI,EAE7BzB,EAAaE,CAsKjBlN,MAAKyP,OAAS,SAAWC,EAAQC,EAAOC,EAAQxL,GAE/C,GAAuB,IAAlBsL,EAAOlP,OAAZ,CAEA,GAAIqP,GAAe,GAAI1O,GAEnB2O,EAAY1L,EAASvD,EAAIuD,EAASxD,EACrCmP,EAAiC,GAAb3L,EAASxD,EAC7BoP,EAAkC,GAAb5L,EAASvD,EAE3BuI,EAAO,GAAKhF,EAASvD,EACxBiO,EAAQ,GAAI5O,GAASkJ,EAAO0G,EAAW1G,GAEpC2F,EAAiB,GAAI5N,GAAS,EAAG,EAAG,GACvC8O,EAAuB,GAAI/P,GAAS,EAAG,GAEpCgQ,EAAY,GAAItE,EAEpBsE,GAAUrE,IAAIhE,IAAKzD,EAASjE,EAAGiE,EAAShE,GACxC8P,EAAUpE,IAAIjE,IAAKzD,EAASjE,GAAMiE,EAASxD,EAAI,IAAMwD,EAAShE,GAAMgE,EAASvD,EAAI,SAEhEK,KAAZkK,GAEJgB,IAIDH,EAAMkE,WAAY/E,GAElBa,EAAMmE,iBACNnE,EAAMoE,gBAAiBhC,EAAWC,QAClCrC,EAAMoE,gBAAiBhC,EAAWG,IAClCvC,EAAMqE,0BAKN/J,EAAGK,UAAW6H,EAASE,aAAc,GACrCpI,EAAGK,UAAW6H,EAASpJ,IAAK,GAE5BkB,EAAGoG,WAAYpG,EAAGqG,aAAcJ,GAChCjG,EAAGgK,oBAAqBlC,EAAWC,OAAQ,EAAG/H,EAAGiK,OAAO,EAAO,GAAO,GACtEjK,EAAGgK,oBAAqBlC,EAAWG,GAAI,EAAGjI,EAAGiK,OAAO,EAAO,GAAO,GAElEjK,EAAGoG,WAAYpG,EAAGwG,qBAAsBL,GAExCT,EAAMwE,QAASlK,EAAGmK,WAClBzE,EAAM0E,QAAQC,MAAMC,SAAS,EAE7B,KAAM,GAAI7K,GAAI,EAAG8K,EAAIpB,EAAOlP,OAAQwF,EAAI8K,EAAG9K,IAAO,CAEjDoD,EAAO,GAAKhF,EAASvD,EACrBiO,EAAMjH,IAAKuB,EAAO0G,EAAW1G,EAI7B,IAAI2H,GAAQrB,EAAQ1J,EAkBpB,IAhBA6J,EAAahI,IAAKkJ,EAAMC,YAAY1Q,SAAU,IAAMyQ,EAAMC,YAAY1Q,SAAU,IAAMyQ,EAAMC,YAAY1Q,SAAU,KAElHuP,EAAaoB,aAAcrB,EAAOsB,oBAClCrB,EAAaoB,aAAcrB,EAAOuB,kBAIlCpC,EAAeqC,KAAMvB,GAIrBI,EAAqB9P,EAAIiE,EAASjE,EAAM4O,EAAe5O,EAAI4P,EAAsBA,EAAoB,EACrGE,EAAqB7P,EAAIgE,EAAShE,EAAM2O,EAAe3O,EAAI4P,EAAuBA,EAAqB,GAI9C,IAApDE,EAAUmB,cAAepB,GAAkC,CAI/DhE,EAAMqF,cAAe/K,EAAGgL,UACxBtF,EAAMkB,YAAa5G,EAAG6G,WAAY,MAClCnB,EAAMqF,cAAe/K,EAAGiL,UACxBvF,EAAMkB,YAAa5G,EAAG6G,WAAYJ,GAClCzG,EAAGkL,eAAgBlL,EAAG6G,WAAY,EAAG7G,EAAG+G,IAAK2C,EAAqB9P,EAAG8P,EAAqB7P,EAAG,GAAI,GAAI,GAKrGmG,EAAGK,UAAW6H,EAASC,WAAY,GACnCnI,EAAGQ,UAAW0H,EAASK,MAAOA,EAAM3O,EAAG2O,EAAM1O,GAC7CmG,EAAGU,UAAWwH,EAASM,eAAgBA,EAAe5O,EAAG4O,EAAe3O,EAAG2O,EAAenO,GAE1FqL,EAAMwE,QAASlK,EAAGmL,OAClBzF,EAAM0F,OAAQpL,EAAGqL,YAEjBrL,EAAGsL,aAActL,EAAGuL,UAAW,EAAGvL,EAAGwL,eAAgB,GAKrD9F,EAAMqF,cAAe/K,EAAGgL,UACxBtF,EAAMkB,YAAa5G,EAAG6G,WAAYF,GAClC3G,EAAGkL,eAAgBlL,EAAG6G,WAAY,EAAG7G,EAAGwH,KAAMkC,EAAqB9P,EAAG8P,EAAqB7P,EAAG,GAAI,GAAI,GAKtGmG,EAAGK,UAAW6H,EAASC,WAAY,GACnCzC,EAAMwE,QAASlK,EAAGqL,YAElB3F,EAAMqF,cAAe/K,EAAGiL,UACxBvF,EAAMkB,YAAa5G,EAAG6G,WAAYJ,GAClCzG,EAAGsL,aAActL,EAAGuL,UAAW,EAAGvL,EAAGwL,eAAgB,GAKrDhB,EAAMiB,eAAeZ,KAAMrC,GAEtBgC,EAAMkB,qBAEVlB,EAAMkB,qBAAsBlB,GAI5BA,EAAMmB,mBAMP3L,EAAGK,UAAW6H,EAASC,WAAY,GACnCzC,EAAM0F,OAAQpL,EAAGmL,MAEjB,KAAM,GAAIS,GAAI,EAAGC,EAAKrB,EAAMsB,WAAW7R,OAAQ2R,EAAIC,EAAID,IAAO,CAE7D,GAAIG,GAASvB,EAAMsB,WAAYF,EAE1BG,GAAO1D,QAAU,MAAS0D,EAAOxD,MAAQ,OAE7CC,EAAe5O,EAAImS,EAAOnS,EAC1B4O,EAAe3O,EAAIkS,EAAOlS,EAC1B2O,EAAenO,EAAI0R,EAAO1R,EAE1BwI,EAAOkJ,EAAOlJ,KAAOkJ,EAAOxD,MAAQ1K,EAASvD,EAE7CiO,EAAM3O,EAAIiJ,EAAO0G,EACjBhB,EAAM1O,EAAIgJ,EAEV7C,EAAGU,UAAWwH,EAASM,eAAgBA,EAAe5O,EAAG4O,EAAe3O,EAAG2O,EAAenO,GAC1F2F,EAAGQ,UAAW0H,EAASK,MAAOA,EAAM3O,EAAG2O,EAAM1O,GAC7CmG,EAAGE,UAAWgI,EAAStL,SAAUmP,EAAOnP,UAExCoD,EAAGE,UAAWgI,EAASG,QAAS0D,EAAO1D,SACvCrI,EAAGU,UAAWwH,EAASI,MAAOyD,EAAOzD,MAAMjJ,EAAG0M,EAAOzD,MAAM3H,EAAGoL,EAAOzD,MAAM1H,GAE3E8E,EAAMsG,YAAaD,EAAOE,SAAUF,EAAOG,cAAeH,EAAOI,SAAUJ,EAAOK,UAElFzG,EAAS/D,aAAcmK,EAAOjO,QAAS,GAEvCkC,EAAGsL,aAActL,EAAGuL,UAAW,EAAGvL,EAAGwL,eAAgB,MAYzD9F,EAAM0F,OAAQpL,EAAGmK,WACjBzE,EAAM0F,OAAQpL,EAAGqL,YACjB3F,EAAM0E,QAAQC,MAAMC,SAAS,GAE7B5E,EAAM2G,UAkCR,QAASC,GAAeC,EAAQvR,EAASC,EAAOC,EAAOC,EAAWC,EAAWC,EAAQC,EAAMC,GAE1FT,EAAQqD,KAAM1E,KAAM8S,EAAQvR,EAASC,EAAOC,EAAOC,EAAWC,EAAWC,EAAQC,EAAMC,GAEvF9B,KAAK+S,aAAc,EAYpB,QAASC,GAAqB9M,EAAUK,EAAI0F,EAAOC,EAAUC,GAa5D,QAASC,KAER,GAAIC,GAAW,GAAIvG,gBAChB,IAAO,GAAK,EAAG,EACf,IAAO,GAAK,EAAG,EACf,GAAK,GAAK,EAAG,GACb,GAAK,GAAK,EAAG,IAGZwG,EAAQ,GAAIC,cACf,EAAG,EAAG,EACN,EAAG,EAAG,GAGPC,GAAejG,EAAGkG,eAClBC,EAAgBnG,EAAGkG,eAEnBlG,EAAGoG,WAAYpG,EAAGqG,aAAcJ,GAChCjG,EAAGsG,WAAYtG,EAAGqG,aAAcP,EAAU9F,EAAGuG,aAE7CvG,EAAGoG,WAAYpG,EAAGwG,qBAAsBL,GACxCnG,EAAGsG,WAAYtG,EAAGwG,qBAAsBT,EAAO/F,EAAGuG,aAElD1B,EAAUgD,IAEVC,GACC4E,SAAU1M,EAAGgI,kBAAmBnD,EAAS,YACzCoD,GAAIjI,EAAGgI,kBAAmBnD,EAAS,OAGpCqD,GACCyE,SAAU3M,EAAGkF,mBAAoBL,EAAS,YAC1C+H,QAAS5M,EAAGkF,mBAAoBL,EAAS,WAEzCjI,SAAUoD,EAAGkF,mBAAoBL,EAAS,YAC1C0D,MAAOvI,EAAGkF,mBAAoBL,EAAS,SAEvCyD,MAAOtI,EAAGkF,mBAAoBL,EAAS,SACvC/F,IAAKkB,EAAGkF,mBAAoBL,EAAS,OACrCwD,QAASrI,EAAGkF,mBAAoBL,EAAS,WAEzCgI,gBAAiB7M,EAAGkF,mBAAoBL,EAAS,mBACjD+F,iBAAkB5K,EAAGkF,mBAAoBL,EAAS,oBAElDiI,QAAS9M,EAAGkF,mBAAoBL,EAAS,WACzCkI,WAAY/M,EAAGkF,mBAAoBL,EAAS,cAC5CmI,QAAShN,EAAGkF,mBAAoBL,EAAS,WACzCoI,OAAQjN,EAAGkF,mBAAoBL,EAAS,UACxCqI,SAAUlN,EAAGkF,mBAAoBL,EAAS,YAC1CsI,SAAUnN,EAAGkF,mBAAoBL,EAAS,YAE1CuI,UAAWpN,EAAGkF,mBAAoBL,EAAS,aAG5C,IAAI0H,GAASc,SAASC,gBAAiB,+BAAgC,SACvEf,GAAO/O,MAAQ,EACf+O,EAAO9O,OAAS,CAEhB,IAAI8P,GAAUhB,EAAOiB,WAAY,KACjCD,GAAQE,UAAY,QACpBF,EAAQG,SAAU,EAAG,EAAG,EAAG,GAE3B5P,EAAU,GAAIwO,GAAeC,GAiK9B,QAAS1E,KAER,GAAIhD,GAAU7E,EAAG6H,gBAEbH,EAAe1H,EAAGyI,aAAczI,EAAG2I,eACnCf,EAAiB5H,EAAGyI,aAAczI,EAAG0I,gBAwGzC,OAtGA1I,GAAG8I,aAAcpB,GAEhB,aAAe9B,EAAaiD,UAAY,UAExC,qCAEA,gCACA,iCACA,0BACA,sBACA,yBACA,wBAEA,2BACA,qBAEA,oBACA,0BAEA,gBAEA,mCAEA,6CAEA,0BACA,mGACA,mGAEA,qBAEA,+DACA,sCAEA,iDAEA,+BAEA,KAEClB,KAAM,OAER3H,EAAG8I,aAAclB,GAEhB,aAAehC,EAAaiD,UAAY,UAExC,qCAEA,sBACA,yBACA,yBAEA,uBACA,yBACA,4BACA,yBACA,wBACA,2BAEA,oBACA,0BAEA,gBAEA,0CAEA,qEAEA,+CAEA,yBAEA,6BAEA,4BAEA,6DAEA,eAEA,qCACA,oFACA,wDAEA,QAEA,uEAEA,MAEA,KAEClB,KAAM,OAER3H,EAAG+I,cAAerB,GAClB1H,EAAG+I,cAAenB,GAElB5H,EAAGgJ,aAAcnE,EAAS6C,GAC1B1H,EAAGgJ,aAAcnE,EAAS+C,GAE1B5H,EAAGiJ,YAAapE,GAETA,EAIR,QAAS8I,GAAmBC,EAAGhN,GAE9B,MAAKgN,GAAEC,cAAgBjN,EAAEiN,YAEjBD,EAAEC,YAAcjN,EAAEiN,YAEdD,EAAEvT,IAAMuG,EAAEvG,EAEduG,EAAEvG,EAAIuT,EAAEvT,EAIRuG,EAAE4C,GAAKoK,EAAEpK,GAvWlB,GAAIyC,GAAcE,EACdtB,EAASiD,EAAYI,EAErBpK,EAIAgQ,EAAiB,GAAIlT,GACrBmT,EAAiB,GAAI3T,GACrB4T,EAAc,GAAIpT,EAoEtBnB,MAAKyP,OAAS,SAAW+E,EAAS7E,EAAOC,GAExC,GAAwB,IAAnB4E,EAAQhU,OAAb,KAIiBU,KAAZkK,GAEJgB,IAIDH,EAAMkE,WAAY/E,GAElBa,EAAMmE,iBACNnE,EAAMoE,gBAAiBhC,EAAW4E,UAClChH,EAAMoE,gBAAiBhC,EAAWG,IAClCvC,EAAMqE,0BAENrE,EAAMwE,QAASlK,EAAGmK,WAClBzE,EAAM0F,OAAQpL,EAAGmL,OAEjBnL,EAAGoG,WAAYpG,EAAGqG,aAAcJ,GAChCjG,EAAGgK,oBAAqBlC,EAAW4E,SAAU,EAAG1M,EAAGiK,OAAO,EAAO,GAAO,GACxEjK,EAAGgK,oBAAqBlC,EAAWG,GAAI,EAAGjI,EAAGiK,OAAO,EAAO,GAAO,GAElEjK,EAAGoG,WAAYpG,EAAGwG,qBAAsBL,GAExCnG,EAAGwB,iBAAkB0G,EAAS0C,kBAAkB,EAAOvB,EAAOuB,iBAAiB7Q,UAE/E2L,EAAMqF,cAAe/K,EAAGgL,UACxBhL,EAAGK,UAAW6H,EAASpJ,IAAK,EAE5B,IAAIoP,GAAa,EACbC,EAAe,EACfC,EAAMhF,EAAMgF,GAEXA,IAEJpO,EAAGU,UAAWwH,EAASgF,SAAUkB,EAAI9F,MAAMjJ,EAAG+O,EAAI9F,MAAM3H,EAAGyN,EAAI9F,MAAM1H,GAEhEwN,EAAIC,OAERrO,EAAGE,UAAWgI,EAAS8E,QAASoB,EAAIE,MACpCtO,EAAGE,UAAWgI,EAAS+E,OAAQmB,EAAIG,KAEnCvO,EAAGK,UAAW6H,EAAS4E,QAAS,GAChCoB,EAAa,EACbC,EAAe,GAEJC,EAAII,YAEfxO,EAAGE,UAAWgI,EAAS6E,WAAYqB,EAAIK,SAEvCzO,EAAGK,UAAW6H,EAAS4E,QAAS,GAChCoB,EAAa,EACbC,EAAe,KAMhBnO,EAAGK,UAAW6H,EAAS4E,QAAS,GAChCoB,EAAa,EACbC,EAAe,EAOhB,KAAM,GAAI1O,GAAI,EAAG8K,EAAI0D,EAAQhU,OAAQwF,EAAI8K,EAAG9K,IAAO,CAElD,GAAIsM,GAASkC,EAASxO,EAEtBsM,GAAOc,gBAAgB6B,iBAAkBrF,EAAOsB,mBAAoBoB,EAAOtB,aAC3EsB,EAAO1R,GAAM0R,EAAOc,gBAAgB9S,SAAU,IAI/CkU,EAAQU,KAAMhB,EAMd,KAAM,GAFFpF,MAEM9I,EAAI,EAAG8K,EAAI0D,EAAQhU,OAAQwF,EAAI8K,EAAG9K,IAAO,CAElD,GAAIsM,GAASkC,EAASxO,GAClBmP,EAAW7C,EAAO6C,QAEtB,KAA0B,IAArBA,EAASC,QAAd,CAEA9C,EAAO+C,eAAgBnP,EAAUyJ,EAAOC,MAAQ1O,GAAWiU,MAAUjU,IAErEqF,EAAGE,UAAWgI,EAASkF,UAAWwB,EAASxB,WAC3CpN,EAAGwB,iBAAkB0G,EAAS2E,iBAAiB,EAAOd,EAAOc,gBAAgB9S,UAE7EgS,EAAOtB,YAAYsE,UAAWjB,EAAgBC,EAAgBC,GAE9DzF,EAAO,GAAMyF,EAAYpU,EACzB2O,EAAO,GAAMyF,EAAYnU,CAEzB,IAAIiT,GAAU,CAET1D,GAAMgF,KAAOQ,EAASR,MAE1BtB,EAAUqB,GAIND,IAAepB,IAEnB9M,EAAGK,UAAW6H,EAAS4E,QAASA,GAChCoB,EAAapB,GAIQ,OAAjB8B,EAAS9P,KAEbkB,EAAGQ,UAAW0H,EAASyE,SAAUiC,EAAS9P,IAAIrC,OAAO7C,EAAGgV,EAAS9P,IAAIrC,OAAO5C,GAC5EmG,EAAGQ,UAAW0H,EAAS0E,QAASgC,EAAS9P,IAAIpC,OAAO9C,EAAGgV,EAAS9P,IAAIpC,OAAO7C,KAI3EmG,EAAGQ,UAAW0H,EAASyE,SAAU,EAAG,GACpC3M,EAAGQ,UAAW0H,EAAS0E,QAAS,EAAG,IAIpC5M,EAAGE,UAAWgI,EAASG,QAASuG,EAASvG,SACzCrI,EAAGU,UAAWwH,EAASI,MAAOsG,EAAStG,MAAMjJ,EAAGuP,EAAStG,MAAM3H,EAAGiO,EAAStG,MAAM1H,GAEjFZ,EAAGE,UAAWgI,EAAStL,SAAUgS,EAAShS,UAC1CoD,EAAGO,WAAY2H,EAASK,MAAOA,GAE/B7C,EAAMsG,YAAa4C,EAAS3C,SAAU2C,EAAS1C,cAAe0C,EAASzC,SAAUyC,EAASxC,SAAUwC,EAASI,mBAAoBJ,EAASK,cAAeL,EAASM,cAAeN,EAASO,oBAC1LzJ,EAAM0E,QAAQC,MAAM+E,QAASR,EAASS,WACtC3J,EAAM0E,QAAQC,MAAMC,QAASsE,EAASU,YACtC5J,EAAM0E,QAAQ9B,MAAMgC,QAASsE,EAASW,YAEtC5J,EAAS/D,aAAcgN,EAAS9P,KAAOhB,EAAS,GAEhDkC,EAAGsL,aAActL,EAAGuL,UAAW,EAAGvL,EAAGwL,eAAgB,GAErDO,EAAOyD,cAAe7P,EAAUyJ,EAAOC,MAAQ1O,GAAWiU,MAAUjU,KAMrE+K,EAAM0F,OAAQpL,EAAGmK,WAEjBzE,EAAM2G,UAgJR,QAASoD,KAERhU,OAAOC,eAAgBjC,KAAM,MAAQkC,MAAO+T,OAE5CjW,KAAKoC,KAAOC,GAAMC,eAElBtC,KAAKuC,KAAO,GACZvC,KAAK6B,KAAO,WAEZ7B,KAAK2U,KAAM,EACX3U,KAAKkW,QAAS,EAEdlW,KAAKwS,SAAW2D,GAChBnW,KAAKoW,KAAOC,GACZrW,KAAKsW,aAAc,EACnBtW,KAAKuW,aAAeC,GAEpBxW,KAAK4O,QAAU,EACf5O,KAAKyW,aAAc,EAEnBzW,KAAK0S,SAAWgE,GAChB1W,KAAK2S,SAAWgE,GAChB3W,KAAKyS,cAAgBmE,GACrB5W,KAAKwV,cAAgB,KACrBxV,KAAKyV,cAAgB,KACrBzV,KAAKuV,mBAAqB,KAE1BvV,KAAK6W,UAAYC,GACjB9W,KAAK4V,WAAY,EACjB5V,KAAK6V,YAAa,EAElB7V,KAAK+W,eAAiB,KACtB/W,KAAKgX,kBAAmB,EACxBhX,KAAKiX,aAAc,EAEnBjX,KAAK8V,YAAa,EAElB9V,KAAKoP,UAAY,KAEjBpP,KAAKkX,eAAgB,EACrBlX,KAAKmX,oBAAsB,EAC3BnX,KAAKoX,mBAAqB,EAE1BpX,KAAKqX,WAAY,EAEjBrX,KAAK2T,UAAY,EACjB3T,KAAK0V,oBAAqB,EAE1B1V,KAAKsX,SAAW,EAEhBtX,KAAKoV,SAAU,EAEfpV,KAAKuX,YAELvX,KAAK+S,aAAc,EAiUpB,QAASyE,GAAmBC,GAE3BzB,EAAStR,KAAM1E,MAEfA,KAAK6B,KAAO,oBAEZ7B,KAAK0X,aAAeC,GAEpB3X,KAAK4X,UAAW,EAChB5X,KAAK6X,cAAe,EAEpB7X,KAAKqF,IAAM,KAEXrF,KAAK8X,SAAW,KAEhB9X,KAAK+X,gBAAkB,KACvB/X,KAAKgY,kBAAoB,EACzBhY,KAAKiY,iBAAmB,EAExBjY,KAAKkY,WAAY,EACjBlY,KAAKmY,mBAAqB,EAE1BnY,KAAK2U,KAAM,EACX3U,KAAKkW,QAAS,EAEdlW,KAAKoY,UAAWX,GAwDjB,QAASY,IAAsBZ,GAE9BzB,EAAStR,KAAM1E,MAEfA,KAAK6B,KAAO,uBAEZ7B,KAAKsY,kBAAoB,GAAInX,GAC7BnB,KAAKuY,aAAe,EACpBvY,KAAKwY,YAAc,IAEnBxY,KAAK4X,UAAW,EAChB5X,KAAK6X,cAAe,EAEpB7X,KAAKqF,IAAM,KAEXrF,KAAK8X,SAAW,KAEhB9X,KAAK+X,gBAAkB,KACvB/X,KAAKgY,kBAAoB,EACzBhY,KAAKiY,iBAAmB,EAExBjY,KAAK2U,KAAM,EACX3U,KAAKkW,QAAS,EAEdlW,KAAKoY,UAAWX,GAqCjB,QAASgB,IAAM5M,EAAKC,GAEnB9L,KAAK6L,QAAgB3K,KAAR2K,EAAsBA,EAAM,GAAI1K,GAAW4K,EAAAA,EAAYA,EAAAA,EAAYA,EAAAA,GAChF/L,KAAK8L,QAAgB5K,KAAR4K,EAAsBA,EAAM,GAAI3K,IAAW4K,EAAAA,GAAYA,EAAAA,GAAYA,EAAAA,GA+djF,QAAS2M,IAAQxV,EAAQyV,GAExB3Y,KAAKkD,WAAsBhC,KAAXgC,EAAyBA,EAAS,GAAI/B,GACtDnB,KAAK2Y,WAAsBzX,KAAXyX,EAAyBA,EAAS,EAiKnD,QAASC,IAAOC,EAAQC,GAIvB9Y,KAAK6Y,WAAsB3X,KAAX2X,EAAyBA,EAAS,GAAI1X,GAAS,EAAG,EAAG,GACrEnB,KAAK8Y,aAA0B5X,KAAb4X,EAA2BA,EAAW,EA8NzD,QAASC,IAASC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,GAErCrZ,KAAKsZ,YAEKpY,KAAP8X,EAAqBA,EAAK,GAAIJ,QACvB1X,KAAP+X,EAAqBA,EAAK,GAAIL,QACvB1X,KAAPgY,EAAqBA,EAAK,GAAIN,QACvB1X,KAAPiY,EAAqBA,EAAK,GAAIP,QACvB1X,KAAPkY,EAAqBA,EAAK,GAAIR,QACvB1X,KAAPmY,EAAqBA,EAAK,GAAIT,KAyLlC,QAASW,IAAgBC,EAAWC,EAAUC,GAwP7C,QAASC,GAAkBC,EAAQzE,EAAU0E,EAAcC,EAAoBC,EAAkBC,GAEhG,GAAIC,GAAWL,EAAOK,SAElBC,EAAS,KAETC,EAAmBC,EACnBC,EAAiBT,EAAOU,mBAS5B,IAPKT,IAEJM,EAAmBI,EACnBF,EAAiBT,EAAOY,wBAIlBH,EAmCNH,EAASG,MAnCc,CAEvB,GAAII,IAAc,CAEbtF,GAAS0C,eAERoC,GAAYA,EAASS,iBAEzBD,EAAcR,EAASU,iBAAmBV,EAASU,gBAAgB1H,UAAYgH,EAASU,gBAAgB1H,SAASzS,OAAS,EAE/GyZ,GAAYA,EAASW,aAEhCH,EAAcR,EAASpC,cAAgBoC,EAASpC,aAAarX,OAAS,IAMnEoZ,EAAOiB,gBAAuC,IAAtB1F,EAASyC,UAErCnX,QAAQqa,KAAM,+EAAgFlB,EAI/F,IAAImB,GAAcnB,EAAOiB,eAAiB1F,EAASyC,SAE/CoD,EAAe,CAEdP,KAAcO,GAAgBC,GAC9BF,IAAcC,GAAgBE,GAEnChB,EAASC,EAAkBa,GAQ5B,GAAKxB,EAAU2B,uBACY,IAAzBhG,EAAS8B,aAC0B,IAAnC9B,EAAS4B,eAAevW,OAAe,CAKxC,GAAI4a,GAAOlB,EAAO9X,KAAMiZ,EAAOlG,EAAS/S,KAEpCkZ,EAAsBC,EAAgBH,OAEbla,KAAxBoa,IAEJA,KACAC,EAAgBH,GAASE,EAI1B,IAAIE,GAAiBF,EAAqBD,OAElBna,KAAnBsa,IAEJA,EAAiBtB,EAAOuB,QACxBH,EAAqBD,GAASG,GAI/BtB,EAASsB,EAIVtB,EAAO9E,QAAUD,EAASC,QAC1B8E,EAAOhC,UAAY/C,EAAS+C,SAE5B,IAAI9B,GAAOjB,EAASiB,IAgCpB,OA9BKsF,GAAMC,mBAAqBvF,GAAQwF,KAEvCxF,EAAOC,IAIHqF,EAAMG,qBAELzF,IAASC,GAAYD,EAAO0F,GACvB1F,IAAS0F,KAAW1F,EAAOC,KAItC6D,EAAO9D,KAAOA,EAEd8D,EAAOjD,YAAc9B,EAAS8B,YAC9BiD,EAAOnD,eAAiB5B,EAAS4B,eACjCmD,EAAOlD,iBAAmB7B,EAAS6B,iBAEnCkD,EAAO/B,mBAAqBhD,EAASgD,mBACrC+B,EAAO6B,UAAY5G,EAAS4G,UAEvBlC,GAAgBK,EAAO8B,yBAE3B9B,EAAO5B,kBAAkBlH,KAAM0I,GAC/BI,EAAO3B,aAAewB,EACtBG,EAAO1B,YAAcwB,GAIfE,EAIR,QAAS+B,GAAcrC,EAAQhK,EAAQsM,EAAcrC,GAEpD,IAAwB,IAAnBD,EAAOxE,QAAZ,CAIA,GAFcwE,EAAOuC,OAAOC,KAAMxM,EAAOuM,UAEvBvC,EAAOyC,QAAUzC,EAAO0C,QAAU1C,EAAO2C,WAErD3C,EAAO4C,cAAkB5C,EAAO6C,eAAiBC,EAASC,iBAAkB/C,IAAa,CAE7FA,EAAOxG,gBAAgB6B,iBAAkBiH,EAAahL,mBAAoB0I,EAAO5I,YAEjF,IAAIiJ,GAAWR,EAASmD,OAAQhD,GAC5BzE,EAAWyE,EAAOzE,QAEtB,IAAK0H,MAAMC,QAAS3H,GAInB,IAAM,GAFF4H,GAAS9C,EAAS8C,OAEZC,EAAI,EAAGC,EAAKF,EAAOvc,OAAQwc,EAAIC,EAAID,IAAO,CAEnD,GAAIE,GAAQH,EAAQC,GAChBG,EAAgBhI,EAAU+H,EAAME,cAEpC,IAAKD,GAAiBA,EAAc/H,QAAU,CAE7C,GAAIiI,GAAgB1D,EAAkBC,EAAQuD,EAAetD,EAAcyD,EAAqBpB,EAAarH,KAAMqH,EAAapH,IAChI0E,GAAU+D,mBAAoBrB,EAAc,KAAMjC,EAAUoD,EAAezD,EAAQsD,QAM/E,IAAK/H,EAASC,QAAU,CAE9B,GAAIiI,GAAgB1D,EAAkBC,EAAQzE,EAAU0E,EAAcyD,EAAqBpB,EAAarH,KAAMqH,EAAapH,IAC3H0E,GAAU+D,mBAAoBrB,EAAc,KAAMjC,EAAUoD,EAAezD,EAAQ,OAUtF,IAAM,GAFF4D,GAAW5D,EAAO4D,SAEZxX,EAAI,EAAG8K,EAAI0M,EAAShd,OAAQwF,EAAI8K,EAAG9K,IAE5CiW,EAAcuB,EAAUxX,GAAK4J,EAAQsM,EAAcrC,IA/XrD,IAAM,GApCF6C,GAAW,GAAI3D,IAClB0E,EAAoB,GAAIpd,GAExBqd,EAAiB,GAAIxd,GACrByd,EAAoB,GAAIzd,GAASwZ,EAAgBA,GAEjDkE,EAAc,GAAIzc,GAClBmc,EAAsB,GAAInc,GAE1B8Z,EAAgB,EAChBC,EAAgB,EAEhB2C,EAAgE,GAAlC5C,EAAgBC,GAE9Cd,EAAkB,GAAIyC,OAAOgB,GAC7BtD,EAAqB,GAAIsC,OAAOgB,GAEhCtC,KAEGuC,GACH,GAAI3c,GAAS,EAAG,EAAG,GAAK,GAAIA,IAAW,EAAG,EAAG,GAAK,GAAIA,GAAS,EAAG,EAAG,GACrE,GAAIA,GAAS,EAAG,GAAK,GAAK,GAAIA,GAAS,EAAG,EAAG,GAAK,GAAIA,GAAS,GAAK,EAAG,IAGpE4c,GACH,GAAI5c,GAAS,EAAG,EAAG,GAAK,GAAIA,GAAS,EAAG,EAAG,GAAK,GAAIA,GAAS,EAAG,EAAG,GACnE,GAAIA,GAAS,EAAG,EAAG,GAAK,GAAIA,GAAS,EAAG,EAAG,GAAK,GAAIA,GAAS,EAAG,GAAK,IAGlE6c,GACH,GAAIna,GAAW,GAAIA,GAAW,GAAIA,GAClC,GAAIA,GAAW,GAAIA,GAAW,GAAIA,IAKzBmC,EAAI,EAAGA,IAAM6X,IAA8B7X,EAAI,CAExD,GAAIyU,GAAwC,IAAxBzU,EAAIiV,GACpBF,EAAwC,IAAxB/U,EAAIkV,GAEpBmC,EAAgB,GAAI7F,IAEvBE,aAAcuG,GAEdpG,aAAc4C,EACd7C,SAAUmD,GAIXX,GAAiBpU,GAAMqX,CAIvB,IAAIa,GAAmB,GAAI7F,KAE1BR,aAAc4C,EACd7C,SAAUmD,GAIXR,GAAoBvU,GAAMkY,EAM3B,GAAIxC,GAAQ1b,IAEZA,MAAKme,SAAU,EAEfne,KAAKoe,YAAa,EAClBpe,KAAK+S,aAAc,EAEnB/S,KAAK6B,KAAOwc,GAEZre,KAAK6b,oBAAqB,EAC1B7b,KAAK2b,mBAAoB,EAEzB3b,KAAKyP,OAAS,SAAWyG,EAAQvG,EAAOC,GAEvC,IAAuB,IAAlB8L,EAAMyC,WACe,IAArBzC,EAAM0C,aAA8C,IAAtB1C,EAAM3I,cAElB,IAAlBmD,EAAO1V,OAAZ,CAGA,GAAI8d,GAAM9E,EAAU1F,QAChByK,EAAS/E,EAAUvN,KAGvBsS,GAAO9N,QAAS6N,EAAI5M,OACpB6M,EAAO5N,QAAQ9B,MAAM2P,SAAU,EAAG,EAAG,EAAG,GACxCD,EAAO5N,QAAQC,MAAM+E,SAAS,GAC9B4I,EAAOE,gBAAgB,EAMvB,KAAM,GAFFC,GAEM1Y,EAAI,EAAG2Y,EAAKzI,EAAO1V,OAAQwF,EAAI2Y,EAAI3Y,IAAO,CAEnD,GAAI4Y,GAAQ1I,EAAQlQ,GAChB6Y,EAASD,EAAMC,OACfhF,EAAe+E,GAASA,EAAM/E,YAElC,QAAgB3Y,KAAX2d,EAAL,CAOA,GAAI3C,GAAe2C,EAAOjP,MAK1B,IAHA8N,EAAetM,KAAMyN,EAAOC,SAC5BpB,EAAe7R,IAAK8R,GAEf9D,EAAe,CAEnB,GAAIkF,GAAUrB,EAAevd,EACzB6e,EAAWtB,EAAetd,CAgB9B4d,GAAiB,GAAInW,IAAe,EAAVkX,EAAaC,EAAUD,EAASC,GAE1DhB,EAAiB,GAAInW,IAAK,EAAGmX,EAAUD,EAASC,GAEhDhB,EAAiB,GAAInW,IAAe,EAAVkX,EAAaC,EAAUD,EAASC,GAE1DhB,EAAiB,GAAInW,IAAKkX,EAASC,EAAUD,EAASC,GAEtDhB,EAAiB,GAAInW,IAAe,EAAVkX,EAAa,EAAGA,EAASC,GAEnDhB,EAAiB,GAAInW,IAAKkX,EAAS,EAAGA,EAASC,GAE/CtB,EAAevd,GAAK,EACpBud,EAAetd,GAAK,EAIrB,GAAoB,OAAfye,EAAOxZ,IAAe,CAE1B,GAAI4Z,IAAStd,UAAWoD,GAAerD,UAAWqD,GAAenD,OAAQkB,GAEzE+b,GAAOxZ,IAAM,GAAIvB,GAAmB4Z,EAAevd,EAAGud,EAAetd,EAAG6e,GACxEJ,EAAOxZ,IAAIhB,QAAQ9B,KAAOqc,EAAMrc,KAAO,aAEvC2Z,EAAagD,yBAITL,EAAOM,mBAEXN,EAAOjC,OAAQgC,EAIhB,IAAIQ,GAAYP,EAAOxZ,IACnBga,EAAeR,EAAOxb,MAE1Bia,GAAoBgC,sBAAuBV,EAAM5N,aACjDkL,EAAajJ,SAAS7B,KAAMkM,GAEvBzD,GAEJ6E,EAAY,EAKZW,EAAaE,iBAAmBjC,EAAoBnd,GAAKmd,EAAoBld,GAAKkd,EAAoB1c,KAItG8d,EAAY,EAEZd,EAAY0B,sBAAuBV,EAAMY,OAAOxO,aAChDkL,EAAauD,OAAQ7B,GACrB1B,EAAawD,oBAIbL,EAAaxX,IACZ,GAAK,EAAK,EAAK,GACf,EAAK,GAAK,EAAK,GACf,EAAK,EAAK,GAAK,GACf,EAAK,EAAK,EAAK,GAGhBwX,EAAaM,SAAUzD,EAAa/K,kBACpCkO,EAAaM,SAAUzD,EAAahL,qBAIrCsI,EAAUoG,gBAAiBR,GAC3B5F,EAAUqG,OAKV,KAAM,GAAIC,GAAO,EAAGA,EAAOpB,EAAWoB,IAAU,CAE/C,GAAKjG,EAAe,CAEnB+D,EAAYxM,KAAM8K,EAAajJ,UAC/B2K,EAAYmC,IAAKjC,EAAgBgC,IACjC5D,EAAa8D,GAAG5O,KAAM2M,EAAS+B,IAC/B5D,EAAauD,OAAQ7B,GACrB1B,EAAawD,mBAEb,IAAIO,GAAejC,EAAiB8B,EACpCvB,GAAOna,SAAU6b,GAMlBxC,EAAkBxI,iBAAkBiH,EAAa/K,iBAAkB+K,EAAahL,oBAChFwL,EAASwD,cAAezC,GAIxBxB,EAActM,EAAOC,EAAQsM,EAAcrC,QAhI3CpZ,SAAQqa,KAAM,wBAAyB8D,EAAO,kBAsIhDlD,EAAM3I,aAAc,IA6LtB,QAASoN,IAAiB5Z,GAIzB,QAASkG,GAAc2T,EAAWC,GAEjC,GAAI9a,GAAQ6a,EAAU7a,MAClB+a,EAAQF,EAAUG,QAAUha,EAAGia,aAAeja,EAAGuG,YAEjD2T,EAASla,EAAGkG,cAEhBlG,GAAGoG,WAAY0T,EAAYI,GAC3Bla,EAAGsG,WAAYwT,EAAY9a,EAAO+a,GAElCF,EAAUM,kBAEV,IAAI7e,GAAO0E,EAAGiK,KAoCd,OAlCKjL,aAAiBO,cAErBjE,EAAO0E,EAAGiK,MAECjL,YAAiBob,cAE5BlgB,QAAQqa,KAAM,wEAEHvV,YAAiBgH,aAE5B1K,EAAO0E,EAAGwL,eAECxM,YAAiBqb,YAE5B/e,EAAO0E,EAAGsa,MAECtb,YAAiBub,aAE5Bjf,EAAO0E,EAAGwa,aAECxb,YAAiBa,YAE5BvE,EAAO0E,EAAGya,IAECzb,YAAiB0b,WAE5Bpf,EAAO0E,EAAG2a,KAEC3b,YAAiB4b,cAE5Btf,EAAO0E,EAAGgH,gBAKVkT,OAAQA,EACR5e,KAAMA,EACNuf,gBAAiB7b,EAAM8b,kBACvB1d,QAASyc,EAAUzc,SAKrB,QAAS2d,GAAcb,EAAQL,EAAWC,GAEzC,GAAI9a,GAAQ6a,EAAU7a,MAClBgc,EAAcnB,EAAUmB,WAE5Bhb,GAAGoG,WAAY0T,EAAYI,IAEA,IAAtBL,EAAUG,QAEdha,EAAGsG,WAAYwT,EAAY9a,EAAOgB,EAAGuG,cAEF,IAAxByU,EAAYC,MAIvBjb,EAAGkb,cAAepB,EAAY,EAAG9a,GAEA,IAAtBgc,EAAYC,MAEvB/gB,QAAQC,MAAO,4KAIf6F,EAAGkb,cAAepB,EAAYkB,EAAYve,OAASuC,EAAM8b,kBACxD9b,EAAMmc,SAAUH,EAAYve,OAAQue,EAAYve,OAASue,EAAYC,QAEtED,EAAYC,OAAU,GAQxB,QAASG,GAAKvB,GAIb,MAFKA,GAAUwB,+BAA+BxB,EAAYA,EAAUtb,MAE7D6L,EAASyP,EAAUhe,MAI3B,QAASyf,GAAQzB,GAEXA,EAAUwB,+BAA+BxB,EAAYA,EAAUtb,KAEpE,IAAIA,GAAO6L,EAASyP,EAAUhe,KAEzB0C,KAEJyB,EAAGub,aAAchd,EAAK2b,cAEf9P,GAASyP,EAAUhe,OAM5B,QAASwa,GAAQwD,EAAWC,GAEtBD,EAAUwB,+BAA+BxB,EAAYA,EAAUtb,KAEpE,IAAIA,GAAO6L,EAASyP,EAAUhe,UAEhBlB,KAAT4D,EAEJ6L,EAASyP,EAAUhe,MAASqK,EAAc2T,EAAWC,GAE1Cvb,EAAKnB,QAAUyc,EAAUzc,UAEpC2d,EAAcxc,EAAK2b,OAAQL,EAAWC,GAEtCvb,EAAKnB,QAAUyc,EAAUzc,SAnI3B,GAAIgN,KAyIJ,QAECgR,IAAKA,EACLE,OAAQA,EACRjF,OAAQA,GAYV,QAASmF,IAAO5hB,EAAGC,EAAGQ,EAAGohB,GAExBhiB,KAAKc,GAAKX,GAAK,EACfH,KAAKe,GAAKX,GAAK,EACfJ,KAAKgB,GAAKJ,GAAK,EACfZ,KAAKiiB,OAASD,GAASD,GAAMG,aAkV9B,QAASC,MAERniB,KAAKoiB,KAAO,EAgDb,QAASC,MAmBR,QAASC,KAERC,EAAWC,aAAcrf,GAAU,GAIpC,QAASsf,KAERtf,EAASuf,kBAAmBH,MAAYrhB,IAAW,GAzBpDc,OAAOC,eAAgBjC,KAAM,MAAQkC,MAAOygB,OAE5C3iB,KAAKoC,KAAOC,GAAMC,eAElBtC,KAAKuC,KAAO,GACZvC,KAAK6B,KAAO,WAEZ7B,KAAK4iB,OAAS,KACd5iB,KAAKwd,YAELxd,KAAKggB,GAAKqC,GAASQ,UAAUpH,OAE7B,IAAIxI,GAAW,GAAI9R,GACfgC,EAAW,GAAI4e,IACfQ,EAAa,GAAI5hB,GACjBmO,EAAQ,GAAI3N,GAAS,EAAG,EAAG,EAc/BgC,GAAS2f,SAAUR,GACnBC,EAAWO,SAAUL,GAErBzgB,OAAO+gB,iBAAkB/iB,MACxBiT,UACC+P,YAAY,EACZ9gB,MAAO+Q,GAER9P,UACC6f,YAAY,EACZ9gB,MAAOiB,GAERof,YACCS,YAAY,EACZ9gB,MAAOqgB,GAERzT,OACCkU,YAAY,EACZ9gB,MAAO4M,GAERsE,iBACClR,MAAO,GAAI7B,IAEZ4iB,cACC/gB,MAAO,GAAId,MAIbpB,KAAKqD,OAAS,GAAIhD,GAClBL,KAAKgR,YAAc,GAAI3Q,GAEvBL,KAAKoD,iBAAmBif,GAASa,wBACjCljB,KAAKmjB,wBAAyB,EAE9BnjB,KAAKmc,OAAS,GAAIgG,IAClBniB,KAAKoV,SAAU,EAEfpV,KAAKwc,YAAa,EAClBxc,KAAKojB,eAAgB,EAErBpjB,KAAKyc,eAAgB,EACrBzc,KAAKoU,YAAc,EAEnBpU,KAAKuX,YAwsBN,QAAS8L,MAERhB,GAAS3d,KAAM1E,MAEfA,KAAK6B,KAAO,SAEZ7B,KAAKkR,mBAAqB,GAAI7Q,GAC9BL,KAAKmR,iBAAmB,GAAI9Q,GA0D7B,QAASijB,IAAoBC,EAAMC,EAAOC,EAAKC,EAAQ7O,EAAMC,GAE5DuO,GAAO3e,KAAM1E,MAEbA,KAAK6B,KAAO,qBAEZ7B,KAAK2jB,KAAO,EACZ3jB,KAAK4jB,KAAO,KAEZ5jB,KAAKujB,KAAOA,EACZvjB,KAAKwjB,MAAQA,EACbxjB,KAAKyjB,IAAMA,EACXzjB,KAAK0jB,OAASA,EAEd1jB,KAAK6U,SAAkB3T,KAAT2T,EAAuBA,EAAO,GAC5C7U,KAAK8U,QAAgB5T,KAAR4T,EAAsBA,EAAM,IAEzC9U,KAAKkf,yBA2HN,QAAS2E,IAAO1P,EAAGhN,EAAG2c,EAAGjL,EAAQhK,EAAOuO,GAEvCpd,KAAKmU,EAAIA,EACTnU,KAAKmH,EAAIA,EACTnH,KAAK8jB,EAAIA,EAET9jB,KAAK6Y,OAAWA,GAAUA,EAAOkL,UAAclL,EAAS,GAAI1X,GAC5DnB,KAAKgkB,cAAgBnH,MAAMC,QAASjE,GAAWA,KAE/C7Y,KAAK6O,MAAUA,GAASA,EAAMoV,QAAYpV,EAAQ,GAAInD,GACtD1L,KAAKuW,aAAesG,MAAMC,QAASjO,GAAUA,KAE7C7O,KAAKod,kBAAkClc,KAAlBkc,EAA8BA,EAAgB,EAoDpE,QAAS8G,MAERliB,OAAOC,eAAgBjC,KAAM,MAAQkC,MAAOiiB,IAAc,IAE1DnkB,KAAKoC,KAAOC,GAAMC,eAElBtC,KAAKuC,KAAO,GACZvC,KAAK6B,KAAO,WAEZ7B,KAAKqM,YACLrM,KAAKokB,UACLpkB,KAAKsM,SACLtM,KAAKqkB,mBAELrkB,KAAK6X,gBACL7X,KAAKskB,gBAELtkB,KAAKukB,eACLvkB,KAAKwkB,eAELxkB,KAAKykB,iBAELzkB,KAAK0kB,YAAc,KACnB1kB,KAAK2kB,eAAiB,KAItB3kB,KAAK4kB,oBAAqB,EAC1B5kB,KAAK6kB,oBAAqB,EAC1B7kB,KAAK8kB,eAAgB,EACrB9kB,KAAK+kB,mBAAoB,EACzB/kB,KAAKglB,kBAAmB,EACxBhlB,KAAKilB,yBAA0B,EAC/BjlB,KAAKklB,kBAAmB,EAs3CzB,QAASC,IAAiB5f,EAAO6f,EAAUC,GAE1C,GAAKxI,MAAMC,QAASvX,GAEnB,KAAM,IAAI+f,WAAW,wDAItBtlB,MAAKoC,KAAOC,GAAMC,eAClBtC,KAAKuC,KAAO,GAEZvC,KAAKuF,MAAQA,EACbvF,KAAKolB,SAAWA,EAChBplB,KAAKwhB,UAAkBtgB,KAAVqE,EAAsBA,EAAM/E,OAAS4kB,EAAW,EAC7DplB,KAAKqlB,YAA4B,IAAfA,EAElBrlB,KAAKugB,SAAU,EACfvgB,KAAKuhB,aAAgBve,OAAQ,EAAGwe,OAAS,GAEzCxhB,KAAK0gB,iBAAmB,aAExB1gB,KAAK2D,QAAU,EAyThB,QAAS4hB,IAAqBhgB,EAAO6f,EAAUC,GAE9CF,GAAgBzgB,KAAM1E,KAAM,GAAIihB,WAAW1b,GAAS6f,EAAUC,GAQ/D,QAASG,IAAsBjgB,EAAO6f,EAAUC,GAE/CF,GAAgBzgB,KAAM1E,KAAM,GAAImhB,YAAY5b,GAAS6f,EAAUC,GAQhE,QAASI,IAA6BlgB,EAAO6f,EAAUC,GAEtDF,GAAgBzgB,KAAM1E,KAAM,GAAI0lB,mBAAmBngB,GAAS6f,EAAUC,GAQvE,QAASM,IAAsBpgB,EAAO6f,EAAUC,GAE/CF,GAAgBzgB,KAAM1E,KAAM,GAAI4gB,YAAYrb,GAAS6f,EAAUC,GAQhE,QAASO,IAAuBrgB,EAAO6f,EAAUC,GAEhDF,GAAgBzgB,KAAM1E,KAAM,GAAIuM,aAAahH,GAAS6f,EAAUC,GAQjE,QAASQ,IAAsBtgB,EAAO6f,EAAUC,GAE/CF,GAAgBzgB,KAAM1E,KAAM,GAAIoG,YAAYb,GAAS6f,EAAUC,GAQhE,QAASS,IAAuBvgB,EAAO6f,EAAUC,GAEhDF,GAAgBzgB,KAAM1E,KAAM,GAAI8gB,aAAavb,GAAS6f,EAAUC,GAQjE,QAASU,IAAwBxgB,EAAO6f,EAAUC,GAEjDF,GAAgBzgB,KAAM1E,KAAM,GAAI8F,cAAcP,GAAS6f,EAAUC,GAQlE,QAASW,IAAwBzgB,EAAO6f,EAAUC,GAEjDF,GAAgBzgB,KAAM1E,KAAM,GAAI2gB,cAAcpb,GAAS6f,EAAUC,GAWlE,QAASY,MAERjmB,KAAKkmB,WACLlmB,KAAKqM,YACLrM,KAAKmmB,WACLnmB,KAAKokB,UACLpkB,KAAKomB,OACLpmB,KAAKqmB,QAELrmB,KAAK+c,UAEL/c,KAAK6X,gBAEL7X,KAAKukB,eACLvkB,KAAKwkB,eAILxkB,KAAK0kB,YAAc,KACnB1kB,KAAK2kB,eAAiB,KAItB3kB,KAAK6kB,oBAAqB,EAC1B7kB,KAAK+kB,mBAAoB,EACzB/kB,KAAKglB,kBAAmB,EACxBhlB,KAAK8kB,eAAgB,EACrB9kB,KAAKklB,kBAAmB,EAwOzB,QAASoB,IAAU/gB,GAElB,GAAsB,IAAjBA,EAAM/E,OAAe,OAASuL,EAAAA,CAInC,KAAM,GAFFD,GAAMvG,EAAO,GAEPS,EAAI,EAAG8K,EAAIvL,EAAM/E,OAAQwF,EAAI8K,IAAM9K,EAEvCT,EAAOS,GAAM8F,IAAMA,EAAMvG,EAAOS,GAItC,OAAO8F,GAWR,QAASya,MAERvkB,OAAOC,eAAgBjC,KAAM,MAAQkC,MAAOskB,IAAoB,IAEhExmB,KAAKoC,KAAOC,GAAMC,eAElBtC,KAAKuC,KAAO,GACZvC,KAAK6B,KAAO,iBAEZ7B,KAAKymB,MAAQ,KACbzmB,KAAKqO,cAELrO,KAAK2a,mBAEL3a,KAAK+c,UAEL/c,KAAK0kB,YAAc,KACnB1kB,KAAK2kB,eAAiB,KAEtB3kB,KAAK0mB,WAAcC,MAAO,EAAGnF,MAAOzV,EAAAA,GAgkCrC,QAAS6a,IAAa7iB,EAAOC,EAAQ4M,EAAOiW,EAAeC,EAAgBC,GAE1E7C,GAASxf,KAAM1E,MAEfA,KAAK6B,KAAO,cAEZ7B,KAAKyX,YACJ1T,MAAOA,EACPC,OAAQA,EACR4M,MAAOA,EACPiW,cAAeA,EACfC,eAAgBA,EAChBC,cAAeA,GAGhB/mB,KAAKgnB,mBAAoB,GAAIC,IAAmBljB,EAAOC,EAAQ4M,EAAOiW,EAAeC,EAAgBC,IACrG/mB,KAAKknB,gBASN,QAASD,IAAmBljB,EAAOC,EAAQ4M,EAAOiW,EAAeC,EAAgBC,GAuDhF,QAASI,GAAYC,EAAG5gB,EAAG3F,EAAGwmB,EAAMC,EAAMvjB,EAAOC,EAAQ4M,EAAO2W,EAAOC,EAAOpK,GAE7E,GAaIqK,GAAIC,EAbJC,EAAe5jB,EAAQwjB,EACvBK,EAAgB5jB,EAASwjB,EAEzBK,EAAY9jB,EAAQ,EACpB+jB,EAAa9jB,EAAS,EACtB+jB,EAAYnX,EAAQ,EAEpBoX,EAAST,EAAQ,EACjBU,EAAST,EAAQ,EAEjBU,EAAgB,EAChBC,EAAa,EAIbC,EAAS,GAAIjnB,EAIjB,KAAMumB,EAAK,EAAGA,EAAKO,EAAQP,IAAQ,CAElC,GAAItnB,GAAIsnB,EAAKE,EAAgBE,CAE7B,KAAML,EAAK,EAAGA,EAAKO,EAAQP,IAAQ,CAElC,GAAItnB,GAAIsnB,EAAKE,EAAeE,CAI5BO,GAAQhB,GAAMjnB,EAAIknB,EAClBe,EAAQ5hB,GAAMpG,EAAIknB,EAClBc,EAAQvnB,GAAMknB,EAId1b,EAAS9B,KAAM6d,EAAOjoB,EAAGioB,EAAOhoB,EAAGgoB,EAAOxnB,GAI1CwnB,EAAQhB,GAAM,EACdgB,EAAQ5hB,GAAM,EACd4hB,EAAQvnB,GAAM+P,EAAQ,EAAI,GAAM,EAIhCuV,EAAQ5b,KAAM6d,EAAOjoB,EAAGioB,EAAOhoB,EAAGgoB,EAAOxnB,GAIzCwlB,EAAI7b,KAAMkd,EAAKF,GACfnB,EAAI7b,KAAM,EAAMmd,EAAKF,GAIrBU,GAAiB,GAYnB,IAAMR,EAAK,EAAGA,EAAKF,EAAOE,IAEzB,IAAMD,EAAK,EAAGA,EAAKF,EAAOE,IAAQ,CAEjC,GAAItT,GAAIkU,EAAmBZ,EAAKO,EAASN,EACrCvgB,EAAIkhB,EAAmBZ,EAAKO,GAAWN,EAAK,GAC5C5D,EAAIuE,GAAqBZ,EAAK,GAAMO,GAAWN,EAAK,GACpDY,EAAID,GAAqBZ,EAAK,GAAMO,EAASN,CAIjDxB,GAAQ3b,KAAM4J,EAAGhN,EAAGmhB,GACpBpC,EAAQ3b,KAAMpD,EAAG2c,EAAGwE,GAIpBH,GAAc,EAQhBzM,EAAM6M,SAAUC,EAAYL,EAAY/K,GAIxCoL,GAAcL,EAIdE,GAAoBH,EAzJrB3B,GAAe7hB,KAAM1E,MAErBA,KAAK6B,KAAO,oBAEZ7B,KAAKyX,YACJ1T,MAAOA,EACPC,OAAQA,EACR4M,MAAOA,EACPiW,cAAeA,EACfC,eAAgBA,EAChBC,cAAeA,EAGhB,IAAIrL,GAAQ1b,IAEZ+D,GAAQA,GAAS,EACjBC,EAASA,GAAU,EACnB4M,EAAQA,GAAS,EAIjBiW,EAAgB4B,KAAKC,MAAO7B,IAAmB,EAC/CC,EAAiB2B,KAAKC,MAAO5B,IAAoB,EACjDC,EAAgB0B,KAAKC,MAAO3B,IAAmB,CAI/C,IAAIb,MACA7Z,KACA8Z,KACAC,KAIAiC,EAAmB,EACnBG,EAAa,CAIjBrB,GAAY,IAAK,IAAK,KAAO,GAAK,EAAGvW,EAAO5M,EAAQD,EAAOgjB,EAAeD,EAAgB,GAC1FK,EAAY,IAAK,IAAK,IAAK,GAAK,EAAGvW,EAAO5M,GAAUD,EAAOgjB,EAAeD,EAAgB,GAC1FK,EAAY,IAAK,IAAK,IAAK,EAAG,EAAGpjB,EAAO6M,EAAO5M,EAAQ6iB,EAAeE,EAAe,GACrFI,EAAY,IAAK,IAAK,IAAK,GAAK,EAAGpjB,EAAO6M,GAAS5M,EAAQ6iB,EAAeE,EAAe,GACzFI,EAAY,IAAK,IAAK,IAAK,GAAK,EAAGpjB,EAAOC,EAAQ4M,EAAOiW,EAAeC,EAAgB,GACxFK,EAAY,IAAK,IAAK,KAAO,GAAK,EAAGpjB,EAAOC,GAAU4M,EAAOiW,EAAeC,EAAgB,GAI5F9mB,KAAK2oB,SAAUzC,GACflmB,KAAK4oB,aAAc,WAAY,GAAI7C,IAAwB1Z,EAAU,IACrErM,KAAK4oB,aAAc,SAAU,GAAI7C,IAAwBI,EAAS,IAClEnmB,KAAK4oB,aAAc,KAAM,GAAI7C,IAAwBK,EAAK,IAsH3D,QAASyC,IAAe9kB,EAAOC,EAAQ6iB,EAAeC,GAErD5C,GAASxf,KAAM1E,MAEfA,KAAK6B,KAAO,gBAEZ7B,KAAKyX,YACJ1T,MAAOA,EACPC,OAAQA,EACR6iB,cAAeA,EACfC,eAAgBA,GAGjB9mB,KAAKgnB,mBAAoB,GAAI8B,IAAqB/kB,EAAOC,EAAQ6iB,EAAeC,IAChF9mB,KAAKknB,gBASN,QAAS4B,IAAqB/kB,EAAOC,EAAQ6iB,EAAeC,GAE3DP,GAAe7hB,KAAM1E,MAErBA,KAAK6B,KAAO,sBAEZ7B,KAAKyX,YACJ1T,MAAOA,EACPC,OAAQA,EACR6iB,cAAeA,EACfC,eAAgBA,GAGjB/iB,EAAQA,GAAS,EACjBC,EAASA,GAAU,CAEnB,IAYIyjB,GAAIC,EAZJqB,EAAahlB,EAAQ,EACrBilB,EAAchlB,EAAS,EAEvBujB,EAAQkB,KAAKC,MAAO7B,IAAmB,EACvCW,EAAQiB,KAAKC,MAAO5B,IAAoB,EAExCkB,EAAST,EAAQ,EACjBU,EAAST,EAAQ,EAEjByB,EAAgBllB,EAAQwjB,EACxB2B,EAAiBllB,EAASwjB,EAM1BtB,KACA7Z,KACA8Z,KACAC,IAIJ,KAAMsB,EAAK,EAAGA,EAAKO,EAAQP,IAAQ,CAElC,GAAItnB,GAAIsnB,EAAKwB,EAAiBF,CAE9B,KAAMvB,EAAK,EAAGA,EAAKO,EAAQP,IAAQ,CAElC,GAAItnB,GAAIsnB,EAAKwB,EAAgBF,CAE7B1c,GAAS9B,KAAMpK,GAAKC,EAAG,GAEvB+lB,EAAQ5b,KAAM,EAAG,EAAG,GAEpB6b,EAAI7b,KAAMkd,EAAKF,GACfnB,EAAI7b,KAAM,EAAMmd,EAAKF,IAQvB,IAAME,EAAK,EAAGA,EAAKF,EAAOE,IAEzB,IAAMD,EAAK,EAAGA,EAAKF,EAAOE,IAAQ,CAEjC,GAAItT,GAAIsT,EAAKO,EAASN,EAClBvgB,EAAIsgB,EAAKO,GAAWN,EAAK,GACzB5D,EAAM2D,EAAK,EAAMO,GAAWN,EAAK,GACjCY,EAAMb,EAAK,EAAMO,EAASN,CAI9BxB,GAAQ3b,KAAM4J,EAAGhN,EAAGmhB,GACpBpC,EAAQ3b,KAAMpD,EAAG2c,EAAGwE,GAQtBtoB,KAAK2oB,SAAUzC,GACflmB,KAAK4oB,aAAc,WAAY,GAAI7C,IAAwB1Z,EAAU,IACrErM,KAAK4oB,aAAc,SAAU,GAAI7C,IAAwBI,EAAS,IAClEnmB,KAAK4oB,aAAc,KAAM,GAAI7C,IAAwBK,EAAK,IA0C3D,QAAS+C,IAAmB1R,GAE3BzB,EAAStR,KAAM1E,MAEfA,KAAK6B,KAAO,oBAEZ7B,KAAK6O,MAAQ,GAAInD,GAAO,UAExB1L,KAAKqF,IAAM,KAEXrF,KAAKopB,SAAW,KAChBppB,KAAKqpB,kBAAoB,EAEzBrpB,KAAKspB,MAAQ,KACbtpB,KAAKupB,eAAiB,EAEtBvpB,KAAKwpB,YAAc,KAEnBxpB,KAAK8X,SAAW,KAEhB9X,KAAKypB,OAAS,KACdzpB,KAAK0pB,QAAUC,GACf3pB,KAAK4pB,aAAe,EACpB5pB,KAAK6pB,gBAAkB,IAEvB7pB,KAAKkY,WAAY,EACjBlY,KAAKmY,mBAAqB,EAC1BnY,KAAK8pB,iBAAmB,QACxB9pB,KAAK+pB,kBAAoB,QAEzB/pB,KAAK4X,UAAW,EAChB5X,KAAK6X,cAAe,EAEpB7X,KAAKkW,QAAS,EAEdlW,KAAKoY,UAAWX,GAiEjB,QAASuS,IAAgBvS,GAExBzB,EAAStR,KAAM1E,MAEfA,KAAK6B,KAAO,iBAEZ7B,KAAKiqB,WACLjqB,KAAKyO,YAELzO,KAAKiO,aAAe,gGACpBjO,KAAKmO,eAAiB,iEAEtBnO,KAAK+b,UAAY,EAEjB/b,KAAKkY,WAAY,EACjBlY,KAAKmY,mBAAqB,EAE1BnY,KAAK2U,KAAM,EACX3U,KAAKkW,QAAS,EACdlW,KAAKkqB,UAAW,EAEhBlqB,KAAK4X,UAAW,EAChB5X,KAAK6X,cAAe,EACpB7X,KAAKskB,cAAe,EAEpBtkB,KAAKmqB,YACJC,aAAa,EACbC,WAAW,EACXC,aAAa,EACbC,kBAAkB,GAKnBvqB,KAAKwqB,wBACJ3b,OAAW,EAAG,EAAG,GACjBL,IAAQ,EAAG,GACXic,KAAS,EAAG,IAGbzqB,KAAK0qB,wBAAsBxpB,OAEPA,KAAfuW,QAE2BvW,KAA1BuW,EAAWpJ,YAEf5N,QAAQC,MAAO,2FAIhBV,KAAKoY,UAAWX,IAuDlB,QAASkT,IAAKC,EAAQC,GAErB7qB,KAAK4qB,WAAsB1pB,KAAX0pB,EAAyBA,EAAS,GAAIzpB,GACtDnB,KAAK6qB,cAA4B3pB,KAAd2pB,EAA4BA,EAAY,GAAI1pB,GA+gBhE,QAAS2pB,IAAOnE,EAAOoE,GAEtB/qB,KAAK2mB,UAAoBzlB,KAAVylB,EAAwBA,EAAQ,GAAIxlB,GACnDnB,KAAK+qB,QAAgB7pB,KAAR6pB,EAAsBA,EAAM,GAAI5pB,GA2H9C,QAAS6pB,IAAU7W,EAAGhN,EAAG2c,GAExB9jB,KAAKmU,MAAYjT,KAANiT,EAAoBA,EAAI,GAAIhT,GACvCnB,KAAKmH,MAAYjG,KAANiG,EAAoBA,EAAI,GAAIhG,GACvCnB,KAAK8jB,MAAY5iB,KAAN4iB,EAAoBA,EAAI,GAAI3iB,GA0PxC,QAAS8pB,IAAMhR,EAAU9E,GAExBkN,GAAS3d,KAAM1E,MAEfA,KAAK6B,KAAO,OAEZ7B,KAAKia,aAAwB/Y,KAAb+Y,EAAyBA,EAAW,GAAIsM,IACxDvmB,KAAKmV,aAAwBjU,KAAbiU,EAAyBA,EAAW,GAAIgU,KAAqBta,MAAuB,SAAhB4Z,KAAKyC,WAEzFlrB,KAAKmrB,SAAWC;iBAEhBprB,KAAKqrB,qBAoXN,QAASC,IAAiBplB,EAAU+F,EAAOsf,EAAY7V,GAQtD,QAASjG,GAAQ+b,EAAY7b,EAAOC,EAAQ6b,GAE3C,GAAIC,GAAa/b,EAAM+b,UAEH,QAAfA,EAEJlN,EAAUmN,EAAYC,GAEXF,GAAcA,EAAWzH,UAEpCzF,EAAUkN,EAAY,GACtBD,GAAa,IAITvlB,EAAS2lB,WAAaJ,IAE1BvlB,EAAS2Z,MAAO3Z,EAAS4lB,eAAgB5lB,EAAS6lB,eAAgB7lB,EAAS8lB,kBAIvEN,GAAcA,EAAWO,mBAEZ/qB,KAAZgrB,IAEJA,EAAU,GAAIjB,IACb,GAAIhE,IAAmB,EAAG,EAAG,GAC7B,GAAI+C,KACHvb,SAAU0d,GAAUC,KAAK3d,SACzBR,aAAcke,GAAUC,KAAKne,aAC7BE,eAAgBge,GAAUC,KAAKje,eAC/BiI,KAAM0F,GACNlG,WAAW,EACXC,YAAY,EACZlB,KAAK,KAIPuX,EAAQjS,SAASoS,gBAAiB,UAClCH,EAAQjS,SAASoS,gBAAiB,MAElCH,EAAQ7W,eAAiB,SAAWnP,EAAUyJ,EAAOC,GAEpD5P,KAAKgR,YAAYsb,aAAc1c,EAAOoB,cAIvCua,EAAW3O,OAAQsP,EAAQjS,WAI5BiS,EAAQ/W,SAAS1G,SAAS8d,MAAMrqB,MAAQwpB,EAExCF,EAAWjhB,KAAM2hB,EAASA,EAAQjS,SAAUiS,EAAQ/W,SAAU,EAAG,OAEtDuW,GAAcA,EAAWc,gBAEftrB,KAAhBurB,IAEJA,EAAc,GAAInJ,KAAsB,EAAG,EAAG,GAAK,EAAG,EAAG,GAEzDoJ,EAAY,GAAIzB,IACf,GAAInC,IAAqB,EAAG,GAC5B,GAAIK,KAAqBvT,WAAW,EAAOC,YAAY,EAAOlB,KAAK,KAGpE4W,EAAW3O,OAAQ8P,EAAUzS,WAI9ByS,EAAUvX,SAAS9P,IAAMqmB,EAIzBxlB,EAASqX,mBAAoBkP,EAAa,KAAMC,EAAUzS,SAAUyS,EAAUvX,SAAUuX,EAAW,OAMrG,QAASlO,GAAU3P,EAAO8d,GAEzB1gB,EAAM0E,QAAQ9B,MAAM2P,SAAU3P,EAAMjJ,EAAGiJ,EAAM3H,EAAG2H,EAAM1H,EAAGwlB,EAAOjX,GAxFjE,GAGI+W,GAAaC,EACbR,EAJAP,EAAa,GAAIjgB,GAAO,GACxBkgB,EAAa,CA2FjB,QAECgB,cAAe,WAEd,MAAOjB,IAGRkB,cAAe,SAAWhe,EAAO8d,GAEhChB,EAAW9jB,IAAKgH,GAChB+c,MAAuB1qB,KAAVyrB,EAAsBA,EAAQ,EAC3CnO,EAAUmN,EAAYC,IAGvBkB,cAAe,WAEd,MAAOlB,IAGRmB,cAAe,SAAWJ,GAEzBf,EAAae,EACbnO,EAAUmN,EAAYC,IAGvBnc,OAAQA,GAUV,QAASyE,IAAmBC,EAAGhN,GAE9B,MAAKgN,GAAEC,cAAgBjN,EAAEiN,YAEjBD,EAAEC,YAAcjN,EAAEiN,YAEdD,EAAE/I,SAAWjE,EAAEiE,SAAW+I,EAAE/I,UAAYjE,EAAEiE,QAE9C+I,EAAE/I,QAAQrB,GAAK5C,EAAEiE,QAAQrB,GAErBoK,EAAEgB,SAASpL,KAAO5C,EAAEgO,SAASpL,GAEjCoK,EAAEgB,SAASpL,GAAK5C,EAAEgO,SAASpL,GAEvBoK,EAAEvT,IAAMuG,EAAEvG,EAEduT,EAAEvT,EAAIuG,EAAEvG,EAIRuT,EAAEpK,GAAK5C,EAAE4C,GAMlB,QAASijB,IAA0B7Y,EAAGhN,GAErC,MAAKgN,GAAEC,cAAgBjN,EAAEiN,YAEjBD,EAAEC,YAAcjN,EAAEiN,YAEnBD,EAAEvT,IAAMuG,EAAEvG,EAETuG,EAAEvG,EAAIuT,EAAEvT,EAIRuT,EAAEpK,GAAK5C,EAAE4C,GAMlB,QAASkjB,MAQR,QAAS7gB,KAER8gB,EAAmB,EAEnBC,EAAO3sB,OAAS,EAChBiW,EAAYjW,OAAS,EAItB,QAAS+J,GAAMqP,EAAQK,EAAU9E,EAAUvU,EAAGsc,GAE7C,GAAIkQ,GAAaC,EAAaH,OAEVhsB,KAAfksB,GAEJA,GACCrjB,GAAI6P,EAAO7P,GACX6P,OAAQA,EACRK,SAAUA,EACV9E,SAAUA,EACV/J,QAAS+J,EAAS/J,QAClBgJ,YAAawF,EAAOxF,YACpBxT,EAAGA,EACHsc,MAAOA,GAGRmQ,EAAaH,GAAqBE,IAIlCA,EAAWrjB,GAAK6P,EAAO7P,GACvBqjB,EAAWxT,OAASA,EACpBwT,EAAWnT,SAAWA,EACtBmT,EAAWjY,SAAWA,EACtBiY,EAAWhiB,QAAU+J,EAAS/J,QAC9BgiB,EAAWhZ,YAAcwF,EAAOxF,YAChCgZ,EAAWxsB,EAAIA,EACfwsB,EAAWlQ,MAAQA,KAIO,IAAzB/H,EAASsB,YAAuBA,EAAc0W,GAAS5iB,KAAM6iB,GAE/DF,IAID,QAAShY,KAEHiY,EAAO3sB,OAAS,GAAI2sB,EAAOjY,KAAMhB,IACjCuC,EAAYjW,OAAS,GAAIiW,EAAYvB,KAAM8X,IAxDjD,GAAIK,MACAH,EAAmB,EAEnBC,KACA1W,IAwDJ,QACC0W,OAAQA,EACR1W,YAAaA,EAEbrK,KAAMA,EACN7B,KAAMA,EAEN2K,KAAMA,GAKR,QAASoY,MAIR,QAAS3L,GAAKhS,EAAOC,GAEpB,GAAI2d,GAAO5d,EAAM5F,GAAK,IAAM6F,EAAO7F,GAC/ByjB,EAAOC,EAAOF,EAWlB,YATcrsB,KAATssB,IAIJA,EAAO,GAAIP,IACXQ,EAAOF,GAASC,GAIVA,EAIR,QAASE,KAERD,KAtBD,GAAIA,KA0BJ,QACC9L,IAAKA,EACL+L,QAASA,GASX,QAASC,IAAkBxZ,EAAGhN,GAE7B,MAAOshB,MAAKmF,IAAKzmB,EAAG,IAAQshB,KAAKmF,IAAKzZ,EAAG,IAI1C,QAAS0Z,IAAmBtnB,GAK3B,QAASqW,GAAQhD,EAAQK,EAAU9E,EAAU/J,GAE5C,GAAI0iB,GAAmBlU,EAAOmU,sBAE1BvtB,EAASstB,EAAiBttB,OAE1BwtB,EAAaC,EAAgBhU,EAASlQ,GAE1C,QAAoB7I,KAAf8sB,EAA2B,CAI/BA,IAEA,KAAM,GAAIhoB,GAAI,EAAGA,EAAIxF,EAAQwF,IAE5BgoB,EAAYhoB,IAAQA,EAAG,EAIxBioB,GAAgBhU,EAASlQ,IAAOikB,EASjC,IAAM,GALFnW,GAAe1C,EAAS0C,cAAgBoC,EAASU,gBAAgB1H,SACjEqR,EAAenP,EAASmP,cAAgBrK,EAASU,gBAAgB9B,OAI3D7S,EAAI,EAAGA,EAAIxF,EAAQwF,IAAO,CAEnC,GAAIkoB,GAAYF,EAAYhoB,EAEJ,KAAnBkoB,EAAW,KAEVrW,GAAeoC,EAASoS,gBAAiB,cAAgBrmB,GACzDse,GAAerK,EAASoS,gBAAiB,cAAgBrmB,IAQhE,IAAM,GAAIA,GAAI,EAAGA,EAAIxF,EAAQwF,IAAO,CAEnC,GAAIkoB,GAAYF,EAAYhoB,EAE5BkoB,GAAW,GAAMloB,EACjBkoB,EAAW,GAAMJ,EAAkB9nB,GAIpCgoB,EAAW9Y,KAAMyY,GAIjB,KAAM,GAAI3nB,GAAI,EAAGA,EAAI,EAAGA,IAAO,CAE9B,GAAIkoB,GAAYF,EAAYhoB,EAE5B,IAAKkoB,EAAY,CAEhB,GAAIzH,GAAQyH,EAAW,GACnBhsB,EAAQgsB,EAAW,EAEvB,IAAKhsB,EAAQ,CAEP2V,GAAeoC,EAAS2O,aAAc,cAAgB5iB,EAAG6R,EAAc4O,IACvEnC,GAAerK,EAAS2O,aAAc,cAAgB5iB,EAAGse,EAAcmC,IAE5E0H,EAAiBnoB,GAAM9D,CACvB,WAMFisB,EAAiBnoB,GAAM,EAIxBoF,EAAQgjB,cAAcnkB,SAAU1D,EAAI,wBAAyB4nB,GArF9D,GAAIF,MACAE,EAAkB,GAAIroB,cAAc,EAwFxC,QAEC8W,OAAQA,GAUV,QAASyR,IAA4B9nB,EAAI4jB,EAAYmE,GAIpD,QAASC,GAASrsB,GAEjBssB,EAAOtsB,EAMR,QAASymB,GAAUzmB,GAElBL,EAAOK,EAAML,KACbuf,EAAkBlf,EAAMkf,gBAIzB,QAAS3R,GAAQkX,EAAOnF,GAEvBjb,EAAGsL,aAAc2c,EAAMhN,EAAO3f,EAAM8kB,EAAQvF,GAE5CkN,EAAWG,QACXH,EAAWjiB,UAAYmV,EAElBgN,IAASjoB,EAAGuL,UAAYwc,EAAWhiB,OAASkV,EAAQ,EAC/CgN,IAASjoB,EAAGmoB,SAASJ,EAAWK,QAAUnN,GAIrD,QAASoN,GAAiB3U,EAAU0M,EAAOnF,GAE1C,GAAIqN,GAAY1E,EAAWxI,IAAK,yBAEhC,IAAmB,OAAdkN,EAGJ,WADApuB,SAAQC,MAAO,wIAKhBmuB,GAAUC,2BAA4BN,EAAMhN,EAAO3f,EAAM8kB,EAAQvF,EAAiBnH,EAAS8U,mBAE3FT,EAAWG,QACXH,EAAWjiB,UAAYmV,EAAQvH,EAAS8U,kBAEnCP,IAASjoB,EAAGuL,UAAYwc,EAAWhiB,OAAS2N,EAAS8U,kBAAoBvN,EAAQ,EAC5EgN,IAASjoB,EAAGmoB,SAASJ,EAAWK,QAAU1U,EAAS8U,kBAAoBvN,GA9ClF,GAAIgN,GAQA3sB,EAAMuf,CA4CVphB,MAAKuuB,QAAUA,EACfvuB,KAAK2oB,SAAWA,EAChB3oB,KAAKyP,OAASA,EACdzP,KAAK4uB,gBAAkBA,EAQxB,QAASI,IAAqBzoB,EAAI4jB,EAAYmE,GAI7C,QAASC,GAASrsB,GAEjBssB,EAAOtsB,EAIR,QAASuN,GAAQkX,EAAOnF,GAEvBjb,EAAG0oB,WAAYT,EAAM7H,EAAOnF,GAE5B8M,EAAWG,QACXH,EAAWjiB,UAAYmV,EAElBgN,IAASjoB,EAAGuL,UAAYwc,EAAWhiB,OAASkV,EAAQ,EAC/CgN,IAASjoB,EAAGmoB,SAASJ,EAAWK,QAAUnN,GAIrD,QAASoN,GAAiB3U,EAAU0M,EAAOnF,GAE1C,GAAIqN,GAAY1E,EAAWxI,IAAK,yBAEhC,IAAmB,OAAdkN,EAGJ,WADApuB,SAAQC,MAAO,iIAKhB,IAAIuS,GAAWgH,EAAS5L,WAAW4E,QAE9BA,GAAS2O,8BAEbJ,EAAQvO,EAASnO,KAAK0c,MAEtBqN,EAAUK,yBAA0BV,EAAM,EAAGhN,EAAOvH,EAAS8U,oBAI7DF,EAAUK,yBAA0BV,EAAM7H,EAAOnF,EAAOvH,EAAS8U,mBAIlET,EAAWG,QACXH,EAAWjiB,UAAYmV,EAAQvH,EAAS8U,kBAEnCP,IAASjoB,EAAGuL,UAAYwc,EAAWhiB,OAAS2N,EAAS8U,kBAAoBvN,EAAQ,EAC5EgN,IAASjoB,EAAGmoB,SAASJ,EAAWK,QAAU1U,EAAS8U,kBAAoBvN,GAjDlF,GAAIgN,EAuDJxuB,MAAKuuB,QAAUA,EACfvuB,KAAKyP,OAASA,EACdzP,KAAK4uB,gBAAkBA,EAQxB,QAASO,IAAiB5oB,EAAI8H,EAAY+gB,GAKzC,QAASC,GAAmBC,GAE3B,GAAIrV,GAAWqV,EAAM9P,OACjB+P,EAAiBhE,EAAYtR,EAASlQ,GAEZ,QAAzBwlB,EAAe9I,OAEnBpY,EAAWwT,OAAQ0N,EAAe9I,MAInC,KAAM,GAAIlkB,KAAQgtB,GAAelhB,WAEhCA,EAAWwT,OAAQ0N,EAAelhB,WAAY9L,GAI/C0X,GAASuV,oBAAqB,UAAWH,SAElC9D,GAAYtR,EAASlQ,GAI5B,IAAIqW,GAAYqP,EAAqBxV,EAASlQ,GAEzCqW,KAEJ/R,EAAWwT,OAAQzB,SACZqP,GAAqBxV,EAASlQ,KAItCqW,EAAYqP,EAAqBF,EAAexlB,IAE3CqW,IAEJ/R,EAAWwT,OAAQzB,SACZqP,GAAqBF,EAAexlB,KAM5CqlB,EAAW7D,aAIZ,QAAS5J,GAAK/H,EAAQK,GAErB,GAAIsV,GAAiBhE,EAAYtR,EAASlQ,GAE1C,OAAKwlB,KAELtV,EAASyV,iBAAkB,UAAWL,GAEjCpV,EAASS,iBAEb6U,EAAiBtV,EAENA,EAASW,iBAEc1Z,KAA7B+Y,EAAS0V,kBAEb1V,EAAS0V,iBAAkB,GAAIpJ,KAAiBqJ,cAAehW,IAIhE2V,EAAiBtV,EAAS0V,iBAI3BpE,EAAYtR,EAASlQ,IAAOwlB,EAE5BH,EAAW7D,aAEJgE,GAIR,QAAS3S,GAAQ3C,GAEhB,GAAIwM,GAAQxM,EAASwM,MACjBoJ,EAAqB5V,EAAS5L,UAEnB,QAAVoY,GAEJpY,EAAWuO,OAAQ6J,EAAOlgB,EAAGwG,qBAI9B,KAAM,GAAIxK,KAAQstB,GAEjBxhB,EAAWuO,OAAQiT,EAAoBttB,GAAQgE,EAAGqG,aAMnD,IAAI+N,GAAkBV,EAASU,eAE/B,KAAM,GAAIpY,KAAQoY,GAIjB,IAAM,GAFFpV,GAAQoV,EAAiBpY,GAEnByD,EAAI,EAAG8K,EAAIvL,EAAM/E,OAAQwF,EAAI8K,EAAG9K,IAEzCqI,EAAWuO,OAAQrX,EAAOS,GAAKO,EAAGqG,cAQrC,QAASkjB,GAAuB7V,GAE/B,GAAImG,GAAYqP,EAAqBxV,EAASlQ,GAE9C,IAAKqW,EAAY,MAAOA,EAExB,IAAI8F,MAEA6J,EAAgB9V,EAASwM,MACzBoJ,EAAqB5V,EAAS5L,UAIlC,IAAuB,OAAlB0hB,EAIJ,IAAM,GAFFxqB,GAAQwqB,EAAcxqB,MAEhBS,EAAI,EAAG8K,EAAIvL,EAAM/E,OAAQwF,EAAI8K,EAAG9K,GAAK,EAAI,CAElD,GAAImO,GAAI5O,EAAOS,EAAI,GACfmB,EAAI5B,EAAOS,EAAI,GACf8d,EAAIve,EAAOS,EAAI,EAEnBkgB,GAAQ3b,KAAM4J,EAAGhN,EAAGA,EAAG2c,EAAGA,EAAG3P,OAQ9B,KAAM,GAFF5O,GAAQsqB,EAAmB5c,SAAS1N,MAE9BS,EAAI,EAAG8K,EAAMvL,EAAM/E,OAAS,EAAM,EAAGwF,EAAI8K,EAAG9K,GAAK,EAAI,CAE9D,GAAImO,GAAInO,EAAI,EACRmB,EAAInB,EAAI,EACR8d,EAAI9d,EAAI,CAEZkgB,GAAQ3b,KAAM4J,EAAGhN,EAAGA,EAAG2c,EAAGA,EAAG3P,GAc/B,MANAiM,GAAY,IAAMkG,GAAUJ,GAAY,MAAQJ,GAAwBF,IAAyBM,EAAS,GAE1G7X,EAAWuO,OAAQwD,EAAW7Z,EAAGwG,sBAEjC0iB,EAAqBxV,EAASlQ,IAAOqW,EAE9BA,EAxKR,GAAImL,MACAkE,IA2KJ,QAEC9N,IAAKA,EACL/E,OAAQA,EAERkT,sBAAuBA,GAUzB,QAASE,MAER,GAAI9Z,KAEJ,QAECyL,IAAK,SAAW/C,GAEf,OAA4B1d,KAAvBgV,EAAQ0I,EAAM7U,IAElB,MAAOmM,GAAQ0I,EAAM7U,GAItB,IAAI0E,EAEJ,QAASmQ,EAAM/c,MAEd,IAAK,mBACJ4M,GACCoc,UAAW,GAAI1pB,GACf0N,MAAO,GAAInD,GAEXmT,QAAQ,EACRoR,WAAY,EACZC,aAAc,EACdC,cAAe,GAAIjwB,GAEpB,MAED,KAAK,YACJuO,GACCwE,SAAU,GAAI9R,GACd0pB,UAAW,GAAI1pB,GACf0N,MAAO,GAAInD,GACX0kB,SAAU,EACVC,QAAS,EACTC,YAAa,EACbC,MAAO,EAEP1R,QAAQ,EACRoR,WAAY,EACZC,aAAc,EACdC,cAAe,GAAIjwB,GAEpB,MAED,KAAK,aACJuO,GACCwE,SAAU,GAAI9R,GACd0N,MAAO,GAAInD,GACX0kB,SAAU,EACVG,MAAO,EAEP1R,QAAQ,EACRoR,WAAY,EACZC,aAAc,EACdC,cAAe,GAAIjwB,GACnB6Z,iBAAkB,EAClBC,gBAAiB,IAElB,MAED,KAAK,kBACJvL,GACCoc,UAAW,GAAI1pB,GACfqvB,SAAU,GAAI9kB,GACd+kB,YAAa,GAAI/kB,GAElB,MAED,KAAK,gBACJ+C,GACCI,MAAO,GAAInD,GACXuH,SAAU,GAAI9R,GACduvB,UAAW,GAAIvvB,GACfwvB,WAAY,GAAIxvB,IASnB,MAFA+U,GAAQ0I,EAAM7U,IAAO0E,EAEdA,IAQV,QAASmiB,MA2BR,QAASC,GAAO3a,EAAQ4a,EAASlhB,GAYhC,IAAM,GAVFhK,GAAI,EAAGsB,EAAI,EAAGC,EAAI,EAElB4pB,EAAoB,EACpBC,EAAc,EACdC,EAAa,EACbC,EAAiB,EACjBC,EAAa,EAEbC,EAAaxhB,EAAOsB,mBAEdlL,EAAI,EAAG8K,EAAIoF,EAAO1V,OAAQwF,EAAI8K,EAAG9K,IAAO,CAEjD,GAAI4Y,GAAQ1I,EAAQlQ,GAEhB6I,EAAQ+P,EAAM/P,MACdwiB,EAAYzS,EAAMyS,UAClBjB,EAAWxR,EAAMwR,SAEjBhR,EAAcR,EAAMC,QAAUD,EAAMC,OAAOxZ,IAAQuZ,EAAMC,OAAOxZ,IAAIhB,QAAU,IAElF,IAAKua,EAAM0S,eAEV1rB,GAAKiJ,EAAMjJ,EAAIyrB,EACfnqB,GAAK2H,EAAM3H,EAAImqB,EACflqB,GAAK0H,EAAM1H,EAAIkqB,MAET,IAAKzS,EAAM2S,mBAAqB,CAEtC,GAAI9iB,GAAW+iB,EAAM7P,IAAK/C,EAU1B,IARAnQ,EAASI,MAAMuC,KAAMwN,EAAM/P,OAAQ4iB,eAAgB7S,EAAMyS,WACzD5iB,EAASoc,UAAUvL,sBAAuBV,EAAM5N,aAChD0gB,EAAQpS,sBAAuBV,EAAMY,OAAOxO,aAC5CvC,EAASoc,UAAU8G,IAAKD,GACxBjjB,EAASoc,UAAU+G,mBAAoBR,GAEvC3iB,EAASoQ,OAASD,EAAMpC,WAEnBoC,EAAMpC,WAAa,CAEvB,GAAIqC,GAASD,EAAMC,MAEnBpQ,GAASwhB,WAAapR,EAAOgT,KAC7BpjB,EAASyhB,aAAerR,EAAOlG,OAC/BlK,EAAS0hB,cAAgBtR,EAAOC,QAIjC7S,EAAM6lB,qBAAsBf,GAAsB3R,EAClDnT,EAAM8lB,wBAAyBhB,GAAsBnS,EAAMC,OAAOxb,OAClE4I,EAAM+lB,YAAajB,GAAsBtiB,EAEzCsiB,QAEM,IAAKnS,EAAMqT,YAAc,CAE/B,GAAIxjB,GAAW+iB,EAAM7P,IAAK/C,EAmB1B,IAjBAnQ,EAASwE,SAASqM,sBAAuBV,EAAM5N,aAC/CvC,EAASwE,SAAShC,aAAcmgB,GAEhC3iB,EAASI,MAAMuC,KAAMvC,GAAQ4iB,eAAgBJ,GAC7C5iB,EAAS2hB,SAAWA,EAEpB3hB,EAASoc,UAAUvL,sBAAuBV,EAAM5N,aAChD0gB,EAAQpS,sBAAuBV,EAAMY,OAAOxO,aAC5CvC,EAASoc,UAAU8G,IAAKD,GACxBjjB,EAASoc,UAAU+G,mBAAoBR,GAEvC3iB,EAAS4hB,QAAU5H,KAAKyJ,IAAKtT,EAAMuT,OACnC1jB,EAAS6hB,YAAc7H,KAAKyJ,IAAKtT,EAAMuT,OAAU,EAAIvT,EAAMwT,WAC3D3jB,EAAS8hB,MAA6B,IAAnB3R,EAAMwR,SAAmB,EAAMxR,EAAM2R,MAExD9hB,EAASoQ,OAASD,EAAMpC,WAEnBoC,EAAMpC,WAAa,CAEvB,GAAIqC,GAASD,EAAMC,MAEnBpQ,GAASwhB,WAAapR,EAAOgT,KAC7BpjB,EAASyhB,aAAerR,EAAOlG,OAC/BlK,EAAS0hB,cAAgBtR,EAAOC,QAIjC7S,EAAMomB,cAAepB,GAAe7R,EACpCnT,EAAMqmB,iBAAkBrB,GAAerS,EAAMC,OAAOxb,OACpD4I,EAAMsmB,KAAMtB,GAAexiB,EAE3BwiB,QAEM,IAAKrS,EAAM4T,gBAAkB,CAEnC,GAAI/jB,GAAW+iB,EAAM7P,IAAK/C,EAG1BnQ,GAASI,MACPuC,KAAMvC,GACN4iB,eAAgBJ,GAAczS,EAAM7a,MAAQ6a,EAAM5a,SAKpDyK,EAASwE,SAASqM,sBAAuBV,EAAM5N,aAC/CvC,EAASwE,SAAShC,aAAcmgB,GAGhCqB,EAASC,WACTC,EAAQvhB,KAAMwN,EAAM5N,aACpB2hB,EAAQC,YAAaxB,GACrBqB,EAASI,gBAAiBF,GAE1BlkB,EAASiiB,UAAU7oB,IAAmB,GAAd+W,EAAM7a,MAAa,EAAK,GAChD0K,EAASkiB,WAAW9oB,IAAK,EAAoB,GAAf+W,EAAM5a,OAAc,GAElDyK,EAASiiB,UAAUzf,aAAcwhB,GACjChkB,EAASkiB,WAAW1f,aAAcwhB,GAKlCxmB,EAAM6mB,SAAU5B,GAAmBziB,EAEnCyiB,QAEM,IAAKtS,EAAM/E,aAAe,CAEhC,GAAIpL,GAAW+iB,EAAM7P,IAAK/C,EAW1B,IATAnQ,EAASwE,SAASqM,sBAAuBV,EAAM5N,aAC/CvC,EAASwE,SAAShC,aAAcmgB,GAEhC3iB,EAASI,MAAMuC,KAAMwN,EAAM/P,OAAQ4iB,eAAgB7S,EAAMyS,WACzD5iB,EAAS2hB,SAAWxR,EAAMwR,SAC1B3hB,EAAS8hB,MAA6B,IAAnB3R,EAAMwR,SAAmB,EAAMxR,EAAM2R,MAExD9hB,EAASoQ,OAASD,EAAMpC,WAEnBoC,EAAMpC,WAAa,CAEvB,GAAIqC,GAASD,EAAMC,MAEnBpQ,GAASwhB,WAAapR,EAAOgT,KAC7BpjB,EAASyhB,aAAerR,EAAOlG,OAC/BlK,EAAS0hB,cAAgBtR,EAAOC,QAChCrQ,EAASsL,iBAAmB8E,EAAOjP,OAAOiF,KAC1CpG,EAASuL,gBAAkB6E,EAAOjP,OAAOkF,IAI1C7I,EAAM8mB,eAAgB/B,GAAgB5R,EACtCnT,EAAM+mB,kBAAmBhC,GAAgBpS,EAAMC,OAAOxb,OACtD4I,EAAMgnB,MAAOjC,GAAgBviB,EAE7BuiB,QAEM,IAAKpS,EAAMsU,kBAAoB,CAErC,GAAIzkB,GAAW+iB,EAAM7P,IAAK/C,EAE1BnQ,GAASoc,UAAUvL,sBAAuBV,EAAM5N,aAChDvC,EAASoc,UAAU+G,mBAAoBR,GACvC3iB,EAASoc,UAAUsI,YAEnB1kB,EAAS+hB,SAASpf,KAAMwN,EAAM/P,OAAQ4iB,eAAgBJ,GACtD5iB,EAASgiB,YAAYrf,KAAMwN,EAAM6R,aAAcgB,eAAgBJ,GAE/DplB,EAAMmnB,KAAMjC,GAAe1iB,EAE3B0iB,KAMFllB,EAAMonB,QAAS,GAAMztB,EACrBqG,EAAMonB,QAAS,GAAMnsB,EACrB+E,EAAMonB,QAAS,GAAMlsB,EAErB8E,EAAM+lB,YAAYxxB,OAASuwB,EAC3B9kB,EAAMsmB,KAAK/xB,OAASywB,EACpBhlB,EAAM6mB,SAAStyB,OAAS0wB,EACxBjlB,EAAMgnB,MAAMzyB,OAASwwB,EACrB/kB,EAAMmnB,KAAK5yB,OAAS2wB,EAGpBllB,EAAMshB,KAAOwD,EAAoB,IAAMC,EAAc,IAAMC,EAAa,IAAMC,EAAiB,IAAMC,EAAa,IAAML,EAAQtwB,OArNjI,GAAIgxB,GAAQ,GAAIxB,IAEZ/jB,GAEHshB,KAAM,GAEN8F,SAAW,EAAG,EAAG,GACjBrB,eACAF,wBACAC,2BACAQ,QACAF,iBACAC,oBACAQ,YACAG,SACAF,kBACAC,qBACAI,SAIG1B,EAAU,GAAIvwB,GACdwxB,EAAU,GAAItyB,GACdoyB,EAAW,GAAIpyB,EAkMnB,QACCwwB,MAAOA,EACP5kB,MAAOA,GAST,QAASqnB,IAAc/H,EAAY+C,GAIlC,QAAS1R,GAAQhD,GAEhB,GAAI2Z,GAAQjF,EAAWiF,MAEnBtZ,EAAWL,EAAOK,SAClBsV,EAAiBhE,EAAW5J,IAAK/H,EAAQK,EAkB7C,OAdKuZ,GAAYjE,EAAexlB,MAASwpB,IAEnCtZ,EAASW,YAEb2U,EAAekE,iBAAkB7Z,GAIlC2R,EAAW3O,OAAQ2S,GAEnBiE,EAAYjE,EAAexlB,IAAOwpB,GAI5BhE,EAIR,QAAS1P,KAER2T,KA/BD,GAAIA,KAmCJ,QAEC5W,OAAQA,EACRiD,MAAOA,GAUT,QAAS6T,IAAgBC,GAIxB,IAAM,GAFFC,GAAQD,EAAOE,MAAO,MAEhB7tB,EAAI,EAAGA,EAAI4tB,EAAMpzB,OAAQwF,IAElC4tB,EAAO5tB,GAAQA,EAAI,EAAM,KAAO4tB,EAAO5tB,EAIxC,OAAO4tB,GAAM1lB,KAAM,MAIpB,QAAS4lB,IAAavtB,EAAI1E,EAAM8xB,GAE/B,GAAI3lB,GAASzH,EAAGyI,aAAcnN,EAoB9B,OAlBA0E,GAAG8I,aAAcrB,EAAQ2lB,GACzBptB,EAAG+I,cAAetB,IAE0C,IAAvDzH,EAAGwtB,mBAAoB/lB,EAAQzH,EAAGytB,iBAEtCvzB,QAAQC,MAAO,+CAIuB,KAAlC6F,EAAG0tB,iBAAkBjmB,IAEzBvN,QAAQqa,KAAM,2CAA4CjZ,IAAS0E,EAAG2I,cAAgB,SAAW,WAAY3I,EAAG0tB,iBAAkBjmB,GAAU0lB,GAAgBC,IAOtJ3lB,EAUR,QAASkmB,IAAuBnyB,GAE/B,OAASA,GAER,IAAK2B,IACJ,OAAS,SAAU,YACpB,KAAKywB,IACJ,OAAS,OAAQ,YAClB,KAAKC,IACJ,OAAS,OAAQ,YAClB,KAAKC,IACJ,OAAS,OAAQ,iBAClB,KAAKC,IACJ,OAAS,OAAQ,kBAClB,KAAKC,IACJ,OAAS,OAAQ,mBAClB,KAAKC,IACJ,OAAS,QAAS,mCACnB,SACC,KAAM,IAAIC,OAAO,yBAA2B1yB,IAM/C,QAAS2yB,IAA0BC,EAAc5yB,GAEhD,GAAI6yB,GAAaV,GAAuBnyB,EACxC,OAAO,QAAU4yB,EAAe,2BAA6BC,EAAY,GAAM,WAAaA,EAAY,GAAM,MAI/G,QAASC,IAA0BF,EAAc5yB,GAEhD,GAAI6yB,GAAaV,GAAuBnyB,EACxC,OAAO,QAAU4yB,EAAe,mCAAqCC,EAAY,GAAMA,EAAY,GAAM,MAI1G,QAASE,IAAwBH,EAAcI,GAE9C,GAAIC,EAEJ,QAASD,GAER,IAAKE,IACJD,EAAkB,QAClB,MAED,KAAKE,IACJF,EAAkB,UAClB,MAED,KAAKG,IACJH,EAAkB,YAClB,MAED,KAAKI,IACJJ,EAAkB,iBAClB,MAED,SACC,KAAM,IAAIP,OAAO,4BAA8BM,GAIjD,MAAO,QAAUJ,EAAe,2BAA6BK,EAAkB,0BAIhF,QAASK,IAAoBlL,EAAY1S,EAAY6d,GAWpD,MATAnL,GAAaA,OAGVA,EAAWC,aAAe3S,EAAW8d,cAAgB9d,EAAW+d,SAAW/d,EAAWge,WAAahe,EAAWnB,YAAgB,kDAAoD,IAClL6T,EAAWE,WAAa5S,EAAWie,yBAA4BJ,EAAmB3T,IAAK,kBAAqB,wCAA0C,GACtJwI,EAAuB,aAAKmL,EAAmB3T,IAAK,sBAAyB,2CAA6C,IAC1HwI,EAAWI,kBAAoB9S,EAAWgS,SAAY6L,EAAmB3T,IAAK,0BAA6B,gDAAkD,IAGlJgU,OAAQC,IAAkB1nB,KAAM,MAI/C,QAAS2nB,IAAiB5L,GAEzB,GAAI6L,KAEJ,KAAM,GAAIvzB,KAAQ0nB,GAAU,CAE3B,GAAI/nB,GAAQ+nB,EAAS1nB,IAEN,IAAVL,GAEL4zB,EAAOvrB,KAAM,WAAahI,EAAO,IAAML,GAIxC,MAAO4zB,GAAO5nB,KAAM,MAIrB,QAAS6nB,IAAyBxvB,EAAI6E,GAMrC,IAAM,GAJFiD,MAEA1I,EAAIY,EAAG8E,oBAAqBD,EAAS7E,EAAGyvB,mBAElChwB,EAAI,EAAGA,EAAIL,EAAGK,IAAO,CAE9B,GAAIuF,GAAOhF,EAAG0vB,gBAAiB7qB,EAASpF,GACpCzD,EAAOgJ,EAAKhJ,IAIhB8L,GAAY9L,GAASgE,EAAGgI,kBAAmBnD,EAAS7I,GAIrD,MAAO8L,GAIR,QAASunB,IAAiBjC,GAEzB,MAAkB,KAAXA,EAIR,QAASuC,IAAkBvC,EAAQlc,GAElC,MAAOkc,GACLwC,QAAS,kBAAmB1e,EAAW2e,cACvCD,QAAS,mBAAoB1e,EAAW4e,eACxCF,QAAS,wBAAyB1e,EAAW6e,mBAC7CH,QAAS,oBAAqB1e,EAAW8e,gBACzCJ,QAAS,mBAAoB1e,EAAW+e,eAI3C,QAASC,IAAe9C,GAIvB,QAASwC,GAAStrB,EAAO6rB,GAExB,GAAIP,GAAUQ,GAAaD,EAE3B,QAAiBx1B,KAAZi1B,EAEJ,KAAM,IAAI1B,OAAO,6BAA+BiC,EAAU,IAI3D,OAAOD,IAAeN,GAZvB,GAAIS,GAAU,iCAgBd,OAAOjD,GAAOwC,QAASS,EAAST,GAIjC,QAASU,IAAalD,GAIrB,QAASwC,GAAStrB,EAAO8b,EAAOoE,EAAK+L,GAIpC,IAAM,GAFFC,GAAS,GAEH/wB,EAAIgxB,SAAUrQ,GAAS3gB,EAAIgxB,SAAUjM,GAAO/kB,IAErD+wB,GAAUD,EAAQX,QAAS,WAAY,KAAOnwB,EAAI,KAInD,OAAO+wB,GAZR,GAAIH,GAAU,qEAgBd,OAAOjD,GAAOwC,QAASS,EAAST,GAIjC,QAASc,IAAc/wB,EAAUikB,EAAY+M,EAAM/hB,EAAUnH,EAAQyJ,GAEpE,GAAIlR,GAAKL,EAAS4N,QAEdmW,EAAU9U,EAAS8U,QAEnBhc,EAAeD,EAAOC,aACtBE,EAAiBH,EAAOG,eAExBgpB,EAAsB,sBAErB1f,GAAW2f,gBAAkB/Y,GAEjC8Y,EAAsB,qBAEX1f,EAAW2f,gBAAkBC,KAExCF,EAAsB,0BAIvB,IAAIG,GAAmB,mBACnBC,EAAmB,yBACnBC,EAAuB,0BAE3B,IAAK/f,EAAWgS,OAAS,CAExB,OAAStU,EAASsU,OAAOloB,SAExB,IAAK2D,IACL,IAAKuyB,IACJH,EAAmB,kBACnB,MAED,KAAKI,IACL,IAAKC,IACJL,EAAmB,qBACnB,MAED,KAAKM,IACL,IAAKC,IACJP,EAAmB,qBACnB,MAED,KAAKQ,IACJR,EAAmB,qBAKrB,OAASniB,EAASsU,OAAOloB,SAExB,IAAKk2B,IACL,IAAKI,IACJN,EAAmB,yBAKrB,OAASpiB,EAASuU,SAEjB,IAAKC,IACJ6N,EAAuB,0BACvB,MAED,KAAKO,IACJP,EAAuB,qBACvB,MAED,KAAKQ,IACJR,EAAuB,uBAO1B,GAcIS,GAAcC,EAddC,EAAsBjyB,EAASkyB,YAAc,EAAMlyB,EAASkyB,YAAc,EAM1EC,EAAmBhD,GAAoBlgB,EAASgV,WAAY1S,EAAY0S,GAExEmO,EAAgBzC,GAAiB5L,GAIjC7e,EAAU7E,EAAG6H,eAIZ+G,GAASojB,qBAEbN,GAECK,GAEC3C,OAAQC,IAAkB1nB,KAAM,MAE7B+pB,EAAaz3B,OAAS,IAE1By3B,GAAgB,MAIjBC,GAECG,EACAC,GAEC3C,OAAQC,IAAkB1nB,KAAM,MAE7BgqB,EAAe13B,OAAS,IAE5B03B,GAAkB,QAMnBD,GAEC,aAAexgB,EAAWrI,UAAY,UACtC,aAAeqI,EAAWrI,UAAY,QAEtC,uBAAyBpB,EAAOzL,KAEhC+1B,EAEA7gB,EAAW+gB,uBAAyB,0BAA4B,GAEhE,wBAA0BL,EAE1B,qBAAuB1gB,EAAWghB,SAChChhB,EAAWihB,QAAUjhB,EAAW9C,IAAQ,kBAAoB,GAC5D8C,EAAWihB,QAAUjhB,EAAWkhB,OAAW,mBAAqB,GAElElhB,EAAWpS,IAAM,kBAAoB,GACrCoS,EAAWgS,OAAS,qBAAuB,GAC3ChS,EAAWgS,OAAS,WAAa8N,EAAmB,GACpD9f,EAAW2R,SAAW,uBAAyB,GAC/C3R,EAAW6R,MAAQ,oBAAsB,GACzC7R,EAAWmhB,YAAc,0BAA4B,GACrDnhB,EAAW+d,QAAU,sBAAwB,GAC7C/d,EAAWge,UAAY,wBAA0B,GACjDhe,EAAWM,iBAAmBN,EAAW+gB,uBAAyB,8BAAgC,GAClG/gB,EAAW+R,YAAc,0BAA4B,GACrD/R,EAAWohB,aAAe,2BAA6B,GACvDphB,EAAWqhB,aAAe,2BAA6B,GACvDrhB,EAAWK,SAAW,uBAAyB,GAC/CL,EAAWlB,aAAe,oBAAsB,GAEhDkB,EAAWnB,YAAc,sBAAwB,GAEjDmB,EAAWG,SAAW,uBAAyB,GAC/CH,EAAWshB,iBAAmB,uBAAyB,GAEvDthB,EAAWI,aAAe,2BAA6B,GACvDJ,EAAW6M,eAA2C,IAA3B7M,EAAWnB,YAAwB,2BAA6B,GAC3FmB,EAAWuhB,YAAc,uBAAyB,GAClDvhB,EAAWwhB,UAAY,qBAAuB,GAE9C,+BAAiCxhB,EAAWyhB,kBAE5CzhB,EAAW0hB,iBAAmB,wBAA0B,GACxD1hB,EAAW0hB,iBAAmB,WAAahC,EAAsB,GAEjE1f,EAAW2hB,gBAAkB,8BAAgC,GAE7D3hB,EAAWie,uBAAyB,0BAA4B,GAChEje,EAAWie,wBAA0BvL,EAAWxI,IAAK,kBAAqB,8BAAgC,GAE1G,4BACA,gCACA,iCACA,2BACA,6BACA,+BAEA,2BACA,yBACA,qBAEA,mBAEA,0BAEA,SAEA,0BAEA,iCACA,iCACA,iCACA,iCAEA,4BAEA,mCACA,mCACA,mCACA,mCAEA,UAEA,mCACA,mCACA,mCACA,mCAEA,WAEA,SAEA,sBAEA,8BACA,+BAEA,SAEA,MAECgU,OAAQC,IAAkB1nB,KAAM,MAElCgqB,GAECG,EAEA,aAAe5gB,EAAWrI,UAAY,UACtC,aAAeqI,EAAWrI,UAAY,QAEtC,uBAAyBpB,EAAOzL,KAEhC+1B,EAEA7gB,EAAW9D,UAAY,qBAAuB8D,EAAW9D,UAAY,GAErE,wBAA0BwkB,EAExB1gB,EAAWihB,QAAUjhB,EAAW9C,IAAQ,kBAAoB,GAC5D8C,EAAWihB,QAAUjhB,EAAWkhB,OAAW,mBAAqB,GAElElhB,EAAWpS,IAAM,kBAAoB,GACrCoS,EAAWgS,OAAS,qBAAuB,GAC3ChS,EAAWgS,OAAS,WAAa6N,EAAmB,GACpD7f,EAAWgS,OAAS,WAAa8N,EAAmB,GACpD9f,EAAWgS,OAAS,WAAa+N,EAAuB,GACxD/f,EAAW2R,SAAW,uBAAyB,GAC/C3R,EAAW6R,MAAQ,oBAAsB,GACzC7R,EAAWmhB,YAAc,0BAA4B,GACrDnhB,EAAW+d,QAAU,sBAAwB,GAC7C/d,EAAWge,UAAY,wBAA0B,GACjDhe,EAAW+R,YAAc,0BAA4B,GACrD/R,EAAWohB,aAAe,2BAA6B,GACvDphB,EAAWqhB,aAAe,2BAA6B,GACvDrhB,EAAWK,SAAW,uBAAyB,GAC/CL,EAAWlB,aAAe,oBAAsB,GAEhDkB,EAAW4hB,YAAc,0BAA4B,GAErD5hB,EAAWnB,YAAc,sBAAwB,GAEjDmB,EAAWuhB,YAAc,uBAAyB,GAClDvhB,EAAWwhB,UAAY,qBAAuB,GAE9C,+BAAiCxhB,EAAWyhB,kBAC5C,kCAAqCzhB,EAAWyhB,kBAAoBzhB,EAAW6hB,qBAE/E7hB,EAAW0hB,iBAAmB,wBAA0B,GACxD1hB,EAAW0hB,iBAAmB,WAAahC,EAAsB,GAEjE1f,EAAW/B,mBAAqB,8BAAgC,GAEhE+B,EAAW8hB,wBAA0B,oCAAsC,GAE3E9hB,EAAWie,uBAAyB,0BAA4B,GAChEje,EAAWie,wBAA0BvL,EAAWxI,IAAK,kBAAqB,8BAAgC,GAE1GlK,EAAWgS,QAAUU,EAAWxI,IAAK,0BAA6B,0BAA4B,GAE9F,2BACA,+BAEElK,EAAWsd,cAAgByE,GAAkB,uBAAyB,GACtE/hB,EAAWsd,cAAgByE,GAAkB7C,GAAyC,0BAAI,GAC1Flf,EAAWsd,cAAgByE,GAAkB1E,GAAwB,cAAerd,EAAWsd,aAAgB,GAEjHtd,EAAWJ,UAAY,oBAAsB,GAE3CI,EAAWgiB,gBAAkBhiB,EAAWiiB,aAAejiB,EAAWkiB,gBAAkBliB,EAAWmiB,oBAAwBjD,GAAuC,wBAAI,GACpKlf,EAAWiiB,YAAchF,GAA0B,mBAAoBjd,EAAWiiB,aAAgB,GAClGjiB,EAAWkiB,eAAiBjF,GAA0B,sBAAuBjd,EAAWkiB,gBAAmB,GAC3GliB,EAAWmiB,oBAAsBlF,GAA0B,2BAA4Bjd,EAAWmiB,qBAAwB,GAC1HniB,EAAWgiB,eAAiB5E,GAA0B,sBAAuBpd,EAAWgiB,gBAAmB,GAE3GhiB,EAAWC,aAAe,yBAA2BvC,EAASuC,aAAe,GAE7E,MAECie,OAAQC,IAAkB1nB,KAAM,OAInCD,EAAewoB,GAAexoB,GAC9BA,EAAeioB,GAAkBjoB,EAAcwJ,GAE/CtJ,EAAiBsoB,GAAetoB,GAChCA,EAAiB+nB,GAAkB/nB,EAAgBsJ,GAE5CtC,EAAS0kB,mBAEf5rB,EAAe4oB,GAAa5oB,GAC5BE,EAAiB0oB,GAAa1oB,GAI/B,IAAI2rB,GAAa7B,EAAehqB,EAC5B8rB,EAAe7B,EAAiB/pB,EAKhC6rB,EAAiBlG,GAAavtB,EAAIA,EAAG2I,cAAe4qB,GACpDG,EAAmBnG,GAAavtB,EAAIA,EAAG0I,gBAAiB8qB,EAE5DxzB,GAAGgJ,aAAcnE,EAAS4uB,GAC1BzzB,EAAGgJ,aAAcnE,EAAS6uB,OAIY/4B,KAAjCiU,EAASuV,oBAEbnkB,EAAG2zB,mBAAoB9uB,EAAS,EAAG+J,EAASuV,sBAEL,IAA5BjT,EAAWI,cAGtBtR,EAAG2zB,mBAAoB9uB,EAAS,EAAG,YAIpC7E,EAAGiJ,YAAapE,EAEhB,IAAI+uB,GAAa5zB,EAAG6zB,kBAAmBhvB,GACnCivB,EAAY9zB,EAAG0tB,iBAAkB+F,GACjCM,EAAc/zB,EAAG0tB,iBAAkBgG,GAEnCM,GAAW,EACXC,GAAkB,GAKqC,IAAtDj0B,EAAG8E,oBAAqBD,EAAS7E,EAAGk0B,cAExCF,GAAW,EAEX95B,QAAQC,MAAO,qCAAsC6F,EAAGm0B,WAAY,qBAAsBn0B,EAAG8E,oBAAqBD,EAAS7E,EAAGo0B,iBAAmB,uBAAwBR,EAAYE,EAAWC,IAEtK,KAAfH,EAEX15B,QAAQqa,KAAM,6CAA8Cqf,GAEnC,KAAdE,GAAoC,KAAhBC,IAE/BE,GAAkB,GAIdA,IAEJx6B,KAAK46B,aAEJL,SAAUA,EACVplB,SAAUA,EAEVglB,WAAYA,EAEZlsB,cAEC4sB,IAAKR,EACLlrB,OAAQ8oB,GAIT9pB,gBAEC0sB,IAAKP,EACLnrB,OAAQ+oB,KAUX3xB,EAAGu0B,aAAcd,GACjBzzB,EAAGu0B,aAAcb,EAIjB,IAAIc,EAEJ/6B,MAAKouB,YAAc,WAQlB,WANwBltB,KAAnB65B,IAEJA,EAAiB,GAAI5vB,GAAe5E,EAAI6E,EAASlF,IAI3C60B,EAMR,IAAIC,EAyDJ,OAvDAh7B,MAAKi7B,cAAgB,WAQpB,WAN0B/5B,KAArB85B,IAEJA,EAAmBjF,GAAyBxvB,EAAI6E,IAI1C4vB,GAMRh7B,KAAKk7B,QAAU,WAEd30B,EAAG40B,cAAe/vB,GAClBpL,KAAKoL,YAAUlK,IAMhBc,OAAO+gB,iBAAkB/iB,MAExByO,UACCkT,IAAK,WAGJ,MADAlhB,SAAQqa,KAAM,wDACP9a,KAAKouB,gBAKd/f,YACCsT,IAAK,WAGJ,MADAlhB,SAAQqa,KAAM,4DACP9a,KAAKi7B,oBAUfj7B,KAAK+J,GAAKqxB,KACVp7B,KAAKk3B,KAAOA,EACZl3B,KAAKq7B,UAAY,EACjBr7B,KAAKoL,QAAUA,EACfpL,KAAKiO,aAAe+rB,EACpBh6B,KAAKmO,eAAiB8rB,EAEfj6B,KAQR,QAASs7B,IAAep1B,EAAUikB,EAAYhe,GAkC7C,QAASovB,GAAe3hB,GAEvB,GAAI4hB,GAAW5hB,EAAO4hB,SAClBC,EAAQD,EAASC,KAErB,IAAKtvB,EAAauvB,oBAEjB,MAAO,KAWP,IAAIC,GAAkBxvB,EAAayvB,kBAC/BC,EAAkBpT,KAAKC,OAASiT,EAAkB,IAAO,GAEzDlD,EAAWhQ,KAAK5c,IAAKgwB,EAAiBJ,EAAMj7B,OAEhD,OAAKi4B,GAAWgD,EAAMj7B,QAErBC,QAAQqa,KAAM,qCAAuC2gB,EAAMj7B,OAAS,6BAA+Bi4B,EAAW,KACvG,GAIDA,EAMT,QAASqD,GAA2Bz2B,EAAK02B,GAExC,GAAIh6B,EAwBJ,OAtBOsD,GAIKA,EAAImnB,UAEfzqB,EAAWsD,EAAItD,SAEJsD,EAAI22B,sBAEfv7B,QAAQqa,KAAM,6HACd/Y,EAAWsD,EAAIhB,QAAQtC,UATvBA,EAAW2B,GAcP3B,IAAa2B,IAAkBq4B,IAEnCh6B,EAAWyyB,IAILzyB,EA9FR,GAAIk6B,MAEAC,GACH1kB,kBAAmB,QACnBa,qBAAsB,eACtB8jB,mBAAoB,SACpBhT,kBAAmB,QACnBiT,oBAAqB,UACrBC,kBAAmB,QACnBC,iBAAkB,QAClBC,qBAAsB,WACtBC,qBAAsB,WACtBC,kBAAmB,QACnBC,mBAAoB,SACpBC,eAAgB,SAChBC,eAAgB,UAGbC,GACH,YAAa,yBAA0B,MAAO,cAAe,SAAU,aAAc,iBACrF,WAAY,QAAS,cAAe,sBAAuB,UAAW,YAAa,kBAAmB,cACtG,eAAgB,eAAgB,cAChC,WAAY,UAAW,eAAgB,MAAO,SAAU,SACxD,cAAe,kBAAmB,yBAA0B,WAC5D,WAAY,mBAAoB,eAAgB,eAChD,kBAAmB,kBAAmB,qBACtC,eAAgB,iBAAkB,gBAAiB,gBAAiB,oBACpE,mBAAoB,gBAAiB,cAAe,0BACpD,YAAa,cAAe,YAAa,oBAAqB,sBAAuB,eAAgB,YAsEtG78B,MAAK88B,cAAgB,SAAW3nB,EAAUe,EAAQ4a,EAASnc,EAAKooB,EAAaC,EAAmBpjB,GAE/F,GAAIqjB,GAAWf,EAAW/mB,EAAStT,MAK/B42B,EAAW7e,EAAOiB,cAAgB0gB,EAAe3hB,GAAW,EAC5DxK,EAAYjD,EAAaiD,SAED,QAAvB+F,EAAS/F,YAEbA,EAAYjD,EAAa+wB,gBAAiB/nB,EAAS/F,cAEhC+F,EAAS/F,WAE3B3O,QAAQqa,KAAM,oCAAqC3F,EAAS/F,UAAW,uBAAwBA,EAAW,WAM5G,IAAI+tB,GAAsBj3B,EAASk3B,iBA8EnC,QA1ECH,SAAUA,EAEV7tB,UAAWA,EACXopB,uBAAwBrsB,EAAakxB,eACrC5D,eAAgBqC,EAA+BqB,EAA+BA,EAAoB94B,QAA3B,KAAoC6B,EAASo3B,aACpHj4B,MAAQ8P,EAAS9P,IACjBq0B,YAAaoC,EAA2B3mB,EAAS9P,IAAKa,EAASq3B,YAC/D9T,SAAWtU,EAASsU,OACpB+T,WAAYroB,EAASsU,QAAUtU,EAASsU,OAAOloB,QAC/Co4B,eAAgBmC,EAA2B3mB,EAASsU,OAAQvjB,EAASq3B,YACrEhI,eAAmBpgB,EAASsU,SAAgBtU,EAASsU,OAAOloB,UAAYm2B,IAA+BviB,EAASsU,OAAOloB,UAAYo2B,IACnIvO,WAAajU,EAASiU,SACtBE,QAAUnU,EAASmU,MACnBsP,cAAgBzjB,EAASyjB,YACzBgB,oBAAqBkC,EAA2B3mB,EAASyjB,YAAa1yB,EAASq3B,YAC/E/H,UAAYrgB,EAASqgB,QACrBC,YAActgB,EAASsgB,UACvB1d,kBAAoB5C,EAAS4C,gBAC7B8gB,eAAiB1jB,EAAS0jB,aAC1BC,eAAiB3jB,EAAS2jB,aAC1BtP,cAAgBrU,EAASqU,YACzB1R,WAAa3C,EAAS2C,SAEtBuhB,cAAgBlkB,EAASkkB,YAEzB3P,QAASvU,EAASuU,QAElBnT,aAAcpB,EAASoB,aAEvB5B,MAAQA,EACR+jB,OAAQvjB,EAASR,IACjBgkB,OAAUhkB,GAAOA,EAAII,UAErBuB,YAAanB,EAASmB,YAEtB8iB,gBAAiBjkB,EAASikB,gBAC1B1D,uBAAwBvpB,EAAaupB,uBAErC9d,SAAUzC,EAASyC,UAAY6gB,EAAW,EAC1CA,SAAUA,EACVM,iBAAkB5sB,EAAauvB,oBAE/B7jB,aAAc1C,EAAS0C,aACvByM,aAAcnP,EAASmP,aACvBmZ,gBAAiBv3B,EAASu3B,gBAC1BC,gBAAiBx3B,EAASw3B,gBAE1BtH,aAAclgB,EAAO8b,YAAYxxB,OACjC+1B,eAAgBrgB,EAAO+c,MAAMzyB,OAC7B61B,cAAengB,EAAOqc,KAAK/xB,OAC3B81B,kBAAmBpgB,EAAO4c,SAAStyB,OACnCg2B,cAAetgB,EAAOkd,KAAK5yB,OAE3B04B,kBAAmB6D,EACnBzD,oBAAqB0D,EAErB3lB,UAAWlC,EAASkC,UAEpB8hB,iBAAkBjzB,EAASkZ,UAAUjB,SAAWvE,EAAOwJ,eAAiB0N,EAAQtwB,OAAS,EACzF42B,cAAelxB,EAASkZ,UAAUvd,KAElCkzB,YAAa7uB,EAAS6uB,YACtBwE,wBAAyBrzB,EAASqzB,wBAElC7jB,mBAAoBP,EAASO,mBAE7B/B,UAAWwB,EAASxB,UACpBqlB,YAAa7jB,EAASiB,OAASwF,GAC/Bqd,UAAW9jB,EAASiB,OAAS0F,GAE7BpE,iBAA0CxW,KAA1BiU,EAASuC,cAA+BvC,EAASuC,eAQnE1X,KAAK29B,eAAiB,SAAWxoB,EAAUsC,GAE1C,GAAIlS,KAaJ,IAXKkS,EAAWwlB,SAEf13B,EAAMgF,KAAMkN,EAAWwlB,WAIvB13B,EAAMgF,KAAM4K,EAAShH,gBACrB5I,EAAMgF,KAAM4K,EAASlH,mBAII/M,KAArBiU,EAAS8U,QAEb,IAAM,GAAI1nB,KAAQ4S,GAAS8U,QAE1B1kB,EAAMgF,KAAMhI,GACZgD,EAAMgF,KAAM4K,EAAS8U,QAAS1nB,GAMhC,KAAM,GAAIyD,GAAI,EAAGA,EAAI62B,EAAer8B,OAAQwF,IAE3CT,EAAMgF,KAAMkN,EAAYolB,EAAgB72B,IAQzC,OAJAT,GAAMgF,KAAM4K,EAASyoB,gBAAgBC,YAErCt4B,EAAMgF,KAAMrE,EAASo3B,aAEd/3B,EAAM2I,QAIdlO,KAAK89B,eAAiB,SAAW3oB,EAAUnH,EAAQyJ,EAAYyf,GAK9D,IAAM,GAHF9rB,GAGM2yB,EAAI,EAAGC,EAAK/B,EAASz7B,OAAQu9B,EAAIC,EAAID,IAAO,CAErD,GAAIE,GAAchC,EAAU8B,EAE5B,IAAKE,EAAY/G,OAASA,EAAO,CAEhC9rB,EAAU6yB,IACP7yB,EAAQiwB,SAEX,QAaF,WAPiBn6B,KAAZkK,IAEJA,EAAU,GAAI6rB,IAAc/wB,EAAUikB,EAAY+M,EAAM/hB,EAAUnH,EAAQyJ,GAC1EwkB,EAAS1xB,KAAMa,IAITA,GAIRpL,KAAKk+B,eAAiB,SAAW9yB,GAEhC,GAA8B,KAAtBA,EAAQiwB,UAAkB,CAGjC,GAAIr1B,GAAIi2B,EAASkC,QAAS/yB,EAC1B6wB,GAAUj2B,GAAMi2B,EAAUA,EAASz7B,OAAS,GAC5Cy7B,EAASmC,MAGThzB,EAAQ8vB,YAOVl7B,KAAKi8B,SAAWA,EAQjB,QAASoC,IAAe/f,EAAK6L,EAAYle,EAAOqyB,EAAYnyB,EAAcoyB,EAAOnP,GAMhF,QAASoP,GAAgBl9B,EAAOm9B,GAE/B,GAAKn9B,EAAMyC,MAAQ06B,GAAWn9B,EAAM0C,OAASy6B,EAAU,CAKtD,GAAI3vB,GAAQ2vB,EAAUhW,KAAK3c,IAAKxK,EAAMyC,MAAOzC,EAAM0C,QAE/C8O,EAASc,SAASC,gBAAiB,+BAAgC,SACvEf,GAAO/O,MAAQ0kB,KAAKC,MAAOpnB,EAAMyC,MAAQ+K,GACzCgE,EAAO9O,OAASykB,KAAKC,MAAOpnB,EAAM0C,OAAS8K,EAO3C,OALcgE,GAAOiB,WAAY,MACzB2qB,UAAWp9B,EAAO,EAAG,EAAGA,EAAMyC,MAAOzC,EAAM0C,OAAQ,EAAG,EAAG8O,EAAO/O,MAAO+O,EAAO9O,QAEtFvD,QAAQqa,KAAM,0CAA4CxZ,EAAMyC,MAAQ,IAAMzC,EAAM0C,OAAS,iBAAmB8O,EAAO/O,MAAQ,IAAM+O,EAAO9O,OAAQ1C,GAE7IwR,EAIR,MAAOxR,GAIR,QAASq9B,GAAcr9B,GAEtB,MAAOe,IAAMs8B,aAAcr9B,EAAMyC,QAAW1B,GAAMs8B,aAAcr9B,EAAM0C,QAIvE,QAAS46B,GAAgBt9B,GAExB,GAAKA,YAAiBu9B,mBAAoBv9B,YAAiBw9B,oBAAqBx9B,YAAiBy9B,aAAc,CAE9G,GAAIjsB,GAASc,SAASC,gBAAiB,+BAAgC,SACvEf,GAAO/O,MAAQ1B,GAAM28B,gBAAiB19B,EAAMyC,OAC5C+O,EAAO9O,OAAS3B,GAAM28B,gBAAiB19B,EAAM0C,OAO7C,OALc8O,GAAOiB,WAAY,MACzB2qB,UAAWp9B,EAAO,EAAG,EAAGwR,EAAO/O,MAAO+O,EAAO9O,QAErDvD,QAAQqa,KAAM,mDAAqDxZ,EAAMyC,MAAQ,IAAMzC,EAAM0C,OAAS,iBAAmB8O,EAAO/O,MAAQ,IAAM+O,EAAO9O,OAAQ1C,GAEtJwR,EAIR,MAAOxR,GAIR,QAAS29B,GAAwB56B,GAEhC,MAASA,GAAQ7C,QAAUmB,IAAuB0B,EAAQ5C,QAAUkB,IACjE0B,EAAQ1C,YAAcoD,IAAiBV,EAAQ1C,YAAciB,GAIjE,QAASs8B,GAA6B76B,EAASs6B,GAE9C,MAAOt6B,GAAQf,iBAAmBq7B,GACjCt6B,EAAQ1C,YAAcoD,IAAiBV,EAAQ1C,YAAciB,GAM/D,QAASu8B,GAAgBC,GAExB,MAAKA,KAAMr6B,IAAiBq6B,IAAMC,IAA8BD,IAAME,GAE9DhhB,EAAIzQ,QAILyQ,EAAIihB,OAMZ,QAASC,GAAkBlQ,GAE1B,GAAIjrB,GAAUirB,EAAM9P,MAEpBnb,GAAQmrB,oBAAqB,UAAWgQ,GAExCC,EAAmBp7B,GAEnB+qB,EAAWljB,WAKZ,QAASwzB,GAAuBpQ,GAE/B,GAAIqQ,GAAerQ,EAAM9P,MAEzBmgB,GAAanQ,oBAAqB,UAAWkQ,GAE7CE,EAAwBD,GAExBvQ,EAAWljB,WAMZ,QAASuzB,GAAmBp7B,GAE3B,GAAIw7B,GAAoBvB,EAAW3c,IAAKtd,EAExC,IAAKA,EAAQ/C,OAASu+B,EAAkBC,0BAIvCxhB,EAAIyhB,cAAeF,EAAkBC,+BAE/B,CAIN,OAAuC5+B,KAAlC2+B,EAAkBG,YAA4B,MAEnD1hB,GAAIyhB,cAAeF,EAAkBI,gBAKtC3B,EAAWzc,OAAQxd,GAIpB,QAASu7B,GAAwBD,GAEhC,GAAIO,GAAyB5B,EAAW3c,IAAKge,GACzCE,EAAoBvB,EAAW3c,IAAKge,EAAat7B,QAErD,IAAOs7B,EAAP,CAcA,OAZ0Cz+B,KAArC2+B,EAAkBI,gBAEtB3hB,EAAIyhB,cAAeF,EAAkBI,gBAIjCN,EAAan7B,cAEjBm7B,EAAan7B,aAAakpB,UAItBiS,EAAaQ,wBAEjB,IAAM,GAAIn6B,GAAI,EAAGA,EAAI,EAAGA,IAEvBsY,EAAI8hB,kBAAmBF,EAAuBG,mBAAoBr6B,IAC7Dk6B,EAAuBI,oBAAqBhiB,EAAIiiB,mBAAoBL,EAAuBI,mBAAoBt6B,QAMrHsY,GAAI8hB,kBAAmBF,EAAuBG,oBACzCH,EAAuBI,oBAAqBhiB,EAAIiiB,mBAAoBL,EAAuBI,mBAIjGhC,GAAWzc,OAAQ8d,EAAat7B,SAChCi6B,EAAWzc,OAAQ8d,IAQpB,QAASx3B,GAAc9D,EAASm8B,GAE/B,GAAIX,GAAoBvB,EAAW3c,IAAKtd,EAExC,IAAKA,EAAQV,QAAU,GAAKk8B,EAAkBY,YAAcp8B,EAAQV,QAAU,CAE7E,GAAIrC,GAAQ+C,EAAQ/C,KAEpB,QAAeJ,KAAVI,EAEJb,QAAQqa,KAAM,wEAAyEzW,OAEjF,CAAA,IAAwB,IAAnB/C,EAAMo/B,SAOjB,WADAC,GAAed,EAAmBx7B,EAASm8B,EAJ3C//B,SAAQqa,KAAM,yEAA0EzW,IAW1F4H,EAAMqF,cAAegN,EAAI/M,SAAWivB,GACpCv0B,EAAMkB,YAAamR,EAAIlR,WAAYyyB,EAAkBI,gBAItD,QAAS33B,GAAgBjE,EAASm8B,GAEjC,GAAIX,GAAoBvB,EAAW3c,IAAKtd,EAExC,IAA8B,IAAzBA,EAAQ/C,MAAMd,OAElB,GAAK6D,EAAQV,QAAU,GAAKk8B,EAAkBY,YAAcp8B,EAAQV,QAAU,CAEtEk8B,EAAkBC,4BAExBz7B,EAAQqrB,iBAAkB,UAAW8P,GAErCK,EAAkBC,0BAA4BxhB,EAAIrR,gBAElDmiB,EAAWljB,YAIZD,EAAMqF,cAAegN,EAAI/M,SAAWivB,GACpCv0B,EAAMkB,YAAamR,EAAIsiB,iBAAkBf,EAAkBC,2BAE3DxhB,EAAIuiB,YAAaviB,EAAIwiB,oBAAqBz8B,EAAQb,MAOlD,KAAM,GALFu9B,GAAiB18B,GAAWA,EAAQ28B,oBACpCC,EAAkB58B,EAAQ/C,MAAO,IAAO+C,EAAQ/C,MAAO,GAAI2/B,cAE3DC,KAEMl7B,EAAI,EAAGA,EAAI,EAAGA,IAQtBk7B,EAAWl7B,GANL+6B,GAAkBE,EAMPA,EAAgB58B,EAAQ/C,MAAO0E,GAAI1E,MAAQ+C,EAAQ/C,MAAO0E,GAJ1Dw4B,EAAgBn6B,EAAQ/C,MAAO0E,GAAKmG,EAAag1B,eAUpE,IAAI7/B,GAAQ4/B,EAAW,GACtBE,EAAoBzC,EAAcr9B,GAClC+/B,EAAW9C,EAAM+C,QAASj9B,EAAQzC,QAClC2/B,EAAShD,EAAM+C,QAASj9B,EAAQxC,KAEjC2/B,GAAsBljB,EAAIsiB,iBAAkBv8B,EAAS+8B,EAErD,KAAM,GAAIp7B,GAAI,EAAGA,EAAI,EAAGA,IAEvB,GAAO+6B,EAgBN,IAAM,GAFFU,GAAQh/B,EAAUy+B,EAAWl7B,GAAIvD,QAE3B0P,EAAI,EAAGC,EAAK3P,EAAQjC,OAAQ2R,EAAIC,EAAID,IAE7CsvB,EAASh/B,EAAS0P,GAEb9N,EAAQzC,SAAWkB,IAAcuB,EAAQzC,SAAW8/B,GAEnDz1B,EAAM01B,8BAA8BxD,QAASkD,IAAe,EAEhEp1B,EAAM21B,qBAAsBtjB,EAAIujB,4BAA8B77B,EAAGmM,EAAGkvB,EAAUI,EAAO19B,MAAO09B,EAAOz9B,OAAQ,EAAGy9B,EAAO38B,MAIrHrE,QAAQqa,KAAM,mGAMf7O,EAAMoB,WAAYiR,EAAIujB,4BAA8B77B,EAAGmM,EAAGkvB,EAAUI,EAAO19B,MAAO09B,EAAOz9B,OAAQ,EAAGq9B,EAAUE,EAAQE,EAAO38B,UAhC1Hm8B,GAEJh1B,EAAMoB,WAAYiR,EAAIujB,4BAA8B77B,EAAG,EAAGq7B,EAAUH,EAAWl7B,GAAIjC,MAAOm9B,EAAWl7B,GAAIhC,OAAQ,EAAGq9B,EAAUE,EAAQL,EAAWl7B,GAAIlB,MAIrJmH,EAAMoB,WAAYiR,EAAIujB,4BAA8B77B,EAAG,EAAGq7B,EAAUA,EAAUE,EAAQL,EAAWl7B,GAoC/Fk5B,GAA6B76B,EAAS+8B,IAE1C9iB,EAAIwjB,eAAgBxjB,EAAIsiB,kBAIzBf,EAAkBY,UAAYp8B,EAAQV,QAEjCU,EAAQT,UAAWS,EAAQT,SAAUS,OAI1C4H,GAAMqF,cAAegN,EAAI/M,SAAWivB,GACpCv0B,EAAMkB,YAAamR,EAAIsiB,iBAAkBf,EAAkBC,2BAQ9D,QAASiC,GAAuB19B,EAASm8B,GAExCv0B,EAAMqF,cAAegN,EAAI/M,SAAWivB,GACpCv0B,EAAMkB,YAAamR,EAAIsiB,iBAAkBtC,EAAW3c,IAAKtd,GAAU47B,gBAIpE,QAASuB,GAAsBQ,EAAa39B,EAAS+8B,GAEpD,GAAIvS,EAkCJ,IAhCKuS,GAEJ9iB,EAAI9Q,cAAew0B,EAAa1jB,EAAI7Q,eAAgB8wB,EAAM+C,QAASj9B,EAAQ7C,QAC3E8c,EAAI9Q,cAAew0B,EAAa1jB,EAAI3Q,eAAgB4wB,EAAM+C,QAASj9B,EAAQ5C,QAE3E6c,EAAI9Q,cAAew0B,EAAa1jB,EAAI1Q,mBAAoB2wB,EAAM+C,QAASj9B,EAAQ3C,YAC/E4c,EAAI9Q,cAAew0B,EAAa1jB,EAAIxQ,mBAAoBywB,EAAM+C,QAASj9B,EAAQ1C,cAI/E2c,EAAI9Q,cAAew0B,EAAa1jB,EAAI7Q,eAAgB6Q,EAAI5Q,eACxD4Q,EAAI9Q,cAAew0B,EAAa1jB,EAAI3Q,eAAgB2Q,EAAI5Q,eAEnDrJ,EAAQ7C,QAAUmB,IAAuB0B,EAAQ5C,QAAUkB,IAE/DlC,QAAQqa,KAAM,gIAAiIzW,GAIhJia,EAAI9Q,cAAew0B,EAAa1jB,EAAI1Q,mBAAoBuxB,EAAgB96B,EAAQ3C,YAChF4c,EAAI9Q,cAAew0B,EAAa1jB,EAAIxQ,mBAAoBqxB,EAAgB96B,EAAQ1C,YAE3E0C,EAAQ1C,YAAcoD,IAAiBV,EAAQ1C,YAAciB,IAEjEnC,QAAQqa,KAAM,kIAAmIzW,IAMnJwqB,EAAY1E,EAAWxI,IAAK,kCAEX,CAEhB,GAAKtd,EAAQxC,OAASogC,IAA8D,OAAjD9X,EAAWxI,IAAK,4BAAwC,MAC3F,IAAKtd,EAAQxC,OAASqgC,IAAuE,OAAtD/X,EAAWxI,IAAK,iCAA6C,QAE/Ftd,EAAQvC,WAAa,GAAKw8B,EAAW3c,IAAKtd,GAAU89B,uBAExD7jB,EAAI8jB,cAAeJ,EAAanT,EAAUwT,2BAA4B5Z,KAAK5c,IAAKxH,EAAQvC,WAAYqK,EAAam2B,qBACjHhE,EAAW3c,IAAKtd,GAAU89B,oBAAsB99B,EAAQvC,aAQ3D,QAAS6+B,GAAed,EAAmBx7B,EAASm8B,OAEZt/B,KAAlC2+B,EAAkBG,cAEtBH,EAAkBG,aAAc,EAEhC37B,EAAQqrB,iBAAkB,UAAW8P,GAErCK,EAAkBI,eAAiB3hB,EAAIrR,gBAEvCmiB,EAAWljB,YAIZD,EAAMqF,cAAegN,EAAI/M,SAAWivB,GACpCv0B,EAAMkB,YAAamR,EAAIlR,WAAYyyB,EAAkBI,gBAErD3hB,EAAIuiB,YAAaviB,EAAIwiB,oBAAqBz8B,EAAQb,OAClD8a,EAAIuiB,YAAaviB,EAAIikB,+BAAgCl+B,EAAQd,kBAC7D+a,EAAIuiB,YAAaviB,EAAIkkB,iBAAkBn+B,EAAQZ,gBAE/C,IAAInC,GAAQk9B,EAAgBn6B,EAAQ/C,MAAO6K,EAAauN,eAEnDulB,GAAwB56B,KAAuC,IAA1Bs6B,EAAcr9B,KAEvDA,EAAQs9B,EAAgBt9B,GAIzB,IAAI8/B,GAAoBzC,EAAcr9B,GACrC+/B,EAAW9C,EAAM+C,QAASj9B,EAAQzC,QAClC2/B,EAAShD,EAAM+C,QAASj9B,EAAQxC,KAEjC2/B,GAAsBljB,EAAIlR,WAAY/I,EAAS+8B,EAE/C,IAAIK,GAAQh/B,EAAU4B,EAAQ5B,OAE9B,IAAK4B,EAAQo+B,eAAiB,CAI7B,GAAIC,GAAiBpkB,EAAIqkB,eAEzB,IAAKt+B,EAAQxC,OAASogC,GAAY,CAEjC,IAAOW,EAAY,KAAM,IAAInO,OAAO,iDACpCiO,GAAiBpkB,EAAIukB,uBAEVD,KAGXF,EAAiBpkB,EAAIwkB,kBAIjBz+B,GAAQzC,SAAWmhC,IAAeL,IAAmBpkB,EAAIqkB,iBAKxDt+B,EAAQxC,OAASmhC,IAAqB3+B,EAAQxC,OAASohC,KAE3DxiC,QAAQqa,KAAM,+FAEdzW,EAAQxC,KAAOmhC,GACfzB,EAAShD,EAAM+C,QAASj9B,EAAQxC,OAQ7BwC,EAAQzC,SAAWshC,KAEvBR,EAAiBpkB,EAAI6kB,cAKhB9+B,EAAQxC,OAASuhC,KAErB3iC,QAAQqa,KAAM,oFAEdzW,EAAQxC,KAAOuhC,GACf7B,EAAShD,EAAM+C,QAASj9B,EAAQxC,QAMlCoK,EAAMoB,WAAYiR,EAAIlR,WAAY,EAAGs1B,EAAgBphC,EAAMyC,MAAOzC,EAAM0C,OAAQ,EAAGq9B,EAAUE,EAAQ,UAE/F,IAAKl9B,EAAQ48B,cAMnB,GAAKx+B,EAAQjC,OAAS,GAAK4gC,EAAoB,CAE9C,IAAM,GAAIp7B,GAAI,EAAG2Y,EAAKlc,EAAQjC,OAAQwF,EAAI2Y,EAAI3Y,IAE7Cy7B,EAASh/B,EAASuD,GAClBiG,EAAMoB,WAAYiR,EAAIlR,WAAYpH,EAAGq7B,EAAUI,EAAO19B,MAAO09B,EAAOz9B,OAAQ,EAAGq9B,EAAUE,EAAQE,EAAO38B,KAIzGT,GAAQf,iBAAkB,MAI1B2I,GAAMoB,WAAYiR,EAAIlR,WAAY,EAAGi0B,EAAU//B,EAAMyC,MAAOzC,EAAM0C,OAAQ,EAAGq9B,EAAUE,EAAQjgC,EAAMwD,UAIhG,IAAKT,EAAQ28B,oBAEnB,IAAM,GAAIh7B,GAAI,EAAG2Y,EAAKlc,EAAQjC,OAAQwF,EAAI2Y,EAAI3Y,IAE7Cy7B,EAASh/B,EAASuD,GAEb3B,EAAQzC,SAAWkB,IAAcuB,EAAQzC,SAAW8/B,GAEnDz1B,EAAM01B,8BAA8BxD,QAASkD,IAAe,EAEhEp1B,EAAM21B,qBAAsBtjB,EAAIlR,WAAYpH,EAAGq7B,EAAUI,EAAO19B,MAAO09B,EAAOz9B,OAAQ,EAAGy9B,EAAO38B,MAIhGrE,QAAQqa,KAAM,kGAMf7O,EAAMoB,WAAYiR,EAAIlR,WAAYpH,EAAGq7B,EAAUI,EAAO19B,MAAO09B,EAAOz9B,OAAQ,EAAGq9B,EAAUE,EAAQE,EAAO38B,UAc1G,IAAKrC,EAAQjC,OAAS,GAAK4gC,EAAoB,CAE9C,IAAM,GAAIp7B,GAAI,EAAG2Y,EAAKlc,EAAQjC,OAAQwF,EAAI2Y,EAAI3Y,IAE7Cy7B,EAASh/B,EAASuD,GAClBiG,EAAMoB,WAAYiR,EAAIlR,WAAYpH,EAAGq7B,EAAUA,EAAUE,EAAQE,EAIlEp9B,GAAQf,iBAAkB,MAI1B2I,GAAMoB,WAAYiR,EAAIlR,WAAY,EAAGi0B,EAAUA,EAAUE,EAAQjgC,EAM9D49B,GAA6B76B,EAAS+8B,IAAsB9iB,EAAIwjB,eAAgBxjB,EAAIlR,YAEzFyyB,EAAkBY,UAAYp8B,EAAQV,QAEjCU,EAAQT,UAAWS,EAAQT,SAAUS,GAO3C,QAASg/B,GAAyBC,EAAa3D,EAAc4D,EAAYC,GAExE,GAAInC,GAAW9C,EAAM+C,QAAS3B,EAAat7B,QAAQzC,QAC/C2/B,EAAShD,EAAM+C,QAAS3B,EAAat7B,QAAQxC,KACjDoK,GAAMoB,WAAYm2B,EAAe,EAAGnC,EAAU1B,EAAa57B,MAAO47B,EAAa37B,OAAQ,EAAGq9B,EAAUE,EAAQ,MAC5GjjB,EAAImlB,gBAAiBnlB,EAAIolB,YAAaJ,GACtChlB,EAAIqlB,qBAAsBrlB,EAAIolB,YAAaH,EAAYC,EAAelF,EAAW3c,IAAKge,EAAat7B,SAAU47B,eAAgB,GAC7H3hB,EAAImlB,gBAAiBnlB,EAAIolB,YAAa,MAKvC,QAASE,GAA0BC,EAAclE,GAEhDrhB,EAAIwlB,iBAAkBxlB,EAAIylB,aAAcF,GAEnClE,EAAar7B,cAAiBq7B,EAAap7B,eAE/C+Z,EAAI0lB,oBAAqB1lB,EAAIylB,aAAczlB,EAAIwkB,kBAAmBnD,EAAa57B,MAAO47B,EAAa37B,QACnGsa,EAAI2lB,wBAAyB3lB,EAAIolB,YAAaplB,EAAI4lB,iBAAkB5lB,EAAIylB,aAAcF,IAE3ElE,EAAar7B,aAAeq7B,EAAap7B,eAEpD+Z,EAAI0lB,oBAAqB1lB,EAAIylB,aAAczlB,EAAI6kB,cAAexD,EAAa57B,MAAO47B,EAAa37B,QAC/Fsa,EAAI2lB,wBAAyB3lB,EAAIolB,YAAaplB,EAAI6lB,yBAA0B7lB,EAAIylB,aAAcF,IAK9FvlB,EAAI0lB,oBAAqB1lB,EAAIylB,aAAczlB,EAAI8lB,MAAOzE,EAAa57B,MAAO47B,EAAa37B,QAIxFsa,EAAIwlB,iBAAkBxlB,EAAIylB,aAAc,MAKzC,QAASM,GAAmBf,EAAa3D,GAGxC,GADeA,GAAgBA,EAAaQ,wBAC9B,KAAM,IAAI1L,OAAO,0DAI/B,IAFAnW,EAAImlB,gBAAiBnlB,EAAIolB,YAAaJ,IAE7B3D,EAAan7B,eAAgBm7B,EAAan7B,aAAai+B,eAE/D,KAAM,IAAIhO,OAAO,sEAKX6J,GAAW3c,IAAKge,EAAan7B,cAAey7B,gBACjDN,EAAan7B,aAAalD,MAAMyC,QAAU47B,EAAa57B,OACvD47B,EAAan7B,aAAalD,MAAM0C,SAAW27B,EAAa37B,SAEzD27B,EAAan7B,aAAalD,MAAMyC,MAAQ47B,EAAa57B,MACrD47B,EAAan7B,aAAalD,MAAM0C,OAAS27B,EAAa37B,OACtD27B,EAAan7B,aAAauO,aAAc,GAIzC5K,EAAcw3B,EAAan7B,aAAc,EAEzC,IAAI8/B,GAAoBhG,EAAW3c,IAAKge,EAAan7B,cAAey7B,cAEpE,IAAKN,EAAan7B,aAAa5C,SAAWmhC,GAEzCzkB,EAAIqlB,qBAAsBrlB,EAAIolB,YAAaplB,EAAI4lB,iBAAkB5lB,EAAIlR,WAAYk3B,EAAmB,OAE9F,CAAA,GAAK3E,EAAan7B,aAAa5C,SAAWshC,GAMhD,KAAM,IAAIzO,OAAO;4EAJjBnW,GAAIqlB,qBAAsBrlB,EAAIolB,YAAaplB,EAAI6lB,yBAA0B7lB,EAAIlR,WAAYk3B,EAAmB,IAW9G,QAASC,GAAwB5E,GAEhC,GAAIO,GAAyB5B,EAAW3c,IAAKge,GAEzC6E,GAAoD,IAAzC7E,EAAaQ,uBAE5B,IAAKR,EAAan7B,aAAe,CAEhC,GAAKggC,EAAS,KAAM,IAAI/P,OAAO,2DAE/B4P,GAAmBnE,EAAuBG,mBAAoBV,OAI9D,IAAK6E,EAAS,CAEbtE,EAAuBI,qBAEvB,KAAM,GAAIt6B,GAAI,EAAGA,EAAI,EAAGA,IAEvBsY,EAAImlB,gBAAiBnlB,EAAIolB,YAAaxD,EAAuBG,mBAAoBr6B,IACjFk6B,EAAuBI,mBAAoBt6B,GAAMsY,EAAImmB,qBACrDb,EAA0B1D,EAAuBI,mBAAoBt6B,GAAK25B,OAM3ErhB,GAAImlB,gBAAiBnlB,EAAIolB,YAAaxD,EAAuBG,oBAC7DH,EAAuBI,mBAAqBhiB,EAAImmB,qBAChDb,EAA0B1D,EAAuBI,mBAAoBX,EAMvErhB,GAAImlB,gBAAiBnlB,EAAIolB,YAAa,MAKvC,QAASgB,GAAmB/E,GAE3B,GAAIO,GAAyB5B,EAAW3c,IAAKge,GACzCE,EAAoBvB,EAAW3c,IAAKge,EAAat7B,QAErDs7B,GAAajQ,iBAAkB,UAAWgQ,GAE1CG,EAAkBI,eAAiB3hB,EAAIrR,gBAEvCmiB,EAAWljB,UAEX,IAAIs4B,IAAoD,IAAzC7E,EAAaQ,wBACxBwE,EAAqBhG,EAAcgB,EAIvC,IAAK6E,EAAS,CAEbtE,EAAuBG,qBAEvB,KAAM,GAAIr6B,GAAI,EAAGA,EAAI,EAAGA,IAEvBk6B,EAAuBG,mBAAoBr6B,GAAMsY,EAAIsmB,wBAMtD1E,GAAuBG,mBAAqB/hB,EAAIsmB,mBAMjD,IAAKJ,EAAS,CAEbv4B,EAAMkB,YAAamR,EAAIsiB,iBAAkBf,EAAkBI,gBAC3DuB,EAAsBljB,EAAIsiB,iBAAkBjB,EAAat7B,QAASsgC,EAElE,KAAM,GAAI3+B,GAAI,EAAGA,EAAI,EAAGA,IAEvBq9B,EAAyBnD,EAAuBG,mBAAoBr6B,GAAK25B,EAAcrhB,EAAIumB,kBAAmBvmB,EAAIujB,4BAA8B77B,EAI5Ik5B,GAA6BS,EAAat7B,QAASsgC,IAAuBrmB,EAAIwjB,eAAgBxjB,EAAIsiB,kBACvG30B,EAAMkB,YAAamR,EAAIsiB,iBAAkB,UAIzC30B,GAAMkB,YAAamR,EAAIlR,WAAYyyB,EAAkBI,gBACrDuB,EAAsBljB,EAAIlR,WAAYuyB,EAAat7B,QAASsgC,GAC5DtB,EAAyBnD,EAAuBG,mBAAoBV,EAAcrhB,EAAIumB,kBAAmBvmB,EAAIlR,YAExG8xB,EAA6BS,EAAat7B,QAASsgC,IAAuBrmB,EAAIwjB,eAAgBxjB,EAAIlR,YACvGnB,EAAMkB,YAAamR,EAAIlR,WAAY,KAM/BuyB,GAAar7B,aAEjBigC,EAAwB5E,GAM1B,QAASmF,GAA0BnF,GAElC,GAAIt7B,GAAUs7B,EAAat7B,OAG3B,IAAK66B,EAA6B76B,EAFTs6B,EAAcgB,IAE2B,CAEjE,GAAIngB,GAASmgB,EAAaQ,wBAA0B7hB,EAAIsiB,iBAAmBtiB,EAAIlR,WAC3E23B,EAAezG,EAAW3c,IAAKtd,GAAU47B,cAE7Ch0B,GAAMkB,YAAaqS,EAAQulB,GAC3BzmB,EAAIwjB,eAAgBtiB,GACpBvT,EAAMkB,YAAaqS,EAAQ,OArwB7B,GAAIojB,GAAgD,mBAA3BoC,yBAA0C1mB,YAAe2mB,QAAOD,sBA2wBzFhlC,MAAKmI,aAAeA,EACpBnI,KAAKsI,eAAiBA,EACtBtI,KAAK+hC,sBAAwBA,EAC7B/hC,KAAK0kC,kBAAoBA,EACzB1kC,KAAK8kC,yBAA2BA,EAQjC,QAASI,MAIR,QAASvjB,GAAK/H,GAEb,GAAIxX,GAAOwX,EAAOxX,KACdiD,EAAMi5B,EAAYl8B,EAStB,YAPalB,KAARmE,IAEJA,KACAi5B,EAAYl8B,GAASiD,GAIfA,EAIR,QAASwc,GAAQjI,SAET0kB,GAAY1kB,EAAOxX,MAI3B,QAASyd,KAERye,KA1BD,GAAIA,KA8BJ,QACC3c,IAAKA,EACLE,OAAQA,EACRhC,MAAOA,GAST,QAASslB,IAAY5+B,EAAI4jB,EAAYoU,GAEpC,QAAS6G,KAER,GAAIC,IAAS,EAETx2B,EAAQ,GAAIhL,GACZyhC,EAAmB,KACnBC,EAAoB,GAAI1hC,GAAS,EAAG,EAAG,EAAG,EAE9C,QAECgN,QAAS,SAAW20B,GAEdF,IAAqBE,GAAeH,IAExC9+B,EAAGi/B,UAAWA,EAAWA,EAAWA,EAAWA,GAC/CF,EAAmBE,IAMrBC,UAAW,SAAWC,GAErBL,EAASK,GAIVlnB,SAAU,SAAW5Y,EAAGsB,EAAGC,EAAGgN,EAAGuB,IAEJ,IAAvBA,IAEJ9P,GAAKuO,EAAGjN,GAAKiN,EAAGhN,GAAKgN,GAItBtF,EAAMhH,IAAKjC,EAAGsB,EAAGC,EAAGgN,IAEuB,IAAtCoxB,EAAkBI,OAAQ92B,KAE9BtI,EAAGolB,WAAY/lB,EAAGsB,EAAGC,EAAGgN,GACxBoxB,EAAkBn0B,KAAMvC,KAM1B+D,MAAO,WAENyyB,GAAS,EAETC,EAAmB,KACnBC,EAAkB19B,KAAO,EAAG,EAAG,EAAG,KAQrC,QAAS+9B,KAER,GAAIP,IAAS,EAETQ,EAAmB,KACnBC,EAAmB,KACnBC,EAAoB,IAExB,QAECpwB,QAAS,SAAWC,GAEdA,EAEJjE,EAAQpL,EAAGqL,YAIXnB,EAASlK,EAAGqL,aAMdf,QAAS,SAAWm1B,GAEdH,IAAqBG,GAAeX,IAExC9+B,EAAGy/B,UAAWA,GACdH,EAAmBG,IAMrBC,QAAS,SAAWpvB,GAEnB,GAAKivB,IAAqBjvB,EAAY,CAErC,GAAKA,EAEJ,OAASA,GAER,IAAKqvB,IAEJ3/B,EAAGsQ,UAAWtQ,EAAG4/B,MACjB,MAED,KAAKC,IAEJ7/B,EAAGsQ,UAAWtQ,EAAG8/B,OACjB,MAED,KAAKC,IAEJ//B,EAAGsQ,UAAWtQ,EAAGggC,KACjB,MAED,KAAKzvB,IAEJvQ,EAAGsQ,UAAWtQ,EAAGigC,OACjB,MAED,KAAKC,IAEJlgC,EAAGsQ,UAAWtQ,EAAGmgC,MACjB,MAED,KAAKC,IAEJpgC,EAAGsQ,UAAWtQ,EAAGqgC,OACjB,MAED,KAAKC,IAEJtgC,EAAGsQ,UAAWtQ,EAAGugC,QACjB,MAED,KAAKC,IAEJxgC,EAAGsQ,UAAWtQ,EAAGygC,SACjB,MAED,SAECzgC,EAAGsQ,UAAWtQ,EAAGigC,YAMnBjgC,GAAGsQ,UAAWtQ,EAAGigC,OAIlBV,GAAmBjvB,IAMrB4uB,UAAW,SAAWC,GAErBL,EAASK,GAIVlnB,SAAU,SAAW5N,GAEfm1B,IAAsBn1B,IAE1BrK,EAAG0gC,WAAYr2B,GACfm1B,EAAoBn1B,IAMtBgC,MAAO,WAENyyB,GAAS,EAETQ,EAAmB,KACnBC,EAAmB,KACnBC,EAAoB,OAQvB,QAASmB,KAER,GAAI7B,IAAS,EAET8B,EAAqB,KACrBC,EAAqB,KACrBC,EAAoB,KACpBC,EAAyB,KACzBC,EAAqB,KACrBC,EAAsB,KACtBC,EAAsB,KACtBC,EAAsB,IAE1B,QAEC/xB,QAAS,SAAWgyB,GAEdA,EAEJh2B,EAAQpL,EAAGqhC,cAIXn3B,EAASlK,EAAGqhC,eAMd/2B,QAAS,SAAWg3B,GAEdV,IAAuBU,GAAiBxC,IAE5C9+B,EAAGshC,YAAaA,GAChBV,EAAqBU,IAMvB5B,QAAS,SAAW6B,EAAaC,EAAYF,GAEvCT,IAAuBU,GACvBT,IAAuBU,GACvBT,IAA2BO,IAE/BthC,EAAGuhC,YAAaA,EAAaC,EAAYF,GAEzCT,EAAqBU,EACrBT,EAAoBU,EACpBT,EAAyBO,IAM3BG,MAAO,SAAWC,EAAaC,EAAcC,GAEvCZ,IAAwBU,GACxBT,IAAwBU,GACxBT,IAAwBU,IAE5B5hC,EAAG6hC,UAAWH,EAAaC,EAAcC,GAEzCZ,EAAqBU,EACrBT,EAAsBU,EACtBT,EAAsBU,IAMxB1C,UAAW,SAAWC,GAErBL,EAASK,GAIVlnB,SAAU,SAAW6pB,GAEfX,IAAwBW,IAE5B9hC,EAAG+hC,aAAcD,GACjBX,EAAsBW,IAMxBz1B,MAAO,WAENyyB,GAAS,EAET8B,EAAqB,KACrBC,EAAqB,KACrBC,EAAoB,KACpBC,EAAyB,KACzBC,EAAqB,KACrBC,EAAsB,KACtBC,EAAsB,KACtBC,EAAsB,OAqDzB,QAASz6B,GAAepL,EAAM2d,EAAQgC,GAErC,GAAI1c,GAAO,GAAIqc,YAAY,GACvB9c,EAAUkC,EAAG0G,eAEjB1G,GAAG4G,YAAatL,EAAMwC,GACtBkC,EAAGiH,cAAe3L,EAAM0E,EAAGuH,mBAAoBvH,EAAGsH,SAClDtH,EAAGiH,cAAe3L,EAAM0E,EAAGqH,mBAAoBrH,EAAGsH,QAElD,KAAM,GAAI7H,GAAI,EAAGA,EAAIwb,EAAOxb,IAE3BO,EAAG8G,WAAYmS,EAASxZ,EAAG,EAAGO,EAAGwH,KAAM,EAAG,EAAG,EAAGxH,EAAGwH,KAAMxH,EAAGgH,cAAezI,EAI5E,OAAOT,GA0BR,QAAS+L,KAER,IAAM,GAAIpK,GAAI,EAAG8K,EAAIy3B,EAAc/nC,OAAQwF,EAAI8K,EAAG9K,IAEjDuiC,EAAeviC,GAAM,EAMvB,QAASqK,GAAiB+P,GAWzB,GATAmoB,EAAenoB,GAAc,EAEW,IAAnCooB,EAAmBpoB,KAEvB7Z,EAAGkiC,wBAAyBroB,GAC5BooB,EAAmBpoB,GAAc,GAIM,IAAnCsoB,EAAmBtoB,GAAoB,CAE3B+J,EAAWxI,IAAK,0BAEtBgnB,yBAA0BvoB,EAAW,GAC/CsoB,EAAmBtoB,GAAc,GAMnC,QAASwoB,GAA2BxoB,EAAWyoB,GAW9C,GATAN,EAAenoB,GAAc,EAEW,IAAnCooB,EAAmBpoB,KAEvB7Z,EAAGkiC,wBAAyBroB,GAC5BooB,EAAmBpoB,GAAc,GAI7BsoB,EAAmBtoB,KAAgByoB,EAAmB,CAE1C1e,EAAWxI,IAAK,0BAEtBgnB,yBAA0BvoB,EAAWyoB,GAC/CH,EAAmBtoB,GAAcyoB,GAMnC,QAASv4B,KAER,IAAM,GAAItK,GAAI,EAAG8K,EAAI03B,EAAkBhoC,OAAQwF,IAAM8K,IAAM9K,EAErDwiC,EAAmBxiC,KAAQuiC,EAAeviC,KAE9CO,EAAGuiC,yBAA0B9iC,GAC7BwiC,EAAmBxiC,GAAM,GAQ5B,QAAS2L,GAAQ5H,IAEY,IAAvBoC,EAAcpC,KAElBxD,EAAGoL,OAAQ5H,GACXoC,EAAcpC,IAAO,GAMvB,QAAS0G,GAAS1G,IAEW,IAAvBoC,EAAcpC,KAElBxD,EAAGkK,QAAS1G,GACZoC,EAAcpC,IAAO,GAMvB,QAAS43B,KAER,GAAkC,OAA7BoH,IAEJA,KAEK5e,EAAWxI,IAAK,mCAChBwI,EAAWxI,IAAK,kCAChBwI,EAAWxI,IAAK,kCAIpB,IAAM,GAFFqnB,GAAUziC,EAAG0iC,aAAc1iC,EAAG2iC,4BAExBljC,EAAI,EAAGA,EAAIgjC,EAAQxoC,OAAQwF,IAEpC+iC,EAAyBx+B,KAAMy+B,EAAShjC,GAQ3C,OAAO+iC,GAIR,QAAS54B,GAAY/E,GAEpB,MAAK+9B,KAAmB/9B,IAEvB7E,EAAG4J,WAAY/E,GAEf+9B,EAAiB/9B,GAEV,GAQT,QAASmH,GAAaC,EAAUC,EAAeC,EAAUC,EAAU4C,EAAoBC,EAAeC,EAAeC,GAYpH,GAVKlD,IAAa42B,GAEjBz3B,EAAQpL,EAAGmL,OAIXjB,EAASlK,EAAGmL,OAIRc,IAAa62B,GAAiB,CAElC,GAAK72B,IAAa82B,GAAmB5zB,IAAuB6zB,EAE3D,OAAS/2B,GAER,IAAKg3B,IAEC9zB,GAEJnP,EAAGkjC,sBAAuBljC,EAAGmjC,SAAUnjC,EAAGmjC,UAC1CnjC,EAAGojC,kBAAmBpjC,EAAGqjC,IAAKrjC,EAAGqjC,IAAKrjC,EAAGqjC,IAAKrjC,EAAGqjC,OAIjDrjC,EAAGkM,cAAelM,EAAGmjC,UACrBnjC,EAAGsjC,UAAWtjC,EAAGujC,UAAWvjC,EAAGqjC,KAGhC,MAED,KAAKG,IAECr0B,GAEJnP,EAAGkjC,sBAAuBljC,EAAGmjC,SAAUnjC,EAAGmjC,UAC1CnjC,EAAGojC,kBAAmBpjC,EAAGyjC,KAAMzjC,EAAGyjC,KAAMzjC,EAAG0jC,oBAAqB1jC,EAAG2jC,uBAInE3jC,EAAGkM,cAAelM,EAAGmjC,UACrBnjC,EAAGsjC,UAAWtjC,EAAGyjC,KAAMzjC,EAAG0jC,qBAG3B,MAED,KAAKE,IAECz0B,GAEJnP,EAAGkjC,sBAAuBljC,EAAGmjC,SAAUnjC,EAAGmjC,UAC1CnjC,EAAGojC,kBAAmBpjC,EAAGyjC,KAAMzjC,EAAG6jC,UAAW7jC,EAAGyjC,KAAMzjC,EAAGujC,aAIzDvjC,EAAGkM,cAAelM,EAAGmjC,UACrBnjC,EAAGsjC,UAAWtjC,EAAGyjC,KAAMzjC,EAAG6jC,WAG3B,MAED,SAEM10B,GAEJnP,EAAGkjC,sBAAuBljC,EAAGmjC,SAAUnjC,EAAGmjC,UAC1CnjC,EAAGojC,kBAAmBpjC,EAAGqjC,IAAKrjC,EAAG2jC,oBAAqB3jC,EAAGqjC,IAAKrjC,EAAG2jC,uBAIjE3jC,EAAGkjC,sBAAuBljC,EAAGmjC,SAAUnjC,EAAGmjC,UAC1CnjC,EAAGojC,kBAAmBpjC,EAAGujC,UAAWvjC,EAAG2jC,oBAAqB3jC,EAAGqjC,IAAKrjC,EAAG2jC,sBAQ3EG,EAAuB,KACvBC,EAAkB,KAClBC,EAAkB,KAClBC,EAA4B,KAC5BC,EAAuB,KACvBC,EAAuB,SAIvBn1B,GAAqBA,GAAsB9C,EAC3C+C,EAAgBA,GAAiB9C,EACjC+C,EAAgBA,GAAiB9C,EAE5BF,IAAkB43B,GAAwB90B,IAAuBi1B,IAErEjkC,EAAGkjC,sBAAuBlL,EAAM+C,QAAS7uB,GAAiB8rB,EAAM+C,QAAS/rB,IAEzE80B,EAAuB53B,EACvB+3B,EAA4Bj1B,GAIxB7C,IAAa43B,GAAmB33B,IAAa43B,GAAmB/0B,IAAkBi1B,GAAwBh1B,IAAkBi1B,IAEhInkC,EAAGojC,kBAAmBpL,EAAM+C,QAAS5uB,GAAY6rB,EAAM+C,QAAS3uB,GAAY4rB,EAAM+C,QAAS9rB,GAAiB+oB,EAAM+C,QAAS7rB,IAE3H60B,EAAkB53B,EAClB63B,EAAkB53B,EAClB83B,EAAuBj1B,EACvBk1B,EAAuBj1B,EAMzB6zB,GAAkB92B,EAClB+2B,EAA2B7zB,EAI5B,QAASi1B,GAAax1B,GAErBA,EAASiB,OAASwF,GACfnL,EAASlK,EAAGmK,WACZiB,EAAQpL,EAAGmK,WAEdk6B,EAAcz1B,EAASiB,OAAS0F,KAEP,IAAzB3G,EAASsB,YACNlE,EAAa4C,EAAS3C,SAAU2C,EAAS1C,cAAe0C,EAASzC,SAAUyC,EAASxC,SAAUwC,EAASI,mBAAoBJ,EAASK,cAAeL,EAASM,cAAeN,EAASO,oBACpLnD,EAAa62B,IAEhB9kC,EAAY2hC,QAAS9wB,EAAS0B,WAC9BvS,EAAYqR,QAASR,EAASS,WAC9BtR,EAAYuM,QAASsE,EAASU,YAC9Bg1B,EAAYh6B,QAASsE,EAASW,YAE9Bg1B,EAAkB31B,EAAS+B,cAAe/B,EAASgC,oBAAqBhC,EAASiC,oBAMlF,QAASwzB,GAAc3R,GAEjB8R,IAAqB9R,IAEpBA,EAEJ1yB,EAAGykC,UAAWzkC,EAAG0kC,IAIjB1kC,EAAGykC,UAAWzkC,EAAG2kC,KAIlBH,EAAmB9R,GAMrB,QAASkS,GAAaC,GAEhBA,IAAaC,IAEjB15B,EAAQpL,EAAGmK,WAEN06B,IAAaE,IAEZF,IAAaG,GAEjBhlC,EAAG6kC,SAAU7kC,EAAGilC,MAELJ,IAAaK,GAExBllC,EAAG6kC,SAAU7kC,EAAGmlC,OAIhBnlC,EAAG6kC,SAAU7kC,EAAGolC,kBAQlBl7B,EAASlK,EAAGmK,WAIb46B,EAAkBF,EAInB,QAASQ,GAAc7nC,GAEjBA,IAAU8nC,IAETC,IAAqBvlC,EAAGwlC,UAAWhoC,GAExC8nC,EAAmB9nC,GAMrB,QAAS+mC,GAAkB5zB,EAAe80B,EAAQriC,GAE5CuN,GAEJvF,EAAQpL,EAAG0lC,qBAENC,IAA+BF,GAAUG,IAA8BxiC,IAE3EpD,EAAG2Q,cAAe80B,EAAQriC,GAE1BuiC,EAA6BF,EAC7BG,EAA4BxiC,IAM7B8G,EAASlK,EAAG0lC,qBAMd,QAASxtB,GAAgBta,GAEnBA,EAEJwN,EAAQpL,EAAG6lC,cAIX37B,EAASlK,EAAG6lC,cAQd,QAAS96B,GAAe+6B,OAEJnrC,KAAdmrC,IAA0BA,EAAY9lC,EAAGgL,SAAW+6B,EAAc,GAElEC,KAAuBF,IAE3B9lC,EAAG+K,cAAe+6B,GAClBE,GAAqBF,GAMvB,QAASl/B,GAAaq/B,EAAWzH,GAEJ,OAAvBwH,IAEJj7B,GAID,IAAIm7B,GAAeC,GAAsBH,QAEnBrrC,KAAjBurC,IAEJA,GAAiB5qC,SAAMX,GAAWmD,YAASnD,IAC3CwrC,GAAsBH,IAAuBE,GAIzCA,EAAa5qC,OAAS2qC,GAAaC,EAAapoC,UAAY0gC,IAEhEx+B,EAAG4G,YAAaq/B,EAAWzH,GAAgB4H,GAAeH,IAE1DC,EAAa5qC,KAAO2qC,EACpBC,EAAapoC,QAAU0gC,GAMzB,QAASnD,KAER,IAECr7B,EAAGq7B,qBAAqBgL,MAAOrmC,EAAIhG,WAElC,MAAQG,GAETD,QAAQC,MAAO,oBAAqBA,IAMtC,QAAS2M,KAER,IAEC9G,EAAG8G,WAAWu/B,MAAOrmC,EAAIhG,WAExB,MAAQG,GAETD,QAAQC,MAAO,oBAAqBA,IAQtC,QAASwD,GAASA,IAEyB,IAArC2oC,GAAelH,OAAQzhC,KAE3BqC,EAAGrC,QAASA,EAAQ/D,EAAG+D,EAAQ9D,EAAG8D,EAAQtD,EAAGsD,EAAQrD,GACrDgsC,GAAez7B,KAAMlN,IAMvB,QAASE,GAAUA,IAE0B,IAAvC0oC,GAAgBnH,OAAQvhC,KAE5BmC,EAAGnC,SAAUA,EAASjE,EAAGiE,EAAShE,EAAGgE,EAASxD,EAAGwD,EAASvD,GAC1DisC,GAAgB17B,KAAMhN,IAQxB,QAASwO,KAER,IAAM,GAAI5M,GAAI,EAAGA,EAAIwiC,EAAkBhoC,OAAQwF,IAEd,IAA3BwiC,EAAmBxiC,KAEvBO,EAAGuiC,yBAA0B9iC,GAC7BwiC,EAAmBxiC,GAAM,EAM3BmG,MAEA48B,EAA2B,KAE3BwD,GAAqB,KACrBG,MAEAvD,EAAiB,KAEjBG,EAAkB,KAElByB,EAAmB,KACnBO,EAAkB,KAElBT,EAAYj4B,QACZtO,EAAYsO,QACZrO,EAAcqO,QA9kBf,GAAIi4B,GAAc,GAAIzF,GAClB9gC,EAAc,GAAIshC,GAClBrhC,EAAgB,GAAI2iC,GAEpB6F,EAAsBxmC,EAAG0iC,aAAc1iC,EAAGymC,oBAC1CzE,EAAgB,GAAIpnB,YAAY4rB,GAChCvE,EAAoB,GAAIrnB,YAAY4rB,GACpCrE,EAAoB,GAAIvnB,YAAY4rB,GAEpC5gC,KAEA48B,EAA2B,KAE3BI,EAAiB,KAEjBG,EAAkB,KAClBe,EAAuB,KACvBC,EAAkB,KAClBC,EAAkB,KAClBC,EAA4B,KAC5BC,EAAuB,KACvBC,EAAuB,KACvBnB,GAA2B,EAE3BwB,EAAmB,KACnBO,EAAkB,KAElBO,EAAmB,KAEnBK,EAA6B,KAC7BC,EAA4B,KAE5BG,EAAc/lC,EAAG0iC,aAAc1iC,EAAG0mC,kCAElCtpC,GAAUupC,WAAY,kBAAkBpiC,KAAMvE,EAAG0iC,aAAc1iC,EAAG4mC,UAAa,IAC/ErB,GAAqBoB,WAAYvpC,KAAa,EAE9C4oC,GAAqB,KACrBG,MAEAG,GAAiB,GAAIhpC,GACrBipC,GAAkB,GAAIjpC,GAqBtB8oC,KAohBJ,OAnhBAA,IAAepmC,EAAG6G,YAAeH,EAAe1G,EAAG6G,WAAY7G,EAAG6G,WAAY,GAC9Eu/B,GAAepmC,EAAGq6B,kBAAqB3zB,EAAe1G,EAAGq6B,iBAAkBr6B,EAAGs7B,4BAA6B,GAI3GgJ,EAAYrsB,SAAU,EAAG,EAAG,EAAG,GAC/Bla,EAAYka,SAAU,GACtBja,EAAcia,SAAU,GAExB7M,EAAQpL,EAAGqL,YACXtN,EAAY2hC,QAASnvB,IAErB8zB,GAAc,GACdO,EAAaI,IACb55B,EAAQpL,EAAGmK,WAEXiB,EAAQpL,EAAGmL,OACXa,EAAa4D,KAogBZxF,SACC9B,MAAOg8B,EACPj6B,MAAOtM,EACP+jC,QAAS9jC,GAGV6L,eAAgBA,EAChBC,gBAAiBA,EACjBu4B,0BAA2BA,EAC3Bt4B,wBAAyBA,EACzBqB,OAAQA,EACRlB,QAASA,EACTkxB,4BAA6BA,EAE7BxxB,WAAYA,EAEZoC,YAAaA,EACbo4B,YAAaA,EAEbC,aAAcA,EACdO,YAAaA,EAEbS,aAAcA,EACdd,iBAAkBA,EAElBrsB,eAAgBA,EAEhBnN,cAAeA,EACfnE,YAAaA,EACby0B,qBAAsBA,EACtBv0B,WAAYA,EAEZnJ,QAASA,EACTE,SAAUA,EAEVwO,MAAOA,GAUT,QAASw6B,IAAmB7mC,EAAI4jB,EAAY1S,GAI3C,QAAS6qB,KAER,OAAuBphC,KAAlBmsC,EAA8B,MAAOA,EAE1C,IAAIxe,GAAY1E,EAAWxI,IAAK,iCAYhC,OARC0rB,GAFkB,OAAdxe,EAEYtoB,EAAG0iC,aAAcpa,EAAUye,gCAI3B,EAQlB,QAASpQ,GAAiB9tB,GAEzB,GAAmB,UAAdA,EAAwB,CAE5B,GAAK7I,EAAGgnC,yBAA0BhnC,EAAG2I,cAAe3I,EAAGinC,YAAap+B,UAAY,GAC3E7I,EAAGgnC,yBAA0BhnC,EAAG0I,gBAAiB1I,EAAGinC,YAAap+B,UAAY,EAEjF,MAAO,OAIRA,GAAY,UAIb,MAAmB,YAAdA,GAEC7I,EAAGgnC,yBAA0BhnC,EAAG2I,cAAe3I,EAAGknC,cAAer+B,UAAY,GAC7E7I,EAAGgnC,yBAA0BhnC,EAAG0I,gBAAiB1I,EAAGknC,cAAer+B,UAAY,EAE5E,UAMF,OAhDR,GAAIi+B,GAoDAj+B,MAAqClO,KAAzBuW,EAAWrI,UAA0BqI,EAAWrI,UAAY,QACxEs+B,EAAexQ,EAAiB9tB,EAE/Bs+B,KAAiBt+B,IAErB3O,QAAQqa,KAAM,uBAAwB1L,EAAW,uBAAwBs+B,EAAc,YACvFt+B,EAAYs+B,EAIb,IAAIhY,IAA+D,IAAtCje,EAAWie,uBAEpC4W,EAAc/lC,EAAG0iC,aAAc1iC,EAAGonC,yBAClCC,EAAoBrnC,EAAG0iC,aAAc1iC,EAAGsnC,gCACxCn0B,EAAiBnT,EAAG0iC,aAAc1iC,EAAGunC,kBACrC3M,EAAiB56B,EAAG0iC,aAAc1iC,EAAGwnC,2BAErCC,EAAgBznC,EAAG0iC,aAAc1iC,EAAGymC,oBACpCpR,EAAoBr1B,EAAG0iC,aAAc1iC,EAAG0nC,4BACxCC,EAAc3nC,EAAG0iC,aAAc1iC,EAAG4nC,qBAClCC,EAAsB7nC,EAAG0iC,aAAc1iC,EAAG8nC,8BAE1ChR,EAAiBuQ,EAAoB,EACrCU,IAA2BnkB,EAAWxI,IAAK,oBAG/C,QAEC2gB,iBAAkBA,EAClBpF,gBAAiBA,EAEjB9tB,UAAWA,EACXsmB,uBAAwBA,EAExB4W,YAAaA,EACbsB,kBAAmBA,EACnBl0B,eAAgBA,EAChBynB,eAAgBA,EAEhB6M,cAAeA,EACfpS,kBAAmBA,EACnBsS,YAAaA,EACbE,oBAAqBA,EAErB/Q,eAAgBA,EAChBiR,sBAAuBA,EACvB5S,oBAtByB2B,GAAkBiR,GAmC7C,QAASC,IAAmBC,EAAKC,EAAQ55B,EAAMC,GAE9CuO,GAAO3e,KAAM1E,MAEbA,KAAK6B,KAAO,oBAEZ7B,KAAKwuC,QAActtC,KAARstC,EAAoBA,EAAM,GACrCxuC,KAAK2jB,KAAO,EAEZ3jB,KAAK6U,SAAgB3T,KAAT2T,EAAqBA,EAAO,GACxC7U,KAAK8U,QAAc5T,KAAR4T,EAAoBA,EAAM,IACrC9U,KAAK0uC,MAAQ,GAEb1uC,KAAKyuC,WAAoBvtC,KAAXutC,EAAuBA,EAAS,EAC9CzuC,KAAK4jB,KAAO,KAEZ5jB,KAAK2uC,UAAY,GACjB3uC,KAAK4uC,WAAa,EAElB5uC,KAAKkf,yBAuNN,QAAS2vB,IAAatpC,GAErBgpC,GAAkB7pC,KAAM1E,MAExBA,KAAK8uC,QAAUvpC,MAgBhB,QAASwpC,IAAc7oC,GAkCtB,QAAS8oC,KAER,GAAgB,OAAXC,GAAmBA,EAAOC,aAAe,CAE7C,GAAIC,GAAgBF,EAAOG,iBAAkB,QACzCC,EAAcF,EAAcE,YAC5BC,EAAeH,EAAcG,YAEjCC,GAAoBrpC,EAASspC,gBAC7BC,EAAcvpC,EAASwpC,UAEvBxpC,EAASypC,qBAAoC,EAAdN,EAAiBC,EAAc,OAEnD5zB,GAAMyC,SAEjBjY,EAASypC,qBAAsBF,EAAY1rC,MAAO0rC,EAAYzrC,OAAQurC,GA/CxE,GAAI7zB,GAAQ1b,KAERivC,EAAS,KACTW,EAAY,IAEO,oBAAX3K,SAA0B,eAAiBA,UAEtD2K,EAAY,GAAI3K,QAAO4K,YAIxB,IAAI3+B,GAAqB,GAAI7Q,GAEzByvC,EAAiB,GAAIzvC,GACrB0vC,EAAwB,GAAI1vC,GAE5B2vC,EAAU,GAAIzB,GAClByB,GAAQC,OAAS,GAAIpsC,GAAS,EAAK,EAAK,GAAK,GAC7CmsC,EAAQ7zB,OAAOxK,OAAQ,EAEvB,IAAIu+B,GAAU,GAAI3B,GAClB2B,GAAQD,OAAS,GAAIpsC,GAAS,GAAK,EAAK,GAAK,GAC7CqsC,EAAQ/zB,OAAOxK,OAAQ,EAEvB,IAAIw+B,GAAW,GAAItB,KAAemB,EAASE,GAC3CC,GAASh0B,OAAOxK,OAAQ,GACxBw+B,EAASh0B,OAAOxK,OAAQ,EAIxB,IAAI89B,GAAaF,CAuBM,oBAAXtK,SAEXA,OAAOvV,iBAAkB,yBAA0Bsf,GAA0B,GAM9EhvC,KAAKme,SAAU,EACfne,KAAKowC,UAAW,EAEhBpwC,KAAKqwC,UAAY,WAEhB,MAAOpB,IAIRjvC,KAAKswC,UAAY,SAAWpuC,OAEZhB,KAAVgB,IAAsB+sC,EAAS/sC,IAIrClC,KAAKuwC,UAAY,SAAW3gC,GAE3B,GAAgB,OAAXq/B,EAAkB,MAAOr/B,EAE9Bq/B,GAAOuB,UAAY5gC,EAAOiF,KAC1Bo6B,EAAOwB,SAAW7gC,EAAOkF,IAEzBm6B,EAAOyB,aAAcd,EAIrB,IAAIe,GAAOf,EAAUe,IAEE,QAAlBA,EAAK19B,SAETrD,EAAOqD,SAAS29B,UAAWD,EAAK19B,UAIhCrD,EAAOqD,SAASpL,IAAK,EAAG,EAAG,GAIF,OAArB8oC,EAAKE,aAETjhC,EAAO2S,WAAWquB,UAAWD,EAAKE,aAInCjhC,EAAO8P,mBAEP,IAAIoxB,GAAkB7B,EAAO6B,eAY7B,IAVK9wC,KAAKowC,UAAYU,IAErBhB,EAAec,UAAWE,EAAgBC,4BAC1ChB,EAAsBiB,WAAYlB,GAElClgC,EAAOoB,YAAY2O,SAAUmwB,GAC7BlgC,EAAOsB,mBAAmByO,SAAUowB,KAIR,IAAxBd,EAAOC,aAAyB,MAAOt/B,EAI5CogC,GAAQn7B,KAAOjF,EAAOiF,KACtBq7B,EAAQr7B,KAAOjF,EAAOiF,KAEtBm7B,EAAQl7B,IAAMlF,EAAOkF,IACrBo7B,EAAQp7B,IAAMlF,EAAOkF,IAErBq7B,EAASn/B,YAAYI,KAAMxB,EAAOoB,aAClCm/B,EAASj/B,mBAAmBE,KAAMxB,EAAOsB,oBAEzC8+B,EAAQ9+B,mBAAmB0/B,UAAWhB,EAAUqB,gBAChDf,EAAQh/B,mBAAmB0/B,UAAWhB,EAAUsB,iBAE3ClxC,KAAKowC,UAAYU,IAErBd,EAAQ9+B,mBAAmByO,SAAUowB,GACrCG,EAAQh/B,mBAAmByO,SAAUowB,GAItC,IAAIntB,GAAShT,EAAOgT,MAEJ,QAAXA,IAEJ1R,EAAmB8/B,WAAYpuB,EAAO5R,aAEtCg/B,EAAQ9+B,mBAAmByO,SAAUzO,GACrCg/B,EAAQh/B,mBAAmByO,SAAUzO,IAMtC8+B,EAAQh/B,YAAYggC,WAAYhB,EAAQ9+B,oBACxCg/B,EAAQl/B,YAAYggC,WAAYd,EAAQh/B,oBAExC8+B,EAAQ7+B,iBAAiBy/B,UAAWhB,EAAUuB,sBAC9CjB,EAAQ/+B,iBAAiBy/B,UAAWhB,EAAUwB,uBAK9CjB,EAASh/B,iBAAiBC,KAAM4+B,EAAQ7+B,iBAIxC,IAAIgL,GAAS8yB,EAAOoC,WAEpB,IAAKl1B,EAAO3b,OAAS,CAEpB,GAAI8wC,GAAQn1B,EAAQ,EAEM,QAArBm1B,EAAMC,YAAmD,IAA5BD,EAAMC,WAAW/wC,QAElDwvC,EAAQC,OAAOW,UAAWU,EAAMC,YAIN,OAAtBD,EAAME,aAAqD,IAA7BF,EAAME,YAAYhxC,QAEpD0vC,EAAQD,OAAOW,UAAWU,EAAME,aAMlC,MAAOrB,IAIRnwC,KAAKyxC,kBAAoB,WAExB,MAAO3B,IAIR9vC,KAAK0xC,YAAc,WAEbzC,GAAUA,EAAOC,cAAeD,EAAOyC,eAI7C1xC,KAAK0tB,QAAU,WAES,mBAAXuX,SAEXA,OAAOzV,oBAAqB,yBAA0Bwf,IAYzD,QAAS2C,IAAiBprC,GAEzB,GAAI4jB,KAEJ,QAECxI,IAAK,SAAWpf,GAEf,OAA4BrB,KAAvBipB,EAAY5nB,GAEhB,MAAO4nB,GAAY5nB,EAIpB,IAAIssB,EAEJ,QAAStsB,GAER,IAAK,sBACJssB,EAAYtoB,EAAGqrC,aAAc,wBAA2BrrC,EAAGqrC,aAAc,4BAA+BrrC,EAAGqrC,aAAc,6BACzH,MAED,KAAK,iCACJ/iB,EAAYtoB,EAAGqrC,aAAc,mCAAsCrrC,EAAGqrC,aAAc,uCAA0CrrC,EAAGqrC,aAAc,wCAC/I,MAED,KAAK,gCACJ/iB,EAAYtoB,EAAGqrC,aAAc,kCAAqCrrC,EAAGqrC,aAAc,sCAAyCrrC,EAAGqrC,aAAc,uCAC7I,MAED,KAAK,iCACJ/iB,EAAYtoB,EAAGqrC,aAAc,mCAAsCrrC,EAAGqrC,aAAc,wCACpF,MAED,KAAK,gCACJ/iB,EAAYtoB,EAAGqrC,aAAc,gCAC7B,MAED,SACC/iB,EAAYtoB,EAAGqrC,aAAcrvC,GAY/B,MARmB,QAAdssB,GAEJpuB,QAAQqa,KAAM,wBAA0BvY,EAAO,6BAIhD4nB,EAAY5nB,GAASssB,EAEdA,IAYV,QAASgjB,MA+FR,QAASC,KAEHC,EAAQ7vC,QAAU8vC,IAEtBD,EAAQ7vC,MAAQ8vC,EAChBD,EAAQh/B,YAAck/B,EAAkB,GAIzCv2B,EAAMw2B,UAAYD,EAClBv2B,EAAMy2B,gBAAkB,EAIzB,QAASC,GAAe94B,EAAQ1J,EAAQyiC,EAAWC,GAElD,GAAIC,GAAqB,OAAXj5B,EAAkBA,EAAO9Y,OAAS,EAC/CgyC,EAAW,IAEZ,IAAiB,IAAZD,EAAgB,CAIpB,GAFAC,EAAWT,EAAQ7vC,OAEI,IAAlBowC,GAAuC,OAAbE,EAAoB,CAElD,GAAIC,GAAWJ,EAAsB,EAAVE,EAC1BnhB,EAAaxhB,EAAOsB,kBAErBwhC,GAAiBC,gBAAiBvhB,IAEhB,OAAbohB,GAAqBA,EAAShyC,OAASiyC,KAE3CD,EAAW,GAAI1sC,cAAc2sC,GAI9B,KAAM,GAAIzsC,GAAI,EAAG4sC,EAAKP,EAAWrsC,IAAMusC,IAAYvsC,EAAG4sC,GAAM,EAE3DC,EAAMzhC,KAAMkI,EAAQtT,IAAMiL,aAAcmgB,EAAYshB,GAEpDG,EAAMh6B,OAAO9S,QAASysC,EAAUI,GAChCJ,EAAUI,EAAK,GAAMC,EAAM/5B,SAM7Bi5B,EAAQ7vC,MAAQswC,EAChBT,EAAQh/B,aAAc,EAMvB,MAFA2I,GAAMw2B,UAAYK,EAEXC,EAnJR,GAAI92B,GAAQ1b,KAEXgyC,EAAc,KACdC,EAAkB,EAClB92B,GAAuB,EACvB23B,GAAmB,EAEnBD,EAAQ,GAAIj6B,IACZ85B,EAAmB,GAAItxC,GAEvB2wC,GAAY7vC,MAAO,KAAM6Q,aAAa,EAEvC/S,MAAK+xC,QAAUA,EACf/xC,KAAKkyC,UAAY,EACjBlyC,KAAKmyC,gBAAkB,EAEvBnyC,KAAKoM,KAAO,SAAWkN,EAAQy5B,EAAqBnjC,GAEnD,GAAIuO,GACe,IAAlB7E,EAAO9Y,QACPuyC,GAGoB,IAApBd,GACA92B,CAOD,OALAA,GAAuB43B,EAEvBf,EAAcI,EAAe94B,EAAQ1J,EAAQ,GAC7CqiC,EAAkB34B,EAAO9Y,OAElB2d,GAIRne,KAAKgzC,aAAe,WAEnBF,GAAmB,EACnBV,EAAe,OAIhBpyC,KAAKizC,WAAa,WAEjBH,GAAmB,EACnBhB,KAID9xC,KAAKkzC,SAAW,SAAW55B,EAAQtC,EAAkBC,EAAarH,EAAQ4hB,EAAO2hB,GAEhF,IAAOh4B,GAAmC,OAAX7B,GAAqC,IAAlBA,EAAO9Y,QAAgBsyC,IAAsB77B,EAIzF67B,EAIJV,EAAe,MAIfN,QAIK,CAEN,GAAIsB,GAAUN,EAAmB,EAAIb,EACpCoB,EAAoB,EAAVD,EAEVZ,EAAWhhB,EAAM8hB,eAAiB,IAEnCvB,GAAQ7vC,MAAQswC,EAEhBA,EAAWJ,EAAe94B,EAAQ1J,EAAQyjC,EAASF,EAEnD,KAAM,GAAIntC,GAAI,EAAGA,IAAMqtC,IAAYrtC,EAElCwsC,EAAUxsC,GAAMgsC,EAAahsC,EAI9BwrB,GAAM8hB,cAAgBd,EACtBxyC,KAAKmyC,gBAAkBn7B,EAAmBhX,KAAKkyC,UAAY,EAC3DlyC,KAAKkyC,WAAakB,IAuErB,QAASG,IAAYhtC,EAAI4jB,GAExB,QAASmX,GAASvD,GAEjB,GAAIlP,EAEJ,IAAKkP,IAAMyV,GAAiB,MAAOjtC,GAAGktC,MACtC,IAAK1V,IAAMp7B,GAAsB,MAAO4D,GAAGmH,aAC3C,IAAKqwB,IAAM2V,GAAyB,MAAOntC,GAAGotC,eAE9C,IAAK5V,IAAMh5B,GAAgB,MAAOwB,GAAGsH,OACrC,IAAKkwB,IAAMsB,GAA6B,MAAO94B,GAAGqtC,sBAClD,IAAK7V,IAAMuB,GAA4B,MAAO/4B,GAAGstC,qBAEjD,IAAK9V,IAAMn7B,GAAe,MAAO2D,GAAGg5B,MACpC,IAAKxB,IAAM+V,GAA4B,MAAOvtC,GAAGwtC,qBACjD,IAAKhW,IAAMl7B,GAA2B,MAAO0D,GAAGytC,oBAEhD,IAAKjW,IAAMh7B,GAAmB,MAAOwD,GAAGgH,aACxC,IAAKwwB,IAAMkW,GAAwB,MAAO1tC,GAAG2tC,sBAC7C,IAAKnW,IAAMoW,GAAwB,MAAO5tC,GAAG6tC,sBAC7C,IAAKrW,IAAMsW,GAAuB,MAAO9tC,GAAG+tC,oBAE5C,IAAKvW,IAAMwW,GAAW,MAAOhuC,GAAG2a,IAChC,IAAK6c,IAAMyW,GAAY,MAAOjuC,GAAGsa,KACjC,IAAKkd,IAAMiF,GAAoB,MAAOz8B,GAAGwL,cACzC,IAAKgsB,IAAM0W,GAAU,MAAOluC,GAAGya,GAC/B,IAAK+c,IAAMkF,GAAkB,MAAO18B,GAAGwa,YACvC,IAAKgd,IAAMkE,GAAY,MAAO17B,GAAGiK,KAEjC,IAAKutB,IAAMmE,IAIS,QAFnBrT,EAAY1E,EAAWxI,IAAK,2BAEF,MAAOkN,GAAU6lB,cAI5C,IAAK3W,IAAM4W,GAAc,MAAOpuC,GAAGquC,KACnC,IAAK7W,IAAM2D,GAAY,MAAOn7B,GAAG+G,GACjC,IAAKywB,IAAMj7B,GAAa,MAAOyD,GAAGwH,IAClC,IAAKgwB,IAAM8W,GAAkB,MAAOtuC,GAAGuuC,SACvC,IAAK/W,IAAMgX,GAAuB,MAAOxuC,GAAGyuC,eAC5C,IAAKjX,IAAMgF,GAAc,MAAOx8B,GAAGo8B,eACnC,IAAK5E,IAAMmF,GAAqB,MAAO38B,GAAG48B,aAE1C,IAAKpF,IAAMnnB,GAAc,MAAOrQ,GAAGmjC,QACnC,IAAK3L,IAAMkX,GAAmB,MAAO1uC,GAAG2uC,aACxC,IAAKnX,IAAMoX,GAA0B,MAAO5uC,GAAG6uC,qBAE/C,IAAKrX,IAAMsX,GAAa,MAAO9uC,GAAGyjC,IAClC,IAAKjM,IAAMuX,GAAY,MAAO/uC,GAAGqjC,GACjC,IAAK7L,IAAMwX,GAAiB,MAAOhvC,GAAG6jC,SACtC,IAAKrM,IAAMyX,GAAyB,MAAOjvC,GAAG0jC,mBAC9C,IAAKlM,IAAMrnB,GAAiB,MAAOnQ,GAAGujC,SACtC,IAAK/L,IAAMpnB,GAAyB,MAAOpQ,GAAG2jC,mBAC9C,IAAKnM,IAAM0X,GAAiB,MAAOlvC,GAAGmvC,SACtC,IAAK3X,IAAM4X,GAAyB,MAAOpvC,GAAGqvC,mBAE9C,IAAK7X,IAAM8X,GAAiB,MAAOtvC,GAAGuvC,SACtC,IAAK/X,IAAMgY,GAAyB,MAAOxvC,GAAGyvC,mBAC9C,IAAKjY,IAAMkY,GAAyB,MAAO1vC,GAAG2vC,kBAE9C,KAAKnY,IAAMoY,IAAwBpY,IAAMqY,IACxCrY,IAAMsY,IAAyBtY,IAAMuY,KAIlB,QAFnBznB,EAAY1E,EAAWxI,IAAK,kCAEF,CAEzB,GAAKoc,IAAMoY,GAAuB,MAAOtnB,GAAU0nB,4BACnD,IAAKxY,IAAMqY,GAAwB,MAAOvnB,GAAU2nB,6BACpD,IAAKzY,IAAMsY,GAAwB,MAAOxnB,GAAU4nB,6BACpD,IAAK1Y,IAAMuY,GAAwB,MAAOznB,GAAU6nB,8BAMtD,IAAK3Y,IAAM4Y,IAA2B5Y,IAAM6Y,IAC3C7Y,IAAM8Y,IAA4B9Y,IAAM+Y,KAIrB,QAFnBjoB,EAAY1E,EAAWxI,IAAK,mCAEF,CAEzB,GAAKoc,IAAM4Y,GAA0B,MAAO9nB,GAAUkoB,+BACtD,IAAKhZ,IAAM6Y,GAA0B,MAAO/nB,GAAUmoB,+BACtD,IAAKjZ,IAAM8Y,GAA2B,MAAOhoB,GAAUooB,gCACvD,IAAKlZ,IAAM+Y,GAA2B,MAAOjoB,GAAUqoB,iCAMzD,GAAKnZ,IAAMoZ,IAIS,QAFnBtoB,EAAY1E,EAAWxI,IAAK,kCAEF,MAAOkN,GAAUuoB,yBAI5C,KAAKrZ,IAAMsZ,IAAetZ,IAAMuZ,KAIZ,QAFnBzoB,EAAY1E,EAAWxI,IAAK,qBAEF,CAEzB,GAAKoc,IAAMsZ,GAAc,MAAOxoB,GAAU0oB,OAC1C,IAAKxZ,IAAMuZ,GAAc,MAAOzoB,GAAU2oB,QAM5C,MAAKzZ,KAAMqF,IAIS,QAFnBvU,EAAY1E,EAAWxI,IAAK,wBAEKkN,EAAU4oB,wBAIrC,EAIR,OAASnW,QAASA,GAYnB,QAASoW,IAAejgC,GA8IvB,QAASkgC,KAER,MAAgC,QAAzBC,GAAgCC,GAAc,EAiEtD,QAASC,KAER3tB,GAAa,GAAIwnB,IAAiBrzB,IAClC6L,GAAWxI,IAAK,uBAChBwI,GAAWxI,IAAK,qBAChBwI,GAAWxI,IAAK,4BAChBwI,GAAWxI,IAAK,0BAChBwI,GAAWxI,IAAK,iCAChBwI,GAAWxI,IAAK,4BAChBwI,GAAWxI,IAAK,0BAChBwI,GAAWxI,IAAK,0BAEhB4c,GAAQ,GAAIgV,IAAYj1B,GAAK6L,IAE7Bhe,GAAe,GAAIihC,IAAmB9uB,GAAK6L,GAAY1S,GAEvDxL,GAAQ,GAAIk5B,IAAY7mB,GAAK6L,GAAYoU,IACzCtyB,GAAM/H,QAAS6zC,GAAgB3mC,KAAM4mC,IAAWvmB,eAAgBomB,KAChE5rC,GAAM7H,SAAU6zC,GAAiB7mC,KAAM8mC,IAAYzmB,eAAgBomB,KAEnEvZ,GAAa,GAAI4G,IACjBh5B,GAAW,GAAImyB,IAAe/f,GAAK6L,GAAYle,GAAOqyB,GAAYnyB,GAAcoyB,GAAO4Z,IACvF9pC,GAAa,GAAI8R,IAAiB7B,IAClCiN,GAAa,GAAI4D,IAAiB7Q,GAAKjQ,GAAY8pC,IACnDC,GAAU,GAAI9kB,IAAc/H,GAAY8sB,IACxCC,GAAe,GAAIzqB,IAAmBvP,IACtCi6B,GAAe,GAAIjd,IAAekd,EAAOruB,GAAYhe,IACrD+J,GAAS,GAAI0a,IACb6nB,GAAc,GAAInrB,IAElB5B,GAAa,GAAIJ,IAAiBktB,EAAOvsC,GAAOsf,GAAYmtB,GAE5DC,GAAiB,GAAI3pB,IAAqB1Q,GAAK6L,GAAYkuB,IAC3DO,GAAwB,GAAIvqB,IAA4B/P,GAAK6L,GAAYkuB,IAEzEQ,GAAgB,GAAI7sC,GAAoBwsC,EAAOl6B,GAAKrS,GAAOC,GAAUC,IACrE2sC,GAAiB,GAAI9lC,GAAqBwlC,EAAOl6B,GAAKrS,GAAOC,GAAUC,IAEvEqsC,EAAMjtC,KAAK0wB,SAAWsc,GAAatc,SAEnCuc,EAAM1kC,QAAUwK,GAChBk6B,EAAMrsC,aAAeA,GACrBqsC,EAAMruB,WAAaA,GACnBquB,EAAMla,WAAaA,GACnBka,EAAMC,YAAcA,GACpBD,EAAMvsC,MAAQA,GA4Nf,QAAS8sC,GAAezpB,GAEvBA,EAAM0pB,iBAENv4C,QAAQo6B,IAAK,sCAEboe,GAAiB,EAIlB,QAASC,KAERz4C,QAAQo6B,IAAK,0CAEboe,GAAiB,EAEjBnB,IAID,QAASqB,GAAmB7pB,GAE3B,GAAIna,GAAWma,EAAM9P,MAErBrK,GAASqa,oBAAqB,UAAW2pB,GAEzCC,EAAoBjkC,GAMrB,QAASikC,GAAoBjkC,GAE5BkkC,EAAiClkC,GAEjCmpB,GAAWzc,OAAQ1M,GAKpB,QAASkkC,GAAiClkC,GAEzC,GAAI8oB,GAAcK,GAAW3c,IAAKxM,GAAW/J,OAE7C+J,GAAS/J,YAAUlK,OAEEA,KAAhB+8B,GAEJsa,GAAara,eAAgBD,GAQ/B,QAASqb,GAAuB1/B,EAAQxO,EAAS+J,GAEhDyE,EAAOnK,OAAQ,SAAWmK,GAEzB4+B,EAAMe,sBAAuB3/B,EAAQxO,EAAS+J,KAsQhD,QAASqkC,GAAuBrkC,EAAU/J,EAAS6O,EAAUw/B,GAE5D,GAAKx/B,GAAYA,EAASy/B,2BAE2B,OAA/CvvB,GAAWxI,IAAK,0BAGpB,WADAlhB,SAAQC,MAAO,sJAOGQ,KAAfu4C,IAA2BA,EAAa,GAE7CxtC,GAAMmE,gBAEN,IAAIyf,GAAqB5V,EAAS5L,WAE9BsrC,EAAoBvuC,EAAQ6vB,gBAE5B2e,EAAiCzkC,EAASqV,sBAE9C,KAAM,GAAIjoB,KAAQo3C,GAAoB,CAErC,GAAIE,GAAmBF,EAAmBp3C,EAE1C,IAAKs3C,GAAoB,EAAI,CAE5B,GAAIC,GAAoBjqB,EAAoBttB,EAE5C,QAA2BrB,KAAtB44C,EAAkC,CAEtC,GAAIz0B,GAAay0B,EAAkBz0B,WAC/Bjc,EAAO0wC,EAAkB10B,SAEzBhF,EAAY/R,GAAWsT,IAAKm4B,EAIhC,QAAmB54C,KAAdkf,EAA0B,QAE/B,IAAIK,GAASL,EAAUK,OACnB5e,EAAOue,EAAUve,KACjBuf,EAAkBhB,EAAUgB,eAEhC,IAAK04B,EAAkBl4B,6BAA+B,CAErD,GAAI9c,GAAOg1C,EAAkBh1C,KACzBi1C,EAASj1C,EAAKi1C,OACd/2C,EAAS82C,EAAkB92C,MAE1B8B,IAAQA,EAAKk1C,8BAEjB/tC,GAAM28B,0BAA2BiR,EAAkB/0C,EAAK+jC,sBAEpB3nC,KAA/B+Y,EAAS8U,oBAEb9U,EAAS8U,kBAAoBjqB,EAAK+jC,iBAAmB/jC,EAAK0c,QAM3DvV,GAAMoE,gBAAiBwpC,GAIxBv7B,GAAI3R,WAAY2R,GAAI1R,aAAc6T,GAClCnC,GAAI/N,oBAAqBspC,EAAkBzwC,EAAMvH,EAAMwjB,EAAY00B,EAAS34B,GAAmBq4B,EAAaM,EAAS/2C,GAAWoe,OAI3H04B,GAAkBG,4BAEtBhuC,GAAM28B,0BAA2BiR,EAAkBC,EAAkBjR,sBAEjC3nC,KAA/B+Y,EAAS8U,oBAEb9U,EAAS8U,kBAAoB+qB,EAAkBjR,iBAAmBiR,EAAkBt4B,QAMrFvV,GAAMoE,gBAAiBwpC,GAIxBv7B,GAAI3R,WAAY2R,GAAI1R,aAAc6T,GAClCnC,GAAI/N,oBAAqBspC,EAAkBzwC,EAAMvH,EAAMwjB,EAAY,EAAGo0B,EAAarwC,EAAOgY,OAIrF,QAAwClgB,KAAnC04C,EAA+C,CAE1D,GAAI13C,GAAQ03C,EAAgCr3C,EAE5C,QAAerB,KAAVgB,EAEJ,OAASA,EAAM1B,QAEd,IAAK,GACJ8d,GAAI47B,gBAAiBL,EAAkB33C,EACvC,MAED,KAAK,GACJoc,GAAI67B,gBAAiBN,EAAkB33C,EACvC,MAED,KAAK,GACJoc,GAAI87B,gBAAiBP,EAAkB33C,EACvC,MAED,SACCoc,GAAI+7B,gBAAiBR,EAAkB33C,MAY7C+J,GAAMqE,0BA0DP,QAASqW,KAER,IAAK2zB,GAAL,CAEA,GAAIrL,GAASsL,GAAGlK,WAEXpB,IAAUA,EAAOC,aAErBD,EAAOuL,sBAAuBC,GAI9BxV,OAAOuV,sBAAuBC,GAI/BH,IAAc,GAIf,QAASG,GAAMC,GAEY,OAArBC,IAA4BA,GAAkBD,EAEnD,IAAIzL,GAASsL,GAAGlK,WAEXpB,IAAUA,EAAOC,aAErBD,EAAOuL,sBAAuBC,GAI9BxV,OAAOuV,sBAAuBC,GAiNhC,QAASG,GAAehhC,EAAQhK,EAAQirC,GAEvC,IAAwB,IAAnBjhC,EAAOxE,QAAZ,CAIA,GAFcwE,EAAOuC,OAAOC,KAAMxM,EAAOuM,QAIxC,GAAKvC,EAAOkhC,QAEXC,EAAYxwC,KAAMqP,GAEbA,EAAO4C,YAEXw+B,EAAazwC,KAAMqP,OAId,IAAKA,EAAOqhC,SAEXrhC,EAAO6C,gBAAiBC,GAASw+B,iBAAkBthC,IAEzDuhC,EAAa5wC,KAAMqP,OAId,IAAKA,EAAOwhC,YAElBC,EAAY9wC,KAAMqP,OAEZ,IAAKA,EAAO0hC,wBAEbT,GAEJU,GAASj8B,sBAAuB1F,EAAO5I,aACrCC,aAAcwM,IAIjB+9B,EAAkBjxC,KAAMqP,EAAQ,KAAMA,EAAOzE,SAAUomC,GAAS36C,EAAG,UAE7D,KAAKgZ,EAAOyC,QAAUzC,EAAO0C,QAAU1C,EAAO2C,YAE/C3C,EAAOiB,eAEXjB,EAAO4hB,SAAS5e,UAIVhD,EAAO6C,eAAiBC,GAASC,iBAAkB/C,IAAW,CAE/DihC,GAEJU,GAASj8B,sBAAuB1F,EAAO5I,aACrCC,aAAcwM,GAIjB,IAAIxD,GAAWm+B,GAAQx7B,OAAQhD,GAC3BzE,EAAWyE,EAAOzE,QAEtB,IAAK0H,MAAMC,QAAS3H,GAInB,IAAM,GAFF4H,GAAS9C,EAAS8C,OAEZ/W,EAAI,EAAG8K,EAAIiM,EAAOvc,OAAQwF,EAAI8K,EAAG9K,IAAO,CAEjD,GAAIkX,GAAQH,EAAQ/W,GAChBmX,EAAgBhI,EAAU+H,EAAME,cAE/BD,IAAiBA,EAAc/H,SAEnComC,EAAkBjxC,KAAMqP,EAAQK,EAAUkD,EAAeo+B,GAAS36C,EAAGsc,OAM5D/H,GAASC,SAEpBomC,EAAkBjxC,KAAMqP,EAAQK,EAAU9E,EAAUomC,GAAS36C,EAAG,MAYpE,IAAM,GAFF4c,GAAW5D,EAAO4D,SAEZxX,EAAI,EAAG8K,EAAI0M,EAAShd,OAAQwF,EAAI8K,EAAG9K,IAE5C40C,EAAep9B,EAAUxX,GAAK4J,EAAQirC,IAMxC,QAASY,GAAejwB,EAAY7b,EAAOC,EAAQ8rC,GAElD,IAAM,GAAI11C,GAAI,EAAG8K,EAAI0a,EAAWhrB,OAAQwF,EAAI8K,EAAG9K,IAAO,CAErD,GAAIonB,GAAa5B,EAAYxlB,GAEzB4T,EAASwT,EAAWxT,OACpBK,EAAWmT,EAAWnT,SACtB9E,MAAgCjU,KAArBw6C,EAAiCtuB,EAAWjY,SAAWumC,EAClEx+B,EAAQkQ,EAAWlQ,KAEvB,IAAKtN,EAAO+rC,cAAgB,CAE3BC,GAAsBhsC,CAItB,KAAM,GAFFk/B,GAAUl/B,EAAOk/B,QAEX38B,EAAI,EAAGC,EAAK08B,EAAQtuC,OAAQ2R,EAAIC,EAAID,IAAO,CAEpD,GAAI0pC,GAAU/M,EAAS38B,EAEvB,IAAKyH,EAAOuC,OAAOC,KAAMy/B,EAAQ1/B,QAAW,CAE3C,GAAI8zB,GAAS4L,EAAQ5L,OAEjB9vC,EAAI8vC,EAAO9vC,EAAI27C,GACf17C,EAAI6vC,EAAO7vC,EAAI27C,GACfh4C,EAAQksC,EAAOrvC,EAAIk7C,GACnB93C,EAASisC,EAAOpvC,EAAIk7C,EAExB9vC,IAAM7H,SAAU6zC,GAAiBpwC,IAAK1H,EAAGC,EAAG2D,EAAOC,GAASytB,eAAgBomB,KAE5E57B,EAAcrC,EAAQjK,EAAOksC,EAAS5hC,EAAU9E,EAAU+H,SAQ5D0+B,IAAsB,KAEtB3/B,EAAcrC,EAAQjK,EAAOC,EAAQqK,EAAU9E,EAAU+H,IAQ5D,QAASjB,GAAcrC,EAAQjK,EAAOC,EAAQqK,EAAU9E,EAAU+H,GAOjE,GALAtD,EAAOvE,eAAgBmjC,EAAO7oC,EAAOC,EAAQqK,EAAU9E,EAAU+H,GAEjEtD,EAAOxG,gBAAgB6B,iBAAkBrF,EAAOsB,mBAAoB0I,EAAO5I,aAC3E4I,EAAOqJ,aAAa0vB,gBAAiB/4B,EAAOxG,iBAEvCwG,EAAO0hC,wBAA0B,CAErCrvC,GAAM0+B,YAAax1B,EAEnB,IAAI/J,GAAU4wC,EAAYpsC,EAAQD,EAAMgF,IAAKQ,EAAUyE,EAEvDqiC,IAA0B,GAE1B3C,EAAuB1/B,EAAQxO,EAAS+J,OAIxCqjC,GAAMj7B,mBAAoB3N,EAAQD,EAAMgF,IAAKsF,EAAU9E,EAAUyE,EAAQsD,EAI1EtD,GAAO7D,cAAeyiC,EAAO7oC,EAAOC,EAAQqK,EAAU9E,EAAU+H,GAIjE,QAASg/B,GAAc/mC,EAAUR,EAAKiF,GAErC,GAAIuiC,GAAqB7d,GAAW3c,IAAKxM,GAErCsC,EAAa8gC,GAAazb,cAC7B3nB,EAAUe,GAAOjK,MAAO+uC,EAAcrmC,EAAKynC,GAAUlK,UAAWkK,GAAUjK,gBAAiBv4B,GAExFsd,EAAOqhB,GAAa5a,eAAgBxoB,EAAUsC,GAE9CrM,EAAU+wC,EAAmB/wC,QAC7BixC,GAAgB,CAEpB,QAAiBn7C,KAAZkK,EAGJ+J,EAASua,iBAAkB,UAAWypB,OAEhC,IAAK/tC,EAAQ8rB,OAASA,EAG5BmiB,EAAiClkC,OAE3B,CAAA,OAA6BjU,KAAxBuW,EAAWwlB,SAGtB,MAKAof,IAAgB,EAIjB,GAAKA,EAAgB,CAEpB,GAAK5kC,EAAWwlB,SAAW,CAE1B,GAAIjvB,GAASme,GAAW1U,EAAWwlB,SAEnCkf,GAAmBnuC,QAClBzL,KAAM4S,EAAStT,KACf4M,SAAU6tC,GAAc7gC,MAAOzN,EAAOS,UACtCR,aAAcD,EAAOC,aACrBE,eAAgBH,EAAOG,oBAKxBguC,GAAmBnuC,QAClBzL,KAAM4S,EAAStT,KACf4M,SAAU0G,EAAS1G,SACnBR,aAAckH,EAASlH,aACvBE,eAAgBgH,EAAShH,eAK3BgH,GAASyoB,gBAAiBue,EAAmBnuC,QAE7C5C,EAAUmtC,GAAaza,eAAgB3oB,EAAUgnC,EAAmBnuC,OAAQyJ,EAAYyf,GAExFilB,EAAmB/wC,QAAUA,EAC7B+J,EAAS/J,QAAUA,EAIpB,GAAIuuC,GAAoBvuC,EAAQ6vB,eAEhC,IAAK9lB,EAAS0C,aAAe,CAE5B1C,EAASonC,yBAA2B,CAEpC,KAAM,GAAIv2C,GAAI,EAAGA,EAAIwyC,EAAM/a,gBAAiBz3B,IAEtC2zC,EAAmB,cAAgB3zC,IAAO,GAE9CmP,EAASonC,2BAQZ,GAAKpnC,EAASmP,aAAe,CAE5BnP,EAASqnC,yBAA2B,CAEpC,KAAM,GAAIx2C,GAAI,EAAGA,EAAIwyC,EAAM9a,gBAAiB13B,IAEtC2zC,EAAmB,cAAgB3zC,IAAO,GAE9CmP,EAASqnC,2BAQZ,GAAI/tC,GAAW0tC,EAAmBnuC,OAAOS,UAElC0G,EAAS0kB,kBACb1kB,EAASojB,uBACW,IAAtBpjB,EAAS+U,WAETiyB,EAAmBjjB,kBAAoBkjB,GAAUlK,UACjDiK,EAAmBhK,gBAAkBiK,GAAUjK,gBAC/C1jC,EAASsI,eAAiBqlC,GAAUrK,SAIrCoK,EAAmBxnC,IAAMA,EAIzBwnC,EAAmBM,WAAavmC,GAAOjK,MAAMshB,KAExCpY,EAASe,SAIbzH,EAASiuC,kBAAkBx6C,MAAQgU,GAAOjK,MAAMonB,QAChD5kB,EAASkuC,kBAAkBz6C,MAAQgU,GAAOjK,MAAM+lB,YAChDvjB,EAASmuC,WAAW16C,MAAQgU,GAAOjK,MAAMsmB,KACzC9jB,EAASouC,eAAe36C,MAAQgU,GAAOjK,MAAM6mB,SAC7CrkB,EAASquC,YAAY56C,MAAQgU,GAAOjK,MAAMgnB,MAC1CxkB,EAASsuC,iBAAiB76C,MAAQgU,GAAOjK,MAAMmnB,KAE/C3kB,EAASqjB,qBAAqB5vB,MAAQgU,GAAOjK,MAAM6lB,qBACnDrjB,EAASsjB,wBAAwB7vB,MAAQgU,GAAOjK,MAAM8lB,wBACtDtjB,EAAS4jB,cAAcnwB,MAAQgU,GAAOjK,MAAMomB,cAC5C5jB,EAAS6jB,iBAAiBpwB,MAAQgU,GAAOjK,MAAMqmB,iBAC/C7jB,EAASskB,eAAe7wB,MAAQgU,GAAOjK,MAAM8mB,eAC7CtkB,EAASukB,kBAAkB9wB,MAAQgU,GAAOjK,MAAM+mB,kBAKjD,IAAIgqB,GAAeb,EAAmB/wC,QAAQgjB,cAC7C6uB,EACC9xC,EAAc+xC,aAAcF,EAAa53C,IAAKqJ,EAEhD0tC,GAAmBc,aAAeA,EAInC,QAASjB,GAAYpsC,EAAQ+E,EAAKQ,EAAUyE,GAE3CujC,GAAoB,CAEpB,IAAIhB,GAAqB7d,GAAW3c,IAAKxM,EAEzC,IAAKioC,KAECC,IAAyBztC,IAAW0tC,IAAiB,CAEzD,GAAIC,GACH3tC,IAAW0tC,IACXnoC,EAASpL,KAAOyzC,EAKjBpB,IAAUlJ,SACT/9B,EAAS4B,eAAgB5B,EAAS6B,iBAAkB7B,EAAS8B,YAC7DrH,EAAQusC,EAAoBoB,IAMD,IAAzBpoC,EAASpC,kBAEuB7R,KAA/Bi7C,EAAmB/wC,QAEvB+J,EAASpC,aAAc,EAEZoC,EAASR,KAAOwnC,EAAmBxnC,MAAQA,EAEtDQ,EAASpC,aAAc,EAEZoC,EAASe,QAAUimC,EAAmBM,aAAevmC,GAAOjK,MAAMshB,KAE7EpY,EAASpC,aAAc,MAE6B7R,KAAzCi7C,EAAmBjjB,mBAC5BijB,EAAmBjjB,oBAAsBkjB,GAAUlK,WACrDiK,EAAmBhK,kBAAoBiK,GAAUjK,kBAEjDh9B,EAASpC,aAAc,IAMpBoC,EAASpC,cAEbmpC,EAAc/mC,EAAUR,EAAKiF,GAC7BzE,EAASpC,aAAc,EAIxB,IAAI0qC,IAAiB,EACjBC,GAAkB,EAClBC,GAAgB,EAEhBvyC,EAAU+wC,EAAmB/wC,QAChCwyC,EAAaxyC,EAAQgjB,cACrByvB,EAAa1B,EAAmBnuC,OAAOS,QAkBxC,IAhBKxC,GAAMkE,WAAY/E,EAAQA,WAE9BqyC,GAAiB,EACjBC,GAAkB,EAClBC,GAAgB,GAIZxoC,EAASpL,KAAOyzC,KAEpBA,GAAqBroC,EAASpL,GAE9B2zC,GAAkB,GAIdD,GAAkB7tC,IAAW0tC,GAAiB,CA6BlD,GA3BAM,EAAW3zC,SAAUqU,GAAK,mBAAoB1O,EAAOuB,kBAEhDhF,GAAaupB,wBAEjBkoB,EAAW3zC,SAAUqU,GAAK,gBACzB,GAAQmK,KAAKoS,IAAKjrB,EAAOkF,IAAM,GAAQ2T,KAAKq1B,MAMzCR,MAAqB1B,IAAuBhsC,KAEhD0tC,GAAmB1B,IAAuBhsC,EAM1C8tC,GAAkB,EAClBC,GAAgB,GAOZxoC,EAAS0kB,kBACb1kB,EAAS4oC,qBACT5oC,EAAS6oC,wBACT7oC,EAASsU,OAAS,CAElB,GAAIw0B,GAAUL,EAAWv4C,IAAI64C,mBAEZh9C,KAAZ+8C,GAEJA,EAAQh0C,SAAUqU,GACjBi9B,GAASj8B,sBAAuB1P,EAAOoB,eAMrCmE,EAAS4oC,qBACb5oC,EAASgpC,uBACThpC,EAASipC,qBACTjpC,EAAS6oC,wBACT7oC,EAAS0kB,kBACT1kB,EAASyC,WAETgmC,EAAW3zC,SAAUqU,GAAK,aAAc1O,EAAOsB,oBAUjD,GAAKiE,EAASyC,SAAW,CAExBgmC,EAAWS,YAAa//B,GAAK1E,EAAQ,cACrCgkC,EAAWS,YAAa//B,GAAK1E,EAAQ,oBAErC,IAAI4hB,GAAW5hB,EAAO4hB,QAEtB,IAAKA,EAAW,CAEf,GAAIC,GAAQD,EAASC,KAErB,IAAKtvB,GAAauvB,oBAAsB,CAEvC,OAA8Bx6B,KAAzBs6B,EAAS8iB,YAA4B,CAUzC,GAAIl1C,GAAOqf,KAAK81B,KAAqB,EAAf9iB,EAAMj7B,OAC5B4I,GAAO/G,GAAMm8C,eAAgBp1C,GAC7BA,EAAOqf,KAAK3c,IAAK1C,EAAM,EAEvB,IAAIq1C,GAAe,GAAI34C,cAAcsD,EAAOA,EAAO,EACnDq1C,GAAa52C,IAAK2zB,EAASijB,aAE3B,IAAIH,GAAc,GAAIz5C,GAAa45C,EAAcr1C,EAAMA,EAAMtG,GAAYm/B,GAEzEzG,GAASijB,aAAeA,EACxBjjB,EAAS8iB,YAAcA,EACvB9iB,EAASkjB,gBAAkBt1C,EAI5Bw0C,EAAW3zC,SAAUqU,GAAK,cAAekd,EAAS8iB,aAClDV,EAAW3zC,SAAUqU,GAAK,kBAAmBkd,EAASkjB,qBAItDd,GAAWS,YAAa//B,GAAKkd,EAAU,iBA+H1C,MAvHKkiB,KAEJE,EAAW3zC,SAAUqU,GAAK,sBAAuBk6B,EAAMmG,qBACvDf,EAAW3zC,SAAUqU,GAAK,wBAAyBk6B,EAAMoG,uBAEpDzpC,EAASe,QAWb2oC,EAA+BhB,EAAYF,GAMvChpC,GAAOQ,EAASR,KAEpBmqC,EAAoBjB,EAAYlpC,GAI5BQ,EAASipC,oBAEbW,EAAuBlB,EAAY1oC,GAExBA,EAASgpC,uBAEpBY,EAAuBlB,EAAY1oC,GACnC6pC,EAAwBnB,EAAY1oC,IAEzBA,EAAS4oC,qBAEpBgB,EAAuBlB,EAAY1oC,GAE9BA,EAAS8pC,mBAEbC,EAAqBrB,EAAY1oC,GAIjCgqC,EAAsBtB,EAAY1oC,IAIxBA,EAAS6oC,wBAEpBe,EAAuBlB,EAAY1oC,GAE9BA,EAASiqC,uBAEbC,EAAyBxB,EAAY1oC,GAIrCmqC,EAAyBzB,EAAY1oC,IAI3BA,EAASoqC,qBAEpBR,EAAuBlB,EAAY1oC,GACnCqqC,EAAsB3B,EAAY1oC,IAEvBA,EAAS6G,wBAEpB+iC,EAAuBlB,EAAY1oC,GACnCsqC,EAAyB5B,EAAY1oC,IAE1BA,EAASuqC,sBAEpBX,EAAuBlB,EAAY1oC,GACnCwqC,EAAuB9B,EAAY1oC,IAExBA,EAASyqC,qBAEpBC,EAAqBhC,EAAY1oC,GAE5BA,EAAS2qC,sBAEbC,EAAqBlC,EAAY1oC,IAIvBA,EAAS6qC,iBAEpBC,EAAuBpC,EAAY1oC,GAExBA,EAAS+qC,mBAEpBrC,EAAWhvC,MAAM3M,MAAQiT,EAAStG,MAClCgvC,EAAWjvC,QAAQ1M,MAAQiT,EAASvG,aAOV1N,KAAtB28C,EAAWsC,SAAuBtC,EAAWsC,OAAOj+C,MAAQk+C,GAAYC,qBAClDn/C,KAAtB28C,EAAWyC,SAAuBzC,EAAWyC,OAAOp+C,MAAQk+C,GAAYG,iBAE7Ep1C,EAAcq1C,OACbliC,GAAK69B,EAAmBc,aAAcY,EAAYrF,IAOpDoF,EAAW3zC,SAAUqU,GAAK,kBAAmB1E,EAAOxG,iBACpDwqC,EAAW3zC,SAAUqU,GAAK,eAAgB1E,EAAOqJ,cACjD26B,EAAW3zC,SAAUqU,GAAK,cAAe1E,EAAO5I,aAEzC5F,EAMR,QAAS2zC,GAAuBtwC,EAAU0G,GAEzC1G,EAASG,QAAQ1M,MAAQiT,EAASvG,QAE7BuG,EAAStG,QAEbJ,EAASgyC,QAAQv+C,MAAQiT,EAAStG,OAI9BsG,EAASurC,UAEbjyC,EAASiyC,SAASx+C,MAAMkP,KAAM+D,EAASurC,UAAWjvB,eAAgBtc,EAASwrC,mBAIvExrC,EAAS9P,MAEboJ,EAASpJ,IAAInD,MAAQiT,EAAS9P,KAI1B8P,EAAS2C,WAEbrJ,EAASqJ,SAAS5V,MAAQiT,EAAS2C,UAI/B3C,EAASqU,cAEb/a,EAAS+a,YAAYtnB,MAAQiT,EAASqU,aAIlCrU,EAASsU,SAEbhb,EAASgb,OAAOvnB,MAAQiT,EAASsU,OAMjChb,EAASmyC,WAAW1+C,MAAciT,EAASsU,QAAUtU,EAASsU,OAAOwC,eAA0B,EAAN,EAEzFxd,EAASmb,aAAa1nB,MAAQiT,EAASyU,aACvCnb,EAASob,gBAAgB3nB,MAAQiT,EAAS0U,iBAItC1U,EAASiU,WAEb3a,EAAS2a,SAASlnB,MAAQiT,EAASiU,SACnC3a,EAAS4a,kBAAkBnnB,MAAQiT,EAASkU,mBAIxClU,EAASmU,QAEb7a,EAAS6a,MAAMpnB,MAAQiT,EAASmU,MAChC7a,EAAS8a,eAAernB,MAAQiT,EAASoU,eAY1C,IAAIs3B,EAwCJ,IAtCK1rC,EAAS9P,IAEbw7C,EAAa1rC,EAAS9P,IAEX8P,EAASqU,YAEpBq3B,EAAa1rC,EAASqU,YAEXrU,EAAS4C,gBAEpB8oC,EAAa1rC,EAAS4C,gBAEX5C,EAASsgB,UAEpBorB,EAAa1rC,EAASsgB,UAEXtgB,EAASqgB,QAEpBqrB,EAAa1rC,EAASqgB,QAEXrgB,EAAS0jB,aAEpBgoB,EAAa1rC,EAAS0jB,aAEX1jB,EAAS2jB,aAEpB+nB,EAAa1rC,EAAS2jB,aAEX3jB,EAAS2C,SAEpB+oC,EAAa1rC,EAAS2C,SAEX3C,EAASyjB,cAEpBioB,EAAa1rC,EAASyjB,iBAIH13B,KAAf2/C,EAA2B,CAS/B,GANKA,EAAW7kB,sBAEf6kB,EAAaA,EAAWx8C,UAIY,IAAhCw8C,EAAWz9C,iBAA4B,CAE3C,GAAIJ,GAAS69C,EAAW79C,OACpBC,EAAS49C,EAAW59C,OACpBE,EAAW09C,EAAW19C,SACtBD,EAAS29C,EAAW39C,MAExB29C,GAAWx9C,OAAOy9C,eAAgB99C,EAAO7C,EAAG6C,EAAO5C,EAAG6C,EAAO9C,EAAG8C,EAAO7C,EAAG+C,EAAUD,EAAO/C,EAAG+C,EAAO9C,GAItGqO,EAASsyC,YAAY7+C,MAAMkP,KAAMyvC,EAAWx9C,SAM9C,QAASw8C,GAAqBpxC,EAAU0G,GAEvC1G,EAASgyC,QAAQv+C,MAAQiT,EAAStG,MAClCJ,EAASG,QAAQ1M,MAAQiT,EAASvG,QAInC,QAASmxC,GAAqBtxC,EAAU0G,GAEvC1G,EAASuyC,SAAS9+C,MAAQiT,EAAS6rC,SACnCvyC,EAASwyC,UAAU/+C,MAAQiT,EAAS6rC,SAAW7rC,EAAS+rC,QACxDzyC,EAASK,MAAM5M,MAAQiT,EAASrG,MAIjC,QAASmxC,GAAuBxxC,EAAU0G,GASzC,GAPA1G,EAASgyC,QAAQv+C,MAAQiT,EAAStG,MAClCJ,EAASG,QAAQ1M,MAAQiT,EAASvG,QAClCH,EAASrF,KAAKlH,MAAQiT,EAAS/L,KAAOyuC,GACtCppC,EAASK,MAAM5M,MAAkB,GAAV65C,GAEvBttC,EAASpJ,IAAInD,MAAQiT,EAAS9P,IAER,OAAjB8P,EAAS9P,IAAe,CAE5B,IAAuC,IAAlC8P,EAAS9P,IAAIjC,iBAA4B,CAE7C,GAAIJ,GAASmS,EAAS9P,IAAIrC,OACtBC,EAASkS,EAAS9P,IAAIpC,OACtBE,EAAWgS,EAAS9P,IAAIlC,SACxBD,EAASiS,EAAS9P,IAAInC,MAE1BiS,GAAS9P,IAAIhC,OAAOy9C,eAAgB99C,EAAO7C,EAAG6C,EAAO5C,EAAG6C,EAAO9C,EAAG8C,EAAO7C,EAAG+C,EAAUD,EAAO/C,EAAG+C,EAAO9C,GAIxGqO,EAASsyC,YAAY7+C,MAAMkP,KAAM+D,EAAS9P,IAAIhC,SAMhD,QAASy7C,GAAoBrwC,EAAUkG,GAEtClG,EAASgF,SAASvR,MAAQyS,EAAI9F,MAEzB8F,EAAIC,OAERnG,EAAS8E,QAAQrR,MAAQyS,EAAIE,KAC7BpG,EAAS+E,OAAOtR,MAAQyS,EAAIG,KAEjBH,EAAII,YAEftG,EAAS6E,WAAWpR,MAAQyS,EAAIK,SAMlC,QAASgqC,GAAwBvwC,EAAU0G,GAErCA,EAASyjB,cAEbnqB,EAASmqB,YAAY12B,MAAQiT,EAASyjB,aAMxC,QAASumB,GAAsB1wC,EAAU0G,GAExC1G,EAAS0yC,SAASj/C,MAAQiT,EAASgsC,SACnC1yC,EAAS2yC,UAAUl/C,MAAQumB,KAAK3c,IAAKqJ,EAASisC,UAAW,MAEpDjsC,EAASyjB,cAEbnqB,EAASmqB,YAAY12B,MAAQiT,EAASyjB,aAIlCzjB,EAASqgB,UAEb/mB,EAAS+mB,QAAQtzB,MAAQiT,EAASqgB,QAClC/mB,EAAS4yC,UAAUn/C,MAAQiT,EAASksC,WAIhClsC,EAASsgB,YAEbhnB,EAASgnB,UAAUvzB,MAAQiT,EAASsgB,UACpChnB,EAAS6yC,YAAYp/C,MAAMkP,KAAM+D,EAASmsC,cAItCnsC,EAAS4C,kBAEbtJ,EAASsJ,gBAAgB7V,MAAQiT,EAAS4C,gBAC1CtJ,EAASuJ,kBAAkB9V,MAAQiT,EAAS6C,kBAC5CvJ,EAASwJ,iBAAiB/V,MAAQiT,EAAS8C,kBAM7C,QAASinC,GAAqBzwC,EAAU0G,GAEvCgqC,EAAsB1wC,EAAU0G,GAE3BA,EAASkkB,cAEb5qB,EAAS4qB,YAAYn3B,MAAQiT,EAASkkB,aAMxC,QAASimB,GAAyB7wC,EAAU0G,GAE3C1G,EAAS8yC,UAAUr/C,MAAQiT,EAASosC,UACpC9yC,EAAS+yC,UAAUt/C,MAAQiT,EAASqsC,UAE/BrsC,EAAS0jB,eAEbpqB,EAASoqB,aAAa32B,MAAQiT,EAAS0jB,cAInC1jB,EAAS2jB,eAEbrqB,EAASqqB,aAAa52B,MAAQiT,EAAS2jB,cAInC3jB,EAASyjB,cAEbnqB,EAASmqB,YAAY12B,MAAQiT,EAASyjB,aAIlCzjB,EAASqgB,UAEb/mB,EAAS+mB,QAAQtzB,MAAQiT,EAASqgB,QAClC/mB,EAAS4yC,UAAUn/C,MAAQiT,EAASksC,WAIhClsC,EAASsgB,YAEbhnB,EAASgnB,UAAUvzB,MAAQiT,EAASsgB,UACpChnB,EAAS6yC,YAAYp/C,MAAMkP,KAAM+D,EAASmsC,cAItCnsC,EAAS4C,kBAEbtJ,EAASsJ,gBAAgB7V,MAAQiT,EAAS4C,gBAC1CtJ,EAASuJ,kBAAkB9V,MAAQiT,EAAS6C,kBAC5CvJ,EAASwJ,iBAAiB/V,MAAQiT,EAAS8C,kBAIvC9C,EAASsU,SAGbhb,EAASgzC,gBAAgBv/C,MAAQiT,EAASssC,iBAM5C,QAASpC,GAAyB5wC,EAAU0G,GAE3C1G,EAASizC,UAAUx/C,MAAQiT,EAASusC,UACpCjzC,EAASkzC,mBAAmBz/C,MAAQiT,EAASwsC,mBAE7CrC,EAAyB7wC,EAAU0G,GAIpC,QAASqqC,GAAsB/wC,EAAU0G,GAEnCA,EAAS4C,kBAEbtJ,EAASsJ,gBAAgB7V,MAAQiT,EAAS4C,gBAC1CtJ,EAASuJ,kBAAkB9V,MAAQiT,EAAS6C,kBAC5CvJ,EAASwJ,iBAAiB/V,MAAQiT,EAAS8C,kBAM7C,QAASwnC,GAAyBhxC,EAAU0G,GAEtCA,EAAS4C,kBAEbtJ,EAASsJ,gBAAgB7V,MAAQiT,EAAS4C,gBAC1CtJ,EAASuJ,kBAAkB9V,MAAQiT,EAAS6C,kBAC5CvJ,EAASwJ,iBAAiB/V,MAAQiT,EAAS8C,kBAI5CxJ,EAAS6J,kBAAkBpW,MAAMkP,KAAM+D,EAASmD,mBAChD7J,EAAS8J,aAAarW,MAAQiT,EAASoD,aACvC9J,EAAS+J,YAAYtW,MAAQiT,EAASqD,YAIvC,QAASmnC,GAAuBlxC,EAAU0G,GAEpCA,EAASqgB,UAEb/mB,EAAS+mB,QAAQtzB,MAAQiT,EAASqgB,QAClC/mB,EAAS4yC,UAAUn/C,MAAQiT,EAASksC,WAIhClsC,EAASsgB,YAEbhnB,EAASgnB,UAAUvzB,MAAQiT,EAASsgB,UACpChnB,EAAS6yC,YAAYp/C,MAAMkP,KAAM+D,EAASmsC,cAItCnsC,EAAS4C,kBAEbtJ,EAASsJ,gBAAgB7V,MAAQiT,EAAS4C,gBAC1CtJ,EAASuJ,kBAAkB9V,MAAQiT,EAAS6C,kBAC5CvJ,EAASwJ,iBAAiB/V,MAAQiT,EAAS8C,kBAQ7C,QAAS4mC,GAA+BpwC,EAAUvM,GAEjDuM,EAASiuC,kBAAkB3pC,YAAc7Q,EAEzCuM,EAASkuC,kBAAkB5pC,YAAc7Q,EACzCuM,EAASquC,YAAY/pC,YAAc7Q,EACnCuM,EAASmuC,WAAW7pC,YAAc7Q,EAClCuM,EAASouC,eAAe9pC,YAAc7Q,EACtCuM,EAASsuC,iBAAiBhqC,YAAc7Q,EAezC,QAASmE,KAER,GAAIu7C,GAAczE,EAUlB,OARKyE,IAAez1C,GAAamgC,aAEhC7rC,QAAQqa,KAAM,sCAAwC8mC,EAAc,+CAAiDz1C,GAAamgC,aAInI6Q,IAAqB,EAEdyE,EAhuERnhD,QAAQo6B,IAAK,sBAAuBgnB,IAEpCpqC,EAAaA,KAEb,IAAIqqC,OAAgC5gD,KAAtBuW,EAAW3E,OAAuB2E,EAAW3E,OAASc,SAASC,gBAAiB,+BAAgC,UAC7HkuC,MAAkC7gD,KAAvBuW,EAAW3D,QAAwB2D,EAAW3D,QAAU,KAEnEkuC,MAA8B9gD,KAArBuW,EAAWkV,OAAsBlV,EAAWkV,MACrDs1B,MAA8B/gD,KAArBuW,EAAW7G,OAAsB6G,EAAW7G,MACrDsxC,MAAkChhD,KAAvBuW,EAAW4wB,SAAwB5wB,EAAW4wB,QACzD8Z,MAAsCjhD,KAAzBuW,EAAW2qC,WAA0B3qC,EAAW2qC,UAC7D1J,MAAwDx3C,KAAlCuW,EAAW/B,oBAAmC+B,EAAW/B,mBAC/E2sC,MAA8DnhD,KAArCuW,EAAW6qC,uBAAsC7qC,EAAW6qC,sBAElFvH,KACAC,KAEAQ,EAAoB,KAEpBL,KACAE,IAIJr7C,MAAKuiD,WAAaT,EAClB9hD,KAAK8T,QAAU,KAIf9T,KAAK6rB,WAAY,EACjB7rB,KAAK8rB,gBAAiB,EACtB9rB,KAAK+rB,gBAAiB,EACtB/rB,KAAKgsB,kBAAmB,EAIxBhsB,KAAK66C,aAAc,EAInB76C,KAAK+W,kBACL/W,KAAKmb,sBAAuB,EAI5Bnb,KAAKo4B,YAAc,EACnBp4B,KAAKu9B,YAAa,EAClBv9B,KAAKs9B,aAAc,EAInBt9B,KAAKu5B,yBAA0B,EAI/Bv5B,KAAK+0B,YAAcE,GACnBj1B,KAAK2+C,oBAAsB,EAC3B3+C,KAAK4+C,sBAAwB,EAI7B5+C,KAAKy9B,gBAAkB,EACvBz9B,KAAK09B,gBAAkB,CAIvB,IAAI8a,GAAQx4C,KAEXi5C,GAAiB,EAIjBrB,GAAuB,KACvB4K,GAAsB,KACtBhF,IAAuB,EACvBvB,GAA0B,GAE1BqB,GAAiB,KACjB1B,GAAsB,KAEtB3D,GAAmB,GAAIp0C,GACvBk0C,GAAkB,GAAIl0C,GACtB4+C,GAAsB,KAItBtF,GAAoB,EAIpBrB,GAASgG,EAAQ/9C,MACjBg4C,GAAU+F,EAAQ99C,OAElB6zC,GAAc,EAEdK,GAAY,GAAIr0C,GAAS,EAAG,EAAGi4C,GAAQC,IACvC/D,GAAW,GAAIn0C,GAAS,EAAG,EAAGi4C,GAAQC,IACtC2G,IAAe,EAIfhmC,GAAW,GAAI3D,IAIfqjC,GAAY,GAAIvK,IAChBuL,IAAmB,EACnBC,IAAwB,EAIxB5/B,GAAoB,GAAIpd,GAExBk7C,GAAW,GAAIp6C,GAIfg3C,IACC5sB,WAAY,EACZrf,SAAU,GAGXmsC,IAEC9kB,MAAO,EACP9E,MAAO,EACPpiB,SAAU,EACVC,MAAO,EACPqiB,OAAQ,EAIV3uB,MAAKuL,MAEJkE,OAAQ4oC,GACRsK,OAAQxK,GACRlc,SAAU,KAYX,IAAI3d,GAEJ,KAEC,GAAIskC,KACHj2B,MAAOq1B,EACPpxC,MAAOqxC,EACP5Z,QAAS6Z,EACTE,UAAWD,EACXzsC,mBAAoBgjC,EACpB4J,sBAAuBD,EAKxB,IAAa,QAFb/jC,GAAMyjC,GAAYD,EAAQ/tC,WAAY,QAAS6uC,KAAuBd,EAAQ/tC,WAAY,qBAAsB6uC,KAI/G,KAAuC,QAAlCd,EAAQ/tC,WAAY,SAElB,8DAIA,oCAQ8B7S,KAAjCod,GAAIivB,2BAERjvB,GAAIivB,yBAA2B,WAE9B,OAASsV,SAAY,EAAGC,SAAY,EAAG1zC,UAAa,KAMtD0yC,EAAQpyB,iBAAkB,mBAAoBqpB,GAAe,GAC7D+I,EAAQpyB,iBAAkB,uBAAwBwpB,GAAkB,GAEnE,MAAQx4C,GAETD,QAAQC,MAAO,wBAA0BA,GAI1C,GAAIypB,IAAYhe,GAAcF,GAC1BqyB,GAAYpyB,GAAUmC,GAAYkd,GAAY6sB,GAASliC,GACvDqiC,GAAcE,GAEd/sB,GAAY4sB,GAAcK,GAAgBC,GAC1CC,GAAeC,GAEfva,EAmDJuZ,IAIA,IAAIyC,IAAK,GAAIxL,IAAcyJ,EAE3Bx4C,MAAKu6C,GAAKA,EAIV,IAAIn7B,IAAY,GAAI7F,IAAgBi/B,EAAOJ,GAASjsC,GAAauN,eAEjE1Z,MAAKof,UAAYA,GAIjBpf,KAAK+T,WAAa,WAEjB,MAAOuK,KAIRte,KAAK+iD,qBAAuB,WAE3B,MAAOzkC,IAAIykC;kCAIZ/iD,KAAKgjD,iBAAmB,WAEvB,GAAIn0B,GAAY1E,GAAWxI,IAAK,qBAC3BkN,IAAYA,EAAUo0B,eAI5BjjD,KAAKkjD,oBAAsB,WAE1B,GAAIr0B,GAAY1E,GAAWxI,IAAK,qBAC3BkN,IAAYA,EAAUs0B,kBAI5BnjD,KAAKwvC,cAAgB,WAEpB,MAAOqI,KAIR73C,KAAKojD,cAAgB,SAAWlhD,OAEhBhB,KAAVgB,IAEL21C,GAAc31C,EAEdlC,KAAKqjD,QAASvH,GAAQC,IAAS,KAIhC/7C,KAAK0vC,QAAU,WAEd,OACC3rC,MAAO+3C,GACP93C,OAAQ+3C,KAKV/7C,KAAKqjD,QAAU,SAAWt/C,EAAOC,EAAQs/C,GAExC,GAAIrU,GAASsL,GAAGlK,WAEhB,IAAKpB,GAAUA,EAAOC,aAGrB,WADAzuC,SAAQqa,KAAM,wEAKfghC,IAAS/3C,EACTg4C,GAAU/3C,EAEV89C,EAAQ/9C,MAAQA,EAAQ8zC,GACxBiK,EAAQ99C,OAASA,EAAS6zC,IAEL,IAAhByL,IAEJxB,EAAQyB,MAAMx/C,MAAQA,EAAQ,KAC9B+9C,EAAQyB,MAAMv/C,OAASA,EAAS,MAIjChE,KAAKwjD,YAAa,EAAG,EAAGz/C,EAAOC,IAIhChE,KAAKyjD,qBAAuB,WAE3B,OACC1/C,MAAO+3C,GAASjE,GAChB7zC,OAAQ+3C,GAAUlE,KAKpB73C,KAAK2vC,qBAAuB,SAAW5rC,EAAOC,EAAQ0/C,GAErD5H,GAAS/3C,EACTg4C,GAAU/3C,EAEV6zC,GAAc6L,EAEd5B,EAAQ/9C,MAAQA,EAAQ2/C,EACxB5B,EAAQ99C,OAASA,EAAS0/C,EAE1B1jD,KAAKwjD,YAAa,EAAG,EAAGz/C,EAAOC,IAIhChE,KAAKwjD,YAAc,SAAWrjD,EAAGC,EAAG2D,EAAOC,GAE1Ck0C,GAAUrwC,IAAK1H,EAAG47C,GAAU37C,EAAI4D,EAAQD,EAAOC,GAC/CiI,GAAM7H,SAAU6zC,GAAiB7mC,KAAM8mC,IAAYzmB,eAAgBomB,MAIpE73C,KAAK2jD,WAAa,SAAWxjD,EAAGC,EAAG2D,EAAOC,GAEzCg0C,GAASnwC,IAAK1H,EAAG47C,GAAU37C,EAAI4D,EAAQD,EAAOC,GAC9CiI,GAAM/H,QAAS6zC,GAAgB3mC,KAAM4mC,IAAWvmB,eAAgBomB,MAIjE73C,KAAKye,eAAiB,SAAWmlC,GAEhC33C,GAAMwS,eAAgBikC,GAAekB,IAMtC5jD,KAAK4sB,cAAgB,WAEpB,MAAOlB,IAAWkB,iBAInB5sB,KAAK6sB,cAAgB,WAEpBnB,GAAWmB,cAAc+f,MAAOlhB,GAAYnrB,YAI7CP,KAAK8sB,cAAgB,WAEpB,MAAOpB,IAAWoB,iBAInB9sB,KAAK+sB,cAAgB,WAEpBrB,GAAWqB,cAAc6f,MAAOlhB,GAAYnrB,YAI7CP,KAAK6f,MAAQ,SAAWhR,EAAO+B,EAAOy3B,GAErC,GAAIwb,GAAO,OAEI3iD,KAAV2N,GAAuBA,KAAQg1C,GAAQvlC,GAAIwlC,uBACjC5iD,KAAV0P,GAAuBA,KAAQizC,GAAQvlC,GAAIylC,uBAC/B7iD,KAAZmnC,GAAyBA,KAAUwb,GAAQvlC,GAAI0lC,oBAEpD1lC,GAAIuB,MAAOgkC,IAIZ7jD,KAAK2rB,WAAa,WAEjB3rB,KAAK6f,OAAO,GAAM,GAAO,IAI1B7f,KAAKinC,WAAa,WAEjBjnC,KAAK6f,OAAO,GAAO,GAAM,IAI1B7f,KAAKsoC,aAAe,WAEnBtoC,KAAK6f,OAAO,GAAO,GAAO,IAI3B7f,KAAKikD,YAAc,SAAWtkB,EAAc9wB,EAAO+B,EAAOy3B,GAEzDroC,KAAK4f,gBAAiB+f,GACtB3/B,KAAK6f,MAAOhR,EAAO+B,EAAOy3B,IAM3BroC,KAAK0tB,QAAU,WAEdo0B,EAAQtyB,oBAAqB,mBAAoBupB,GAAe,GAChE+I,EAAQtyB,oBAAqB,uBAAwB0pB,GAAkB,GAEvET,GAAY/qB,UAEZ6sB,GAAG7sB,WAyEJ1tB,KAAKu5C,sBAAwB,SAAW3/B,EAAQxO,EAAS+J,GAExDlJ,GAAMmE,gBAEN,IAAIO,GAAU2tB,GAAW3c,IAAK/H,EAEzBA,GAAOsqC,eAAkBvzC,EAAQsC,WAAWtC,EAAQsC,SAAWqL,GAAI7R,gBACnEmN,EAAOuqC,aAAgBxzC,EAAQkI,SAASlI,EAAQkI,OAASyF,GAAI7R,gBAC7DmN,EAAOwqC,SAAYzzC,EAAQnC,KAAKmC,EAAQnC,GAAK8P,GAAI7R,gBACjDmN,EAAOyqC,YAAe1zC,EAAQ9B,QAAQ8B,EAAQ9B,MAAQyP,GAAI7R,eAE/D,IAAIktC,GAAoBvuC,EAAQ6vB,eAYhC,IAVKrhB,EAAOsqC,eAEX5lC,GAAI3R,WAAY2R,GAAI1R,aAAc+D,EAAQsC,UAC1CqL,GAAIzR,WAAYyR,GAAI1R,aAAcgN,EAAO0qC,cAAehmC,GAAIkC,cAE5DvU,GAAMoE,gBAAiBspC,EAAkB1mC,UACzCqL,GAAI/N,oBAAqBopC,EAAkB1mC,SAAU,EAAGqL,GAAI9N,OAAO,EAAO,EAAG,IAIzEoJ,EAAOuqC,WAAa,CAIxB,GAFA7lC,GAAI3R,WAAY2R,GAAI1R,aAAc+D,EAAQkI,SAEnC1D,EAAS4oC,sBACb5oC,EAAS6oC,yBACT7oC,EAASuqC,uBACc,IAAzBvqC,EAASmB,YAET,IAAM,GAAItQ,GAAI,EAAG8K,EAAmB,EAAf8I,EAAO4H,MAAWxb,EAAI8K,EAAG9K,GAAK,EAAI,CAEtD,GAAIT,GAAQqU,EAAO2qC,YAEfC,GAAOj/C,EAAOS,EAAI,GAAMT,EAAOS,EAAI,GAAMT,EAAOS,EAAI,IAAQ,EAC5Dy+C,GAAOl/C,EAAOS,EAAI,GAAMT,EAAOS,EAAI,GAAMT,EAAOS,EAAI,IAAQ,EAC5D0+C,GAAOn/C,EAAOS,EAAI,GAAMT,EAAOS,EAAI,GAAMT,EAAOS,EAAI,IAAQ,CAEhET,GAAOS,EAAI,GAAMw+C,EACjBj/C,EAAOS,EAAI,GAAMy+C,EACjBl/C,EAAOS,EAAI,GAAM0+C,EAEjBn/C,EAAOS,EAAI,GAAMw+C,EACjBj/C,EAAOS,EAAI,GAAMy+C,EACjBl/C,EAAOS,EAAI,GAAM0+C,EAEjBn/C,EAAOS,EAAI,GAAMw+C,EACjBj/C,EAAOS,EAAI,GAAMy+C,EACjBl/C,EAAOS,EAAI,GAAM0+C,EAMnBpmC,GAAIzR,WAAYyR,GAAI1R,aAAcgN,EAAO2qC,YAAajmC,GAAIkC,cAE1DvU,GAAMoE,gBAAiBspC,EAAkB9gC,QAEzCyF,GAAI/N,oBAAqBopC,EAAkB9gC,OAAQ,EAAGyF,GAAI9N,OAAO,EAAO,EAAG,GAIvEoJ,EAAOwqC,QAAUjvC,EAAS9P,MAE9BiZ,GAAI3R,WAAY2R,GAAI1R,aAAc+D,EAAQnC,IAC1C8P,GAAIzR,WAAYyR,GAAI1R,aAAcgN,EAAO+qC,QAASrmC,GAAIkC,cAEtDvU,GAAMoE,gBAAiBspC,EAAkBnrC,IAEzC8P,GAAI/N,oBAAqBopC,EAAkBnrC,GAAI,EAAG8P,GAAI9N,OAAO,EAAO,EAAG,IAInEoJ,EAAOyqC,WAAalvC,EAASoB,eAAiBC,KAElD8H,GAAI3R,WAAY2R,GAAI1R,aAAc+D,EAAQ9B,OAC1CyP,GAAIzR,WAAYyR,GAAI1R,aAAcgN,EAAOgrC,WAAYtmC,GAAIkC,cAEzDvU,GAAMoE,gBAAiBspC,EAAkB9qC,OAEzCyP,GAAI/N,oBAAqBopC,EAAkB9qC,MAAO,EAAGyP,GAAI9N,OAAO,EAAO,EAAG,IAI3EvE,GAAMqE,0BAENgO,GAAI2Q,WAAY3Q,GAAIxM,UAAW,EAAG8H,EAAO4H,OAEzC5H,EAAO4H,MAAQ,GAIhBxhB,KAAKud,mBAAqB,SAAW3N,EAAQ+E,EAAKsF,EAAU9E,EAAUyE,EAAQsD,GAE7EjR,GAAM0+B,YAAax1B,EAEnB,IAAI/J,GAAU4wC,EAAYpsC,EAAQ+E,EAAKQ,EAAUyE,GAC7CirC,EAAkB5qC,EAASlQ,GAAK,IAAMqB,EAAQrB,GAAK,MAA+B,IAAvBoL,EAAS+C,WAEpE4sC,GAAgB,CAEfD,KAAoB5I,KAExBA,GAA0B4I,EAC1BC,GAAgB,GAIZlrC,EAAOmU,wBAEXuqB,GAAa17B,OAAQhD,EAAQK,EAAU9E,EAAU/J,GAEjD05C,GAAgB,EAMjB,IAAIr+B,GAAQxM,EAASwM,MACjBxT,EAAWgH,EAAS5L,WAAW4E,SAC/B8xC,EAAc,GAEU,IAAvB5vC,EAAS+C,YAEbuO,EAAQ8E,GAAWuE,sBAAuB7V,GAC1C8qC,EAAc,EAIf,IAAI3kC,GACAla,EAAWyyC,EAEA,QAAVlyB,IAEJrG,EAAY/R,GAAWsT,IAAK8E,GAE5BvgB,EAAW0yC,GACX1yC,EAASyiB,SAAUvI,IAIf0kC,IAEJtL,EAAuBrkC,EAAU/J,EAAS6O,GAE3B,OAAVwM,GAEJnI,GAAI3R,WAAY2R,GAAIvR,qBAAsBqT,EAAUK,QAQtD,IAAIukC,GAAY,CAED,QAAVv+B,EAEJu+B,EAAYv+B,EAAMjF,UAEMtgB,KAAb+R,IAEX+xC,EAAY/xC,EAASuO,MAItB,IAAIyjC,GAAahrC,EAASyM,UAAUC,MAAQo+B,EACxCG,EAAajrC,EAASyM,UAAUlF,MAAQujC,EAExCv8B,EAAuB,OAAVtL,EAAiBA,EAAMyJ,MAAQo+B,EAAc,EAC1D58B,EAAuB,OAAVjL,EAAiBA,EAAMsE,MAAQujC,EAAch5C,EAAAA,EAE1Do5C,EAAY18B,KAAK3c,IAAKm5C,EAAYz8B,GAClC48B,EAAU38B,KAAK5c,IAAKm5C,EAAWC,EAAaC,EAAY18B,EAAaL,GAAe,EAEpFk9B,EAAY58B,KAAK3c,IAAK,EAAGs5C,EAAUD,EAAY,EAEnD,IAAmB,IAAdE,EAAL,CAIA,GAAKzrC,EAAOyC,OAEX,IAA4B,IAAvBlH,EAAS+C,UAEbjM,GAAM2/B,aAAcz2B,EAASgD,mBAAqBw/B,KAClDzxC,EAASqoB,QAASjQ,GAAIgnC,WAItB,QAAS1rC,EAAOuR,UAEf,IAAKC,IACJllB,EAASqoB,QAASjQ,GAAIxM,UACtB,MAED,KAAKyzC,IACJr/C,EAASqoB,QAASjQ,GAAIknC,eACtB,MAED,KAAKC,IACJv/C,EAASqoB,QAASjQ,GAAIonC,kBAQnB,IAAK9rC,EAAO0C,OAAS,CAE3B,GAAIyvB,GAAY52B,EAAS4G,cAEN7a,KAAd6qC,IAA0BA,EAAY,GAE3C9/B,GAAM2/B,aAAcG,EAAY4L,KAE3B/9B,EAAO+rC,eAEXz/C,EAASqoB,QAASjQ,GAAIgnC,OAEX1rC,EAAOgsC,WAElB1/C,EAASqoB,QAASjQ,GAAIunC,WAItB3/C,EAASqoB,QAASjQ,GAAIwnC,gBAIZlsC,GAAO2C,UAElBrW,EAASqoB,QAASjQ,GAAIoQ,OAIlBzU,IAAYA,EAASy/B,0BAEpBz/B,EAAS8U,kBAAoB,GAEjC7oB,EAAS0oB,gBAAiB3U,EAAUkrC,EAAWE,GAMhDn/C,EAASuJ,OAAQ01C,EAAWE,KA2I9BrlD,KAAK+lD,QAAU,SAAWp2C,EAAOC,GAEhCmrC,EAAYv6C,OAAS,EACrBw6C,EAAax6C,OAAS,EAEtBmP,EAAMq2C,SAAU,SAAWpsC,GAErBA,EAAOkhC,UAEXC,EAAYxwC,KAAMqP,GAEbA,EAAO4C,YAEXw+B,EAAazwC,KAAMqP,MAQtB1D,GAAO2a,MAAOkqB,EAAaC,EAAcprC,GAEzCD,EAAMq2C,SAAU,SAAWpsC,GAE1B,GAAKA,EAAOzE,SAEX,GAAK0H,MAAMC,QAASlD,EAAOzE,UAE1B,IAAM,GAAInP,GAAI,EAAGA,EAAI4T,EAAOzE,SAAS3U,OAAQwF,IAE5Ck2C,EAActiC,EAAOzE,SAAUnP,GAAK2J,EAAMgF,IAAKiF,OAMhDsiC,GAActiC,EAAOzE,SAAUxF,EAAMgF,IAAKiF,KAY9C,IAAI0gC,KAAc,EACdK,GAAmB,IAwCvB36C,MAAKimD,QAAU,SAAWC,GAEzBvL,GAAmBuL,EACnBv/B,KAMD3mB,KAAKyP,OAAS,SAAWE,EAAOC,EAAQ+vB,EAAclU,GAErD,IAAS7b,IAAUA,EAAOu2C,SAGzB,WADA1lD,SAAQC,MAAO,yEAKhB,KAAKu4C,EAAL,CAIAgD,GAA0B,GAC1BuB,IAAuB,EACvBF,GAAiB,MAIS,IAArB3tC,EAAMyO,YAAsBzO,EAAM+P,oBAIhB,OAAlB9P,EAAOgT,QAAkBhT,EAAO8P,oBAEhC66B,GAAGp8B,UAEPvO,EAAS2qC,GAAGhK,UAAW3gC,IAIxB6N,GAAkBxI,iBAAkBrF,EAAOuB,iBAAkBvB,EAAOsB,oBACpEwL,GAASwD,cAAezC,IAExBs9B,EAAYv6C,OAAS,EACrBw6C,EAAax6C,OAAS,EAEtB26C,EAAa36C,OAAS,EACtB66C,EAAY76C,OAAS,EAErB68C,GAAwBr9C,KAAKmb,qBAC7BiiC,GAAmBhB,GAAUhwC,KAAMpM,KAAK+W,eAAgBsmC,GAAuBztC,GAE/E4rC,EAAoB/C,GAAY92B,IAAKhS,EAAOC,GAC5C4rC,EAAkBpvC,OAElBwuC,EAAejrC,EAAOC,EAAQ4oC,EAAMqC,cAET,IAAtBrC,EAAMqC,aAEVW,EAAkBtmC,OAMdkoC,IAAmBhB,GAAUpJ,eAElC5zB,GAAU3P,OAAQurC,EAAcrrC,EAAOC,GAEvCsG,GAAO2a,MAAOkqB,EAAaC,EAAcprC,GAEpCwtC,IAAmBhB,GAAUnJ,aAIlCoF,GAAY9kB,QACZ8kB,GAAY5pB,MAAQ,EACpB4pB,GAAYhsC,SAAW,EACvBgsC,GAAY/rC,MAAQ,EACpB+rC,GAAY1pB,OAAS,MAECztB,KAAjBy+B,IAEJA,EAAe,MAIhB3/B,KAAK4f,gBAAiB+f,GAItBjU,GAAWjc,OAAQ+rC,EAAmB7rC,EAAOC,EAAQ6b,EAIrD,IAAI26B,GAAgB5K,EAAkBruB,OAClCk5B,EAAqB7K,EAAkB/kC,WAE3C,IAAK9G,EAAM+rC,iBAAmB,CAE7B,GAAIA,GAAmB/rC,EAAM+rC,gBAExB0K,GAAc5lD,QAASi7C,EAAe2K,EAAez2C,EAAOC,EAAQ8rC,GACpE2K,EAAmB7lD,QAASi7C,EAAe4K,EAAoB12C,EAAOC,EAAQ8rC,OAM9E0K,GAAc5lD,QAASi7C,EAAe2K,EAAez2C,EAAOC,GAI5Dy2C,EAAmB7lD,QAASi7C,EAAe4K,EAAoB12C,EAAOC,EAM5EkpC,IAAerpC,OAAQ0rC,EAAcxrC,EAAOC,GAC5CipC,GAAcppC,OAAQ4rC,EAAa1rC,EAAOC,EAAQqoC,IAI7CtY,GAEJzzB,GAAS44B,yBAA0BnF,GAMpC1zB,GAAM0E,QAAQC,MAAM+E,SAAS,GAC7B1J,GAAM0E,QAAQC,MAAMC,SAAS,GAC7B5E,GAAM0E,QAAQ9B,MAAMgC,SAAS,GAE7B5E,GAAM6+B,kBAAkB,GAEnByP,GAAGp8B,SAEPo8B,GAAG7I,gBAqkCL1xC,KAAKsmD,eAAiB,SAAWlb,EAAUmb,GAE1Ct6C,GAAMk/B,YAAaC,GACnBn/B,GAAM2+B,aAAc2b,IAAuBC,KAsB5CxmD,KAAKqG,iBAAmBA,EAGxBrG,KAAKmI,aAAiB,WAErB,GAAIs+C,IAAS,CAGb,OAAO,UAAuBpiD,EAASm8B,GAEjCn8B,GAAWA,EAAQ23B,sBAEhByqB,IAENhmD,QAAQqa,KAAM,gHACd2rC,GAAS,GAIVpiD,EAAUA,EAAQA,SAInB6H,GAAS/D,aAAc9D,EAASm8B,OAMlCxgC,KAAK0mD,WAAe,WAEnB,GAAID,IAAS,CAEb,OAAO,UAAqBpiD,EAASm8B,GAE7BimB,IAENhmD,QAAQqa,KAAM,6EACd2rC,GAAS,GAIVv6C,GAAS/D,aAAc9D,EAASm8B,OAMlCxgC,KAAKsI,eAAmB,WAEvB,GAAIm+C,IAAS,CAEb,OAAO,UAAyBpiD,EAASm8B,GAGnCn8B,GAAWA,EAAQ87B,0BAEhBsmB,IAENhmD,QAAQqa,KAAM,uHACd2rC,GAAS,GAIVpiD,EAAUA,EAAQA,SAMZA,GAAWA,EAAQ4nB,eACvBpP,MAAMC,QAASzY,EAAQ/C,QAAoC,IAAzB+C,EAAQ/C,MAAMd,OAKlD0L,GAAS5D,eAAgBjE,EAASm8B,GAMlCt0B,GAAS61B,sBAAuB19B,EAASm8B,OAQ5CxgC,KAAKo9B,gBAAkB,WAEtB,MAAOwa,KAIR53C,KAAK4f,gBAAkB,SAAW+f,GAEjCiY,GAAuBjY,EAElBA,OAAsEz+B,KAAtDo9B,GAAW3c,IAAKge,GAAeU,oBAEnDn0B,GAASw4B,kBAAmB/E,EAI7B,IAAI2D,GAAc,KACdkB,GAAS,CAEb,IAAK7E,EAAe,CAEnB,GAAIU,GAAqB/B,GAAW3c,IAAKge,GAAeU,kBAEnDV,GAAaQ,yBAEjBmD,EAAcjD,EAAoBV,EAAah7B,gBAC/C6/B,GAAS,GAITlB,EAAcjD,EAIf4X,GAAiB7mC,KAAMuuB,EAAav7B,UACpC2zC,GAAgB3mC,KAAMuuB,EAAaz7B,SACnCu+C,GAAsB9iB,EAAax7B,gBAInC8zC,IAAiB7mC,KAAM8mC,IAAYzmB,eAAgBomB,IACnDE,GAAgB3mC,KAAM4mC,IAAWvmB,eAAgBomB,IACjD4K,GAAsBC,EAevB,IAXKF,KAAwBlf,IAE5BhlB,GAAImlB,gBAAiBnlB,GAAIolB,YAAaJ,GACtCkf,GAAsBlf,GAIvBr3B,GAAM7H,SAAU6zC,IAChBhsC,GAAM/H,QAAS6zC,IACf9rC,GAAMwS,eAAgBgkC,IAEjBje,EAAS,CAEb,GAAI3E,GAAoBvB,GAAW3c,IAAKge,EAAat7B,QACrDia,IAAIqlB,qBAAsBrlB,GAAIolB,YAAaplB,GAAIumB,kBAAmBvmB,GAAIujB,4BAA8BlC,EAAah7B,eAAgBk7B,EAAkBI,eAAgBN,EAAa/6B,qBAMlL5E,KAAK2mD,uBAAyB,SAAWhnB,EAAcx/B,EAAGC,EAAG2D,EAAOC,EAAQyc,GAE3E,IAASkf,IAAgBA,EAAa3D,oBAGrC,WADAv7B,SAAQC,MAAO,2FAKhB,IAAI4iC,GAAchF,GAAW3c,IAAKge,GAAeU,kBAEjD,IAAKiD,EAAc,CAElB,GAAIsjB,IAAU,CAETtjB,KAAgBkf,KAEpBlkC,GAAImlB,gBAAiBnlB,GAAIolB,YAAaJ,GAEtCsjB,GAAU,EAIX,KAEC,GAAIviD,GAAUs7B,EAAat7B,QACvBwiD,EAAgBxiD,EAAQzC,OACxBogC,EAAc39B,EAAQxC,IAE1B,IAAKglD,IAAkB/jD,IAAcy7B,GAAM+C,QAASulB,KAAoBvoC,GAAI2qB,aAAc3qB,GAAIwoC,kCAG7F,WADArmD,SAAQC,MAAO,4GAKhB,MAAKshC,IAAgBj/B,IAAoBw7B,GAAM+C,QAASU,KAAkB1jB,GAAI2qB,aAAc3qB,GAAIyoC,iCAC3F/kB,IAAgBC,KAAe9X,GAAWxI,IAAK,sBAAyBwI,GAAWxI,IAAK,8BACxFqgB,IAAgBE,IAAiB/X,GAAWxI,IAAK,gCAGrD,WADAlhB,SAAQC,MAAO,sHAKX4d,IAAI0oC,uBAAwB1oC,GAAIolB,eAAkBplB,GAAI2oC,qBAInD9mD,GAAK,GAAKA,GAAOw/B,EAAa57B,MAAQA,GAAe3D,GAAK,GAAKA,GAAOu/B,EAAa37B,OAASA,GAElGsa,GAAI4oC,WAAY/mD,EAAGC,EAAG2D,EAAOC,EAAQu6B,GAAM+C,QAASulB,GAAiBtoB,GAAM+C,QAASU,GAAevhB,GAMpGhgB,QAAQC,MAAO,8GAIf,QAEIkmD,GAEJtoC,GAAImlB,gBAAiBnlB,GAAIolB,YAAa8e,OAiB3C,QAAS2E,IAASt4C,EAAOmG,GAExBhV,KAAKuC,KAAO,GAEZvC,KAAK6O,MAAQ,GAAInD,GAAOmD,GACxB7O,KAAKgV,YAAwB9T,KAAZ8T,EAA0BA,EAAU,MA2BtD,QAASoyC,IAAKv4C,EAAOgG,EAAMC,GAE1B9U,KAAKuC,KAAO,GAEZvC,KAAK6O,MAAQ,GAAInD,GAAOmD,GAExB7O,KAAK6U,SAAkB3T,KAAT2T,EAAuBA,EAAO,EAC5C7U,KAAK8U,QAAgB5T,KAAR4T,EAAsBA,EAAM,IA2B1C,QAASuyC,MAERhlC,GAAS3d,KAAM1E,MAEfA,KAAK6B,KAAO,QAEZ7B,KAAK0rB,WAAa,KAClB1rB,KAAK2U,IAAM,KACX3U,KAAK07C,iBAAmB,KAExB17C,KAAKoe,YAAa,EAyCnB,QAASkpC,IAAWjjD,EAAS+E,EAAMgnB,EAAU5d,EAAU3D,GAEtDwT,GAAS3d,KAAM1E,MAEfA,KAAKqS,cAELrS,KAAKgS,eAAiB,GAAI7Q,GAC1BnB,KAAKiS,yBAAuB/Q,OAEXA,KAAZmD,GAEJrE,KAAK+f,IAAK1b,EAAS+E,EAAMgnB,EAAU5d,EAAU3D,GA8F/C,QAAS04C,IAAgB9vC,GAExBzB,EAAStR,KAAM1E,MAEfA,KAAK6B,KAAO,iBAEZ7B,KAAK6O,MAAQ,GAAInD,GAAO,UACxB1L,KAAKqF,IAAM,KAEXrF,KAAKmD,SAAW,EAEhBnD,KAAK2U,KAAM,EACX3U,KAAKkW,QAAS,EAEdlW,KAAKoY,UAAWX,GA0BjB,QAAS+vC,IAAQryC,GAEhBkN,GAAS3d,KAAM1E,MAEfA,KAAK6B,KAAO,SAEZ7B,KAAKmV,aAA0BjU,KAAbiU,EAA2BA,EAAW,GAAIoyC,IAyD7D,QAASE,MAERplC,GAAS3d,KAAM1E,MAEfA,KAAK6B,KAAO,MAEZG,OAAO+gB,iBAAkB/iB,MACxB0nD,QACC1kC,YAAY,EACZ9gB,YAmKH,QAASylD,IAAUlsB,EAAOmsB,GAWzB,GAPAnsB,EAAQA,MAERz7B,KAAKy7B,MAAQA,EAAMosB,MAAO,GAC1B7nD,KAAKy+C,aAAe,GAAI34C,cAAkC,GAApB9F,KAAKy7B,MAAMj7B,YAI3BU,KAAjB0mD,EAEJ5nD,KAAK8nD,wBAIL,IAAK9nD,KAAKy7B,MAAMj7B,SAAWonD,EAAapnD,OAEvCR,KAAK4nD,aAAeA,EAAaC,MAAO,OAElC,CAENpnD,QAAQqa,KAAM,oDAEd9a,KAAK4nD,eAEL,KAAM,GAAI5hD,GAAI,EAAG2Y,EAAK3e,KAAKy7B,MAAMj7B,OAAQwF,EAAI2Y,EAAI3Y,IAEhDhG,KAAK4nD,aAAar9C,KAAM,GAAIlK,KA8HhC,QAAS0nD,MAER1lC,GAAS3d,KAAM1E,MAEfA,KAAK6B,KAAO,OAkBb,QAASmmD,IAAa/tC,EAAU9E,GAE/B8V,GAAKvmB,KAAM1E,KAAMia,EAAU9E,GAE3BnV,KAAK6B,KAAO,cAEZ7B,KAAKioD,SAAW,WAChBjoD,KAAKkoD,WAAa,GAAI7nD,GACtBL,KAAKmoD,kBAAoB,GAAI9nD,EAE7B,IAAIo7B,GAAQz7B,KAAKooD,YACb5sB,EAAW,GAAImsB,IAAUlsB,EAE7Bz7B,MAAKqoD,KAAM7sB,EAAUx7B,KAAKgR,aAE1BhR,KAAKsoD,uBAkMN,QAAS7rB,IAAmBhlB,GAE3BzB,EAAStR,KAAM1E,MAEfA,KAAK6B,KAAO,oBAEZ7B,KAAK6O,MAAQ,GAAInD,GAAO,UAExB1L,KAAK+b,UAAY,EACjB/b,KAAKuoD,QAAU,QACfvoD,KAAKwoD,SAAW,QAEhBxoD,KAAKkW,QAAS,EAEdlW,KAAKoY,UAAWX,GA2BjB,QAASgxC,IAAMxuC,EAAU9E,EAAUqZ,GAElC,GAAc,IAATA,EAGJ,MADA/tB,SAAQqa,KAAM,mGACP,GAAI4tC,IAAczuC,EAAU9E,EAIpCkN,IAAS3d,KAAM1E,MAEfA,KAAK6B,KAAO,OAEZ7B,KAAKia,aAAwB/Y,KAAb+Y,EAAyBA,EAAW,GAAIsM,IACxDvmB,KAAKmV,aAAwBjU,KAAbiU,EAAyBA,EAAW,GAAIsnB,KAAqB5tB,MAAuB,SAAhB4Z,KAAKyC,WA2K1F,QAASw9B,IAAczuC,EAAU9E,GAEhCszC,GAAK/jD,KAAM1E,KAAMia,EAAU9E,GAE3BnV,KAAK6B,KAAO,eAgBb,QAAS8mD,IAAU1uC,EAAU9E,GAE5BszC,GAAK/jD,KAAM1E,KAAMia,EAAU9E,GAE3BnV,KAAK6B,KAAO,WA0Bb,QAAS86B,IAAgBllB,GAExBzB,EAAStR,KAAM1E,MAEfA,KAAK6B,KAAO,iBAEZ7B,KAAK6O,MAAQ,GAAInD,GAAO,UAExB1L,KAAKqF,IAAM,KAEXrF,KAAKoJ,KAAO,EACZpJ,KAAKo5B,iBAAkB,EAEvBp5B,KAAKkW,QAAS,EAEdlW,KAAKoY,UAAWX,GA4BjB,QAASmxC,IAAQ3uC,EAAU9E,GAE1BkN,GAAS3d,KAAM1E,MAEfA,KAAK6B,KAAO,SAEZ7B,KAAKia,aAAwB/Y,KAAb+Y,EAAyBA,EAAW,GAAIsM,IACxDvmB,KAAKmV,aAAwBjU,KAAbiU,EAAyBA,EAAW,GAAIwnB,KAAkB9tB,MAAuB,SAAhB4Z,KAAKyC,WAkIvF,QAAS29B,MAERxmC,GAAS3d,KAAM1E,MAEfA,KAAK6B,KAAO,QAcb,QAASinD,IAAcC,EAAOxnD,EAASC,EAAOC,EAAOC,EAAWC,EAAWC,EAAQC,EAAMC,GAQxF,QAAS8a,KAER,GAAImsC,GAAQrtC,EAAMpa,KAEbynD,GAAMC,YAAcD,EAAME,oBAE9BvtC,EAAM3I,aAAc,GAIrBynC,sBAAuB59B,GAhBxBvb,EAAQqD,KAAM1E,KAAM+oD,EAAOxnD,EAASC,EAAOC,EAAOC,EAAWC,EAAWC,EAAQC,EAAMC,GAEtF9B,KAAKsD,iBAAkB,CAEvB,IAAIoY,GAAQ1b,IAgBZw6C,uBAAuB59B,GAWxB,QAASssC,IAAmBzmD,EAASsB,EAAOC,EAAQpC,EAAQC,EAAMN,EAASC,EAAOC,EAAOC,EAAWC,EAAWG,EAAYC,GAE1HV,EAAQqD,KAAM1E,KAAM,KAAMuB,EAASC,EAAOC,EAAOC,EAAWC,EAAWC,EAAQC,EAAMC,EAAYC,GAEjG/B,KAAKsB,OAAUyC,MAAOA,EAAOC,OAAQA,GACrChE,KAAKyC,QAAUA,EAKfzC,KAAKwD,OAAQ,EAKbxD,KAAKsD,iBAAkB,EAcxB,QAAS6lD,IAAcplD,EAAOC,EAAQnC,EAAMN,EAASC,EAAOC,EAAOC,EAAWC,EAAWG,EAAYF,GAIpG,IAFAA,MAAoBV,KAAXU,EAAuBA,EAASmhC,MAEzBA,IAAenhC,IAAWshC,GAEzC,KAAM,IAAIzO,OAAO,wFAIJvzB,KAATW,GAAsBD,IAAWmhC,KAAclhC,EAAOmhC,QAC7C9hC,KAATW,GAAsBD,IAAWshC,KAAqBrhC,EAAOuhC,IAElE/hC,EAAQqD,KAAM1E,KAAM,KAAMuB,EAASC,EAAOC,EAAOC,EAAWC,EAAWC,EAAQC,EAAMC,GAErF9B,KAAKsB,OAAUyC,MAAOA,EAAOC,OAAQA,GAErChE,KAAK0B,cAA0BR,KAAdQ,EAA0BA,EAAYqD,GACvD/E,KAAK2B,cAA0BT,KAAdS,EAA0BA,EAAYoD,GAEvD/E,KAAKwD,OAAQ,EACbxD,KAAKsD,iBAAkB,EAaxB,QAAS8lD,IAAmBnvC,GAE3BsM,GAAe7hB,KAAM1E,MAErBA,KAAK6B,KAAO,mBAIZ,IAIImE,GAAGmM,EAAGrB,EAAGu4C,EAAGC,EACiBC,EAAGC,EAAOC,EACvCC,EACAp7C,EAPAjC,KAKAs9C,GAAS,EAAG,GAAKC,KACZC,GAAS,IAAK,IAAK,IAK5B,IAAK5vC,GAAYA,EAASW,WAAa,CAItC,GAAItO,GAAQ2N,EAAS3N,KAErB,KAAMtG,EAAI,EAAG8K,EAAIxE,EAAM9L,OAAQwF,EAAI8K,EAAG9K,IAAO,CAE5C,GAAI8Z,GAAOxT,EAAOtG,EAElB,KAAMmM,EAAI,EAAGA,EAAI,EAAGA,IAEnBq3C,EAAQ1pC,EAAM+pC,EAAM13C,IACpBs3C,EAAQ3pC,EAAM+pC,GAAQ13C,EAAI,GAAM,IAChCw3C,EAAM,GAAMlhC,KAAK5c,IAAK29C,EAAOC,GAC7BE,EAAM,GAAMlhC,KAAK3c,IAAK09C,EAAOC,GAE7BC,EAAMC,EAAM,GAAM,IAAMA,EAAM,OAERzoD,KAAjB0oD,EAAOF,KAEXE,EAAOF,IAAUI,OAAQH,EAAM,GAAKI,OAAQJ,EAAM,KAUrD,IAAMD,IAAOE,GAEZL,EAAIK,EAAOF,GAEXp7C,EAAS2L,EAAS5N,SAAUk9C,EAAEO,QAC9Bz9C,EAAS9B,KAAM+D,EAAOnO,EAAGmO,EAAOlO,EAAGkO,EAAO1N,GAE1C0N,EAAS2L,EAAS5N,SAAUk9C,EAAEQ,QAC9B19C,EAAS9B,KAAM+D,EAAOnO,EAAGmO,EAAOlO,EAAGkO,EAAO1N,OAIrC,IAAKqZ,GAAYA,EAASS,iBAAmB,CAEnD,GAAIzH,GAAUiT,EAASnJ,EACnBG,EAAOyJ,EAAOnF,EACdsoC,EAAQC,CAIZ,IAFAz7C,EAAS,GAAInN,GAEW,OAAnB8Y,EAASwM,MAAiB,CAgB9B,IAZAxT,EAAWgH,EAAS5L,WAAW4E,SAC/BiT,EAAUjM,EAASwM,MACnB1J,EAAS9C,EAAS8C,OAEK,IAAlBA,EAAOvc,SAEXuc,IAAa4J,MAAO,EAAGnF,MAAO0E,EAAQ1E,MAAOpE,cAAe,KAMvDisC,EAAI,EAAGC,EAAKvsC,EAAOvc,OAAQ6oD,EAAIC,IAAOD,EAO3C,IALAnsC,EAAQH,EAAQssC,GAEhB1iC,EAAQzJ,EAAMyJ,MACdnF,EAAQtE,EAAMsE,MAERxb,EAAI2gB,EAAO7V,EAAM6V,EAAQnF,EAASxb,EAAI8K,EAAG9K,GAAK,EAEnD,IAAMmM,EAAI,EAAGA,EAAI,EAAGA,IAEnBq3C,EAAQtjC,EAAQ8jC,KAAMhkD,EAAImM,GAC1Bs3C,EAAQvjC,EAAQ8jC,KAAMhkD,GAAMmM,EAAI,GAAM,GACtCw3C,EAAM,GAAMlhC,KAAK5c,IAAK29C,EAAOC,GAC7BE,EAAM,GAAMlhC,KAAK3c,IAAK09C,EAAOC,GAE7BC,EAAMC,EAAM,GAAM,IAAMA,EAAM,OAERzoD,KAAjB0oD,EAAOF,KAEXE,EAAOF,IAAUI,OAAQH,EAAM,GAAKI,OAAQJ,EAAM,IAYtD,KAAMD,IAAOE,GAEZL,EAAIK,EAAOF,GAEXp7C,EAAO27C,oBAAqBh3C,EAAUs2C,EAAEO,QACxCz9C,EAAS9B,KAAM+D,EAAOnO,EAAGmO,EAAOlO,EAAGkO,EAAO1N,GAE1C0N,EAAO27C,oBAAqBh3C,EAAUs2C,EAAEQ,QACxC19C,EAAS9B,KAAM+D,EAAOnO,EAAGmO,EAAOlO,EAAGkO,EAAO1N,OAU3C,KAFAqS,EAAWgH,EAAS5L,WAAW4E,SAEzBjN,EAAI,EAAG8K,EAAMmC,EAASuO,MAAQ,EAAKxb,EAAI8K,EAAG9K,IAE/C,IAAMmM,EAAI,EAAGA,EAAI,EAAGA,IAKnB23C,EAAS,EAAI9jD,EAAImM,EACjB7D,EAAO27C,oBAAqBh3C,EAAU62C,GACtCz9C,EAAS9B,KAAM+D,EAAOnO,EAAGmO,EAAOlO,EAAGkO,EAAO1N,GAE1CmpD,EAAS,EAAI/jD,GAAQmM,EAAI,GAAM,EAC/B7D,EAAO27C,oBAAqBh3C,EAAU82C,GACtC19C,EAAS9B,KAAM+D,EAAOnO,EAAGmO,EAAOlO,EAAGkO,EAAO1N,GAY9CZ,KAAK4oB,aAAc,WAAY,GAAI7C,IAAwB1Z,EAAU,IAiBtE,QAAS69C,IAAoBC,EAAMC,EAAQC,GAE1CnmC,GAASxf,KAAM1E,MAEfA,KAAK6B,KAAO,qBAEZ7B,KAAKyX,YACJ0yC,KAAMA,EACNC,OAAQA,EACRC,OAAQA,GAGTrqD,KAAKgnB,mBAAoB,GAAIsjC,IAA0BH,EAAMC,EAAQC,IACrErqD,KAAKknB,gBASN,QAASojC,IAA0BH,EAAMC,EAAQC,GAEhD9jC,GAAe7hB,KAAM1E,MAErBA,KAAK6B,KAAO,2BAEZ7B,KAAKyX,YACJ0yC,KAAMA,EACNC,OAAQA,EACRC,OAAQA,EAKT,IAYIrkD,GAAGmM,EAZH+T,KACA7Z,KACA8Z,KACAC,KAIAvN,EAAS,GAAI1X,GAEb6X,EAAK,GAAI7X,GAAW8X,EAAK,GAAI9X,GAC7BopD,EAAK,GAAIppD,GAAWqpD,EAAK,GAAIrpD,GAM7BspD,EAAaL,EAAS,CAE1B,KAAMpkD,EAAI,EAAGA,GAAKqkD,EAAQrkD,IAAO,CAEhC,GAAIQ,GAAIR,EAAIqkD,CAEZ,KAAMl4C,EAAI,EAAGA,GAAKi4C,EAAQj4C,IAAO,CAEhC,GAAIiV,GAAIjV,EAAIi4C,CAIZpxC,GAAKmxC,EAAM/iC,EAAG5gB,EAAGwS,GACjB3M,EAAS9B,KAAMyO,EAAG7Y,EAAG6Y,EAAG5Y,EAAG4Y,EAAGpY,GAMzBwmB,EA9BG,MA8BQ,GAEfnO,EAAKkxC,EAAM/iC,EAhCJ,KAgCa5gB,EAAGyS,GACvBsxC,EAAGG,WAAY1xC,EAAIC,KAInBA,EAAKkxC,EAAM/iC,EArCJ,KAqCa5gB,EAAGyS,GACvBsxC,EAAGG,WAAYzxC,EAAID,IAIfxS,EA1CG,MA0CQ,GAEfyS,EAAKkxC,EAAM/iC,EAAG5gB,EA5CP,KA4CgByS,GACvBuxC,EAAGE,WAAY1xC,EAAIC,KAInBA,EAAKkxC,EAAM/iC,EAAG5gB,EAjDP,KAiDgByS,GACvBuxC,EAAGE,WAAYzxC,EAAID,IAMpBH,EAAO8xC,aAAcJ,EAAIC,GAAKr3B,YAC9BhN,EAAQ5b,KAAMsO,EAAO1Y,EAAG0Y,EAAOzY,EAAGyY,EAAOjY,GAIzCwlB,EAAI7b,KAAM6c,EAAG5gB,IAQf,IAAMR,EAAI,EAAGA,EAAIqkD,EAAQrkD,IAExB,IAAMmM,EAAI,EAAGA,EAAIi4C,EAAQj4C,IAAO,CAE/B,GAAIgC,GAAInO,EAAIykD,EAAat4C,EACrBhL,EAAInB,EAAIykD,EAAat4C,EAAI,EACzB2R,GAAM9d,EAAI,GAAMykD,EAAat4C,EAAI,EACjCmW,GAAMtiB,EAAI,GAAMykD,EAAat4C,CAIjC+T,GAAQ3b,KAAM4J,EAAGhN,EAAGmhB,GACpBpC,EAAQ3b,KAAMpD,EAAG2c,EAAGwE,GAQtBtoB,KAAK2oB,SAAUzC,GACflmB,KAAK4oB,aAAc,WAAY,GAAI7C,IAAwB1Z,EAAU,IACrErM,KAAK4oB,aAAc,SAAU,GAAI7C,IAAwBI,EAAS,IAClEnmB,KAAK4oB,aAAc,KAAM,GAAI7C,IAAwBK,EAAK,IAgB3D,QAASwkC,IAAoBv+C,EAAU6Z,EAASvN,EAAQkyC,GAEvD3mC,GAASxf,KAAM1E,MAEfA,KAAK6B,KAAO,qBAEZ7B,KAAKyX,YACJpL,SAAUA,EACV6Z,QAASA,EACTvN,OAAQA,EACRkyC,OAAQA,GAGT7qD,KAAKgnB,mBAAoB,GAAI8jC,IAA0Bz+C,EAAU6Z,EAASvN,EAAQkyC,IAClF7qD,KAAKknB,gBASN,QAAS4jC,IAA0Bz+C,EAAU6Z,EAASvN,EAAQkyC,GA2E7D,QAASE,GAAe52C,EAAGhN,EAAG2c,EAAG+mC,GAEhC,GAMI7kD,GAAGmM,EANH64C,EAAOviC,KAAKwiC,IAAK,EAAGJ,GAIpBrkD,IAMJ,KAAMR,EAAI,EAAGA,GAAKglD,EAAMhlD,IAAO,CAE9BQ,EAAGR,KAEH,IAAIklD,GAAK/2C,EAAEsH,QAAQ0vC,KAAMrnC,EAAG9d,EAAIglD,GAC5BI,EAAKjkD,EAAEsU,QAAQ0vC,KAAMrnC,EAAG9d,EAAIglD,GAE5BK,EAAOL,EAAOhlD,CAElB,KAAMmM,EAAI,EAAGA,GAAKk5C,EAAMl5C,IAItB3L,EAAGR,GAAKmM,GAFE,IAANA,GAAWnM,IAAMglD,EAEPE,EAIAA,EAAGzvC,QAAQ0vC,KAAMC,EAAIj5C,EAAIk5C,GAU1C,IAAMrlD,EAAI,EAAGA,EAAIglD,EAAMhlD,IAEtB,IAAMmM,EAAI,EAAGA,EAAI,GAAM64C,EAAOhlD,GAAM,EAAGmM,IAAO,CAE7C,GAAI6K,GAAIyL,KAAKC,MAAOvW,EAAI,EAEnBA,GAAI,GAAM,GAEdm5C,EAAY9kD,EAAGR,GAAKgX,EAAI,IACxBsuC,EAAY9kD,EAAGR,EAAI,GAAKgX,IACxBsuC,EAAY9kD,EAAGR,GAAKgX,MAIpBsuC,EAAY9kD,EAAGR,GAAKgX,EAAI,IACxBsuC,EAAY9kD,EAAGR,EAAI,GAAKgX,EAAI,IAC5BsuC,EAAY9kD,EAAGR,EAAI,GAAKgX,MAsD5B,QAASuuC,KAIR,IAAM,GAAIvlD,GAAI,EAAGA,EAAIwlD,EAAShrD,OAAQwF,GAAK,EAAI,CAI9C,GAAIylD,GAAKD,EAAUxlD,EAAI,GACnB0lD,EAAKF,EAAUxlD,EAAI,GACnB2lD,EAAKH,EAAUxlD,EAAI,GAEnB8F,EAAM2c,KAAK3c,IAAK2/C,EAAIC,EAAIC,GACxB9/C,EAAM4c,KAAK5c,IAAK4/C,EAAIC,EAAIC,EAIvB7/C,GAAM,IAAOD,EAAM,KAElB4/C,EAAK,KAAMD,EAAUxlD,EAAI,IAAO,GAChC0lD,EAAK,KAAMF,EAAUxlD,EAAI,IAAO,GAChC2lD,EAAK,KAAMH,EAAUxlD,EAAI,IAAO,KAQxC,QAASslD,GAAYh9C,GAEpB9B,EAAajC,KAAM+D,EAAOnO,EAAGmO,EAAOlO,EAAGkO,EAAO1N,GAI/C,QAASgrD,GAAkBnlC,EAAOnY,GAEjC,GAAIyrC,GAAiB,EAARtzB,CAEbnY,GAAOnO,EAAIkM,EAAU0tC,EAAS,GAC9BzrC,EAAOlO,EAAIiM,EAAU0tC,EAAS,GAC9BzrC,EAAO1N,EAAIyL,EAAU0tC,EAAS,GAI/B,QAAS8R,KAYR,IAAM,GAVF13C,GAAI,GAAIhT,GACRgG,EAAI,GAAIhG,GACR2iB,EAAI,GAAI3iB,GAER2qD,EAAW,GAAI3qD,GAEf4qD,EAAM,GAAI7rD,GACV8rD,EAAM,GAAI9rD,GACV+rD,EAAM,GAAI/rD,GAEJ8F,EAAI,EAAGmM,EAAI,EAAGnM,EAAIwG,EAAahM,OAAQwF,GAAK,EAAGmM,GAAK,EAAI,CAEjEgC,EAAEtM,IAAK2E,EAAcxG,EAAI,GAAKwG,EAAcxG,EAAI,GAAKwG,EAAcxG,EAAI,IACvEmB,EAAEU,IAAK2E,EAAcxG,EAAI,GAAKwG,EAAcxG,EAAI,GAAKwG,EAAcxG,EAAI,IACvE8d,EAAEjc,IAAK2E,EAAcxG,EAAI,GAAKwG,EAAcxG,EAAI,GAAKwG,EAAcxG,EAAI,IAEvE+lD,EAAIlkD,IAAK2jD,EAAUr5C,EAAI,GAAKq5C,EAAUr5C,EAAI,IAC1C65C,EAAInkD,IAAK2jD,EAAUr5C,EAAI,GAAKq5C,EAAUr5C,EAAI,IAC1C85C,EAAIpkD,IAAK2jD,EAAUr5C,EAAI,GAAKq5C,EAAUr5C,EAAI,IAE1C25C,EAAS16C,KAAM+C,GAAI4L,IAAK5Y,GAAI4Y,IAAK+D,GAAIooC,aAAc,EAEnD,IAAIC,GAAMC,EAASN,EAEnBO,GAAWN,EAAK55C,EAAI,EAAGgC,EAAGg4C,GAC1BE,EAAWL,EAAK75C,EAAI,EAAGhL,EAAGglD,GAC1BE,EAAWJ,EAAK95C,EAAI,EAAG2R,EAAGqoC,IAM5B,QAASE,GAAW79C,EAAIurC,EAAQ3xB,EAAQgkC,GAEhCA,EAAU,GAAkB,IAAT59C,EAAGrO,IAE5BqrD,EAAUzR,GAAWvrC,EAAGrO,EAAI,GAIT,IAAbioB,EAAOjoB,GAA4B,IAAbioB,EAAOxnB,IAEnC4qD,EAAUzR,GAAWqS,EAAU,EAAI3jC,KAAK6jC,GAAK,IAQ/C,QAASF,GAAShkC,GAEjB,MAAOK,MAAK8jC,MAAOnkC,EAAOxnB,GAAKwnB,EAAOjoB,GAOvC,QAASqsD,GAAapkC,GAErB,MAAOK,MAAK8jC,OAASnkC,EAAOhoB,EAAGqoB,KAAK81B,KAAQn2B,EAAOjoB,EAAIioB,EAAOjoB,EAAQioB,EAAOxnB,EAAIwnB,EAAOxnB,IAlSzF2lB,GAAe7hB,KAAM1E,MAErBA,KAAK6B,KAAO,2BAEZ7B,KAAKyX,YACJpL,SAAUA,EACV6Z,QAASA,EACTvN,OAAQA,EACRkyC,OAAQA,GAGTlyC,EAASA,GAAU,EACnBkyC,EAASA,GAAU,CAInB,IAAIr+C,MACAg/C,MAgCJ,SAAoBX,GAQnB,IAAM,GANF12C,GAAI,GAAIhT,GACRgG,EAAI,GAAIhG,GACR2iB,EAAI,GAAI3iB,GAIF6E,EAAI,EAAGA,EAAIkgB,EAAQ1lB,OAAQwF,GAAK,EAIzC4lD,EAAkB1lC,EAASlgB,EAAI,GAAKmO,GACpCy3C,EAAkB1lC,EAASlgB,EAAI,GAAKmB,GACpCykD,EAAkB1lC,EAASlgB,EAAI,GAAK8d,GAIpCinC,EAAe52C,EAAGhN,EAAG2c,EAAG+mC,IA9CfA,GAqHX,SAAuBlyC,GAMtB,IAAM,GAJFrK,GAAS,GAAInN,GAIP6E,EAAI,EAAGA,EAAIwG,EAAahM,OAAQwF,GAAK,EAE9CsI,EAAOnO,EAAIqM,EAAcxG,EAAI,GAC7BsI,EAAOlO,EAAIoM,EAAcxG,EAAI,GAC7BsI,EAAO1N,EAAI4L,EAAcxG,EAAI,GAE7BsI,EAAO6kB,YAAY1B,eAAgB9Y,GAEnCnM,EAAcxG,EAAI,GAAMsI,EAAOnO,EAC/BqM,EAAcxG,EAAI,GAAMsI,EAAOlO,EAC/BoM,EAAcxG,EAAI,GAAMsI,EAAO1N,GAjInB+X,GAuId,WAIC,IAAM,GAFFrK,GAAS,GAAInN,GAEP6E,EAAI,EAAGA,EAAIwG,EAAahM,OAAQwF,GAAK,EAAI,CAElDsI,EAAOnO,EAAIqM,EAAcxG,EAAI,GAC7BsI,EAAOlO,EAAIoM,EAAcxG,EAAI,GAC7BsI,EAAO1N,EAAI4L,EAAcxG,EAAI,EAE7B,IAAIohB,GAAIglC,EAAS99C,GAAW,EAAIma,KAAK6jC,GAAK,GACtC9lD,EAAIgmD,EAAal+C,GAAWma,KAAK6jC,GAAK,EAC1Cd,GAASjhD,KAAM6c,EAAG,EAAI5gB,GAIvBqlD,IAEAN,OAjJDvrD,KAAK4oB,aAAc,WAAY,GAAI7C,IAAwBvZ,EAAc,IACzExM,KAAK4oB,aAAc,SAAU,GAAI7C,IAAwBvZ,EAAaq7C,QAAS,IAC/E7nD,KAAK4oB,aAAc,KAAM,GAAI7C,IAAwBylC,EAAU,IAE/C,IAAXX,EAEJ7qD,KAAKysD,uBAILzsD,KAAK0sD,mBAuQP,QAASC,IAAqBh0C,EAAQkyC,GAErC3mC,GAASxf,KAAM1E,MAEfA,KAAK6B,KAAO,sBAEZ7B,KAAKyX,YACJkB,OAAQA,EACRkyC,OAAQA,GAGT7qD,KAAKgnB,mBAAoB,GAAI4lC,IAA2Bj0C,EAAQkyC,IAChE7qD,KAAKknB,gBASN,QAAS0lC,IAA2Bj0C,EAAQkyC,GAE3C,GAAIx+C,IACH,EAAG,EAAG,GAAM,GAAK,EAAG,GAAM,EAAG,GAAK,EAAI,GAAK,GAAK,GAG7C6Z,GACH,EAAG,EAAG,EAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAGnC4kC,IAAyBpmD,KAAM1E,KAAMqM,EAAU6Z,EAASvN,EAAQkyC,GAEhE7qD,KAAK6B,KAAO,4BAEZ7B,KAAKyX,YACJkB,OAAQA,EACRkyC,OAAQA,GAeV,QAASgC,IAAoBl0C,EAAQkyC,GAEpC3mC,GAASxf,KAAM1E,MAEfA,KAAK6B,KAAO,qBAEZ7B,KAAKyX,YACJkB,OAAQA,EACRkyC,OAAQA,GAGT7qD,KAAKgnB,mBAAoB,GAAI8lC,IAA0Bn0C,EAAQkyC,IAC/D7qD,KAAKknB,gBASN,QAAS4lC,IAA0Bn0C,EAAQkyC,GAE1C,GAAIx+C,IACH,EAAG,EAAG,GAAM,EAAG,EAAG,EAAG,EAAG,EAAG,EAC3B,GAAK,EAAG,EAAI,EAAG,EAAG,EAAG,EAAG,GAAK,GAG1B6Z,GACH,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EACxB,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EACxB,EAAG,EAAG,EAAG,EAAG,EAAG,EAGhB4kC,IAAyBpmD,KAAM1E,KAAMqM,EAAU6Z,EAASvN,EAAQkyC,GAEhE7qD,KAAK6B,KAAO,2BAEZ7B,KAAKyX,YACJkB,OAAQA,EACRkyC,OAAQA,GAeV,QAASkC,IAAqBp0C,EAAQkyC,GAErC3mC,GAASxf,KAAM1E,MAEfA,KAAK6B,KAAO,sBAEZ7B,KAAKyX,YACJkB,OAAQA,EACRkyC,OAAQA,GAGT7qD,KAAKgnB,mBAAoB,GAAIgmC,IAA2Br0C,EAAQkyC,IAChE7qD,KAAKknB,gBASN,QAAS8lC,IAA2Br0C,EAAQkyC,GAE3C,GAAIoC,IAAM,EAAIxkC,KAAK81B,KAAM,IAAQ,EAE7BlyC,IACD,EAAG4gD,EAAG,EAAI,EAAGA,EAAG,GAAM,GAAKA,EAAG,EAAI,GAAKA,EAAG,EAC3C,GAAK,EAAGA,EAAI,EAAG,EAAGA,EAAG,GAAK,GAAKA,EAAI,EAAG,GAAKA,EAC3CA,EAAG,GAAK,EAAIA,EAAG,EAAG,GAAMA,EAAG,GAAK,GAAMA,EAAG,EAAG,GAG1C/mC,GACF,EAAG,GAAI,EAAI,EAAG,EAAG,EAAI,EAAG,EAAG,EAAI,EAAG,EAAG,GAAK,EAAG,GAAI,GACjD,EAAG,EAAG,EAAI,EAAG,GAAI,EAAG,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAC/C,EAAG,EAAG,EAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC3C,EAAG,EAAG,EAAI,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAG/C4kC,IAAyBpmD,KAAM1E,KAAMqM,EAAU6Z,EAASvN,EAAQkyC,GAEhE7qD,KAAK6B,KAAO,4BAEZ7B,KAAKyX,YACJkB,OAAQA,EACRkyC,OAAQA,GAeV,QAASqC,IAAsBv0C,EAAQkyC,GAEtC3mC,GAASxf,KAAM1E,MAEfA,KAAK6B,KAAO,uBAEZ7B,KAAKyX,YACJkB,OAAQA,EACRkyC,OAAQA,GAGT7qD,KAAKgnB,mBAAoB,GAAImmC,IAA4Bx0C,EAAQkyC,IACjE7qD,KAAKknB,gBASN,QAASimC,IAA4Bx0C,EAAQkyC,GAE5C,GAAIoC,IAAM,EAAIxkC,KAAK81B,KAAM,IAAQ,EAC7B34C,EAAI,EAAIqnD,EAER5gD,IAGD,GAAK,GAAK,GAAK,GAAK,EAAG,GACvB,EAAG,GAAK,GAAK,EAAG,EAAG,EACrB,GAAK,GAAK,EAAG,GAAK,EAAG,EACrB,EAAG,GAAK,EAAG,EAAG,EAAG,EAGhB,GAAKzG,GAAKqnD,EAAG,GAAKrnD,EAAGqnD,EACrB,EAAGrnD,GAAKqnD,EAAG,EAAGrnD,EAAGqnD,GAGhBrnD,GAAKqnD,EAAG,GAAKrnD,EAAGqnD,EAAG,EACpBrnD,GAAKqnD,EAAG,EAAGrnD,EAAGqnD,EAAG,GAGhBA,EAAG,GAAKrnD,EAAGqnD,EAAG,GAAKrnD,GACnBqnD,EAAG,EAAGrnD,EAAGqnD,EAAG,EAAGrnD,GAGdsgB,GACH,EAAG,GAAI,EAAI,EAAG,EAAG,GAAK,EAAG,GAAI,GAC7B,EAAG,GAAI,GAAK,EAAG,GAAI,EAAI,EAAG,EAAG,GAC7B,GAAI,EAAG,EAAI,GAAI,EAAG,GAAK,GAAI,GAAI,EAC/B,EAAG,EAAG,GAAK,EAAG,GAAI,EAAI,EAAG,EAAG,GAC5B,EAAG,GAAI,EAAI,EAAG,EAAG,GAAK,EAAG,GAAI,GAC7B,EAAG,GAAI,EAAI,EAAG,EAAG,GAAK,EAAG,GAAI,GAC7B,EAAG,GAAI,GAAK,EAAG,GAAI,EAAI,EAAG,EAAG,GAC7B,GAAI,EAAG,EAAI,GAAI,EAAG,GAAK,GAAI,GAAI,EAC/B,EAAG,GAAI,GAAK,EAAG,GAAI,EAAI,EAAG,EAAG,EAC7B,GAAI,EAAG,EAAI,GAAI,EAAG,GAAK,GAAI,GAAI,EAC/B,GAAI,EAAG,GAAK,GAAI,GAAI,EAAI,GAAI,EAAG,GAC/B,EAAG,GAAI,GAAK,EAAG,GAAI,EAAI,EAAG,EAAG,EAG9B4kC,IAAyBpmD,KAAM1E,KAAMqM,EAAU6Z,EAASvN,EAAQkyC,GAEhE7qD,KAAK6B,KAAO,6BAEZ7B,KAAKyX,YACJkB,OAAQA,EACRkyC,OAAQA,GAoBV,QAASuC,IAAc3iD,EAAM4iD,EAAiB10C,EAAQ20C,EAAgBC,EAAQC,GAE7EtpC,GAASxf,KAAM1E,MAEfA,KAAK6B,KAAO,eAEZ7B,KAAKyX,YACJhN,KAAMA,EACN4iD,gBAAiBA,EACjB10C,OAAQA,EACR20C,eAAgBA,EAChBC,OAAQA,OAGMrsD,KAAVssD,GAAsB/sD,QAAQqa,KAAM,8CAEzC,IAAI2yC,GAAiB,GAAIC,IAAoBjjD,EAAM4iD,EAAiB10C,EAAQ20C,EAAgBC,EAI5FvtD,MAAK2tD,SAAWF,EAAeE,SAC/B3tD,KAAKmmB,QAAUsnC,EAAetnC,QAC9BnmB,KAAK4tD,UAAYH,EAAeG,UAIhC5tD,KAAKgnB,mBAAoBymC,GACzBztD,KAAKknB,gBASN,QAASwmC,IAAoBjjD,EAAM4iD,EAAiB10C,EAAQ20C,EAAgBC,GAkF3E,QAASM,GAAiB7nD,GAIzB8nD,EAAIrjD,EAAKsjD,WAAY/nD,EAAIqnD,EAAiBS,EAI1C,IAAIE,GAAIC,EAAO9nC,QAASngB,GACpBkoD,EAAID,EAAOL,UAAW5nD,EAI1B,KAAMmM,EAAI,EAAGA,GAAKm7C,EAAgBn7C,IAAO,CAExC,GAAI3L,GAAI2L,EAAIm7C,EAAiB7kC,KAAK6jC,GAAK,EAEnC6B,EAAM1lC,KAAK0lC,IAAK3nD,GAChB0rB,GAAQzJ,KAAKyJ,IAAK1rB,EAItBqS,GAAO1Y,EAAM+xB,EAAM87B,EAAE7tD,EAAIguD,EAAMD,EAAE/tD,EACjC0Y,EAAOzY,EAAM8xB,EAAM87B,EAAE5tD,EAAI+tD,EAAMD,EAAE9tD,EACjCyY,EAAOjY,EAAMsxB,EAAM87B,EAAEptD,EAAIutD,EAAMD,EAAEttD,EACjCiY,EAAOsa,YAEPhN,EAAQ5b,KAAMsO,EAAO1Y,EAAG0Y,EAAOzY,EAAGyY,EAAOjY,GAIzC0N,EAAOnO,EAAI2tD,EAAE3tD,EAAIwY,EAASE,EAAO1Y,EACjCmO,EAAOlO,EAAI0tD,EAAE1tD,EAAIuY,EAASE,EAAOzY,EACjCkO,EAAO1N,EAAIktD,EAAEltD,EAAI+X,EAASE,EAAOjY,EAEjCyL,EAAS9B,KAAM+D,EAAOnO,EAAGmO,EAAOlO,EAAGkO,EAAO1N,IAM5C,QAASwtD,KAER,IAAMj8C,EAAI,EAAGA,GAAKk7C,EAAiBl7C,IAElC,IAAMnM,EAAI,EAAGA,GAAKsnD,EAAgBtnD,IAAO,CAExC,GAAImO,IAAMm5C,EAAiB,IAAQn7C,EAAI,IAAQnM,EAAI,GAC/CmB,GAAMmmD,EAAiB,GAAMn7C,GAAMnM,EAAI,GACvC8d,GAAMwpC,EAAiB,GAAMn7C,EAAInM,EACjCsiB,GAAMglC,EAAiB,IAAQn7C,EAAI,GAAMnM,CAI7CkgB,GAAQ3b,KAAM4J,EAAGhN,EAAGmhB,GACpBpC,EAAQ3b,KAAMpD,EAAG2c,EAAGwE,IAQvB,QAAS+lC,KAER,IAAMroD,EAAI,EAAGA,GAAKqnD,EAAiBrnD,IAElC,IAAMmM,EAAI,EAAGA,GAAKm7C,EAAgBn7C,IAEjC3D,EAAGrO,EAAI6F,EAAIqnD,EACX7+C,EAAGpO,EAAI+R,EAAIm7C,EAEXlnC,EAAI7b,KAAMiE,EAAGrO,EAAGqO,EAAGpO,GAxJtBmmB,GAAe7hB,KAAM1E,MAErBA,KAAK6B,KAAO,qBAEZ7B,KAAKyX,YACJhN,KAAMA,EACN4iD,gBAAiBA,EACjB10C,OAAQA,EACR20C,eAAgBA,EAChBC,OAAQA,GAGTF,EAAkBA,GAAmB,GACrC10C,EAASA,GAAU,EACnB20C,EAAiBA,GAAkB,EACnCC,EAASA,IAAU,CAEnB,IAAIU,GAASxjD,EAAK6jD,oBAAqBjB,EAAiBE,EAIxDvtD,MAAK2tD,SAAWM,EAAON,SACvB3tD,KAAKmmB,QAAU8nC,EAAO9nC,QACtBnmB,KAAK4tD,UAAYK,EAAOL,SAIxB,IAKI5nD,GAAGmM,EALH7D,EAAS,GAAInN,GACb0X,EAAS,GAAI1X,GACbqN,EAAK,GAAItO,GACT4tD,EAAI,GAAI3sD,GAMRkL,KACA8Z,KACAC,KACAF,MAeJ,WAEC,IAAMlgB,EAAI,EAAGA,EAAIqnD,EAAiBrnD,IAEjC6nD,EAAiB7nD,EASlB6nD,IAA8B,IAAXN,EAAqBF,EAAkB,GAK1DgB,IAIAD,OA7BDpuD,KAAK2oB,SAAUzC,GACflmB,KAAK4oB,aAAc,WAAY,GAAI7C,IAAwB1Z,EAAU,IACrErM,KAAK4oB,aAAc,SAAU,GAAI7C,IAAwBI,EAAS,IAClEnmB,KAAK4oB,aAAc,KAAM,GAAI7C,IAAwBK,EAAK,IA4H3D,QAASmoC,IAAmB51C,EAAQ61C,EAAMnB,EAAiBC,EAAgBvvB,EAAG0wB,EAAGC,GAEhFxqC,GAASxf,KAAM1E,MAEfA,KAAK6B,KAAO,oBAEZ7B,KAAKyX,YACJkB,OAAQA,EACR61C,KAAMA,EACNnB,gBAAiBA,EACjBC,eAAgBA,EAChBvvB,EAAGA,EACH0wB,EAAGA,OAGiBvtD,KAAhBwtD,GAA4BjuD,QAAQqa,KAAM,4FAE/C9a,KAAKgnB,mBAAoB,GAAI2nC,IAAyBh2C,EAAQ61C,EAAMnB,EAAiBC,EAAgBvvB,EAAG0wB,IACxGzuD,KAAKknB,gBASN,QAASynC,IAAyBh2C,EAAQ61C,EAAMnB,EAAiBC,EAAgBvvB,EAAG0wB,GAqInF,QAASG,GAA0BxnC,EAAG2W,EAAG0wB,EAAG91C,EAAQ1F,GAEnD,GAAI47C,GAAKpmC,KAAKyJ,IAAK9K,GACf0nC,EAAKrmC,KAAK0lC,IAAK/mC,GACf2nC,EAAUN,EAAI1wB,EAAI3W,EAClB4nC,EAAKvmC,KAAKyJ,IAAK68B,EAEnB97C,GAAS9S,EAAIwY,GAAW,EAAIq2C,GAAO,GAAMH,EACzC57C,EAAS7S,EAAIuY,GAAW,EAAIq2C,GAAOF,EAAK,GACxC77C,EAASrS,EAAI+X,EAAS8P,KAAK0lC,IAAKY,GAAY,GA5I7CxoC,GAAe7hB,KAAM1E,MAErBA,KAAK6B,KAAO,0BAEZ7B,KAAKyX,YACJkB,OAAQA,EACR61C,KAAMA,EACNnB,gBAAiBA,EACjBC,eAAgBA,EAChBvvB,EAAGA,EACH0wB,EAAGA,GAGJ91C,EAASA,GAAU,EACnB61C,EAAOA,GAAQ,GACfnB,EAAkB5kC,KAAKC,MAAO2kC,IAAqB,GACnDC,EAAiB7kC,KAAKC,MAAO4kC,IAAoB,EACjDvvB,EAAIA,GAAK,EACT0wB,EAAIA,GAAK,CAIT,IAOIzoD,GAAGmM,EAPH+T,KACA7Z,KACA8Z,KACAC,KAMA9X,EAAS,GAAInN,GACb0X,EAAS,GAAI1X,GAEb8tD,EAAK,GAAI9tD,GACT+tD,EAAK,GAAI/tD,GAET+sD,EAAI,GAAI/sD,GACRguD,EAAI,GAAIhuD,GACR6sD,EAAI,GAAI7sD,EAIZ,KAAM6E,EAAI,EAAGA,GAAKqnD,IAAoBrnD,EAAI,CAIzC,GAAIohB,GAAIphB,EAAIqnD,EAAkBtvB,EAAItV,KAAK6jC,GAAK,CAoB5C,KAfAsC,EAA0BxnC,EAAG2W,EAAG0wB,EAAG91C,EAAQs2C,GAC3CL,EAA0BxnC,EAAI,IAAM2W,EAAG0wB,EAAG91C,EAAQu2C,GAIlDC,EAAEzE,WAAYwE,EAAID,GAClBjB,EAAEoB,WAAYF,EAAID,GAClBf,EAAEvD,aAAcwE,EAAGnB,GACnBA,EAAErD,aAAcuD,EAAGiB,GAInBjB,EAAE/6B,YACF66B,EAAE76B,YAEIhhB,EAAI,EAAGA,GAAKm7C,IAAmBn7C,EAAI,CAKxC,GAAI3L,GAAI2L,EAAIm7C,EAAiB7kC,KAAK6jC,GAAK,EACnC+C,GAAOb,EAAO/lC,KAAKyJ,IAAK1rB,GACxB8oD,EAAKd,EAAO/lC,KAAK0lC,IAAK3nD,EAK1B8H,GAAOnO,EAAI8uD,EAAG9uD,GAAMkvD,EAAKrB,EAAE7tD,EAAImvD,EAAKpB,EAAE/tD,GACtCmO,EAAOlO,EAAI6uD,EAAG7uD,GAAMivD,EAAKrB,EAAE5tD,EAAIkvD,EAAKpB,EAAE9tD,GACtCkO,EAAO1N,EAAIquD,EAAGruD,GAAMyuD,EAAKrB,EAAEptD,EAAI0uD,EAAKpB,EAAEttD,GAEtCyL,EAAS9B,KAAM+D,EAAOnO,EAAGmO,EAAOlO,EAAGkO,EAAO1N,GAI1CiY,EAAO6xC,WAAYp8C,EAAQ2gD,GAAK97B,YAEhChN,EAAQ5b,KAAMsO,EAAO1Y,EAAG0Y,EAAOzY,EAAGyY,EAAOjY,GAIzCwlB,EAAI7b,KAAMvE,EAAIqnD,GACdjnC,EAAI7b,KAAM4H,EAAIm7C,IAQhB,IAAMn7C,EAAI,EAAGA,GAAKk7C,EAAiBl7C,IAElC,IAAMnM,EAAI,EAAGA,GAAKsnD,EAAgBtnD,IAAO,CAIxC,GAAImO,IAAMm5C,EAAiB,IAAQn7C,EAAI,IAAQnM,EAAI,GAC/CmB,GAAMmmD,EAAiB,GAAMn7C,GAAMnM,EAAI,GACvC8d,GAAMwpC,EAAiB,GAAMn7C,EAAInM,EACjCsiB,GAAMglC,EAAiB,IAAQn7C,EAAI,GAAMnM,CAI7CkgB,GAAQ3b,KAAM4J,EAAGhN,EAAGmhB,GACpBpC,EAAQ3b,KAAMpD,EAAG2c,EAAGwE,GAQtBtoB,KAAK2oB,SAAUzC,GACflmB,KAAK4oB,aAAc,WAAY,GAAI7C,IAAwB1Z,EAAU,IACrErM,KAAK4oB,aAAc,SAAU,GAAI7C,IAAwBI,EAAS,IAClEnmB,KAAK4oB,aAAc,KAAM,GAAI7C,IAAwBK,EAAK,IA8B3D,QAASmpC,IAAe52C,EAAQ61C,EAAMlB,EAAgBD,EAAiBmC,GAEtEtrC,GAASxf,KAAM1E,MAEfA,KAAK6B,KAAO,gBAEZ7B,KAAKyX,YACJkB,OAAQA,EACR61C,KAAMA,EACNlB,eAAgBA,EAChBD,gBAAiBA,EACjBmC,IAAKA,GAGNxvD,KAAKgnB,mBAAoB,GAAIyoC,IAAqB92C,EAAQ61C,EAAMlB,EAAgBD,EAAiBmC,IACjGxvD,KAAKknB,gBASN,QAASuoC,IAAqB92C,EAAQ61C,EAAMlB,EAAgBD,EAAiBmC,GAE5EjpC,GAAe7hB,KAAM1E,MAErBA,KAAK6B,KAAO,sBAEZ7B,KAAKyX,YACJkB,OAAQA,EACR61C,KAAMA,EACNlB,eAAgBA,EAChBD,gBAAiBA,EACjBmC,IAAKA,GAGN72C,EAASA,GAAU,EACnB61C,EAAOA,GAAQ,GACflB,EAAiB7kC,KAAKC,MAAO4kC,IAAoB,EACjDD,EAAkB5kC,KAAKC,MAAO2kC,IAAqB,EACnDmC,EAAMA,GAAiB,EAAV/mC,KAAK6jC,EAIlB,IAWIn6C,GAAGnM,EAXHkgB,KACA7Z,KACA8Z,KACAC,KAIAljB,EAAS,GAAI/B,GACbmN,EAAS,GAAInN,GACb0X,EAAS,GAAI1X,EAMjB,KAAMgR,EAAI,EAAGA,GAAKm7C,EAAgBn7C,IAEjC,IAAMnM,EAAI,EAAGA,GAAKqnD,EAAiBrnD,IAAO,CAEzC,GAAIohB,GAAIphB,EAAIqnD,EAAkBmC,EAC1BhpD,EAAI2L,EAAIm7C,EAAiB7kC,KAAK6jC,GAAK,CAIvCh+C,GAAOnO,GAAMwY,EAAS61C,EAAO/lC,KAAKyJ,IAAK1rB,IAAQiiB,KAAKyJ,IAAK9K,GACzD9Y,EAAOlO,GAAMuY,EAAS61C,EAAO/lC,KAAKyJ,IAAK1rB,IAAQiiB,KAAK0lC,IAAK/mC,GACzD9Y,EAAO1N,EAAI4tD,EAAO/lC,KAAK0lC,IAAK3nD,GAE5B6F,EAAS9B,KAAM+D,EAAOnO,EAAGmO,EAAOlO,EAAGkO,EAAO1N,GAI1CsC,EAAO/C,EAAIwY,EAAS8P,KAAKyJ,IAAK9K,GAC9BlkB,EAAO9C,EAAIuY,EAAS8P,KAAK0lC,IAAK/mC,GAC9BvO,EAAO6xC,WAAYp8C,EAAQpL,GAASiwB,YAEpChN,EAAQ5b,KAAMsO,EAAO1Y,EAAG0Y,EAAOzY,EAAGyY,EAAOjY,GAIzCwlB,EAAI7b,KAAMvE,EAAIqnD,GACdjnC,EAAI7b,KAAM4H,EAAIm7C,GAQhB,IAAMn7C,EAAI,EAAGA,GAAKm7C,EAAgBn7C,IAEjC,IAAMnM,EAAI,EAAGA,GAAKqnD,EAAiBrnD,IAAO,CAIzC,GAAImO,IAAMk5C,EAAkB,GAAMl7C,EAAInM,EAAI,EACtCmB,GAAMkmD,EAAkB,IAAQl7C,EAAI,GAAMnM,EAAI,EAC9C8d,GAAMupC,EAAkB,IAAQl7C,EAAI,GAAMnM,EAC1CsiB,GAAM+kC,EAAkB,GAAMl7C,EAAInM,CAItCkgB,GAAQ3b,KAAM4J,EAAGhN,EAAGmhB,GACpBpC,EAAQ3b,KAAMpD,EAAG2c,EAAGwE,GAQtBtoB,KAAK2oB,SAAUzC,GACflmB,KAAK4oB,aAAc,WAAY,GAAI7C,IAAwB1Z,EAAU,IACrErM,KAAK4oB,aAAc,SAAU,GAAI7C,IAAwBI,EAAS,IAClEnmB,KAAK4oB,aAAc,KAAM,GAAI7C,IAAwBK,EAAK,IAqtB3D,QAASspC,IAAiBC,EAAQ1rD,GAEjCigB,GAASxf,KAAM1E,MAEfA,KAAK6B,KAAO,kBAEZ7B,KAAKyX,YACJk4C,OAAQA,EACR1rD,QAASA,GAGVjE,KAAKgnB,mBAAoB,GAAI4oC,IAAuBD,EAAQ1rD,IAC5DjE,KAAKknB,gBASN,QAAS0oC,IAAuBD,EAAQ1rD,OAEZ,KAAf,IAMZsiB,GAAe7hB,KAAM1E,MAErBA,KAAK6B,KAAO,wBAEZ8tD,EAAS9yC,MAAMC,QAAS6yC,GAAWA,GAAWA,GAE9C3vD,KAAK6vD,aAAcF,EAAQ1rD,GAE3BjE,KAAKysD,wBA2vBN,QAASqD,IAAcC,EAAMt4C,GAE5ByM,GAASxf,KAAM1E,MAEfA,KAAK6B,KAAO,eAEZ7B,KAAKyX,YACJs4C,KAAMA,EACNt4C,WAAYA,GAGbzX,KAAKgnB,mBAAoB,GAAIgpC,IAAoBD,EAAMt4C,IACvDzX,KAAKknB,gBASN,QAAS8oC,IAAoBD,EAAMt4C,GAElCA,EAAaA,KAEb,IAAIw4C,GAAOx4C,EAAWw4C,IAEtB,KAASA,IAAQA,EAAKC,OAGrB,MADAzvD,SAAQC,MAAO,wEACR,GAAIwjB,GAIZ,IAAIyrC,GAASM,EAAKE,eAAgBJ,EAAMt4C,EAAWrO,KAAMqO,EAAW24C,cAIpE34C,GAAW44C,WAA+BnvD,KAAtBuW,EAAWzT,OAAuByT,EAAWzT,OAAS,OAIvC9C,KAA9BuW,EAAW64C,iBAA+B74C,EAAW64C,eAAiB,QAC7CpvD,KAAzBuW,EAAW84C,YAA0B94C,EAAW84C,UAAY,OAChCrvD,KAA5BuW,EAAW+4C,eAA6B/4C,EAAW+4C,cAAe,GAEvEZ,GAAsBlrD,KAAM1E,KAAM2vD,EAAQl4C,GAE1CzX,KAAK6B,KAAO,qBAeb,QAAS4uD,IAAgB93C,EAAQkO,EAAeC,EAAgB4pC,EAAUC,EAAWC,EAAYC,GAEhG3sC,GAASxf,KAAM1E,MAEfA,KAAK6B,KAAO,iBAEZ7B,KAAKyX,YACJkB,OAAQA,EACRkO,cAAeA,EACfC,eAAgBA,EAChB4pC,SAAUA,EACVC,UAAWA,EACXC,WAAYA,EACZC,YAAaA,GAGd7wD,KAAKgnB,mBAAoB,GAAI8pC,IAAsBn4C,EAAQkO,EAAeC,EAAgB4pC,EAAUC,EAAWC,EAAYC,IAC3H7wD,KAAKknB,gBASN,QAAS4pC,IAAsBn4C,EAAQkO,EAAeC,EAAgB4pC,EAAUC,EAAWC,EAAYC,GAEtGtqC,GAAe7hB,KAAM1E,MAErBA,KAAK6B,KAAO,uBAEZ7B,KAAKyX,YACJkB,OAAQA,EACRkO,cAAeA,EACfC,eAAgBA,EAChB4pC,SAAUA,EACVC,UAAWA,EACXC,WAAYA,EACZC,YAAaA,GAGdl4C,EAASA,GAAU,EAEnBkO,EAAgB4B,KAAK3c,IAAK,EAAG2c,KAAKC,MAAO7B,IAAmB,GAC5DC,EAAiB2B,KAAK3c,IAAK,EAAG2c,KAAKC,MAAO5B,IAAoB,GAE9D4pC,MAAwBxvD,KAAbwvD,EAAyBA,EAAW,EAC/CC,MAA0BzvD,KAAdyvD,EAA0BA,EAAsB,EAAVloC,KAAK6jC,GAEvDsE,MAA4B1vD,KAAf0vD,EAA2BA,EAAa,EACrDC,MAA8B3vD,KAAhB2vD,EAA4BA,EAAcpoC,KAAK6jC,EAE7D,IAEI7kC,GAAIC,EAFJqpC,EAAWH,EAAaC,EAIxBpqC,EAAQ,EACRuqC,KAEA1iD,EAAS,GAAInN,GACb0X,EAAS,GAAI1X,GAIb+kB,KACA7Z,KACA8Z,KACAC,IAIJ,KAAMsB,EAAK,EAAGA,GAAMZ,EAAgBY,IAAQ,CAE3C,GAAIupC,MAEAzqD,EAAIkhB,EAAKZ,CAEb,KAAMW,EAAK,EAAGA,GAAMZ,EAAeY,IAAQ,CAE1C,GAAIL,GAAIK,EAAKZ,CAIbvY,GAAOnO,GAAMwY,EAAS8P,KAAKyJ,IAAKw+B,EAAWtpC,EAAIupC,GAAcloC,KAAK0lC,IAAKyC,EAAapqD,EAAIqqD,GACxFviD,EAAOlO,EAAIuY,EAAS8P,KAAKyJ,IAAK0+B,EAAapqD,EAAIqqD,GAC/CviD,EAAO1N,EAAI+X,EAAS8P,KAAK0lC,IAAKuC,EAAWtpC,EAAIupC,GAAcloC,KAAK0lC,IAAKyC,EAAapqD,EAAIqqD,GAEtFxkD,EAAS9B,KAAM+D,EAAOnO,EAAGmO,EAAOlO,EAAGkO,EAAO1N,GAI1CiY,EAAOhR,IAAKyG,EAAOnO,EAAGmO,EAAOlO,EAAGkO,EAAO1N,GAAIuyB,YAC3ChN,EAAQ5b,KAAMsO,EAAO1Y,EAAG0Y,EAAOzY,EAAGyY,EAAOjY,GAIzCwlB,EAAI7b,KAAM6c,EAAG,EAAI5gB,GAEjByqD,EAAY1mD,KAAMkc,KAInBuqC,EAAKzmD,KAAM0mD,GAMZ,IAAMvpC,EAAK,EAAGA,EAAKZ,EAAgBY,IAElC,IAAMD,EAAK,EAAGA,EAAKZ,EAAeY,IAAQ,CAEzC,GAAItT,GAAI68C,EAAMtpC,GAAMD,EAAK,GACrBtgB,EAAI6pD,EAAMtpC,GAAMD,GAChB3D,EAAIktC,EAAMtpC,EAAK,GAAKD,GACpBa,EAAI0oC,EAAMtpC,EAAK,GAAKD,EAAK,IAEjB,IAAPC,GAAYkpC,EAAa,IAAI1qC,EAAQ3b,KAAM4J,EAAGhN,EAAGmhB,IACjDZ,IAAOZ,EAAiB,GAAKiqC,EAAWtoC,KAAK6jC,KAAKpmC,EAAQ3b,KAAMpD,EAAG2c,EAAGwE,GAQ7EtoB,KAAK2oB,SAAUzC,GACflmB,KAAK4oB,aAAc,WAAY,GAAI7C,IAAwB1Z,EAAU,IACrErM,KAAK4oB,aAAc,SAAU,GAAI7C,IAAwBI,EAAS,IAClEnmB,KAAK4oB,aAAc,KAAM,GAAI7C,IAAwBK,EAAK,IAc3D,QAAS8qC,IAAcC,EAAaC,EAAaC,EAAeC,EAAaV,EAAYC,GAExF3sC,GAASxf,KAAM1E,MAEfA,KAAK6B,KAAO,eAEZ7B,KAAKyX,YACJ05C,YAAaA,EACbC,YAAaA,EACbC,cAAeA,EACfC,YAAaA,EACbV,WAAYA,EACZC,YAAaA,GAGd7wD,KAAKgnB,mBAAoB,GAAIuqC,IAAoBJ,EAAaC,EAAaC,EAAeC,EAAaV,EAAYC,IACnH7wD,KAAKknB,gBASN,QAASqqC,IAAoBJ,EAAaC,EAAaC,EAAeC,EAAaV,EAAYC,GAE9FtqC,GAAe7hB,KAAM1E,MAErBA,KAAK6B,KAAO,qBAEZ7B,KAAKyX,YACJ05C,YAAaA,EACbC,YAAaA,EACbC,cAAeA,EACfC,YAAaA,EACbV,WAAYA,EACZC,YAAaA,GAGdM,EAAcA,GAAe,GAC7BC,EAAcA,GAAe,EAE7BR,MAA4B1vD,KAAf0vD,EAA2BA,EAAa,EACrDC,MAA8B3vD,KAAhB2vD,EAA4BA,EAAwB,EAAVpoC,KAAK6jC,GAE7D+E,MAAkCnwD,KAAlBmwD,EAA8B5oC,KAAK3c,IAAK,EAAGulD,GAAkB,EAC7EC,MAA8BpwD,KAAhBowD,EAA4B7oC,KAAK3c,IAAK,EAAGwlD,GAAgB,CAIvE,IAOIE,GAKAr/C,EAAGnM,EAZHkgB,KACA7Z,KACA8Z,KACAC,KAKAzN,EAASw4C,EACTM,GAAiBL,EAAcD,GAAgBG,EAC/ChjD,EAAS,GAAInN,GACbqN,EAAK,GAAItO,EAKb,KAAMiS,EAAI,EAAGA,GAAKm/C,EAAan/C,IAAO,CAErC,IAAMnM,EAAI,EAAGA,GAAKqrD,EAAerrD,IAIhCwrD,EAAUZ,EAAa5qD,EAAIqrD,EAAgBR,EAI3CviD,EAAOnO,EAAIwY,EAAS8P,KAAKyJ,IAAKs/B,GAC9BljD,EAAOlO,EAAIuY,EAAS8P,KAAK0lC,IAAKqD,GAE9BnlD,EAAS9B,KAAM+D,EAAOnO,EAAGmO,EAAOlO,EAAGkO,EAAO1N,GAI1CulB,EAAQ5b,KAAM,EAAG,EAAG,GAIpBiE,EAAGrO,GAAMmO,EAAOnO,EAAIixD,EAAc,GAAM,EACxC5iD,EAAGpO,GAAMkO,EAAOlO,EAAIgxD,EAAc,GAAM,EAExChrC,EAAI7b,KAAMiE,EAAGrO,EAAGqO,EAAGpO,EAMpBuY,IAAU84C,EAMX,IAAMt/C,EAAI,EAAGA,EAAIm/C,EAAan/C,IAAO,CAEpC,GAAIu/C,GAAoBv/C,GAAMk/C,EAAgB,EAE9C,KAAMrrD,EAAI,EAAGA,EAAIqrD,EAAerrD,IAAO,CAEtCwrD,EAAUxrD,EAAI0rD,CAEd,IAAIv9C,GAAIq9C,EACJrqD,EAAIqqD,EAAUH,EAAgB,EAC9BvtC,EAAI0tC,EAAUH,EAAgB,EAC9B/oC,EAAIkpC,EAAU,CAIlBtrC,GAAQ3b,KAAM4J,EAAGhN,EAAGmhB,GACpBpC,EAAQ3b,KAAMpD,EAAG2c,EAAGwE,IAQtBtoB,KAAK2oB,SAAUzC,GACflmB,KAAK4oB,aAAc,WAAY,GAAI7C,IAAwB1Z,EAAU,IACrErM,KAAK4oB,aAAc,SAAU,GAAI7C,IAAwBI,EAAS,IAClEnmB,KAAK4oB,aAAc,KAAM,GAAI7C,IAAwBK,EAAK,IAgB3D,QAASurC,IAAehjC,EAAQijC,EAAUlB,EAAUC,GAEnDzsC,GAASxf,KAAM1E,MAEfA,KAAK6B,KAAO,gBAEZ7B,KAAKyX,YACJkX,OAAQA,EACRijC,SAAUA,EACVlB,SAAUA,EACVC,UAAWA,GAGZ3wD,KAAKgnB,mBAAoB,GAAI6qC,IAAqBljC,EAAQijC,EAAUlB,EAAUC,IAC9E3wD,KAAKknB,gBASN,QAAS2qC,IAAqBljC,EAAQijC,EAAUlB,EAAUC,GAEzDpqC,GAAe7hB,KAAM1E,MAErBA,KAAK6B,KAAO,sBAEZ7B,KAAKyX,YACJkX,OAAQA,EACRijC,SAAUA,EACVlB,SAAUA,EACVC,UAAWA,GAGZiB,EAAWnpC,KAAKC,MAAOkpC,IAAc,GACrClB,EAAWA,GAAY,EACvBC,EAAYA,GAAuB,EAAVloC,KAAK6jC,GAI9BqE,EAAYtuD,GAAMyvD,MAAOnB,EAAW,EAAa,EAAVloC,KAAK6jC,GAK5C,IAMIyF,GAIA/rD,EAAGmM,EAVH+T,KACA7Z,KACA+Z,KAKA4rC,EAAkB,EAAMJ,EACxBtjD,EAAS,GAAInN,GACbqN,EAAK,GAAItO,EAKb,KAAM8F,EAAI,EAAGA,GAAK4rD,EAAU5rD,IAAO,CAElC,GAAIisD,GAAMvB,EAAW1qD,EAAIgsD,EAAkBrB,EAEvCxC,EAAM1lC,KAAK0lC,IAAK8D,GAChB//B,EAAMzJ,KAAKyJ,IAAK+/B,EAEpB,KAAM9/C,EAAI,EAAGA,GAAOwc,EAAOnuB,OAAS,EAAK2R,IAIxC7D,EAAOnO,EAAIwuB,EAAQxc,GAAIhS,EAAIguD,EAC3B7/C,EAAOlO,EAAIuuB,EAAQxc,GAAI/R,EACvBkO,EAAO1N,EAAI+tB,EAAQxc,GAAIhS,EAAI+xB,EAE3B7lB,EAAS9B,KAAM+D,EAAOnO,EAAGmO,EAAOlO,EAAGkO,EAAO1N,GAI1C4N,EAAGrO,EAAI6F,EAAI4rD,EACXpjD,EAAGpO,EAAI+R,GAAMwc,EAAOnuB,OAAS,GAE7B4lB,EAAI7b,KAAMiE,EAAGrO,EAAGqO,EAAGpO,GASrB,IAAM4F,EAAI,EAAGA,EAAI4rD,EAAU5rD,IAE1B,IAAMmM,EAAI,EAAGA,EAAMwc,EAAOnuB,OAAS,EAAK2R,IAAO,CAE9C4/C,EAAO5/C,EAAInM,EAAI2oB,EAAOnuB,MAEtB,IAAI2T,GAAI49C,EACJ5qD,EAAI4qD,EAAOpjC,EAAOnuB,OAClBsjB,EAAIiuC,EAAOpjC,EAAOnuB,OAAS,EAC3B8nB,EAAIypC,EAAO,CAIf7rC,GAAQ3b,KAAM4J,EAAGhN,EAAGmhB,GACpBpC,EAAQ3b,KAAMpD,EAAG2c,EAAGwE,GAmBtB,GAXAtoB,KAAK2oB,SAAUzC,GACflmB,KAAK4oB,aAAc,WAAY,GAAI7C,IAAwB1Z,EAAU,IACrErM,KAAK4oB,aAAc,KAAM,GAAI7C,IAAwBK,EAAK,IAI1DpmB,KAAKysD,uBAKAkE,IAAwB,EAAVloC,KAAK6jC,GAAS,CAEhC,GAAInmC,GAAUnmB,KAAKqO,WAAWwK,OAAOtT,MACjC2sD,EAAK,GAAI/wD,GACTgxD,EAAK,GAAIhxD,GACTwE,EAAI,GAAIxE,EAMZ,KAFA4wD,EAAOH,EAAWjjC,EAAOnuB,OAAS,EAE5BwF,EAAI,EAAGmM,EAAI,EAAGnM,EAAI2oB,EAAOnuB,OAAQwF,IAAMmM,GAAK,EAIjD+/C,EAAG/xD,EAAIgmB,EAAShU,EAAI,GACpB+/C,EAAG9xD,EAAI+lB,EAAShU,EAAI,GACpB+/C,EAAGtxD,EAAIulB,EAAShU,EAAI,GAIpBggD,EAAGhyD,EAAIgmB,EAAS4rC,EAAO5/C,EAAI,GAC3BggD,EAAG/xD,EAAI+lB,EAAS4rC,EAAO5/C,EAAI,GAC3BggD,EAAGvxD,EAAIulB,EAAS4rC,EAAO5/C,EAAI,GAI3BxM,EAAEypD,WAAY8C,EAAIC,GAAKh/B,YAIvBhN,EAAShU,EAAI,GAAMgU,EAAS4rC,EAAO5/C,EAAI,GAAMxM,EAAExF,EAC/CgmB,EAAShU,EAAI,GAAMgU,EAAS4rC,EAAO5/C,EAAI,GAAMxM,EAAEvF,EAC/C+lB,EAAShU,EAAI,GAAMgU,EAAS4rC,EAAO5/C,EAAI,GAAMxM,EAAE/E,GAkBlD,QAASwxD,IAAezC,EAAQS,GAE/BlsC,GAASxf,KAAM1E,MAEfA,KAAK6B,KAAO,gBAEkB,gBAAlBuuD,KAEX3vD,QAAQqa,KAAM,4DAEds1C,EAAgBA,EAAcA,eAI/BpwD,KAAKyX,YACJk4C,OAAQA,EACRS,cAAeA,GAGhBpwD,KAAKgnB,mBAAoB,GAAIqrC,IAAqB1C,EAAQS,IAC1DpwD,KAAKknB,gBASN,QAASmrC,IAAqB1C,EAAQS,GAwDrC,QAASkC,GAAUC,GAElB,GAAIvsD,GAAG8K,EAAG0hD,EAENC,EAAcpmD,EAAS7L,OAAS,EAChCmuB,EAAS4jC,EAAMG,cAAetC,GAE9BuC,EAAgBhkC,EAAO4jC,MACvBK,EAAajkC,EAAOkkC,KAIxB,KAAiD,IAA5CC,GAAWC,YAAaJ,GAM5B,IAJAA,EAAgBA,EAAcK,UAIxBhtD,EAAI,EAAG8K,EAAI8hD,EAAWpyD,OAAQwF,EAAI8K,EAAG9K,IAE1CwsD,EAAYI,EAAY5sD,IAEqB,IAAxC8sD,GAAWC,YAAaP,KAE5BI,EAAY5sD,GAAMwsD,EAAUQ,UAQ/B,IAAI1mD,GAAQwmD,GAAWG,iBAAkBN,EAAeC,EAIxD,KAAM5sD,EAAI,EAAG8K,EAAI8hD,EAAWpyD,OAAQwF,EAAI8K,EAAG9K,IAE1CwsD,EAAYI,EAAY5sD,GACxB2sD,EAAgBA,EAAcO,OAAQV,EAMvC,KAAMxsD,EAAI,EAAG8K,EAAI6hD,EAAcnyD,OAAQwF,EAAI8K,EAAG9K,IAAO,CAEpD,GAAIsI,GAASqkD,EAAe3sD,EAE5BqG,GAAS9B,KAAM+D,EAAOnO,EAAGmO,EAAOlO,EAAG,GACnC+lB,EAAQ5b,KAAM,EAAG,EAAG,GACpB6b,EAAI7b,KAAM+D,EAAOnO,EAAGmO,EAAOlO,GAM5B,IAAM4F,EAAI,EAAG8K,EAAIxE,EAAM9L,OAAQwF,EAAI8K,EAAG9K,IAAO,CAE5C,GAAI8Z,GAAOxT,EAAOtG,GAEdmO,EAAI2L,EAAM,GAAM2yC,EAChBtrD,EAAI2Y,EAAM,GAAM2yC,EAChB3uC,EAAIhE,EAAM,GAAM2yC,CAEpBvsC,GAAQ3b,KAAM4J,EAAGhN,EAAG2c,GACpBqE,GAAc,GAxHhB5B,GAAe7hB,KAAM1E,MAErBA,KAAK6B,KAAO,sBAEZ7B,KAAKyX,YACJk4C,OAAQA,EACRS,cAAeA,GAGhBA,EAAgBA,GAAiB,EAIjC,IAAIlqC,MACA7Z,KACA8Z,KACAC,KAIAoC,EAAa,EACbL,EAAa,CAIjB,KAAiC,IAA5BtL,MAAMC,QAAS6yC,GAEnB2C,EAAU3C,OAIV,KAAM,GAAI3pD,GAAI,EAAGA,EAAI2pD,EAAOnvD,OAAQwF,IAEnCssD,EAAU3C,EAAQ3pD,IAElBhG,KAAKuoB,SAAUC,EAAYL,EAAYniB,GAEvCwiB,GAAcL,EACdA,EAAa,CAQfnoB,MAAK2oB,SAAUzC,GACflmB,KAAK4oB,aAAc,WAAY,GAAI7C,IAAwB1Z,EAAU,IACrErM,KAAK4oB,aAAc,SAAU,GAAI7C,IAAwBI,EAAS,IAClEnmB,KAAK4oB,aAAc,KAAM,GAAI7C,IAAwBK,EAAK,IAuF3D,QAAS+sC,IAAel5C,EAAUm5C,GAEjC7sC,GAAe7hB,KAAM1E,MAErBA,KAAK6B,KAAO,gBAEZ7B,KAAKyX,YACJ27C,eAAgBA,GAGjBA,MAAsClyD,KAAnBkyD,EAAiCA,EAAiB,CAIrE,IAKiC5J,GAAOC,EACpCC,EAIA2J,EAVAhnD,KAIAinD,EAAe7qC,KAAKyJ,IAAK7vB,GAAMkxD,QAAUH,GACzCzJ,GAAS,EAAG,GAAKC,KACZC,GAAS,IAAK,IAAK,IAMvB5vC,GAASS,kBAEb24C,EAAY,GAAInvC,IAChBmvC,EAAUrsC,mBAAoB/M,IAI9Bo5C,EAAYp5C,EAASwB,QAItB43C,EAAUnsC,gBACVmsC,EAAUG,oBAOV,KAAM,GALFC,GAAiBJ,EAAUhnD,SAC3BC,EAAQ+mD,EAAU/mD,MAIZtG,EAAI,EAAG8K,EAAIxE,EAAM9L,OAAQwF,EAAI8K,EAAG9K,IAIzC,IAAM,GAFF8Z,GAAOxT,EAAOtG,GAERmM,EAAI,EAAGA,EAAI,EAAGA,IAEvBq3C,EAAQ1pC,EAAM+pC,EAAM13C,IACpBs3C,EAAQ3pC,EAAM+pC,GAAQ13C,EAAI,GAAM,IAChCw3C,EAAM,GAAMlhC,KAAK5c,IAAK29C,EAAOC,GAC7BE,EAAM,GAAMlhC,KAAK3c,IAAK09C,EAAOC,GAE7BC,EAAMC,EAAM,GAAM,IAAMA,EAAM,OAERzoD,KAAjB0oD,EAAOF,GAEXE,EAAOF,IAAUI,OAAQH,EAAM,GAAKI,OAAQJ,EAAM,GAAK+J,MAAO1tD,EAAG2tD,UAAOzyD,IAIxE0oD,EAAOF,GAAMiK,MAAQ3tD,CAUxB,KAAM0jD,IAAOE,GAAQ,CAEpB,GAAIL,GAAIK,EAAOF,EAIf,QAAiBxoD,KAAZqoD,EAAEoK,OAAuBrnD,EAAOi9C,EAAEmK,OAAQ76C,OAAO+6C,IAAKtnD,EAAOi9C,EAAEoK,OAAQ96C,SAAYy6C,EAAe,CAEtG,GAAIhlD,GAASmlD,EAAgBlK,EAAEO,OAC/Bz9C,GAAS9B,KAAM+D,EAAOnO,EAAGmO,EAAOlO,EAAGkO,EAAO1N,GAE1C0N,EAASmlD,EAAgBlK,EAAEQ,QAC3B19C,EAAS9B,KAAM+D,EAAOnO,EAAGmO,EAAOlO,EAAGkO,EAAO1N,IAQ5CZ,KAAK4oB,aAAc,WAAY,GAAI7C,IAAwB1Z,EAAU,IActE,QAASwnD,IAAkBC,EAAWC,EAAc/vD,EAAQspD,EAAgBxmC,EAAgBktC,EAAWpD,EAAYC,GAElH3sC,GAASxf,KAAM1E,MAEfA,KAAK6B,KAAO,mBAEZ7B,KAAKyX,YACJq8C,UAAWA,EACXC,aAAcA,EACd/vD,OAAQA,EACRspD,eAAgBA,EAChBxmC,eAAgBA,EAChBktC,UAAWA,EACXpD,WAAYA,EACZC,YAAaA,GAGd7wD,KAAKgnB,mBAAoB,GAAIitC,IAAwBH,EAAWC,EAAc/vD,EAAQspD,EAAgBxmC,EAAgBktC,EAAWpD,EAAYC,IAC7I7wD,KAAKknB,gBASN,QAAS+sC,IAAwBH,EAAWC,EAAc/vD,EAAQspD,EAAgBxmC,EAAgBktC,EAAWpD,EAAYC,GA8JxH,QAASqD,GAAazwC,GAErB,GAAItjB,GAAGg0D,EAAkBC,EAErB5lD,EAAK,GAAItO,GACToO,EAAS,GAAInN,GAEbgnB,EAAa,EAEbxP,GAAmB,IAAR8K,EAAiBqwC,EAAYC,EACxCM,GAAiB,IAAR5wC,EAAiB,GAAM,CASpC,KANA0wC,EAAmB1tC,EAMbtmB,EAAI,EAAGA,GAAKmtD,EAAgBntD,IAIjCkM,EAAS9B,KAAM,EAAGomB,EAAa0jC,EAAM,GAIrCluC,EAAQ5b,KAAM,EAAG8pD,EAAM,GAIvBjuC,EAAI7b,KAAM,GAAK,IAIfkc,GAUD,KAJA2tC,EAAiB3tC,EAIXtmB,EAAI,EAAGA,GAAKmtD,EAAgBntD,IAAO,CAExC,GAAIinB,GAAIjnB,EAAImtD,EACRgH,EAAQltC,EAAIypC,EAAcD,EAE1B2D,EAAW9rC,KAAKyJ,IAAKoiC,GACrBE,EAAW/rC,KAAK0lC,IAAKmG,EAIzBhmD,GAAOnO,EAAIwY,EAAS67C,EACpBlmD,EAAOlO,EAAIuwB,EAAa0jC,EACxB/lD,EAAO1N,EAAI+X,EAAS47C,EACpBloD,EAAS9B,KAAM+D,EAAOnO,EAAGmO,EAAOlO,EAAGkO,EAAO1N,GAI1CulB,EAAQ5b,KAAM,EAAG8pD,EAAM,GAIvB7lD,EAAGrO,EAAiB,GAAXo0D,EAAmB,GAC5B/lD,EAAGpO,EAAiB,GAAXo0D,EAAiBH,EAAS,GACnCjuC,EAAI7b,KAAMiE,EAAGrO,EAAGqO,EAAGpO,GAInBqmB,IAMD,IAAMtmB,EAAI,EAAGA,EAAImtD,EAAgBntD,IAAO,CAEvC,GAAI2jB,GAAIqwC,EAAmBh0D,EACvB6F,EAAIouD,EAAiBj0D,GAEZ,IAARsjB,EAIJyC,EAAQ3b,KAAMvE,EAAGA,EAAI,EAAG8d,GAMxBoC,EAAQ3b,KAAMvE,EAAI,EAAGA,EAAG8d,GAIzBqE,GAAc,EAMfzM,EAAM6M,SAAUC,EAAYL,GAAoB,IAAR1E,EAAe,EAAI,GAI3D+E,GAAcL,EAvQf5B,GAAe7hB,KAAM1E,MAErBA,KAAK6B,KAAO,yBAEZ7B,KAAKyX,YACJq8C,UAAWA,EACXC,aAAcA,EACd/vD,OAAQA,EACRspD,eAAgBA,EAChBxmC,eAAgBA,EAChBktC,UAAWA,EACXpD,WAAYA,EACZC,YAAaA,EAGd,IAAIn1C,GAAQ1b,IAEZ8zD,OAA0B5yD,KAAd4yD,EAA0BA,EAAY,EAClDC,MAAgC7yD,KAAjB6yD,EAA6BA,EAAe,EAC3D/vD,EAASA,GAAU,EAEnBspD,EAAiB7kC,KAAKC,MAAO4kC,IAAoB,EACjDxmC,EAAiB2B,KAAKC,MAAO5B,IAAoB,EAEjDktC,MAA0B9yD,KAAd8yD,GAA0BA,EACtCpD,MAA4B1vD,KAAf0vD,EAA2BA,EAAa,EACrDC,MAA8B3vD,KAAhB2vD,EAA4BA,EAAwB,EAAVpoC,KAAK6jC,EAI7D,IAAIpmC,MACA7Z,KACA8Z,KACAC,KAIAK,EAAQ,EACRguC,KACA9jC,EAAa3sB,EAAS,EACtBwkB,EAAa,GAoBjB,WAEC,GAAIroB,GAAGC,EACHyY,EAAS,GAAI1X,GACbmN,EAAS,GAAInN,GAEbgnB,EAAa,EAGbusC,GAAUX,EAAeD,GAAc9vD,CAI3C,KAAM5D,EAAI,EAAGA,GAAK0mB,EAAgB1mB,IAAO,CAExC,GAAIu0D,MAEAnuD,EAAIpG,EAAI0mB,EAIRnO,EAASnS,GAAMutD,EAAeD,GAAcA,CAEhD,KAAM3zD,EAAI,EAAGA,GAAKmtD,EAAgBntD,IAAO,CAExC,GAAIinB,GAAIjnB,EAAImtD,EAERgH,EAAQltC,EAAIypC,EAAcD,EAE1B4D,EAAW/rC,KAAK0lC,IAAKmG,GACrBC,EAAW9rC,KAAKyJ,IAAKoiC,EAIzBhmD,GAAOnO,EAAIwY,EAAS67C,EACpBlmD,EAAOlO,GAAMoG,EAAIxC,EAAS2sB,EAC1BriB,EAAO1N,EAAI+X,EAAS47C,EACpBloD,EAAS9B,KAAM+D,EAAOnO,EAAGmO,EAAOlO,EAAGkO,EAAO1N,GAI1CiY,EAAOhR,IAAK2sD,EAAUE,EAAOH,GAAWphC,YACxChN,EAAQ5b,KAAMsO,EAAO1Y,EAAG0Y,EAAOzY,EAAGyY,EAAOjY,GAIzCwlB,EAAI7b,KAAM6c,EAAG,EAAI5gB,GAIjBmuD,EAASpqD,KAAMkc,KAMhBguC,EAAWlqD,KAAMoqD,GAMlB,IAAMx0D,EAAI,EAAGA,EAAImtD,EAAgBntD,IAEhC,IAAMC,EAAI,EAAGA,EAAI0mB,EAAgB1mB,IAAO,CAIvC,GAAI+T,GAAIsgD,EAAYr0D,GAAKD,GACrBgH,EAAIstD,EAAYr0D,EAAI,GAAKD,GACzB2jB,EAAI2wC,EAAYr0D,EAAI,GAAKD,EAAI,GAC7BmoB,EAAImsC,EAAYr0D,GAAKD,EAAI,EAI7B+lB,GAAQ3b,KAAM4J,EAAGhN,EAAGmhB,GACpBpC,EAAQ3b,KAAMpD,EAAG2c,EAAGwE,GAIpBH,GAAc,EAQhBzM,EAAM6M,SAAUC,EAAYL,EAAY,GAIxCK,GAAcL,MA1GI,IAAd6rC,IAECF,EAAY,GAAII,GAAa,GAC7BH,EAAe,GAAIG,GAAa,IAMtCl0D,KAAK2oB,SAAUzC,GACflmB,KAAK4oB,aAAc,WAAY,GAAI7C,IAAwB1Z,EAAU,IACrErM,KAAK4oB,aAAc,SAAU,GAAI7C,IAAwBI,EAAS,IAClEnmB,KAAK4oB,aAAc,KAAM,GAAI7C,IAAwBK,EAAK,IA4N3D,QAASwuC,IAAcj8C,EAAQ3U,EAAQspD,EAAgBxmC,EAAgBktC,EAAWpD,EAAYC,GAE7FgD,GAAiBnvD,KAAM1E,KAAM,EAAG2Y,EAAQ3U,EAAQspD,EAAgBxmC,EAAgBktC,EAAWpD,EAAYC,GAEvG7wD,KAAK6B,KAAO,eAEZ7B,KAAKyX,YACJkB,OAAQA,EACR3U,OAAQA,EACRspD,eAAgBA,EAChBxmC,eAAgBA,EAChBktC,UAAWA,EACXpD,WAAYA,EACZC,YAAaA,GAUf,QAASgE,IAAoBl8C,EAAQ3U,EAAQspD,EAAgBxmC,EAAgBktC,EAAWpD,EAAYC,GAEnGoD,GAAuBvvD,KAAM1E,KAAM,EAAG2Y,EAAQ3U,EAAQspD,EAAgBxmC,EAAgBktC,EAAWpD,EAAYC,GAE7G7wD,KAAK6B,KAAO,qBAEZ7B,KAAKyX,YACJkB,OAAQA,EACR3U,OAAQA,EACRspD,eAAgBA,EAChBxmC,eAAgBA,EAChBktC,UAAWA,EACXpD,WAAYA,EACZC,YAAaA,GAgBf,QAASiE,IAAgBn8C,EAAQi5C,EAAUhB,EAAYC,GAEtD3sC,GAASxf,KAAM1E,MAEfA,KAAK6B,KAAO,iBAEZ7B,KAAKyX,YACJkB,OAAQA,EACRi5C,SAAUA,EACVhB,WAAYA,EACZC,YAAaA,GAGd7wD,KAAKgnB,mBAAoB,GAAI+tC,IAAsBp8C,EAAQi5C,EAAUhB,EAAYC,IACjF7wD,KAAKknB,gBASN,QAAS6tC,IAAsBp8C,EAAQi5C,EAAUhB,EAAYC,GAE5DtqC,GAAe7hB,KAAM1E,MAErBA,KAAK6B,KAAO,uBAEZ7B,KAAKyX,YACJkB,OAAQA,EACRi5C,SAAUA,EACVhB,WAAYA,EACZC,YAAaA,GAGdl4C,EAASA,GAAU,EACnBi5C,MAAwB1wD,KAAb0wD,EAAyBnpC,KAAK3c,IAAK,EAAG8lD,GAAa,EAE9DhB,MAA4B1vD,KAAf0vD,EAA2BA,EAAa,EACrDC,MAA8B3vD,KAAhB2vD,EAA4BA,EAAwB,EAAVpoC,KAAK6jC,EAI7D,IAOItmD,GAAGgvD,EAPH9uC,KACA7Z,KACA8Z,KACAC,KAKA9X,EAAS,GAAInN,GACbqN,EAAK,GAAItO,EAQb,KAJAmM,EAAS9B,KAAM,EAAG,EAAG,GACrB4b,EAAQ5b,KAAM,EAAG,EAAG,GACpB6b,EAAI7b,KAAM,GAAK,IAETyqD,EAAI,EAAGhvD,EAAI,EAAGgvD,GAAKpD,EAAUoD,IAAMhvD,GAAK,EAAI,CAEjD,GAAIwrD,GAAUZ,EAAaoE,EAAIpD,EAAWf,CAI1CviD,GAAOnO,EAAIwY,EAAS8P,KAAKyJ,IAAKs/B,GAC9BljD,EAAOlO,EAAIuY,EAAS8P,KAAK0lC,IAAKqD,GAE9BnlD,EAAS9B,KAAM+D,EAAOnO,EAAGmO,EAAOlO,EAAGkO,EAAO1N,GAI1CulB,EAAQ5b,KAAM,EAAG,EAAG,GAIpBiE,EAAGrO,GAAMkM,EAAUrG,GAAM2S,EAAS,GAAM,EACxCnK,EAAGpO,GAAMiM,EAAUrG,EAAI,GAAM2S,EAAS,GAAM,EAE5CyN,EAAI7b,KAAMiE,EAAGrO,EAAGqO,EAAGpO,GAMpB,IAAM4F,EAAI,EAAGA,GAAK4rD,EAAU5rD,IAE3BkgB,EAAQ3b,KAAMvE,EAAGA,EAAI,EAAG,EAMzBhG,MAAK2oB,SAAUzC,GACflmB,KAAK4oB,aAAc,WAAY,GAAI7C,IAAwB1Z,EAAU,IACrErM,KAAK4oB,aAAc,SAAU,GAAI7C,IAAwBI,EAAS,IAClEnmB,KAAK4oB,aAAc,KAAM,GAAI7C,IAAwBK,EAAK,IA+D3D,QAASwW,IAAgBnlB,GAExBzB,EAAStR,KAAM1E,MAEfA,KAAK6B,KAAO,iBAEZ7B,KAAK6O,MAAQ,GAAInD,GAAO,GACxB1L,KAAK4O,QAAU,EAEf5O,KAAKkW,QAAS,EACdlW,KAAKyW,aAAc,EAEnBzW,KAAKoY,UAAWX,GAajB,QAASw9C,IAAmBx9C,GAE3BuS,GAAetlB,KAAM1E,KAAMyX,GAE3BzX,KAAK6B,KAAO,oBA4Db,QAAS06B,IAAsB9kB,GAE9BzB,EAAStR,KAAM1E,MAEfA,KAAKiqB,SAAYirC,SAAY,IAE7Bl1D,KAAK6B,KAAO,uBAEZ7B,KAAK6O,MAAQ,GAAInD,GAAO,UACxB1L,KAAKuhD,UAAY,GACjBvhD,KAAKwhD,UAAY,GAEjBxhD,KAAKqF,IAAM,KAEXrF,KAAKopB,SAAW,KAChBppB,KAAKqpB,kBAAoB,EAEzBrpB,KAAKspB,MAAQ,KACbtpB,KAAKupB,eAAiB,EAEtBvpB,KAAK0gD,SAAW,GAAIh1C,GAAO,GAC3B1L,KAAK2gD,kBAAoB,EACzB3gD,KAAK44B,YAAc,KAEnB54B,KAAKw1B,QAAU,KACfx1B,KAAKqhD,UAAY,EAEjBrhD,KAAKy1B,UAAY,KACjBz1B,KAAKshD,YAAc,GAAIphD,GAAS,EAAG,GAEnCF,KAAK+X,gBAAkB,KACvB/X,KAAKgY,kBAAoB,EACzBhY,KAAKiY,iBAAmB,EAExBjY,KAAK64B,aAAe,KAEpB74B,KAAK84B,aAAe,KAEpB94B,KAAK8X,SAAW,KAEhB9X,KAAKypB,OAAS,KACdzpB,KAAKyhD,gBAAkB,EAEvBzhD,KAAK6pB,gBAAkB,IAEvB7pB,KAAKkY,WAAY,EACjBlY,KAAKmY,mBAAqB,EAC1BnY,KAAK8pB,iBAAmB,QACxB9pB,KAAK+pB,kBAAoB,QAEzB/pB,KAAK4X,UAAW,EAChB5X,KAAK6X,cAAe,EACpB7X,KAAKskB,cAAe,EAEpBtkB,KAAKoY,UAAWX,GAyEjB,QAAS+kB,IAAsB/kB;eAE9B8kB,GAAqB73B,KAAM1E,MAE3BA,KAAKiqB,SAAYkrC,SAAY,IAE7Bn1D,KAAK6B,KAAO,uBAEZ7B,KAAK4pB,aAAe,GAEpB5pB,KAAK0hD,UAAY,EACjB1hD,KAAK2hD,mBAAqB,EAE1B3hD,KAAKoY,UAAWX,GA0EjB,QAAS4kB,IAAmB5kB,GAE3BzB,EAAStR,KAAM1E,MAEfA,KAAK6B,KAAO,oBAEZ7B,KAAK6O,MAAQ,GAAInD,GAAO,UACxB1L,KAAKmhD,SAAW,GAAIz1C,GAAO,SAC3B1L,KAAKohD,UAAY,GAEjBphD,KAAKqF,IAAM,KAEXrF,KAAKopB,SAAW,KAChBppB,KAAKqpB,kBAAoB,EAEzBrpB,KAAKspB,MAAQ,KACbtpB,KAAKupB,eAAiB,EAEtBvpB,KAAK0gD,SAAW,GAAIh1C,GAAO,GAC3B1L,KAAK2gD,kBAAoB,EACzB3gD,KAAK44B,YAAc,KAEnB54B,KAAKw1B,QAAU,KACfx1B,KAAKqhD,UAAY,EAEjBrhD,KAAKy1B,UAAY,KACjBz1B,KAAKshD,YAAc,GAAIphD,GAAS,EAAG,GAEnCF,KAAK+X,gBAAkB,KACvB/X,KAAKgY,kBAAoB,EACzBhY,KAAKiY,iBAAmB,EAExBjY,KAAKwpB,YAAc,KAEnBxpB,KAAK8X,SAAW,KAEhB9X,KAAKypB,OAAS,KACdzpB,KAAK0pB,QAAUC,GACf3pB,KAAK4pB,aAAe,EACpB5pB,KAAK6pB,gBAAkB,IAEvB7pB,KAAKkY,WAAY,EACjBlY,KAAKmY,mBAAqB,EAC1BnY,KAAK8pB,iBAAmB,QACxB9pB,KAAK+pB,kBAAoB,QAEzB/pB,KAAK4X,UAAW,EAChB5X,KAAK6X,cAAe,EACpB7X,KAAKskB,cAAe,EAEpBtkB,KAAKoY,UAAWX,GAqEjB,QAAS6kB,IAAkB7kB,GAE1B4kB,GAAkB33B,KAAM1E,MAExBA,KAAKiqB,SAAYmrC,KAAQ,IAEzBp1D,KAAK6B,KAAO,mBAEZ7B,KAAKq5B,YAAc,KAEnBr5B,KAAKoY,UAAWX,GA6CjB,QAAS0kB,IAAoB1kB,GAE5BzB,EAAStR,KAAM1E,MAEfA,KAAK6B,KAAO,qBAEZ7B,KAAKw1B,QAAU,KACfx1B,KAAKqhD,UAAY,EAEjBrhD,KAAKy1B,UAAY,KACjBz1B,KAAKshD,YAAc,GAAIphD,GAAS,EAAG,GAEnCF,KAAK+X,gBAAkB,KACvB/X,KAAKgY,kBAAoB,EACzBhY,KAAKiY,iBAAmB,EAExBjY,KAAKkY,WAAY,EACjBlY,KAAKmY,mBAAqB,EAE1BnY,KAAK2U,KAAM,EACX3U,KAAKkW,QAAS,EAEdlW,KAAK4X,UAAW,EAChB5X,KAAK6X,cAAe,EACpB7X,KAAKskB,cAAe,EAEpBtkB,KAAKoY,UAAWX,GAwEjB,QAAS2kB,IAAqB3kB,GAE7BzB,EAAStR,KAAM1E,MAEfA,KAAK6B,KAAO,sBAEZ7B,KAAK6O,MAAQ,GAAInD,GAAO,UAExB1L,KAAKqF,IAAM,KAEXrF,KAAKopB,SAAW,KAChBppB,KAAKqpB,kBAAoB,EAEzBrpB,KAAKspB,MAAQ,KACbtpB,KAAKupB,eAAiB,EAEtBvpB,KAAK0gD,SAAW,GAAIh1C,GAAO,GAC3B1L,KAAK2gD,kBAAoB,EACzB3gD,KAAK44B,YAAc,KAEnB54B,KAAKwpB,YAAc,KAEnBxpB,KAAK8X,SAAW,KAEhB9X,KAAKypB,OAAS,KACdzpB,KAAK0pB,QAAUC,GACf3pB,KAAK4pB,aAAe,EACpB5pB,KAAK6pB,gBAAkB,IAEvB7pB,KAAKkY,WAAY,EACjBlY,KAAKmY,mBAAqB,EAC1BnY,KAAK8pB,iBAAmB,QACxB9pB,KAAK+pB,kBAAoB,QAEzB/pB,KAAK4X,UAAW,EAChB5X,KAAK6X,cAAe,EACpB7X,KAAKskB,cAAe,EAEpBtkB,KAAKoY,UAAWX,GAgEjB,QAASilB,IAAoBjlB,GAE5BglB,GAAkB/3B,KAAM1E,MAExBA,KAAK6B,KAAO,qBAEZ7B,KAAK8O,MAAQ,EACb9O,KAAKghD,SAAW,EAChBhhD,KAAKkhD,QAAU,EAEflhD,KAAKoY,UAAWX,GA2FjB,QAAS49C,IAAgBC,EAAQC,EAAYC,GAE5C,GAAI95C,GAAQ1b,KAERy1D,GAAY,EACZC,EAAc,EACdC,EAAa,EACbC,MAAc10D,EAElBlB,MAAK61D,YAAU30D,GACflB,KAAKs1D,OAASA,EACdt1D,KAAKu1D,WAAaA,EAClBv1D,KAAKw1D,QAAUA,EAEfx1D,KAAK81D,UAAY,SAAWC,GAE3BJ,KAEmB,IAAdF,OAEmBv0D,KAAlBwa,EAAMm6C,SAEVn6C,EAAMm6C,QAASE,EAAKL,EAAaC,GAMnCF,GAAY,GAIbz1D,KAAKg2D,QAAU,SAAWD,GAEzBL,QAE0Bx0D,KAArBwa,EAAM65C,YAEV75C,EAAM65C,WAAYQ,EAAKL,EAAaC,GAIhCD,IAAgBC,IAEpBF,GAAY,MAEUv0D,KAAjBwa,EAAM45C,QAEV55C,EAAM45C,WAQTt1D,KAAKi2D,UAAY,SAAWF,OAEJ70D,KAAlBwa,EAAM85C,SAEV95C,EAAM85C,QAASO,IAMjB/1D,KAAKk2D,WAAa,SAAWH,GAE5B,MAAKH,GAEGA,EAAaG,GAIdA,GAIR/1D,KAAKm2D,eAAiB,SAAWC,GAEhCR,EAAcQ,GAchB,QAASC,IAAYC,GAEpBt2D,KAAKs2D,YAAwBp1D,KAAZo1D,EAA0BA,EAAUC,GAiTtD,QAASC,IAAyBF,GAEjCt2D,KAAKs2D,YAAwBp1D,KAAZo1D,EAA0BA,EAAUC,GAGrDv2D,KAAKy2D,QAAU,KAiIhB,QAASC,IAAmBJ,GAE3Bt2D,KAAKs2D,YAAwBp1D,KAAZo1D,EAA0BA,EAAUC,GAGrDv2D,KAAKy2D,QAAU,KAiFhB,QAASE,IAAaL,GAErBt2D,KAAKs2D,YAAwBp1D,KAAZo1D,EAA0BA,EAAUC,GAmGtD,QAASK,IAAmBN,GAE3Bt2D,KAAKs2D,YAAwBp1D,KAAZo1D,EAA0BA,EAAUC,GAoEtD,QAASM,IAAeP,GAEvBt2D,KAAKs2D,YAAwBp1D,KAAZo1D,EAA0BA,EAAUC,GAwDtD,QAASO,IAAOjoD,EAAOwiB,GAEtBhP,GAAS3d,KAAM1E,MAEfA,KAAK6B,KAAO,QAEZ7B,KAAK6O,MAAQ,GAAInD,GAAOmD,GACxB7O,KAAKqxB,cAA0BnwB,KAAdmwB,EAA0BA,EAAY,EAEvDrxB,KAAKojB,kBAAgBliB,GA+CtB,QAAS61D,IAAiBvmC,EAAUC,EAAaY,GAEhDylC,GAAMpyD,KAAM1E,KAAMwwB,EAAUa,GAE5BrxB,KAAK6B,KAAO,kBAEZ7B,KAAKwc,eAAatb,GAElBlB,KAAKiT,SAAS7B,KAAMiR,GAASQ,WAC7B7iB,KAAKg3D,eAELh3D,KAAKywB,YAAc,GAAI/kB,GAAO+kB,GA0B/B,QAASwmC,IAAarnD,GAErB5P,KAAK4P,OAASA,EAEd5P,KAAK6xB,KAAO,EACZ7xB,KAAK2Y,OAAS,EAEd3Y,KAAK8e,QAAU,GAAI5e,GAAS,IAAK,KAEjCF,KAAKqF,IAAM,KACXrF,KAAKqD,OAAS,GAAIhD,GA8CnB,QAAS62D,MAERD,GAAYvyD,KAAM1E,KAAM,GAAIuuC,IAAmB,GAAI,EAAG,GAAK,MAmC5D,QAAS4oB,IAAWtoD,EAAOwiB,EAAWjB,EAAU+B,EAAOC,EAAU7B,GAEhEumC,GAAMpyD,KAAM1E,KAAM6O,EAAOwiB,GAEzBrxB,KAAK6B,KAAO,YAEZ7B,KAAKiT,SAAS7B,KAAMiR,GAASQ,WAC7B7iB,KAAKg3D,eAELh3D,KAAKwf,OAAS,GAAI6C,IAElBrgB,OAAOC,eAAgBjC,KAAM,SAC5B2hB,IAAK,WAIJ,MAAO3hB,MAAKqxB,UAAY5I,KAAK6jC,IAG9BzkD,IAAK,SAAWuvD,GAIfp3D,KAAKqxB,UAAY+lC,EAAQ3uC,KAAK6jC,MAKhCtsD,KAAKowB,aAA0BlvB,KAAbkvB,EAA2BA,EAAW,EACxDpwB,KAAKmyB,UAAoBjxB,KAAVixB,EAAwBA,EAAQ1J,KAAK6jC,GAAK,EACzDtsD,KAAKoyB,aAA0BlxB,KAAbkxB,EAA2BA,EAAW,EACxDpyB,KAAKuwB,UAAoBrvB,KAAVqvB,EAAwBA,EAAQ,EAE/CvwB,KAAK6e,OAAS,GAAIq4C,IAkCnB,QAASG,IAAYxoD,EAAOwiB,EAAWjB,EAAUG,GAEhDumC,GAAMpyD,KAAM1E,KAAM6O,EAAOwiB,GAEzBrxB,KAAK6B,KAAO,aAEZG,OAAOC,eAAgBjC,KAAM,SAC5B2hB,IAAK,WAIJ,MAAwB,GAAjB3hB,KAAKqxB,UAAgB5I,KAAK6jC,IAGlCzkD,IAAK,SAAWuvD,GAIfp3D,KAAKqxB,UAAY+lC,GAAU,EAAI3uC,KAAK6jC,OAKtCtsD,KAAKowB,aAA0BlvB,KAAbkvB,EAA2BA,EAAW,EACxDpwB,KAAKuwB,UAAoBrvB,KAAVqvB,EAAwBA,EAAQ,EAE/CvwB,KAAK6e,OAAS,GAAIo4C,IAAa,GAAI1oB,IAAmB,GAAI,EAAG,GAAK,MA6BnE,QAAS+oB,MAERL,GAAYvyD,KAAM1E,KAAM,GAAIsjB,KAAsB,EAAG,EAAG,GAAK,EAAG,GAAK,MAetE,QAASi0C,IAAkB1oD,EAAOwiB,GAEjCylC,GAAMpyD,KAAM1E,KAAM6O,EAAOwiB,GAEzBrxB,KAAK6B,KAAO,mBAEZ7B,KAAKiT,SAAS7B,KAAMiR,GAASQ,WAC7B7iB,KAAKg3D,eAELh3D,KAAKwf,OAAS,GAAI6C,IAElBriB,KAAK6e,OAAS,GAAIy4C,IA4BnB,QAASE,IAAc3oD,EAAOwiB,GAE7BylC,GAAMpyD,KAAM1E,KAAM6O,EAAOwiB,GAEzBrxB,KAAK6B,KAAO,eAEZ7B,KAAKwc,eAAatb,GAgBnB,QAASu2D,IAAe5oD,EAAOwiB,EAAWttB,EAAOC,GAEhD8yD,GAAMpyD,KAAM1E,KAAM6O,EAAOwiB,GAEzBrxB,KAAK6B,KAAO,gBAEZ7B,KAAKiT,SAASpL,IAAK,EAAG,EAAG,GACzB7H,KAAKg3D,eAELh3D,KAAK+D,UAAoB7C,KAAV6C,EAAwBA,EAAQ,GAC/C/D,KAAKgE,WAAsB9C,KAAX8C,EAAyBA,EAAS,GAmOnD,QAAS0zD,IAAaC,EAAoBC,EAAcC,EAAYC,GAEnE93D,KAAK23D,mBAAqBA,EAC1B33D,KAAK+3D,aAAe,EAEpB/3D,KAAK83D,iBAAgC52D,KAAjB42D,EACnBA,EAAe,GAAIF,GAAaI,YAAaH,GAC9C73D,KAAK43D,aAAeA,EACpB53D,KAAKi4D,UAAYJ,EA6OlB,QAASK,IAAkBP,EAAoBC,EAAcC,EAAYC,GAExEJ,GAAYhzD,KAAM1E,KAAM23D,EAAoBC,EAAcC,EAAYC,GAEtE93D,KAAKm4D,aAAgB,EACrBn4D,KAAKo4D,aAAgB,EACrBp4D,KAAKq4D,aAAgB,EACrBr4D,KAAKs4D,aAAgB,EAyItB,QAASC,IAAmBZ,EAAoBC,EAAcC,EAAYC,GAEzEJ,GAAYhzD,KAAM1E,KAAM23D,EAAoBC,EAAcC,EAAYC,GA0CvE,QAASU,IAAqBb,EAAoBC,EAAcC,EAAYC,GAE3EJ,GAAYhzD,KAAM1E,KAAM23D,EAAoBC,EAAcC,EAAYC,GAgXvE,QAASW,IAA0Bl2D,EAAMm2D,EAAOC,EAAQC,GAEvD,OAAc13D,KAATqB,EAAqB,KAAM,IAAIkyB,OAAO,0BAE3C,QAAevzB,KAAVw3D,GAAwC,IAAjBA,EAAMl4D,OAEjC,KAAM,IAAIi0B,OAAO,+BAAiClyB,EAInDvC,MAAKuC,KAAOA,EAEZvC,KAAK04D,MAAQG,GAAeC,aAAcJ,EAAO14D,KAAK+4D,gBACtD/4D,KAAK24D,OAASE,GAAeC,aAAcH,EAAQ34D,KAAKg5D,iBAExDh5D,KAAKi5D,iBAAkBL,GAAiB54D,KAAKk5D,sBAE7Cl5D,KAAKm5D,WACLn5D,KAAKo5D,WAcN,QAASC,IAAqB92D,EAAMm2D,EAAOC,EAAQC,GAElDH,GAAyB/zD,KAAM1E,KAAMuC,EAAMm2D,EAAOC,EAAQC,GAsB3D,QAASU,IAA6B3B,EAAoBC,EAAcC,EAAYC,GAEnFJ,GAAYhzD,KAAM1E,KAAM23D,EAAoBC,EAAcC,EAAYC,GAuCvE,QAASyB,IAAyBh3D,EAAMm2D,EAAOC,EAAQC,GAEtDH,GAAyB/zD,KAAM1E,KAAMuC,EAAMm2D,EAAOC,EAAQC,GAiC3D,QAASY,IAAqBj3D,EAAMm2D,EAAOC,EAAQC,GAElDH,GAAyB/zD,KAAM1E,KAAMuC,EAAMm2D,EAAOC,EAAQC,GA0B3D,QAASa,IAAqBl3D,EAAMm2D,EAAOC,EAAQC,GAElDH,GAAyB/zD,KAAM1E,KAAMuC,EAAMm2D,EAAOC,EAAQC,GA6B3D,QAASc,IAAsBn3D,EAAMm2D,EAAOC,GAE3CF,GAAyB/zD,KAAM1E,KAAMuC,EAAMm2D,EAAOC,GAgCnD,QAASgB,IAAoBp3D,EAAMm2D,EAAOC,EAAQC,GAEjDH,GAAyB/zD,KAAM1E,KAAMuC,EAAMm2D,EAAOC,EAAQC,GA8B3D,QAASgB,IAAer3D,EAAMm2D,EAAOC,EAAQC,GAE5CH,GAAyB7rB,MAAO5sC,KAAMuC,EAAMm2D,EAAOC,EAAQC,GA2I5D,QAASiB,IAAet3D,EAAMu3D,EAAUC,GAEvC/5D,KAAKuC,KAAOA,EACZvC,KAAK+5D,OAASA,EACd/5D,KAAK85D,aAA0B54D,KAAb44D,EAA2BA,GAAa,EAE1D95D,KAAKoC,KAAOC,GAAMC,eAGbtC,KAAK85D,SAAW,GAEpB95D,KAAKg6D,gBAINh6D,KAAKo5D,WA0UN,QAASa,IAAgB3D,GAExBt2D,KAAKs2D,YAAwBp1D,KAAZo1D,EAA0BA,EAAUC,GACrDv2D,KAAKkM,YAgKN,QAASguD,IAAsB5D,GAE9Bt2D,KAAKs2D,YAAwBp1D,KAAZo1D,EAA0BA,EAAUC,GAgGtD,QAAS4D,MAERn6D,KAAKo6D,YAAc,aACnBp6D,KAAKq6D,eAAiB,aACtBr6D,KAAKs6D,eAAiB,aAwUvB,QAASC,IAAYjE,GAEI,iBAAZA,KAEX71D,QAAQqa,KAAM,6EACdw7C,MAAUp1D,IAIXlB,KAAKs2D,YAAwBp1D,KAAZo1D,EAA0BA,EAAUC,GAErDv2D,KAAKw6D,iBAAkB,EAsiBxB,QAASC,IAAcnE,GAEtBt2D,KAAKs2D,YAAwBp1D,KAAZo1D,EAA0BA,EAAUC,GACrDv2D,KAAK06D,YAAc,GA2xBpB,QAASC,IAAY1N,EAAGj0C,EAAIC,EAAIC,EAAIC,GAEnC,GAAIyhD,GAAmB,IAAZ1hD,EAAKF,GACZ6hD,EAAmB,IAAZ1hD,EAAKF,GACZ6hD,EAAK7N,EAAIA,CAEb,QAAS,EAAIh0C,EAAK,EAAIC,EAAK0hD,EAAKC,IADvB5N,EAAI6N,KACmC,EAAI7hD,EAAK,EAAIC,EAAK,EAAI0hD,EAAKC,GAAOC,EAAKF,EAAK3N,EAAIh0C,EAMjG,QAAS8hD,IAAmB9N,EAAGlvB,GAE9B,GAAI/gB,GAAI,EAAIiwC,CACZ,OAAOjwC,GAAIA,EAAI+gB,EAIhB,QAASi9B,IAAmB/N,EAAGlvB,GAE9B,MAAO,IAAM,EAAIkvB,GAAMA,EAAIlvB,EAI5B,QAASk9B,IAAmBhO,EAAGlvB,GAE9B,MAAOkvB,GAAIA,EAAIlvB,EAIhB,QAASm9B,IAAiBjO,EAAGj0C,EAAIC,EAAIC,GAEpC,MAAO6hD,IAAmB9N,EAAGj0C,GAAOgiD,GAAmB/N,EAAGh0C,GACzDgiD,GAAmBhO,EAAG/zC,GAMxB,QAASiiD,IAAelO,EAAGlvB,GAE1B,GAAI/gB,GAAI,EAAIiwC,CACZ,OAAOjwC,GAAIA,EAAIA,EAAI+gB,EAIpB,QAASq9B,IAAenO,EAAGlvB,GAE1B,GAAI/gB,GAAI,EAAIiwC,CACZ,OAAO,GAAIjwC,EAAIA,EAAIiwC,EAAIlvB,EAIxB,QAASs9B,IAAepO,EAAGlvB,GAE1B,MAAO,IAAM,EAAIkvB,GAAMA,EAAIA,EAAIlvB,EAIhC,QAASu9B,IAAerO,EAAGlvB,GAE1B,MAAOkvB,GAAIA,EAAIA,EAAIlvB,EAIpB,QAASw9B,IAAatO,EAAGj0C,EAAIC,EAAIC,EAAIC,GAEpC,MAAOgiD,IAAelO,EAAGj0C,GAAOoiD,GAAenO,EAAGh0C,GAAOoiD,GAAepO,EAAG/zC,GAC1EoiD,GAAerO,EAAG9zC,GAuCpB,QAASqiD,MAERx7D,KAAK6B,KAAO,QAEZ7B,KAAKy7D,mBAAqB,IAmW3B,QAASC,IAAWb,EAAIc,GAEvBH,GAAM92D,KAAM1E,MAEZA,KAAK6B,KAAO,YAEZ7B,KAAK66D,GAAKA,GAAM,GAAI36D,GACpBF,KAAK27D,GAAKA,GAAM,GAAIz7D,GAiErB,QAAS07D,MAERJ,GAAM92D,KAAM1E,MAEZA,KAAK6B,KAAO,YAEZ7B,KAAK67D,UACL77D,KAAK87D,WAAY,EA2MlB,QAASC,IAAcC,EAAIC,EAAIC,EAASC,EAASC,EAAaC,EAAWC,EAAYC,GAEpFf,GAAM92D,KAAM1E,MAEZA,KAAK6B,KAAO,eAEZ7B,KAAKg8D,GAAKA,GAAM,EAChBh8D,KAAKi8D,GAAKA,GAAM,EAEhBj8D,KAAKk8D,QAAUA,GAAW,EAC1Bl8D,KAAKm8D,QAAUA,GAAW,EAE1Bn8D,KAAKo8D,YAAcA,GAAe,EAClCp8D,KAAKq8D,UAAYA,GAAa,EAAI5zC,KAAK6jC,GAEvCtsD,KAAKs8D,WAAaA,IAAc,EAEhCt8D,KAAKu8D,UAAYA,GAAa,EA4F/B,QAASC,IAAa7tC,GAErB6sC,GAAM92D,KAAM1E,MAEZA,KAAK6B,KAAO,cAEZ7B,KAAK2uB,OAASA,MAmDf,QAAS8tC,IAAkB7B,EAAIC,EAAIc,EAAIe,GAEtClB,GAAM92D,KAAM1E,MAEZA,KAAK6B,KAAO,mBAEZ7B,KAAK46D,GAAKA,GAAM,GAAI16D,GACpBF,KAAK66D,GAAKA,GAAM,GAAI36D,GACpBF,KAAK27D,GAAKA,GAAM,GAAIz7D,GACpBF,KAAK08D,GAAKA,GAAM,GAAIx8D,GAqCrB,QAASy8D,IAAsB/B,EAAIC,EAAIc,GAEtCH,GAAM92D,KAAM1E,MAEZA,KAAK6B,KAAO,uBAEZ7B,KAAK46D,GAAKA,GAAM,GAAI16D,GACpBF,KAAK66D,GAAKA,GAAM,GAAI36D,GACpBF,KAAK27D,GAAKA,GAAM,GAAIz7D,GA2KrB,QAAS08D,IAAMjuC,GAEditC,GAAUl3D,KAAM1E,MAEhBA,KAAK6B,KAAO,OAEZ7B,KAAK68D,aAAe,GAAI38D,GAEnByuB,GAEJ3uB,KAAK88D,cAAenuC,GAoBtB,QAASouC,IAAOpuC,GAEfiuC,GAAKl4D,KAAM1E,KAAM2uB,GAEjB3uB,KAAK6B,KAAO,QAEZ7B,KAAK6yD,SA4DN,QAASmK,MAERh9D,KAAK6B,KAAO,YAEZ7B,KAAKi9D,YACLj9D,KAAKk9D,YAAc,KAgRpB,QAASC,IAAMr4D,GAEd9E,KAAK6B,KAAO,OAEZ7B,KAAK8E,KAAOA,EAgLb,QAASs4D,IAAY9G,GAEpBt2D,KAAKs2D,YAAwBp1D,KAAZo1D,EAA0BA,EAAUC,GA8EtD,QAAS8G,IAAa/G,GAErBt2D,KAAKs2D,YAAwBp1D,KAAZo1D,EAA0BA,EAAUC,GA8BtD,QAAS+G,MAERt9D,KAAK6B,KAAO,eAEZ7B,KAAKyuC,OAAS,EAEdzuC,KAAKu9D,OAAS,KAEdv9D,KAAKgwC,QAAU,GAAIzB,IACnBvuC,KAAKgwC,QAAQ7zB,OAAOxK,OAAQ,GAC5B3R,KAAKgwC,QAAQ5sC,kBAAmB,EAEhCpD,KAAKkwC,QAAU,GAAI3B,IACnBvuC,KAAKkwC,QAAQ/zB,OAAOxK,OAAQ,GAC5B3R,KAAKkwC,QAAQ9sC,kBAAmB,EAiFjC,QAASo6D,IAAY3oD,EAAMC,EAAK2oD,GAE/Bp7C,GAAS3d,KAAM1E,MAEfA,KAAK6B,KAAO,YAEZ,IAEI67D,GAAW,GAAInvB,IAFT,GAAa,EAE4B15B,EAAMC,EACzD4oD,GAAS19C,GAAGnY,IAAK,GAAK,EAAG,GACzB61D,EAASj+C,OAAQ,GAAIte,GAAS,EAAG,EAAG,IACpCnB,KAAK+f,IAAK29C,EAEV,IAAIC,GAAW,GAAIpvB,IAPT,GAAa,EAO4B15B,EAAMC,EACzD6oD,GAAS39C,GAAGnY,IAAK,GAAK,EAAG,GACzB81D,EAASl+C,OAAQ,GAAIte,IAAW,EAAG,EAAG,IACtCnB,KAAK+f,IAAK49C,EAEV,IAAIC,GAAW,GAAIrvB,IAZT,GAAa,EAY4B15B,EAAMC,EACzD8oD,GAAS59C,GAAGnY,IAAK,EAAG,EAAG,GACvB+1D,EAASn+C,OAAQ,GAAIte,GAAS,EAAG,EAAG,IACpCnB,KAAK+f,IAAK69C,EAEV,IAAIC,GAAW,GAAItvB,IAjBT,GAAa,EAiB4B15B,EAAMC,EACzD+oD,GAAS79C,GAAGnY,IAAK,EAAG,GAAK,GACzBg2D,EAASp+C,OAAQ,GAAIte,GAAS,GAAK,EAAG,IACtCnB,KAAK+f,IAAK89C,EAEV,IAAIC,GAAW,GAAIvvB,IAtBT,GAAa,EAsB4B15B,EAAMC,EACzDgpD,GAAS99C,GAAGnY,IAAK,GAAK,EAAG,GACzBi2D,EAASr+C,OAAQ,GAAIte,GAAS,EAAG,EAAG,IACpCnB,KAAK+f,IAAK+9C,EAEV,IAAIC,GAAW,GAAIxvB,IA3BT,GAAa,EA2B4B15B,EAAMC,EACzDipD,GAAS/9C,GAAGnY,IAAK,GAAK,EAAG,GACzBk2D,EAASt+C,OAAQ,GAAIte,GAAS,EAAG,GAAK,IACtCnB,KAAK+f,IAAKg+C,EAEV,IAAI95D,IAAYrC,OAAQ8/B,GAAWhgC,UAAWkB,GAAcjB,UAAWiB,GAEvE5C,MAAK2/B,aAAe,GAAIl7B,GAAuBg5D,EAAgBA,EAAgBx5D,GAC/EjE,KAAK2/B,aAAat7B,QAAQ9B,KAAO,aAEjCvC,KAAK4c,OAAS,SAAW1W,EAAUyJ,GAEb,OAAhB3P,KAAK4iB,QAAkB5iB,KAAK0f,mBAEjC,IAAIigB,GAAe3/B,KAAK2/B,aACpBr8B,EAAkBq8B,EAAat7B,QAAQf,eAE3Cq8B,GAAat7B,QAAQf,iBAAkB,EAEvCq8B,EAAah7B,eAAiB,EAC9BuB,EAASuJ,OAAQE,EAAO+tD,EAAU/9B,GAElCA,EAAah7B,eAAiB,EAC9BuB,EAASuJ,OAAQE,EAAOguD,EAAUh+B,GAElCA,EAAah7B,eAAiB,EAC9BuB,EAASuJ,OAAQE,EAAOiuD,EAAUj+B,GAElCA,EAAah7B,eAAiB,EAC9BuB,EAASuJ,OAAQE,EAAOkuD,EAAUl+B,GAElCA,EAAah7B,eAAiB,EAC9BuB,EAASuJ,OAAQE,EAAOmuD,EAAUn+B,GAElCA,EAAat7B,QAAQf,gBAAkBA,EAEvCq8B,EAAah7B,eAAiB,EAC9BuB,EAASuJ,OAAQE,EAAOouD,EAAUp+B,GAElCz5B,EAAS0Z,gBAAiB,OAI3B5f,KAAK6f,MAAQ,SAAW3Z,EAAU2I,EAAO+B,EAAOy3B,GAI/C,IAAM,GAFF1I,GAAe3/B,KAAK2/B,aAEd35B,EAAI,EAAGA,EAAI,EAAGA,IAEvB25B,EAAah7B,eAAiBqB,EAC9BE,EAAS0Z,gBAAiB+f,GAE1Bz5B,EAAS2Z,MAAOhR,EAAO+B,EAAOy3B,EAI/BniC,GAAS0Z,gBAAiB,OAa5B,QAASo+C,MAER37C,GAAS3d,KAAM1E,MAEfA,KAAK6B,KAAO,gBAEZ7B,KAAK8T,QAAUmqD,GAAalqD,aAE5B/T,KAAKk+D,KAAOl+D,KAAK8T,QAAQqqD,aACzBn+D,KAAKk+D,KAAKE,QAASp+D,KAAK8T,QAAQuqD,aAEhCr+D,KAAK21B,OAAS,KAiHf,QAAS2oC,IAAOC,GAEfl8C,GAAS3d,KAAM1E,MAEfA,KAAK6B,KAAO,QAEZ7B,KAAK8T,QAAUyqD,EAASzqD,QAExB9T,KAAKk+D,KAAOl+D,KAAK8T,QAAQqqD,aACzBn+D,KAAKk+D,KAAKE,QAASG,EAASC,YAE5Bx+D,KAAKy+D,UAAW,EAEhBz+D,KAAKygB,OAAS,KACdzgB,KAAKy6C,MAAO,EACZz6C,KAAK0+D,UAAY,EACjB1+D,KAAKgD,OAAS,EACdhD,KAAK2+D,aAAe,EACpB3+D,KAAK4+D,WAAY,EACjB5+D,KAAK6+D,oBAAqB,EAC1B7+D,KAAK8+D,WAAa,QAElB9+D,KAAK++D,WAwRN,QAASC,IAAiBT,GAEzBD,GAAM55D,KAAM1E,KAAMu+D,GAElBv+D,KAAKi/D,OAASj/D,KAAK8T,QAAQorD,eAC3Bl/D,KAAKi/D,OAAOb,QAASp+D,KAAKk+D,MAqF3B,QAASiB,IAAeC,EAAOC,GAE9Br/D,KAAKs/D,SAAWF,EAAMtrD,QAAQyrD,iBAC9Bv/D,KAAKs/D,SAASD,YAAsBn+D,KAAZm+D,EAAwBA,EAAU,KAE1Dr/D,KAAK8E,KAAO,GAAIqc,YAAYnhB,KAAKs/D,SAASE,mBAE1CJ,EAAMK,YAAYrB,QAASp+D,KAAKs/D,UAwCjC,QAASI,IAAeC,EAASC,EAAU3H,GAE1Cj4D,KAAK2/D,QAAUA,EACf3/D,KAAKi4D,UAAYA,CAEjB,IACC4H,GADGx/C,EAAaM,YAGjB,QAASi/C,GAER,IAAK,aACJC,EAAc7/D,KAAK8/D,MACnB,MAED,KAAK,SACL,IAAK,OACJz/C,EAAaxD,MACbgjD,EAAc7/D,KAAK+/D,OACnB,MAED,SACCF,EAAc7/D,KAAKggE,MAIrBhgE,KAAKygB,OAAS,GAAIJ,GAAwB,EAAZ43C,GAY9Bj4D,KAAKigE,iBAAmBJ,EAExB7/D,KAAKkgE,iBAAmB,EAExBlgE,KAAKmgE,SAAW,EAChBngE,KAAKogE,eAAiB,EAmKvB,QAASC,IAAWC,EAAa71D,EAAM81D,GAEtC,GAAIC,GAAaD,GAAsBE,GAAgBC,eAAgBj2D,EAEvEzK,MAAK2gE,aAAeL,EACpBtgE,KAAK4gE,UAAYN,EAAYO,WAAYp2D,EAAM+1D,GA4DhD,QAASC,IAAiBK,EAAUr2D,EAAM+1D,GAEzCxgE,KAAKyK,KAAOA,EACZzK,KAAKwgE,WAAaA,GAAcC,GAAgBC,eAAgBj2D,GAEhEzK,KAAK+gE,KAAON,GAAgBO,SAAUF,EAAU9gE,KAAKwgE,WAAWS,WAAcH,EAE9E9gE,KAAK8gE,SAAWA,EAqqBjB,QAASI,MAERlhE,KAAKoC,KAAOC,GAAMC,eAGlBtC,KAAKyZ,SAAWoD,MAAMskD,UAAUtZ,MAAMnjD,KAAMnE,WAE5CP,KAAKohE,gBAAkB,CAGvB,IAAIl7C,KACJlmB,MAAKqhE,eAAiBn7C,CAEtB,KAAM,GAAIlgB,GAAI,EAAGL,EAAIpF,UAAUC,OAAQwF,IAAML,IAAMK,EAElDkgB,EAAS3lB,UAAWyF,GAAI5D,MAAS4D,CAIlChG,MAAKshE,UACLthE,KAAKuhE,gBACLvhE,KAAK4gE,aACL5gE,KAAKwhE,yBAEL,IAAI9lD,GAAQ1b,IAEZA,MAAKyhE,OAEJrpB,SACCspB,YAEC,MAAOhmD,GAAMjC,SAASjZ,QAGvBmhE,YAEC,MAAO3hE,MAAK0hE,MAAQhmD,EAAM0lD,kBAI5BQ,wBAEC,MAAOlmD,GAAMklD,UAAUpgE,SA0T1B,QAASqhE,IAAiBC,EAAOC,EAAMC,GAEtChiE,KAAKiiE,OAASH,EACd9hE,KAAKkiE,MAAQH,EACb/hE,KAAKmiE,WAAaH,GAAa,IAW/B,KAAM,GATFjI,GAASgI,EAAKhI,OACjBqI,EAAUrI,EAAOv5D,OACjB6hE,EAAe,GAAIxlD,OAAOulD,GAEvBE,GACHC,YAAaC,GACbC,UAAWD,IAGFx8D,EAAI,EAAGA,IAAMo8D,IAAYp8D,EAAI,CAEtC,GAAI08D,GAAc3I,EAAQ/zD,GAAI28D,kBAAmB,KACjDN,GAAcr8D,GAAM08D,EACpBA,EAAYE,SAAWN,EAIxBtiE,KAAK6iE,qBAAuBP,EAE5BtiE,KAAK8iE,cAAgBT,EAGrBriE,KAAK+iE,kBAAoB,GAAIlmD,OAAOulD,GAEpCpiE,KAAKgjE,YAAc,KACnBhjE,KAAKijE,kBAAoB,KAEzBjjE,KAAKkjE,sBAAwB,KAC7BljE,KAAKmjE,mBAAqB,KAE1BnjE,KAAKy6C,KAAO2oB,GACZpjE,KAAKqjE,YAAe,EAIpBrjE,KAAKsjE,WAAa,KAIlBtjE,KAAK06C,KAAO,EAEZ16C,KAAKujE,UAAY,EACjBvjE,KAAKwjE,oBAAsB,EAE3BxjE,KAAKyjE,OAAS,EACdzjE,KAAK0jE,iBAAmB,EAExB1jE,KAAK2jE,YAAc53D,EAAAA,EAEnB/L,KAAK4jE,QAAS,EACd5jE,KAAKme,SAAU,EAEfne,KAAK6jE,mBAAqB,EAE1B7jE,KAAK8jE,kBAAoB,EACzB9jE,KAAK+jE,gBAAkB,EA0lBxB,QAASC,IAAgBC,GAExBjkE,KAAKkkE,MAAQD,EACbjkE,KAAKmkE,qBACLnkE,KAAKokE,WAAa,EAElBpkE,KAAK06C,KAAO,EAEZ16C,KAAKujE,UAAY,EAguBlB,QAASc,IAASniE,GAEK,gBAAVA,KAEXzB,QAAQqa,KAAM,sDACd5Y,EAAQ3B,UAAW,IAIpBP,KAAKkC,MAAQA,EAcd,QAASoiE,MAER/9C,GAAe7hB,KAAM1E,MAErBA,KAAK6B,KAAO,0BACZ7B,KAAK+uB,sBAAoB7tB,GAgC1B,QAASqjE,IAA4BC,EAAmBp/C,EAAUpiB,EAAQqiB,GAEzErlB,KAAKoC,KAAOC,GAAMC,eAElBtC,KAAK8E,KAAO0/D,EACZxkE,KAAKolB,SAAWA,EAChBplB,KAAKgD,OAASA,EAEdhD,KAAKqlB,YAA4B,IAAfA,EAkInB,QAASo/C,IAAmBl/D,EAAOw0C,GAElC/5C,KAAKoC,KAAOC,GAAMC,eAElBtC,KAAKuF,MAAQA,EACbvF,KAAK+5C,OAASA,EACd/5C,KAAKwhB,UAAkBtgB,KAAVqE,EAAsBA,EAAM/E,OAASu5C,EAAS,EAE3D/5C,KAAKugB,SAAU,EACfvgB,KAAKuhB,aAAgBve,OAAQ,EAAGwe,OAAS,GAEzCxhB,KAAK0gB,iBAAmB,aAExB1gB,KAAK2D,QAAU,EA+FhB,QAAS+gE,IAA4Bn/D,EAAOw0C,EAAQlR,GAEnD47B,GAAkB//D,KAAM1E,KAAMuF,EAAOw0C,GAErC/5C,KAAK6oC,iBAAmBA,GAAoB,EA0B7C,QAAS87B,IAA0Bp/D,EAAO6f,EAAUyjB,GAEnD1jB,GAAgBzgB,KAAM1E,KAAMuF,EAAO6f,GAEnCplB,KAAK6oC,iBAAmBA,GAAoB,EA4B7C,QAAS+7B,IAAWh6C,EAAQC,EAAWhW,EAAMC,GAE5C9U,KAAK6kE,IAAM,GAAIl6C,IAAKC,EAAQC,GAG5B7qB,KAAK6U,KAAOA,GAAQ,EACpB7U,KAAK8U,IAAMA,GAAO/I,EAAAA,EAElB/L,KAAK8kE,QACJ75C,QACAw9B,QACAhB,OACAmB,QAAUmc,UAAW,GACrBvd,WAGDxlD,OAAO+gB,iBAAkB/iB,KAAK8kE,QAC7BE,YACCrjD,IAAK,WAGJ,MADAlhB,SAAQqa,KAAM,yEACP9a,KAAK4oD,WAQhB,QAASqc,IAAS9wD,EAAGhN,GAEpB,MAAOgN,GAAEic,SAAWjpB,EAAEipB,SAIvB,QAAS80C,IAAiBtrD,EAAQurD,EAAWC,EAAYC,GAExD,IAAwB,IAAnBzrD,EAAOxE,UAEZwE,EAAO0rD,QAASH,EAAWC,IAER,IAAdC,GAIJ,IAAM,GAFF7nD,GAAW5D,EAAO4D,SAEZxX,EAAI,EAAG8K,EAAI0M,EAAShd,OAAQwF,EAAI8K,EAAG9K,IAE5Ck/D,GAAiB1nD,EAAUxX,GAAKm/D,EAAWC,GAAY,GAiF1D,QAASG,IAAOC,GAEfxlE,KAAKwlE,cAA4BtkE,KAAdskE,GAA4BA,EAE/CxlE,KAAK0+D,UAAY,EACjB1+D,KAAKylE,QAAU,EACfzlE,KAAK0lE,YAAc,EAEnB1lE,KAAK2lE,SAAU,EAqEhB,QAASC,IAAWjtD,EAAQs5C,EAAKqC,GAMhC,MAJAt0D,MAAK2Y,WAAsBzX,KAAXyX,EAAyBA,EAAS,EAClD3Y,KAAKiyD,QAAgB/wD,KAAR+wD,EAAsBA,EAAM,EACzCjyD,KAAKs0D,UAAoBpzD,KAAVozD,EAAwBA,EAAQ,EAExCt0D,KAuER,QAAS6lE,IAAaltD,EAAQ27C,EAAOl0D,GAMpC,MAJAJ,MAAK2Y,WAAsBzX,KAAXyX,EAAyBA,EAAS,EAClD3Y,KAAKs0D,UAAoBpzD,KAAVozD,EAAwBA,EAAQ,EAC/Ct0D,KAAKI,MAAYc,KAANd,EAAoBA,EAAI,EAE5BJ,KAgDR,QAAS8lE,IAAuB3wD,GAE/BkN,GAAS3d,KAAM1E,MAEfA,KAAKmV,SAAWA,EAChBnV,KAAKyP,OAAS,aAcf,QAASs2D,IAAqBnsD,EAAQxQ,EAAM48D,EAAKjqD,GAEhD/b,KAAK4Z,OAASA,EAEd5Z,KAAKoJ,SAAkBlI,KAATkI,EAAuBA,EAAO,CAE5C,IAAIyF,OAAkB3N,KAAR8kE,EAAsBA,EAAM,SAEtCjiE,MAAwB7C,KAAd6a,EAA4BA,EAAY,EAIlDkqD,EAAW,EAEXC,EAAclmE,KAAK4Z,OAAOK,QAEzBisD,IAAeA,EAAYtrD,WAE/BqrD,EAAsC,EAA3BC,EAAY55D,MAAM9L,OAElB0lE,GAAeA,EAAYxrD,mBAEtCurD,EAAWC,EAAY73D,WAAWwK,OAAO2I,MAM1C,IAAIvH,GAAW,GAAIsM,IAEf4/C,EAAY,GAAIpgD,IAAmC,EAAXkgD,EAAe,EAAG,EAE9DhsD,GAAS2O,aAAc,WAAYu9C,GAEnCzd,GAAahkD,KAAM1E,KAAMia,EAAU,GAAIwiB,KAAqB5tB,MAAOA,EAAOkN,UAAWhY,KAIrF/D,KAAKoD,kBAAmB,EAExBpD,KAAK4c,SAyGN,QAASwpD,IAAiBxnD,EAAO/P,GAEhCwT,GAAS3d,KAAM1E,MAEfA,KAAK4e,MAAQA,EACb5e,KAAK4e,MAAMc,oBAEX1f,KAAKqD,OAASub,EAAM5N,YACpBhR,KAAKoD,kBAAmB,EAExBpD,KAAK6O,MAAQA,CAYb,KAAM,GAVFoL,GAAW,GAAIsM,IAEf4/C,GACH,EAAG,EAAG,EAAI,EAAG,EAAG,EAChB,EAAG,EAAG,EAAI,EAAG,EAAG,EAChB,EAAG,EAAG,GAAK,EAAG,EAAG,EACjB,EAAG,EAAG,EAAI,EAAG,EAAG,EAChB,EAAG,EAAG,EAAI,GAAK,EAAG,GAGTngE,EAAI,EAAGmM,EAAI,EAAWnM,EAAJ,GAAWA,IAAMmM,IAAO,CAEnD,GAAI8G,GAAOjT,EAFgB,GAENyiB,KAAK6jC,GAAK,EAC3BpzC,EAAO/G,EAHgB,GAGNsW,KAAK6jC,GAAK,CAE/B6Z,GAAU57D,KACTke,KAAKyJ,IAAKjZ,GAAMwP,KAAK0lC,IAAKl1C,GAAM,EAChCwP,KAAKyJ,IAAKhZ,GAAMuP,KAAK0lC,IAAKj1C,GAAM,GAKlCe,EAAS2O,aAAc,WAAY,GAAI7C,IAAwBogD,EAAW,GAE1E,IAAIhxD,GAAW,GAAIsnB,KAAqB9nB,KAAK,GAE7C3U,MAAKqmE,KAAO,GAAI3d,IAAczuC,EAAU9E,GACxCnV,KAAK+f,IAAK/f,KAAKqmE,MAEfrmE,KAAK4c,SAuDN,QAAS0pD,IAAa1sD,GAErB,GAAI2sD,KAEC3sD,IAAUA,EAAO4sD,QAErBD,EAASh8D,KAAMqP,EAIhB,KAAM,GAAI5T,GAAI,EAAGA,EAAI4T,EAAO4D,SAAShd,OAAQwF,IAE5CugE,EAASh8D,KAAKqiC,MAAO25B,EAAUD,GAAa1sD,EAAO4D,SAAUxX,IAI9D,OAAOugE,GAIR,QAASE,IAAgB7sD,GAYxB,IAAM,GAVF6hB,GAAQ6qC,GAAa1sD,GAErBK,EAAW,GAAIsM,IAEfla,KACA+X,KAEAsiD,EAAS,GAAIh7D,GAAO,EAAG,EAAG,GAC1Bi7D,EAAS,GAAIj7D,GAAO,EAAG,EAAG,GAEpB1F,EAAI,EAAGA,EAAIy1B,EAAMj7B,OAAQwF,IAAO,CAEzC,GAAI4gE,GAAOnrC,EAAOz1B,EAEb4gE,GAAKhkD,QAAUgkD,EAAKhkD,OAAO4jD,SAE/Bn6D,EAAS9B,KAAM,EAAG,EAAG,GACrB8B,EAAS9B,KAAM,EAAG,EAAG,GACrB6Z,EAAO7Z,KAAMm8D,EAAO9gE,EAAG8gE,EAAOx/D,EAAGw/D,EAAOv/D,GACxCid,EAAO7Z,KAAMo8D,EAAO/gE,EAAG+gE,EAAOz/D,EAAGy/D,EAAOx/D,IAM1C8S,EAAS2O,aAAc,WAAY,GAAI7C,IAAwB1Z,EAAU,IACzE4N,EAAS2O,aAAc,QAAS,GAAI7C,IAAwB3B,EAAQ,GAEpE,IAAIjP,GAAW,GAAIsnB,KAAqBlmB,aAAcswD,GAAcjxD,WAAW,EAAOC,YAAY,EAAOY,aAAa,GAEtHiyC,IAAahkD,KAAM1E,KAAMia,EAAU9E,GAEnCnV,KAAKikE,KAAOrqD,EACZ5Z,KAAKy7B,MAAQA,EAEbz7B,KAAKqD,OAASuW,EAAO5I,YACrBhR,KAAKoD,kBAAmB,EAwDzB,QAAS0jE,IAAkBloD,EAAOmoD,EAAYl4D,GAE7C7O,KAAK4e,MAAQA,EACb5e,KAAK4e,MAAMc,oBAEX1f,KAAK6O,MAAQA,CAEb,IAAIoL,GAAW,GAAI62C,IAAsBiW,EAAY,EAAG,GACpD5xD,EAAW,GAAIgU,KAAqBjR,WAAW,EAAMvD,KAAK,GAE9DsW,IAAKvmB,KAAM1E,KAAMia,EAAU9E,GAE3BnV,KAAKqD,OAASrD,KAAK4e,MAAM5N,YACzBhR,KAAKoD,kBAAmB,EAExBpD,KAAK4c,SAwEN,QAASoqD,IAAqBpoD,EAAO/P,GAEpCwT,GAAS3d,KAAM1E,MAEfA,KAAK4e,MAAQA,EACb5e,KAAK4e,MAAMc,oBAEX1f,KAAKqD,OAASub,EAAM5N,YACpBhR,KAAKoD,kBAAmB,EAExBpD,KAAK6O,MAAQA,CAEb,IAAIsG,GAAW,GAAIsnB,KAAqB9nB,KAAK,IAEzCsF,EAAW,GAAIsM,GAEnBtM,GAAS2O,aAAc,WAAY,GAAIzD,IAAiB,GAAIrf,cAAc,IAAS,IAEnF9F,KAAKinE,KAAO,GAAIxe,IAAMxuC,EAAU9E,GAChCnV,KAAK+f,IAAK/f,KAAKinE,MAGfjnE,KAAK4c,SAoDN,QAASsqD,IAAuBtoD,EAAOxV,EAAMyF,GAE5CwT,GAAS3d,KAAM1E,MAEfA,KAAK4e,MAAQA,EACb5e,KAAK4e,MAAMc,oBAEX1f,KAAKqD,OAASub,EAAM5N,YACpBhR,KAAKoD,kBAAmB,EAExBpD,KAAK6O,MAAQA,CAEb,IAAIoL,GAAW,GAAI6yC,IAA0B1jD,EAC7C6Q,GAASktD,QAAmB,GAAV1+C,KAAK6jC,IAEvBtsD,KAAKmV,SAAW,GAAIgU,KAAqBjR,WAAW,EAAMvD,KAAK,QAC3CzT,KAAflB,KAAK6O,QAAsB7O,KAAKmV,SAASoB,aAAeswD,GAE7D,IAAI5zD,GAAWgH,EAASmtD,aAAc,YAClChjD,EAAS,GAAIte,cAA+B,EAAjBmN,EAASuO,MAExCvH,GAAS2O,aAAc,QAAS,GAAIzD,IAAiBf,EAAQ,IAE7DpkB,KAAK+f,IAAK,GAAIkL,IAAMhR,EAAUja,KAAKmV,WAEnCnV,KAAK4c,SA0DN,QAASyqD,IAAYj+D,EAAMk+D,EAAWZ,EAAQC,GAE7Cv9D,EAAOA,GAAQ,GACfk+D,EAAYA,GAAa,GACzBZ,EAAS,GAAIh7D,OAAkBxK,KAAXwlE,EAAuBA,EAAS,SACpDC,EAAS,GAAIj7D,OAAkBxK,KAAXylE,EAAuBA,EAAS,QAQpD,KAAM,GANFzjE,GAASokE,EAAY,EACrBC,EAAOn+D,EAAOk+D,EACdE,EAAWp+D,EAAO,EAElBiD,KAAe+X,KAETpe,EAAI,EAAGmM,EAAI,EAAG6K,GAAMwqD,EAAUxhE,GAAKshE,EAAWthE,IAAMgX,GAAKuqD,EAAO,CAEzEl7D,EAAS9B,MAAQi9D,EAAU,EAAGxqD,EAAGwqD,EAAU,EAAGxqD,GAC9C3Q,EAAS9B,KAAMyS,EAAG,GAAKwqD,EAAUxqD,EAAG,EAAGwqD,EAEvC,IAAI34D,GAAQ7I,IAAM9C,EAASwjE,EAASC,CAEpC93D,GAAM9I,QAASqe,EAAQjS,GAAKA,GAAK,EACjCtD,EAAM9I,QAASqe,EAAQjS,GAAKA,GAAK,EACjCtD,EAAM9I,QAASqe,EAAQjS,GAAKA,GAAK,EACjCtD,EAAM9I,QAASqe,EAAQjS,GAAKA,GAAK,EAIlC,GAAI8H,GAAW,GAAIsM,GACnBtM,GAAS2O,aAAc,WAAY,GAAI7C,IAAwB1Z,EAAU,IACzE4N,EAAS2O,aAAc,QAAS,GAAI7C,IAAwB3B,EAAQ,GAEpE,IAAIjP,GAAW,GAAIsnB,KAAqBlmB,aAAcswD,IAEtDne,IAAahkD,KAAM1E,KAAMia,EAAU9E,GAapC,QAASsyD,IAAiB9uD,EAAQ+uD,EAASC,EAASL,EAAWZ,EAAQC,GAEtEhuD,EAASA,GAAU,GACnB+uD,EAAUA,GAAW,GACrBC,EAAUA,GAAW,EACrBL,EAAYA,GAAa,GACzBZ,EAAS,GAAIh7D,OAAkBxK,KAAXwlE,EAAuBA,EAAS,SACpDC,EAAS,GAAIj7D,OAAkBxK,KAAXylE,EAAuBA,EAAS,QAEpD,IAGIxmE,GAAGS,EACH4F,EAAGR,EAAGmM,EAAGvM,EAAGiJ,EAJZxC,KACA+X,IAOJ,KAAMpe,EAAI,EAAGA,GAAK0hE,EAAS1hE,IAE1BQ,EAAMR,EAAI0hE,GAAwB,EAAVj/C,KAAK6jC,IAE7BnsD,EAAIsoB,KAAK0lC,IAAK3nD,GAAMmS,EACpB/X,EAAI6nB,KAAKyJ,IAAK1rB,GAAMmS,EAEpBtM,EAAS9B,KAAM,EAAG,EAAG,GACrB8B,EAAS9B,KAAMpK,EAAG,EAAGS,GAErBiO,EAAc,EAAJ7I,EAAU0gE,EAASC,EAE7BviD,EAAO7Z,KAAMsE,EAAMjJ,EAAGiJ,EAAM3H,EAAG2H,EAAM1H,GACrCid,EAAO7Z,KAAMsE,EAAMjJ,EAAGiJ,EAAM3H,EAAG2H,EAAM1H,EAMtC,KAAMnB,EAAI,EAAGA,GAAK2hE,EAAS3hE,IAM1B,IAJA6I,EAAc,EAAJ7I,EAAU0gE,EAASC,EAE7B/gE,EAAI+S,EAAWA,EAASgvD,EAAU3hE,EAE5BmM,EAAI,EAAGA,EAAIm1D,EAAWn1D,IAI3B3L,EAAM2L,EAAIm1D,GAA0B,EAAV7+C,KAAK6jC,IAE/BnsD,EAAIsoB,KAAK0lC,IAAK3nD,GAAMZ,EACpBhF,EAAI6nB,KAAKyJ,IAAK1rB,GAAMZ,EAEpByG,EAAS9B,KAAMpK,EAAG,EAAGS,GACrBwjB,EAAO7Z,KAAMsE,EAAMjJ,EAAGiJ,EAAM3H,EAAG2H,EAAM1H,GAIrCX,GAAQ2L,EAAI,GAAMm1D,GAA0B,EAAV7+C,KAAK6jC,IAEvCnsD,EAAIsoB,KAAK0lC,IAAK3nD,GAAMZ,EACpBhF,EAAI6nB,KAAKyJ,IAAK1rB,GAAMZ,EAEpByG,EAAS9B,KAAMpK,EAAG,EAAGS,GACrBwjB,EAAO7Z,KAAMsE,EAAMjJ,EAAGiJ,EAAM3H,EAAG2H,EAAM1H,EAMvC,IAAI8S,GAAW,GAAIsM,GACnBtM,GAAS2O,aAAc,WAAY,GAAI7C,IAAwB1Z,EAAU,IACzE4N,EAAS2O,aAAc,QAAS,GAAI7C,IAAwB3B,EAAQ,GAEpE,IAAIjP,GAAW,GAAIsnB,KAAqBlmB,aAAcswD,IAEtDne,IAAahkD,KAAM1E,KAAMia,EAAU9E,GAYpC,QAASyyD,IAAmBhuD,EAAQxQ,EAAM48D,EAAKjqD,GAI9C/b,KAAK4Z,OAASA,EAEd5Z,KAAKoJ,SAAkBlI,KAATkI,EAAuBA,EAAO,CAE5C,IAAIyF,OAAkB3N,KAAR8kE,EAAsBA,EAAM,SAEtCjiE,MAAwB7C,KAAd6a,EAA4BA,EAAY,EAIlDkqD,EAAW,EAEXC,EAAclmE,KAAK4Z,OAAOK,QAEzBisD,IAAeA,EAAYtrD,WAE/BqrD,EAAWC,EAAY55D,MAAM9L,OAI7BC,QAAQqa,KAAM,qGAMf,IAAIb,GAAW,GAAIsM,IAEf4/C,EAAY,GAAIpgD,IAAmC,EAAXkgD,EAAe,EAAG,EAE9DhsD,GAAS2O,aAAc,WAAYu9C,GAEnCzd,GAAahkD,KAAM1E,KAAMia,EAAU,GAAIwiB,KAAqB5tB,MAAOA,EAAOkN,UAAWhY,KAIrF/D,KAAKoD,kBAAmB,EACxBpD,KAAK4c,SAqEN,QAASirD,IAAwBjpD,EAAOxV,EAAMyF,GAE7CwT,GAAS3d,KAAM1E,MAEfA,KAAK4e,MAAQA,EACb5e,KAAK4e,MAAMc,oBAEX1f,KAAKqD,OAASub,EAAM5N,YACpBhR,KAAKoD,kBAAmB,EAExBpD,KAAK6O,MAAQA,MAEC3N,KAATkI,IAAqBA,EAAO,EAEjC,IAAI6Q,GAAW,GAAIsM,GACnBtM,GAAS2O,aAAc,WAAY,GAAI7C,MACpC3c,EAAMA,EAAM,EACdA,EAAMA,EAAM,EACZA,GAAQA,EAAM,GACZA,GAAQA,EAAM,GACdA,EAAMA,EAAM,GACZ,GAEH,IAAI+L,GAAW,GAAIsnB,KAAqB9nB,KAAK,GAE7C3U,MAAK8nE,WAAa,GAAIrf,IAAMxuC,EAAU9E,GACtCnV,KAAK+f,IAAK/f,KAAK8nE,YAEf7tD,EAAW,GAAIsM,IACftM,EAAS2O,aAAc,WAAY,GAAI7C,KAA0B,EAAG,EAAG,EAAG,EAAG,EAAG,GAAK,IAErF/lB,KAAK+nE,WAAa,GAAItf,IAAMxuC,EAAU9E,GACtCnV,KAAK+f,IAAK/f,KAAK+nE,YAEf/nE,KAAK4c,SA2DN,QAASorD,IAAcp4D,GAiEtB,QAASq4D,GAAS9zD,EAAGhN,EAAG0H,GAEvBq5D,EAAU/zD,EAAGtF,GACbq5D,EAAU/gE,EAAG0H,GAId,QAASq5D,GAAUn+D,EAAI8E,GAEtBxC,EAAS9B,KAAM,EAAG,EAAG,GACrB6Z,EAAO7Z,KAAMsE,EAAMjJ,EAAGiJ,EAAM3H,EAAG2H,EAAM1H,OAEbjG,KAAnBinE,EAAUp+D,KAEdo+D,EAAUp+D,OAIXo+D,EAAUp+D,GAAKQ,KAAQ8B,EAAS7L,OAAS,EAAM,GAjFhD,GAAIyZ,GAAW,GAAIsM,IACfpR,EAAW,GAAIsnB,KAAqB5tB,MAAO,SAAU0H,aAAc6xD,KAEnE/7D,KACA+X,KAEA+jD,KAIAE,EAAe,GAAI38D,GAAO,UAC1B48D,EAAY,GAAI58D,GAAO,UACvB68D,EAAU,GAAI78D,GAAO,OACrB88D,EAAc,GAAI98D,GAAO,UACzB+8D,EAAa,GAAI/8D,GAAO,QAI5Bu8D,GAAS,KAAM,KAAMI,GACrBJ,EAAS,KAAM,KAAMI,GACrBJ,EAAS,KAAM,KAAMI,GACrBJ,EAAS,KAAM,KAAMI,GAIrBJ,EAAS,KAAM,KAAMI,GACrBJ,EAAS,KAAM,KAAMI,GACrBJ,EAAS,KAAM,KAAMI,GACrBJ,EAAS,KAAM,KAAMI,GAIrBJ,EAAS,KAAM,KAAMI,GACrBJ,EAAS,KAAM,KAAMI,GACrBJ,EAAS,KAAM,KAAMI,GACrBJ,EAAS,KAAM,KAAMI,GAIrBJ,EAAS,IAAK,KAAMK,GACpBL,EAAS,IAAK,KAAMK,GACpBL,EAAS,IAAK,KAAMK,GACpBL,EAAS,IAAK,KAAMK,GAIpBL,EAAS,KAAM,KAAMM,GACrBN,EAAS,KAAM,KAAMM,GACrBN,EAAS,KAAM,KAAMM,GAIrBN,EAAS,IAAK,IAAKO,GACnBP,EAAS,IAAK,IAAKQ,GAInBR,EAAS,MAAO,MAAOQ,GACvBR,EAAS,MAAO,MAAOQ,GAEvBR,EAAS,MAAO,MAAOQ,GACvBR,EAAS,MAAO,MAAOQ,GAwBvBxuD,EAAS2O,aAAc,WAAY,GAAI7C,IAAwB1Z,EAAU,IACzE4N,EAAS2O,aAAc,QAAS,GAAI7C,IAAwB3B,EAAQ,IAEpEskC,GAAahkD,KAAM1E,KAAMia,EAAU9E,GAEnCnV,KAAK4P,OAASA,EACT5P,KAAK4P,OAAOsP,wBAAyBlf,KAAK4P,OAAOsP,yBAEtDlf,KAAKqD,OAASuM,EAAOoB,YACrBhR,KAAKoD,kBAAmB,EAExBpD,KAAKmoE,SAAWA,EAEhBnoE,KAAK4c,SA8FN,QAAS8rD,IAAW9uD,EAAQ/K,GAE3B7O,KAAK4Z,OAASA,MAEC1Y,KAAV2N,IAAsBA,EAAQ,SAEnC,IAAIqX,GAAU,GAAI3Z,cAAe,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAClG45D,EAAY,GAAIrgE,cAAc,IAE9BmU,EAAW,GAAIsM,GACnBtM,GAAS0O,SAAU,GAAIxD,IAAiBe,EAAS,IACjDjM,EAAS2O,aAAc,WAAY,GAAIzD,IAAiBghD,EAAW,IAEnEzd,GAAahkD,KAAM1E,KAAMia,EAAU,GAAIwiB,KAAqB5tB,MAAOA,KAEnE7O,KAAKoD,kBAAmB,EAExBpD,KAAK4c,SA+EN,QAAS+rD,IAAYC,EAAK5C,GAEzBhmE,KAAK6B,KAAO,aAEZ7B,KAAK4oE,IAAMA,CAEX,IAAI/5D,OAAkB3N,KAAR8kE,EAAsBA,EAAM,SAEtC9/C,EAAU,GAAI3Z,cAAe,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAElG45D,GAAc,EAAG,EAAG,GAAK,EAAG,EAAG,GAAK,GAAK,EAAG,EAAG,GAAK,EAAG,EAAG,EAAG,GAAK,GAAK,EAAG,GAAK,GAAK,GAAK,GAAK,EAAG,GAAK,GAAK,GAE3GlsD,EAAW,GAAIsM,GAEnBtM,GAAS0O,SAAU,GAAIxD,IAAiBe,EAAS,IAEjDjM,EAAS2O,aAAc,WAAY,GAAI7C,IAAwBogD,EAAW,IAE1Ezd,GAAahkD,KAAM1E,KAAMia,EAAU,GAAIwiB,KAAqB5tB,MAAOA,KAEnE7O,KAAKia,SAAS4uD,wBA2Bf,QAASC,IAAaj2B,EAAOzpC,EAAM48D,GAElChmE,KAAK6B,KAAO,cAEZ7B,KAAK6yC,MAAQA,EAEb7yC,KAAKoJ,SAAkBlI,KAATkI,EAAuB,EAAIA,CAEzC,IAAIyF,OAAkB3N,KAAR8kE,EAAsBA,EAAM,SAEtCG,GAAc,GAAK,EAAG,GAAK,EAAG,EAAG,GAAK,GAAK,EAAG,EAAG,EAAG,EAAG,GAAK,EAAG,EAAG,GAAK,GAAK,EAAG,EAAG,GAAK,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAErHlsD,EAAW,GAAIsM,GACnBtM,GAAS2O,aAAc,WAAY,GAAI7C,IAAwBogD,EAAW,IAC1ElsD,EAAS4uD,wBAETpgB,GAAK/jD,KAAM1E,KAAMia,EAAU,GAAIwiB,KAAqB5tB,MAAOA,IAI3D,IAAIk6D,IAAe,EAAG,EAAG,GAAK,EAAG,EAAG,GAAK,GAAK,EAAG,EAAG,EAAG,EAAG,GAAK,GAAK,EAAG,EAAG,GAAK,EAAG,GAE9E1V,EAAY,GAAI9sC,GACpB8sC,GAAUzqC,aAAc,WAAY,GAAI7C,IAAwBgjD,EAAY,IAC5E1V,EAAUwV,wBAEV7oE,KAAK+f,IAAK,GAAIkL,IAAMooC,EAAW,GAAIlqC,KAAqBta,MAAOA,EAAOD,QAAS,GAAK6H,aAAa,EAAMZ,YAAY,MAwCpH,QAASmzD,IAAaC,EAAKr+C,EAAQpqB,EAAQqO,EAAOq6D,EAAYC,GAI7D9mD,GAAS3d,KAAM1E,UAEAkB,KAAV2N,IAAsBA,EAAQ,cACnB3N,KAAXV,IAAuBA,EAAS,OACjBU,KAAfgoE,IAA2BA,EAAa,GAAM1oE,OAChCU,KAAdioE,IAA0BA,EAAY,GAAMD,OAE3BhoE,KAAjBkoE,KAEJA,GAAe,GAAI7iD,IACnB6iD,GAAaxgD,aAAc,WAAY,GAAI7C,KAA0B,EAAG,EAAG,EAAG,EAAG,EAAG,GAAK,IAEzFsjD,GAAe,GAAIpV,IAAwB,EAAG,GAAK,EAAG,EAAG,GACzDoV,GAAaC,UAAW,GAAK,GAAK,IAInCtpE,KAAKiT,SAAS7B,KAAMwZ,GAEpB5qB,KAAKinE,KAAO,GAAIxe,IAAM2gB,GAAc,GAAI3sC,KAAqB5tB,MAAOA,KACpE7O,KAAKinE,KAAK7jE,kBAAmB,EAC7BpD,KAAK+f,IAAK/f,KAAKinE,MAEfjnE,KAAKqmE,KAAO,GAAIp7C,IAAMo+C,GAAc,GAAIlgD,KAAqBta,MAAOA,KACpE7O,KAAKqmE,KAAKjjE,kBAAmB,EAC7BpD,KAAK+f,IAAK/f,KAAKqmE,MAEfrmE,KAAKupE,aAAcN,GACnBjpE,KAAKwpE,UAAWhpE,EAAQ0oE,EAAYC,GAgErC,QAASM,IAAYrgE,GAEpBA,EAAOA,GAAQ,CAEf,IAAIiD,IACH,EAAG,EAAG,EAAGjD,EAAM,EAAG,EAClB,EAAG,EAAG,EAAG,EAAGA,EAAM,EAClB,EAAG,EAAG,EAAG,EAAG,EAAGA,GAGZgb,GACH,EAAG,EAAG,EAAG,EAAG,GAAK,EACjB,EAAG,EAAG,EAAG,GAAK,EAAG,EACjB,EAAG,EAAG,EAAG,EAAG,GAAK,GAGdnK,EAAW,GAAIsM,GACnBtM,GAAS2O,aAAc,WAAY,GAAI7C,IAAwB1Z,EAAU,IACzE4N,EAAS2O,aAAc,QAAS,GAAI7C,IAAwB3B,EAAQ,GAEpE,IAAIjP,GAAW,GAAIsnB,KAAqBlmB,aAAcswD,IAEtDne,IAAahkD,KAAM1E,KAAMia,EAAU9E,GA6BpC,QAASu0D,MAYR,QAASt9D,GAAMq/C,EAAIC,EAAIie,EAAIC,GAE1BC,EAAKpe,EACLqe,EAAKH,EACLI,GAAO,EAAIte,EAAK,EAAIC,EAAK,EAAIie,EAAKC,EAClCI,EAAK,EAAIve,EAAK,EAAIC,EAAKie,EAAKC,EAf7B,GAAIC,GAAK,EAAGC,EAAK,EAAGC,EAAK,EAAGC,EAAK,CAmBjC,QAECC,eAAgB,SAAWxe,EAAIC,EAAIC,EAAIue,EAAIC,GAE1C/9D,EAAMs/C,EAAIC,EAAIwe,GAAYxe,EAAKF,GAAM0e,GAAYD,EAAKxe,KAIvD0e,yBAA0B,SAAW3e,EAAIC,EAAIC,EAAIue,EAAIG,EAAKC,EAAKC,GAG9D,GAAIX,IAAOle,EAAKD,GAAO4e,GAAQ1e,EAAKF,IAAS4e,EAAMC,IAAU3e,EAAKD,GAAO4e,EACrExP,GAAOnP,EAAKD,GAAO4e,GAAQJ,EAAKxe,IAAS4e,EAAMC,IAAUL,EAAKve,GAAO4e,CAGzEX,IAAMU,EACNxP,GAAMwP,EAENl+D,EAAMs/C,EAAIC,EAAIie,EAAI9O,IAInB0P,KAAM,SAAWvd,GAEhB,GAAI6N,GAAK7N,EAAIA,CAEb,OAAO4c,GAAKC,EAAK7c,EAAI8c,EAAKjP,EAAKkP,GADtBlP,EAAK7N,KAgBjB,QAASwd,IAAkB97C,EAAQ4+B,EAAQmd,EAAWP,GAErD3O,GAAM92D,KAAM1E,MAEZA,KAAK6B,KAAO,mBAEZ7B,KAAK2uB,OAASA,MACd3uB,KAAKutD,OAASA,IAAU,EACxBvtD,KAAK0qE,UAAYA,GAAa,cAC9B1qE,KAAKmqE,QAAUA,GAAW,GAqH3B,QAASQ,IAAmB/P,EAAIC,EAAIc,EAAIe,GAEvClB,GAAM92D,KAAM1E,MAEZA,KAAK6B,KAAO,oBAEZ7B,KAAK46D,GAAKA,GAAM,GAAIz5D,GACpBnB,KAAK66D,GAAKA,GAAM,GAAI15D,GACpBnB,KAAK27D,GAAKA,GAAM,GAAIx6D,GACpBnB,KAAK08D,GAAKA,GAAM,GAAIv7D,GAsCrB,QAASypE,IAAuBhQ,EAAIC,EAAIc,GAEvCH,GAAM92D,KAAM1E,MAEZA,KAAK6B,KAAO,wBAEZ7B,KAAK46D,GAAKA,GAAM,GAAIz5D,GACpBnB,KAAK66D,GAAKA,GAAM,GAAI15D,GACpBnB,KAAK27D,GAAKA,GAAM,GAAIx6D,GAqCrB,QAAS0pE,IAAYhQ,EAAIc,GAExBH,GAAM92D,KAAM1E,MAEZA,KAAK6B,KAAO,aAEZ7B,KAAK66D,GAAKA,GAAM,GAAI15D,GACpBnB,KAAK27D,GAAKA,GAAM,GAAIx6D,GA+CrB,QAAS2pE,IAAU9O,EAAIC,EAAI8O,EAAS3O,EAAaC,EAAWC,GAE3DP,GAAar3D,KAAM1E,KAAMg8D,EAAIC,EAAI8O,EAASA,EAAS3O,EAAaC,EAAWC,GAE3Et8D,KAAK6B,KAAO,WAoDb,QAASmpE,IAAO72D,EAAGhN,EAAG2c,EAAGwE,EAAGzP,EAAQhK,EAAOuO,GAG1C,MADA3c,SAAQqa,KAAM,wEACP,GAAI+I,IAAO1P,EAAGhN,EAAG2c,EAAGjL,EAAQhK,EAAOuO,GAQ3C,QAAS6tD,IAAkBC,GAG1B,MADAzqE,SAAQqa,KAAM,kEACPowD,EAIR,QAASC,IAAeD,GAYvB,WAVmBhqE,KAAdgqE,IAA0BA,MAE/BzqE,QAAQqa,KAAM,+DACdowD,EAAUE,iBAAkB,EAC5BF,EAAUA,UAAYA,EACtBA,EAAUzvD,MAAQ,WAEjB,MAAOyvD,GAAUrjB,SAGXqjB,EAIR,QAASlG,IAAY/qD,EAAU9E,GAG9B,MADA1U,SAAQqa,KAAM,sDACP,GAAI8tC,IAAQ3uC,EAAU9E,GAI9B,QAASk2D,IAAUl2D,GAGlB,MADA1U,SAAQqa,KAAM,oDACP,GAAI0sC,IAAQryC,GAIpB,QAASm2D,IAAgBrxD,EAAU9E,GAGlC,MADA1U,SAAQqa,KAAM,0DACP,GAAI8tC,IAAQ3uC,EAAU9E,GAI9B,QAASo2D,IAAoB9zD,GAG5B,MADAhX,SAAQqa,KAAM,sEACP,GAAI6hB,IAAgBllB,GAI5B,QAAS+zD,IAAuB/zD,GAG/B,MADAhX,SAAQqa,KAAM,yEACP,GAAI6hB,IAAgBllB,GAI5B,QAASg0D,IAAwBh0D,GAGhC,MADAhX,SAAQqa,KAAM,0EACP,GAAI6hB,IAAgBllB,GAI5B,QAASi0D,IAAQvrE,EAAGC,EAAGQ,GAGtB,MADAH,SAAQqa,KAAM,6DACP,GAAI3Z,GAAShB,EAAGC,EAAGQ,GAM3B,QAAS+qE,IAAwBpmE,EAAO6f,GAGvC,MADA3kB,SAAQqa,KAAM,8GACP,GAAIqK,IAAiB5f,EAAO6f,GAAWwmD,YAAY,GAI3D,QAASC,IAAetmE,EAAO6f,GAG9B,MADA3kB,SAAQqa,KAAM,sFACP,GAAIyK,IAAqBhgB,EAAO6f,GAIxC,QAAS0mD,IAAgBvmE,EAAO6f,GAG/B,MADA3kB,SAAQqa,KAAM,wFACP,GAAI0K,IAAsBjgB,EAAO6f,GAIzC,QAAS2mD,IAAuBxmE,EAAO6f,GAGtC,MADA3kB,SAAQqa,KAAM,sGACP,GAAI2K,IAA6BlgB,EAAO6f,GAIhD,QAAS4mD,IAAgBzmE,EAAO6f,GAG/B,MADA3kB,SAAQqa,KAAM,wFACP,GAAI6K,IAAsBpgB,EAAO6f,GAIzC,QAAS6mD,IAAiB1mE,EAAO6f,GAGhC,MADA3kB,SAAQqa,KAAM,0FACP,GAAI8K,IAAuBrgB,EAAO6f,GAI1C,QAAS8mD,IAAgB3mE,EAAO6f,GAG/B,MADA3kB,SAAQqa,KAAM,wFACP,GAAI+K,IAAsBtgB,EAAO6f,GAIzC,QAAS+mD,IAAiB5mE,EAAO6f,GAGhC,MADA3kB,SAAQqa,KAAM,0FACP,GAAIgL,IAAuBvgB,EAAO6f,GAI1C,QAASgnD,IAAkB7mE,EAAO6f,GAGjC,MADA3kB,SAAQqa,KAAM,4FACP,GAAIiL,IAAwBxgB,EAAO6f,GAI3C,QAASinD,IAAkB9mE,EAAO6f,GAGjC,MADA3kB,SAAQqa,KAAM,4FACP,GAAIkL,IAAwBzgB,EAAO6f,GA8E3C,QAASknD,IAAoB39C,GAE5BluB,QAAQqa,KAAM,qFAEd2vD,GAAiB/lE,KAAM1E,KAAM2uB,GAC7B3uB,KAAK6B,KAAO,aACZ7B,KAAKutD,QAAS,EAQf,QAASgf,IAAc59C,GAEtBluB,QAAQqa,KAAM,+EAEd2vD,GAAiB/lE,KAAM1E,KAAM2uB,GAC7B3uB,KAAK6B,KAAO,aAQb,QAAS2qE,IAAQ79C,GAEhBluB,QAAQqa,KAAM,sEAEd2vD,GAAiB/lE,KAAM1E,KAAM2uB,GAC7B3uB,KAAK6B,KAAO,aA4Bb,QAAS4qE,IAAYrjE,GAGpB,MADA3I,SAAQqa,KAAM,0DACP,GAAI2uD,IAAYrgE,GAIxB,QAASsjE,IAAmB9yD,EAAQ/K,GAGnC,MADApO,SAAQqa,KAAM,oFACP,GAAI4tD,IAAW9uD,EAAQ/K,GAI/B,QAAS89D,IAAa/yD,EAAQosD,GAG7B,MADAvlE,SAAQqa,KAAM,wEACP,GAAI4tC,IAAc,GAAIyK,IAAev5C,EAAOK,UAAY,GAAIwiB,KAAqB5tB,UAAe3N,KAAR8kE,EAAoBA,EAAM,YAgB1H,QAAS4G,IAAiBhzD,EAAQosD,GAGjC,MADAvlE,SAAQqa,KAAM,gFACP,GAAI4tC,IAAc,GAAIU,IAAmBxvC,EAAOK,UAAY,GAAIwiB,KAAqB5tB,UAAe3N,KAAR8kE,EAAoBA,EAAM,YAM9H,QAAS6G,IAAWvW,GAGnB,MADA71D,SAAQqa,KAAM,yDACP,GAAIu7C,IAAYC,GAIxB,QAASwW,IAAqBxW,GAG7B,MADA71D,SAAQqa,KAAM,0EACP,GAAI47C,IAAmBJ,GA+sC/B,QAASyW,MAERtsE,QAAQC,MAAO,0EAEfV,KAAKgtE,cAAgB,SAAW5kD,EAAQxY,GAEvCnP,QAAQqa,KAAM,8DACdsN,EAAO6kD,QAASr9D,IAIjB5P,KAAKktE,gBAAkB,SAAW9kD,EAAQxY,GAEzCnP,QAAQqa,KAAM,kEACdsN,EAAO+kD,UAAWv9D,IAInB5P,KAAKotE,WAAa,WAEjB3sE,QAAQC,MAAO,qEAQjB,QAAS2sE,MAER5sE,QAAQC,MAAO,mFAEfV,KAAKuiD,WAAa3uC,SAASC,gBAAiB,+BAAgC,UAC5E7T,KAAK6f,MAAQ,aACb7f,KAAKyP,OAAS,aACdzP,KAAK6sB,cAAgB,aACrB7sB,KAAKqjD,QAAU,iBAxn3CQniD,KAAnBosE,OAAOC,UAEXD,OAAOC,QAAU9kD,KAAKwiC,IAAK,GAAK,SAIP/pD,KAArBosE,OAAOE,YAKXF,OAAOE,UAAY,SAAWtrE,GAE7B,MAAwB,gBAAVA,IAAsBurE,SAAUvrE,IAAWumB,KAAKC,MAAOxmB,KAAYA,QAQhEhB,KAAdunB,KAAK4rC,OAIT5rC,KAAK4rC,KAAO,SAAWl0D,GAEtB,MAASA,GAAI,GAAQ,EAAMA,EAAI,EAAM,GAAMA,IAMxC,QAAUutE,UAASvM,YAAc,GAKrCn/D,OAAOC,eAAgByrE,SAASvM,UAAW,QAE1Cx/C,IAAK,WAEJ,MAAO3hB,MAAK69B,WAAWhzB,MAAO,6BAA+B,UAQzC3J,KAAlBc,OAAO2rE,QAKX,WAEC3rE,OAAO2rE,OAAS,SAAWnuD,GAI1B,OAAgBte,KAAXse,GAAmC,OAAXA,EAE5B,KAAM,IAAI8F,WAAW,6CAMtB,KAAM,GAFFsoD,GAAS5rE,OAAQwd,GAEXiH,EAAQ,EAAGA,EAAQlmB,UAAUC,OAAQimB,IAAW,CAEzD,GAAIonD,GAASttE,UAAWkmB,EAExB,QAAgBvlB,KAAX2sE,GAAmC,OAAXA,EAE5B,IAAM,GAAIC,KAAWD,GAEf7rE,OAAOm/D,UAAU4M,eAAerpE,KAAMmpE,EAAQC,KAElDF,EAAQE,GAAYD,EAAQC,IAUhC,MAAOF,OAcV5rE,OAAO2rE,OAAQ1tE,EAAgBkhE,WAE9BzxC,iBAAkB,SAAW7tB,EAAM08D,OAETr9D,KAApBlB,KAAKguE,aAA2BhuE,KAAKguE,cAE1C,IAAIC,GAAYjuE,KAAKguE,eAEM9sE,KAAtB+sE,EAAWpsE,KAEfosE,EAAWpsE,QAIqC,IAA5CosE,EAAWpsE,GAAOs8B,QAASogC,IAE/B0P,EAAWpsE,GAAO0I,KAAMg0D,IAM1B2P,iBAAkB,SAAWrsE,EAAM08D,GAElC,OAAyBr9D,KAApBlB,KAAKguE,WAA2B,OAAO,CAE5C,IAAIC,GAAYjuE,KAAKguE,UAErB,YAA6B9sE,KAAtB+sE,EAAWpsE,KAAoE,IAA5CosE,EAAWpsE,GAAOs8B,QAASogC,IAItE/uC,oBAAqB,SAAW3tB,EAAM08D,GAErC,OAAyBr9D,KAApBlB,KAAKguE,WAAV,CAEA,GAAIC,GAAYjuE,KAAKguE,WACjBG,EAAgBF,EAAWpsE,EAE/B,QAAuBX,KAAlBitE,EAA8B,CAElC,GAAI1nD,GAAQ0nD,EAAchwC,QAASogC,IAElB,IAAZ93C,GAEJ0nD,EAAcC,OAAQ3nD,EAAO,MAQhC4nD,cAAe,SAAW/+C,GAEzB,OAAyBpuB,KAApBlB,KAAKguE,WAAV,CAEA,GAAIC,GAAYjuE,KAAKguE,WACjBG,EAAgBF,EAAW3+C,EAAMztB,KAErC,QAAuBX,KAAlBitE,EAA8B,CAElC7+C,EAAM9P,OAASxf,IAIf,KAAM,GAFFuF,GAAQ4oE,EAActmB,MAAO,GAEvB7hD,EAAI,EAAG8K,EAAIvL,EAAM/E,OAAQwF,EAAI8K,EAAG9K,IAEzCT,EAAOS,GAAItB,KAAM1E,KAAMsvB,OAU3B,IAAIuyB,IAAW,KACXysB,IAAUC,KAAM,EAAGC,OAAQ,EAAGC,MAAO,GACrCpjC,GAAe,EACfE,GAAe,EACfE,GAAgB,EAEhB+a,GAAuB,EAGvBnoC,GAAe,EACfgZ,GAAmB,EACnBhhB,GAAY,EACZyF,GAAW,EACXF,GAAa,EAGbpF,GAAW,EACX4xD,GAAa,EACbvB,GAAe,EACfz9B,GAAa,EACbjzB,GAAiB,EACjBqzB,GAAmB,EACnBO,GAAsB,EACtBI,GAAmB,EACnBd,GAAiB,EACjBzyB,GAAc,IACdq+B,GAAmB,IACnBE,GAA0B,IAC1BkC,GAAc,IACdC,GAAc,IACdjC,GAAa,IACbC,GAAY,IACZC,GAAiB,IACjBC,GAAyB,IACzB9+B,GAAiB,IACjBC,GAAyB,IACzB8+B,GAAiB,IACjBE,GAAyB,IACzBE,GAAiB,IACjBE,GAAyB,IACzBE,GAAyB,IACzB/P,GAAa,EACbE,GAAc,EACdE,GAAY,EACZxvB,GAAiB,EACjB2vB,GAAa,EACbE,GAAoB,EACpBE,GAAe,EACfE,GAAgB,EAChBpd,GAAoB,EACpBoO,GAAe,EACfC,GAAe,EACfwB,GAAgB,EAChBvE,GAAoB,EACpBC,GAAsB,EACtBC,GAAwB,EACxBC,GAAoB,EAEpBlwB,GAAwB,IACxBuyB,GAAwB,IACxBG,GAAmC,IACnCC,GAAmC,IACnCC,GAA6B,IAC7BJ,GAA0B,IAC1BC,GAA0B,IAC1B6b,GAAiB,IACjB7wC,GAAsB,KACtB+wC,GAAyB,KACzB3uC,GAAgB,KAChBs6B,GAA6B,KAC7BC,GAA4B,KAC5B18B,GAAe,KACfkxC,GAA4B,KAC5BjxC,GAA2B,KAC3BE,GAAmB,KACnBwxC,GAAW,KACXC,GAAY,KACZxR,GAAoB,KACpByR,GAAU,KACVxR,GAAkB,KAClBhB,GAAY,KACZC,GAAgB,KAChB+R,GAAwB,KACxBE,GAAwB,KACxBE,GAAuB,KACvBjR,GAAqB,KACrBuR,GAAc,KACdjT,GAAY,KACZ5+B,GAAa,KACb+xC,GAAkB,KAClBE,GAAuB,KACvB25B,GAAa5rE,GACbigC,GAAc,KACdG,GAAqB,KACrBiT,GAAuB,KACvBC,GAAwB,KACxBC,GAAwB,KACxBC,GAAwB,KACxBK,GAA0B,KAC1BC,GAA0B,KAC1BC,GAA2B,KAC3BC,GAA2B,KAC3BK,GAAkB,KAElBisB,GAAa,KAKbZ,GAAsB,KAGtBp3C,GAAoB,EACpBm6B,GAAwB,EACxBE,GAAsB,EACtB/hD,GAAiB,IACjBywB,GAAe,KACfK,GAAgB,KAChBJ,GAAe,KAEfC,GAAgB,KAChBC,GAAiB,KACjBC,GAAe,KACf5c,GAAoB,KACpBsG,GAAmB,KAOnB5b,IAEHkxD,QAAS9qC,KAAK6jC,GAAK,IACnBqiB,QAAS,IAAMlmD,KAAK6jC,GAEpBhqD,aAAc,WAKb,GACasD,GADTgpE,EAAQ,iEAAiE/6C,MAAO,IAChFg7C,EAAM,CAEV,OAAO,YAIN,IAAM,GAFFzsE,GAAO,GAED4D,EAAI,EAAGA,EAAI,GAAIA,IAEb,IAANA,GAAiB,KAANA,GAAkB,KAANA,GAAkB,KAANA,EAEvC5D,GAAQ,IAES,KAAN4D,EAEX5D,GAAQ,KAIHysE,GAAO,IAAOA,EAAM,SAA8B,SAAhBpmD,KAAKyC,SAAyB,GACrEtlB,EAAU,GAANipE,EACJA,IAAa,EACbzsE,GAAQwsE,EAAe,KAAN5oE,EAAmB,EAAJJ,EAAY,EAAMA,GAMpD,OAAOxD,OAMT0vD,MAAO,SAAW5vD,EAAO2J,EAAKC,GAE7B,MAAO2c,MAAK3c,IAAKD,EAAK4c,KAAK5c,IAAKC,EAAK5J,KAOtC4sE,gBAAiB,SAAWnpE,EAAGopE,GAE9B,OAAWppE,EAAIopE,EAAMA,GAAMA,GAM5BC,UAAW,SAAW7uE,EAAG8uE,EAAIC,EAAIC,EAAIC,GAEpC,MAAOD,IAAOhvE,EAAI8uE,IAASG,EAAKD,IAASD,EAAKD,IAM/C9jB,KAAM,SAAWhrD,EAAGC,EAAG6sD,GAEtB,OAAS,EAAIA,GAAM9sD,EAAI8sD,EAAI7sD,GAM5BivE,WAAY,SAAWlvE,EAAG0L,EAAKC,GAE9B,MAAK3L,IAAK0L,EAAa,EAClB1L,GAAK2L,EAAa,GAEvB3L,GAAMA,EAAI0L,IAAUC,EAAMD,IAEf1L,GAAM,EAAI,EAAIA,IAI1BmvE,aAAc,SAAWnvE,EAAG0L,EAAKC,GAEhC,MAAK3L,IAAK0L,EAAa,EAClB1L,GAAK2L,EAAa,GAEvB3L,GAAMA,EAAI0L,IAAUC,EAAMD,IAEf1L,EAAIA,GAAMA,GAAU,EAAJA,EAAQ,IAAO,KAM3CovE,QAAS,SAAWC,EAAKC,GAExB,MAAOD,GAAM/mD,KAAKC,MAAOD,KAAKyC,UAAaukD,EAAOD,EAAM,KAMzDE,UAAW,SAAWF,EAAKC,GAE1B,MAAOD,GAAM/mD,KAAKyC,UAAaukD,EAAOD,IAMvCG,gBAAiB,SAAWC,GAE3B,MAAOA,IAAU,GAAMnnD,KAAKyC,WAI7B2kD,SAAU,SAAWC,GAEpB,MAAOA,GAAUztE,GAAMkxD,SAIxBwc,SAAU,SAAWC,GAEpB,MAAOA,GAAU3tE,GAAMssE,SAIxBhwC,aAAc,SAAWz8B,GAExB,MAAqC,KAA5BA,EAAUA,EAAQ,IAAyB,IAAVA,GAI3Cs8C,eAAgB,SAAWt8C,GAE1B,MAAOumB,MAAKwiC,IAAK,EAAGxiC,KAAKwnD,KAAMxnD,KAAKoS,IAAK34B,GAAUumB,KAAKq1B,OAIzD9e,gBAAiB,SAAW98B,GAE3B,MAAOumB,MAAKwiC,IAAK,EAAGxiC,KAAKC,MAAOD,KAAKoS,IAAK34B,GAAUumB,KAAKq1B,OAoB3D97C,QAAO+gB,iBAAkB7iB,EAAQihE,WAEhCp9D,OAEC4d,IAAK,WAEJ,MAAO3hB,MAAKG,GAIb0H,IAAK,SAAW3F,GAEflC,KAAKG,EAAI+B,IAMX8B,QAEC2d,IAAK,WAEJ,MAAO3hB,MAAKI,GAIbyH,IAAK,SAAW3F,GAEflC,KAAKI,EAAI8B,MAQZF,OAAO2rE,OAAQztE,EAAQihE,WAEtB+O,WAAW,EAEXroE,IAAK,SAAW1H,EAAGC,GAKlB,MAHAJ,MAAKG,EAAIA,EACTH,KAAKI,EAAIA,EAEFJ,MAIRmwE,UAAW,SAAWC,GAKrB,MAHApwE,MAAKG,EAAIiwE,EACTpwE,KAAKI,EAAIgwE,EAEFpwE,MAIRqwE,KAAM,SAAWlwE,GAIhB,MAFAH,MAAKG,EAAIA,EAEFH,MAIRswE,KAAM,SAAWlwE,GAIhB,MAFAJ,MAAKI,EAAIA,EAEFJ,MAIRuwE,aAAc,SAAW9pD,EAAOvkB,GAE/B,OAASukB,GAER,IAAK,GAAGzmB,KAAKG,EAAI+B,CAAO,MACxB,KAAK,GAAGlC,KAAKI,EAAI8B,CAAO,MACxB,SAAS,KAAM,IAAIuyB,OAAO,0BAA4BhO,GAIvD,MAAOzmB,OAIRwwE,aAAc,SAAW/pD,GAExB,OAASA,GAER,IAAK,GAAG,MAAOzmB,MAAKG,CACpB,KAAK,GAAG,MAAOH,MAAKI,CACpB,SAAS,KAAM,IAAIq0B,OAAO,0BAA4BhO,KAMxDhL,MAAO,WAEN,MAAO,IAAIzb,MAAKg4D,YAAah4D,KAAKG,EAAGH,KAAKI,IAI3CgR,KAAM,SAAW5K,GAKhB,MAHAxG,MAAKG,EAAIqG,EAAErG,EACXH,KAAKI,EAAIoG,EAAEpG,EAEJJ,MAIR+f,IAAK,SAAWvZ,EAAG3F,GAElB,WAAWK,KAANL,GAEJJ,QAAQqa,KAAM,yFACP9a,KAAKovD,WAAY5oD,EAAG3F,KAI5Bb,KAAKG,GAAKqG,EAAErG,EACZH,KAAKI,GAAKoG,EAAEpG,EAELJ,OAIRywE,UAAW,SAAWzb,GAKrB,MAHAh1D,MAAKG,GAAK60D,EACVh1D,KAAKI,GAAK40D,EAEHh1D,MAIRovD,WAAY,SAAWj7C,EAAGhN,GAKzB,MAHAnH,MAAKG,EAAIgU,EAAEhU,EAAIgH,EAAEhH,EACjBH,KAAKI,EAAI+T,EAAE/T,EAAI+G,EAAE/G,EAEVJ,MAIR0wE,gBAAiB,SAAWlqE,EAAGwuD,GAK9B,MAHAh1D,MAAKG,GAAKqG,EAAErG,EAAI60D,EAChBh1D,KAAKI,GAAKoG,EAAEpG,EAAI40D,EAETh1D,MAIR2xB,IAAK,SAAWnrB,EAAG3F,GAElB,WAAWK,KAANL,GAEJJ,QAAQqa,KAAM,yFACP9a,KAAK0qD,WAAYlkD,EAAG3F,KAI5Bb,KAAKG,GAAKqG,EAAErG,EACZH,KAAKI,GAAKoG,EAAEpG,EAELJ,OAIR2wE,UAAW,SAAW3b,GAKrB,MAHAh1D,MAAKG,GAAK60D,EACVh1D,KAAKI,GAAK40D,EAEHh1D,MAIR0qD,WAAY,SAAWv2C,EAAGhN,GAKzB,MAHAnH,MAAKG,EAAIgU,EAAEhU,EAAIgH,EAAEhH,EACjBH,KAAKI,EAAI+T,EAAE/T,EAAI+G,EAAE/G,EAEVJ,MAIR2f,SAAU,SAAWnZ,GAKpB,MAHAxG,MAAKG,GAAKqG,EAAErG,EACZH,KAAKI,GAAKoG,EAAEpG,EAELJ,MAIRyxB,eAAgB,SAAW2+C,GAK1B,MAHApwE,MAAKG,GAAKiwE,EACVpwE,KAAKI,GAAKgwE,EAEHpwE,MAIR4wE,OAAQ,SAAWpqE,GAKlB,MAHAxG,MAAKG,GAAKqG,EAAErG,EACZH,KAAKI,GAAKoG,EAAEpG,EAELJ,MAIRksD,aAAc,SAAWkkB,GAExB,MAAOpwE,MAAKyxB,eAAgB,EAAI2+C,IAIjCS,aAAc,SAAW9B,GAExB,GAAI5uE,GAAIH,KAAKG,EAAGC,EAAIJ,KAAKI,EACrBmpD,EAAIwlB,EAAEzuE,QAKV,OAHAN,MAAKG,EAAIopD,EAAG,GAAMppD,EAAIopD,EAAG,GAAMnpD,EAAImpD,EAAG,GACtCvpD,KAAKI,EAAImpD,EAAG,GAAMppD,EAAIopD,EAAG,GAAMnpD,EAAImpD,EAAG,GAE/BvpD,MAIR6L,IAAK,SAAWrF,GAKf,MAHAxG,MAAKG,EAAIsoB,KAAK5c,IAAK7L,KAAKG,EAAGqG,EAAErG,GAC7BH,KAAKI,EAAIqoB,KAAK5c,IAAK7L,KAAKI,EAAGoG,EAAEpG,GAEtBJ,MAIR8L,IAAK,SAAWtF,GAKf,MAHAxG,MAAKG,EAAIsoB,KAAK3c,IAAK9L,KAAKG,EAAGqG,EAAErG,GAC7BH,KAAKI,EAAIqoB,KAAK3c,IAAK9L,KAAKI,EAAGoG,EAAEpG,GAEtBJ,MAIR8xD,MAAO,SAAWjmD,EAAKC,GAOtB,MAHA9L,MAAKG,EAAIsoB,KAAK3c,IAAKD,EAAI1L,EAAGsoB,KAAK5c,IAAKC,EAAI3L,EAAGH,KAAKG,IAChDH,KAAKI,EAAIqoB,KAAK3c,IAAKD,EAAIzL,EAAGqoB,KAAK5c,IAAKC,EAAI1L,EAAGJ,KAAKI,IAEzCJ,MAIR8wE,YAAa,WAEZ,GAAIjlE,GAAM,GAAI3L,GACV4L,EAAM,GAAI5L,EAEd,OAAO,UAAsB6wE,EAAQC,GAKpC,MAHAnlE,GAAIhE,IAAKkpE,EAAQA,GACjBjlE,EAAIjE,IAAKmpE,EAAQA,GAEVhxE,KAAK8xD,MAAOjmD,EAAKC,OAM1BmlE,YAAa,SAAWplE,EAAKC,GAE5B,GAAItL,GAASR,KAAKQ,QAElB,OAAOR,MAAKksD,aAAc1rD,GAAU,GAAIixB,eAAgBhJ,KAAK3c,IAAKD,EAAK4c,KAAK5c,IAAKC,EAAKtL,MAIvFkoB,MAAO,WAKN,MAHA1oB,MAAKG,EAAIsoB,KAAKC,MAAO1oB,KAAKG,GAC1BH,KAAKI,EAAIqoB,KAAKC,MAAO1oB,KAAKI,GAEnBJ,MAIRiwE,KAAM,WAKL,MAHAjwE,MAAKG,EAAIsoB,KAAKwnD,KAAMjwE,KAAKG,GACzBH,KAAKI,EAAIqoB,KAAKwnD,KAAMjwE,KAAKI,GAElBJ,MAIRkxE,MAAO,WAKN,MAHAlxE,MAAKG,EAAIsoB,KAAKyoD,MAAOlxE,KAAKG,GAC1BH,KAAKI,EAAIqoB,KAAKyoD,MAAOlxE,KAAKI,GAEnBJ,MAIRmxE,YAAa,WAKZ,MAHAnxE,MAAKG,EAAMH,KAAKG,EAAI,EAAMsoB,KAAKwnD,KAAMjwE,KAAKG,GAAMsoB,KAAKC,MAAO1oB,KAAKG;4DACjEH,KAAKI,EAAMJ,KAAKI,EAAI,EAAMqoB,KAAKwnD,KAAMjwE,KAAKI,GAAMqoB,KAAKC,MAAO1oB,KAAKI,GAE1DJ,MAIRoxE,OAAQ,WAKP,MAHApxE,MAAKG,GAAMH,KAAKG,EAChBH,KAAKI,GAAMJ,KAAKI,EAETJ,MAIR4zD,IAAK,SAAWptD,GAEf,MAAOxG,MAAKG,EAAIqG,EAAErG,EAAIH,KAAKI,EAAIoG,EAAEpG,GAIlCixE,SAAU,WAET,MAAOrxE,MAAKG,EAAIH,KAAKG,EAAIH,KAAKI,EAAIJ,KAAKI,GAIxCI,OAAQ,WAEP,MAAOioB,MAAK81B,KAAMv+C,KAAKG,EAAIH,KAAKG,EAAIH,KAAKI,EAAIJ,KAAKI,IAInDkxE,gBAAiB,WAEhB,MAAO7oD,MAAKmF,IAAK5tB,KAAKG,GAAMsoB,KAAKmF,IAAK5tB,KAAKI,IAI5C+yB,UAAW,WAEV,MAAOnzB,MAAKksD,aAAclsD,KAAKQ,UAAY,IAI5C2xB,MAAO,WAIN,GAAIA,GAAQ1J,KAAK8jC,MAAOvsD,KAAKI,EAAGJ,KAAKG,EAIrC,OAFKgyB,GAAQ,IAAIA,GAAS,EAAI1J,KAAK6jC,IAE5Bn6B,GAIRo/C,WAAY,SAAW/qE,GAEtB,MAAOiiB,MAAK81B,KAAMv+C,KAAKwxE,kBAAmBhrE,KAI3CgrE,kBAAmB,SAAWhrE,GAE7B,GAAIirE,GAAKzxE,KAAKG,EAAIqG,EAAErG,EAAGuxE,EAAK1xE,KAAKI,EAAIoG,EAAEpG,CACvC,OAAOqxE,GAAKA,EAAKC,EAAKA,GAIvBC,oBAAqB,SAAWnrE,GAE/B,MAAOiiB,MAAKmF,IAAK5tB,KAAKG,EAAIqG,EAAErG,GAAMsoB,KAAKmF,IAAK5tB,KAAKI,EAAIoG,EAAEpG,IAIxDopE,UAAW,SAAWhpE,GAErB,MAAOR,MAAKmzB,YAAY1B,eAAgBjxB,IAIzC2qD,KAAM,SAAW3kD,EAAGmmB,GAKnB,MAHA3sB,MAAKG,IAAOqG,EAAErG,EAAIH,KAAKG,GAAMwsB,EAC7B3sB,KAAKI,IAAOoG,EAAEpG,EAAIJ,KAAKI,GAAMusB,EAEtB3sB,MAIR4xE,YAAa,SAAW/W,EAAIc,EAAIhvC,GAE/B,MAAO3sB,MAAK0qD,WAAYiR,EAAId,GAAKppC,eAAgB9E,GAAQ5M,IAAK86C,IAI/Dl1B,OAAQ,SAAWn/B,GAElB,MAAWA,GAAErG,IAAMH,KAAKG,GAASqG,EAAEpG,IAAMJ,KAAKI,GAI/CwwC,UAAW,SAAWrrC,EAAOvC,GAO5B,WALgB9B,KAAX8B,IAAuBA,EAAS,GAErChD,KAAKG,EAAIoF,EAAOvC,GAChBhD,KAAKI,EAAImF,EAAOvC,EAAS,GAElBhD,MAIR+F,QAAS,SAAWR,EAAOvC,GAQ1B,WANe9B,KAAVqE,IAAsBA,UACXrE,KAAX8B,IAAuBA,EAAS,GAErCuC,EAAOvC,GAAWhD,KAAKG,EACvBoF,EAAOvC,EAAS,GAAMhD,KAAKI,EAEpBmF,GAIR0kD,oBAAqB,SAAW7pC,EAAWqG,EAAOzjB,GAWjD,WATgB9B,KAAX8B,GAEJvC,QAAQqa,KAAM,uEAIf9a,KAAKG,EAAIigB,EAAU4pC,KAAMvjC,GACzBzmB,KAAKI,EAAIggB,EAAUyxD,KAAMprD,GAElBzmB,MAIR8xE,aAAc,SAAW5uE,EAAQivB,GAEhC,GAAIrO,GAAI2E,KAAKyJ,IAAKC,GAAS6iC,EAAIvsC,KAAK0lC,IAAKh8B,GAErChyB,EAAIH,KAAKG,EAAI+C,EAAO/C,EACpBC,EAAIJ,KAAKI,EAAI8C,EAAO9C,CAKxB,OAHAJ,MAAKG,EAAIA,EAAI2jB,EAAI1jB,EAAI40D,EAAI9xD,EAAO/C,EAChCH,KAAKI,EAAID,EAAI60D,EAAI50D,EAAI0jB,EAAI5gB,EAAO9C,EAEzBJ,QAsCTgC,OAAO2rE,OAAQttE,EAAQ8gE,WAEtB4Q,WAAW,EAEXlqE,IAAK,SAAWmqE,EAAKC,EAAKC,EAAKC,EAAKC,EAAKC,EAAKC,EAAKC,EAAKC,EAAKC,EAAKC,EAAKC,EAAKC,EAAKC,EAAKC,EAAKC,GAE1F,GAAIC,GAAKhzE,KAAKM,QAOd,OALA0yE,GAAI,GAAMhB,EAAKgB,EAAI,GAAMf,EAAKe,EAAI,GAAMd,EAAKc,EAAI,IAAOb,EACxDa,EAAI,GAAMZ,EAAKY,EAAI,GAAMX,EAAKW,EAAI,GAAMV,EAAKU,EAAI,IAAOT,EACxDS,EAAI,GAAMR,EAAKQ,EAAI,GAAMP,EAAKO,EAAI,IAAON,EAAKM,EAAI,IAAOL,EACzDK,EAAI,GAAMJ,EAAKI,EAAI,GAAMH,EAAKG,EAAI,IAAOF,EAAKE,EAAI,IAAOD,EAElD/yE,MAIR0yB,SAAU,WAWT,MATA1yB,MAAK6H,IAEJ,EAAG,EAAG,EAAG,EACT,EAAG,EAAG,EAAG,EACT,EAAG,EAAG,EAAG,EACT,EAAG,EAAG,EAAG,GAIH7H,MAIRyb,MAAO,WAEN,OAAO,GAAIpb,IAAUuwC,UAAW5wC,KAAKM,WAItC8Q,KAAM,SAAW29D,GAEhB,GAAIiE,GAAKhzE,KAAKM,SACV2yE,EAAKlE,EAAEzuE,QAOX,OALA0yE,GAAI,GAAMC,EAAI,GAAKD,EAAI,GAAMC,EAAI,GAAKD,EAAI,GAAMC,EAAI,GAAKD,EAAI,GAAMC,EAAI,GACvED,EAAI,GAAMC,EAAI,GAAKD,EAAI,GAAMC,EAAI,GAAKD,EAAI,GAAMC,EAAI,GAAKD,EAAI,GAAMC,EAAI,GACvED,EAAI,GAAMC,EAAI,GAAKD,EAAI,GAAMC,EAAI,GAAKD,EAAI,IAAOC,EAAI,IAAMD,EAAI,IAAOC,EAAI,IAC1ED,EAAI,IAAOC,EAAI,IAAMD,EAAI,IAAOC,EAAI,IAAMD,EAAI,IAAOC,EAAI,IAAMD,EAAI,IAAOC,EAAI,IAEvEjzE,MAIRssB,aAAc,SAAWyiD,GAExB,GAAIiE,GAAKhzE,KAAKM,SAAU2yE,EAAKlE,EAAEzuE,QAM/B,OAJA0yE,GAAI,IAAOC,EAAI,IACfD,EAAI,IAAOC,EAAI,IACfD,EAAI,IAAOC,EAAI,IAERjzE,MAIRkzE,aAAc,SAAWC,EAAOC,EAAOC,GAMtC,MAJAF,GAAMG,oBAAqBtzE,KAAM,GACjCozE,EAAME,oBAAqBtzE,KAAM,GACjCqzE,EAAMC,oBAAqBtzE,KAAM,GAE1BA,MAIRuzE,UAAW,SAAWJ,EAAOC,EAAOC,GASnC,MAPArzE,MAAK6H,IACJsrE,EAAMhzE,EAAGizE,EAAMjzE,EAAGkzE,EAAMlzE,EAAG,EAC3BgzE,EAAM/yE,EAAGgzE,EAAMhzE,EAAGizE,EAAMjzE,EAAG,EAC3B+yE,EAAMvyE,EAAGwyE,EAAMxyE,EAAGyyE,EAAMzyE,EAAG,EAC3B,EAAG,EAAG,EAAG,GAGHZ,MAIR6yB,gBAAiB,WAEhB,GAAIgoC,GAAK,GAAI15D,EAEb,OAAO,UAA0B4tE,GAEhC,GAAIiE,GAAKhzE,KAAKM,SACV2yE,EAAKlE,EAAEzuE,SAEPkzE,EAAS,EAAI3Y,EAAGyY,oBAAqBvE,EAAG,GAAIvuE,SAC5CizE,EAAS,EAAI5Y,EAAGyY,oBAAqBvE,EAAG,GAAIvuE,SAC5CkzE,EAAS,EAAI7Y,EAAGyY,oBAAqBvE,EAAG,GAAIvuE,QAchD,OAZAwyE,GAAI,GAAMC,EAAI,GAAMO,EACpBR,EAAI,GAAMC,EAAI,GAAMO,EACpBR,EAAI,GAAMC,EAAI,GAAMO,EAEpBR,EAAI,GAAMC,EAAI,GAAMQ,EACpBT,EAAI,GAAMC,EAAI,GAAMQ,EACpBT,EAAI,GAAMC,EAAI,GAAMQ,EAEpBT,EAAI,GAAMC,EAAI,GAAMS,EACpBV,EAAI,GAAMC,EAAI,GAAMS,EACpBV,EAAI,IAAOC,EAAI,IAAOS,EAEf1zE,SAMT2zE,sBAAuB,SAAWC,GAExBA,GAASA,EAAMC,SAEvBpzE,QAAQC,MAAO,wGAIhB,IAAIsyE,GAAKhzE,KAAKM,SAEVH,EAAIyzE,EAAMzzE,EAAGC,EAAIwzE,EAAMxzE,EAAGQ,EAAIgzE,EAAMhzE,EACpCuT,EAAIsU,KAAKyJ,IAAK/xB,GAAKgH,EAAIshB,KAAK0lC,IAAKhuD,GACjC2jB,EAAI2E,KAAKyJ,IAAK9xB,GAAKkoB,EAAIG,KAAK0lC,IAAK/tD,GACjCmpD,EAAI9gC,KAAKyJ,IAAKtxB,GAAKw+B,EAAI3W,KAAK0lC,IAAKvtD,EAErC,IAAqB,QAAhBgzE,EAAM5xD,MAAkB,CAE5B,GAAI8xD,GAAK3/D,EAAIo1C,EAAGwqB,EAAK5/D,EAAIirB,EAAG40C,EAAK7sE,EAAIoiD,EAAG0qB,EAAK9sE,EAAIi4B,CAEjD4zC,GAAI,GAAMlvD,EAAIylC,EACdypB,EAAI,IAAQlvD,EAAIsb,EAChB4zC,EAAI,GAAM1qD,EAEV0qD,EAAI,GAAMe,EAAKC,EAAK1rD,EACpB0qD,EAAI,GAAMc,EAAKG,EAAK3rD,EACpB0qD,EAAI,IAAQ7rE,EAAI2c,EAEhBkvD,EAAI,GAAMiB,EAAKH,EAAKxrD,EACpB0qD,EAAI,GAAMgB,EAAKD,EAAKzrD,EACpB0qD,EAAI,IAAO7+D,EAAI2P,MAET,IAAqB,QAAhB8vD,EAAM5xD,MAAkB,CAEnC,GAAIkyD,GAAKpwD,EAAIylC,EAAG4qB,EAAKrwD,EAAIsb,EAAGg1C,EAAK9rD,EAAIihC,EAAG8qB,EAAK/rD,EAAI8W,CAEjD4zC,GAAI,GAAMkB,EAAKG,EAAKltE,EACpB6rE,EAAI,GAAMoB,EAAKjtE,EAAIgtE,EACnBnB,EAAI,GAAM7+D,EAAImU,EAEd0qD,EAAI,GAAM7+D,EAAIirB,EACd4zC,EAAI,GAAM7+D,EAAIo1C,EACdypB,EAAI,IAAQ7rE,EAEZ6rE,EAAI,GAAMmB,EAAKhtE,EAAIitE,EACnBpB,EAAI,GAAMqB,EAAKH,EAAK/sE,EACpB6rE,EAAI,IAAO7+D,EAAI2P,MAET,IAAqB,QAAhB8vD,EAAM5xD,MAAkB,CAEnC,GAAIkyD,GAAKpwD,EAAIylC,EAAG4qB,EAAKrwD,EAAIsb,EAAGg1C,EAAK9rD,EAAIihC,EAAG8qB,EAAK/rD,EAAI8W,CAEjD4zC,GAAI,GAAMkB,EAAKG,EAAKltE,EACpB6rE,EAAI,IAAQ7+D,EAAIirB,EAChB4zC,EAAI,GAAMoB,EAAKD,EAAKhtE,EAEpB6rE,EAAI,GAAMmB,EAAKC,EAAKjtE,EACpB6rE,EAAI,GAAM7+D,EAAIo1C,EACdypB,EAAI,GAAMqB,EAAKH,EAAK/sE,EAEpB6rE,EAAI,IAAQ7+D,EAAImU,EAChB0qD,EAAI,GAAM7rE,EACV6rE,EAAI,IAAO7+D,EAAI2P,MAET,IAAqB,QAAhB8vD,EAAM5xD,MAAkB,CAEnC,GAAI8xD,GAAK3/D,EAAIo1C,EAAGwqB,EAAK5/D,EAAIirB,EAAG40C,EAAK7sE,EAAIoiD,EAAG0qB,EAAK9sE,EAAIi4B,CAEjD4zC,GAAI,GAAMlvD,EAAIylC,EACdypB,EAAI,GAAMgB,EAAK1rD,EAAIyrD,EACnBf,EAAI,GAAMc,EAAKxrD,EAAI2rD,EAEnBjB,EAAI,GAAMlvD,EAAIsb,EACd4zC,EAAI,GAAMiB,EAAK3rD,EAAIwrD,EACnBd,EAAI,GAAMe,EAAKzrD,EAAI0rD,EAEnBhB,EAAI,IAAQ1qD,EACZ0qD,EAAI,GAAM7rE,EAAI2c,EACdkvD,EAAI,IAAO7+D,EAAI2P,MAET,IAAqB,QAAhB8vD,EAAM5xD,MAAkB,CAEnC,GAAIsyD,GAAKngE,EAAI2P,EAAGywD,EAAKpgE,EAAImU,EAAGksD,EAAKrtE,EAAI2c,EAAG2wD,EAAKttE,EAAImhB,CAEjD0qD,GAAI,GAAMlvD,EAAIylC,EACdypB,EAAI,GAAMyB,EAAKH,EAAKl1C,EACpB4zC,EAAI,GAAMwB,EAAKp1C,EAAIm1C,EAEnBvB,EAAI,GAAM5zC,EACV4zC,EAAI,GAAM7+D,EAAIo1C,EACdypB,EAAI,IAAQ7rE,EAAIoiD,EAEhBypB,EAAI,IAAQ1qD,EAAIihC,EAChBypB,EAAI,GAAMuB,EAAKn1C,EAAIo1C,EACnBxB,EAAI,IAAOsB,EAAKG,EAAKr1C,MAEf,IAAqB,QAAhBw0C,EAAM5xD,MAAkB,CAEnC,GAAIsyD,GAAKngE,EAAI2P,EAAGywD,EAAKpgE,EAAImU,EAAGksD,EAAKrtE,EAAI2c,EAAG2wD,EAAKttE,EAAImhB,CAEjD0qD,GAAI,GAAMlvD,EAAIylC,EACdypB,EAAI,IAAQ5zC,EACZ4zC,EAAI,GAAM1qD,EAAIihC,EAEdypB,EAAI,GAAMsB,EAAKl1C,EAAIq1C,EACnBzB,EAAI,GAAM7+D,EAAIo1C,EACdypB,EAAI,GAAMuB,EAAKn1C,EAAIo1C,EAEnBxB,EAAI,GAAMwB,EAAKp1C,EAAIm1C,EACnBvB,EAAI,GAAM7rE,EAAIoiD,EACdypB,EAAI,IAAOyB,EAAKr1C,EAAIk1C,EAerB,MAVAtB,GAAI,GAAM,EACVA,EAAI,GAAM,EACVA,EAAI,IAAO,EAGXA,EAAI,IAAO,EACXA,EAAI,IAAO,EACXA,EAAI,IAAO,EACXA,EAAI,IAAO,EAEJhzE,MAIR00E,2BAA4B,SAAWjmB,GAEtC,GAAIukB,GAAKhzE,KAAKM,SAEVH,EAAIsuD,EAAE3tD,GAAIV,EAAIquD,EAAE1tD,GAAIH,EAAI6tD,EAAEztD,GAAIH,EAAI4tD,EAAExtD,GACpC0qD,EAAKxrD,EAAIA,EAAGw0E,EAAKv0E,EAAIA,EAAGw0E,EAAKh0E,EAAIA,EACjCi0E,EAAK10E,EAAIwrD,EAAImpB,EAAK30E,EAAIw0E,EAAII,EAAK50E,EAAIy0E,EACnCI,EAAK50E,EAAIu0E,EAAIM,EAAK70E,EAAIw0E,EAAIM,EAAKt0E,EAAIg0E,EACnCO,EAAKt0E,EAAI8qD,EAAIypB,EAAKv0E,EAAI8zE,EAAIU,EAAKx0E,EAAI+zE,CAyBvC,OAvBA5B,GAAI,GAAM,GAAMgC,EAAKE,GACrBlC,EAAI,GAAM8B,EAAKO,EACfrC,EAAI,GAAM+B,EAAKK,EAEfpC,EAAI,GAAM8B,EAAKO,EACfrC,EAAI,GAAM,GAAM6B,EAAKK,GACrBlC,EAAI,GAAMiC,EAAKE,EAEfnC,EAAI,GAAM+B,EAAKK,EACfpC,EAAI,GAAMiC,EAAKE,EACfnC,EAAI,IAAO,GAAM6B,EAAKG,GAGtBhC,EAAI,GAAM,EACVA,EAAI,GAAM,EACVA,EAAI,IAAO,EAGXA,EAAI,IAAO,EACXA,EAAI,IAAO,EACXA,EAAI,IAAO,EACXA,EAAI,IAAO,EAEJhzE,MAIRyf,OAAQ,WAEP,GAAItf,GAAI,GAAIgB,GACRf,EAAI,GAAIe,GACRP,EAAI,GAAIO,EAEZ,OAAO,UAAiBm0E,EAAK91D,EAAQQ,GAEpC,GAAIgzD,GAAKhzE,KAAKM,QAyCd,OAvCAM,GAAE8pD,WAAY4qB,EAAK91D,GAEG,IAAjB5e,EAAEywE,aAINzwE,EAAEA,EAAI,GAIPA,EAAEuyB,YACFhzB,EAAEwqD,aAAc3qC,EAAIpf,GAEE,IAAjBT,EAAEkxE,aAIoB,IAArB5oD,KAAKmF,IAAK5N,EAAGpf,GAEjBA,EAAET,GAAK,KAIPS,EAAEA,GAAK,KAIRA,EAAEuyB,YACFhzB,EAAEwqD,aAAc3qC,EAAIpf,IAIrBT,EAAEgzB,YACF/yB,EAAEuqD,aAAc/pD,EAAGT,GAEnB6yE,EAAI,GAAM7yE,EAAEA,EAAG6yE,EAAI,GAAM5yE,EAAED,EAAG6yE,EAAI,GAAMpyE,EAAET,EAC1C6yE,EAAI,GAAM7yE,EAAEC,EAAG4yE,EAAI,GAAM5yE,EAAEA,EAAG4yE,EAAI,GAAMpyE,EAAER,EAC1C4yE,EAAI,GAAM7yE,EAAES,EAAGoyE,EAAI,GAAM5yE,EAAEQ,EAAGoyE,EAAI,IAAOpyE,EAAEA,EAEpCZ,SAMT2f,SAAU,SAAWovD,EAAGppE,GAEvB,WAAWzE,KAANyE,GAEJlF,QAAQqa,KAAM,oGACP9a,KAAKiV,iBAAkB85D,EAAGppE,IAI3B3F,KAAKiV,iBAAkBjV,KAAM+uE,IAIrCn8C,YAAa,SAAWm8C,GAEvB,MAAO/uE,MAAKiV,iBAAkB85D,EAAG/uE,OAIlCiV,iBAAkB,SAAWd,EAAGhN,GAE/B,GAAI2sE,GAAK3/D,EAAE7T,SACP0zE,EAAK7sE,EAAE7G,SACP0yE,EAAKhzE,KAAKM,SAEVi1E,EAAMzB,EAAI,GAAK0B,EAAM1B,EAAI,GAAK2B,EAAM3B,EAAI,GAAK4B,EAAM5B,EAAI,IACvD6B,EAAM7B,EAAI,GAAK8B,EAAM9B,EAAI,GAAK+B,EAAM/B,EAAI,GAAKgC,EAAMhC,EAAI,IACvDiC,EAAMjC,EAAI,GAAKkC,EAAMlC,EAAI,GAAKmC,EAAMnC,EAAI,IAAMoC,EAAMpC,EAAI,IACxDqC,EAAMrC,EAAI,GAAKsC,EAAMtC,EAAI,GAAKuC,EAAMvC,EAAI,IAAMwC,EAAMxC,EAAI,IAExDyC,EAAMvC,EAAI,GAAKwC,EAAMxC,EAAI,GAAKyC,EAAMzC,EAAI,GAAK0C,EAAM1C,EAAI,IACvD2C,EAAM3C,EAAI,GAAK4C,EAAM5C,EAAI,GAAK6C,EAAM7C,EAAI,GAAK8C,EAAM9C,EAAI,IACvD+C,EAAM/C,EAAI,GAAKgD,EAAMhD,EAAI,GAAKiD,EAAMjD,EAAI,IAAMkD,EAAMlD,EAAI,IACxDmD,EAAMnD,EAAI,GAAKoD,EAAMpD,EAAI,GAAKqD,EAAMrD,EAAI,IAAMsD,EAAMtD,EAAI,GAsB5D,OApBAhB,GAAI,GAAMuC,EAAMgB,EAAMf,EAAMmB,EAAMlB,EAAMsB,EAAMrB,EAAMyB,EACpDnE,EAAI,GAAMuC,EAAMiB,EAAMhB,EAAMoB,EAAMnB,EAAMuB,EAAMtB,EAAM0B,EACpDpE,EAAI,GAAMuC,EAAMkB,EAAMjB,EAAMqB,EAAMpB,EAAMwB,EAAMvB,EAAM2B,EACpDrE,EAAI,IAAOuC,EAAMmB,EAAMlB,EAAMsB,EAAMrB,EAAMyB,EAAMxB,EAAM4B,EAErDtE,EAAI,GAAM2C,EAAMY,EAAMX,EAAMe,EAAMd,EAAMkB,EAAMjB,EAAMqB,EACpDnE,EAAI,GAAM2C,EAAMa,EAAMZ,EAAMgB,EAAMf,EAAMmB,EAAMlB,EAAMsB,EACpDpE,EAAI,GAAM2C,EAAMc,EAAMb,EAAMiB,EAAMhB,EAAMoB,EAAMnB,EAAMuB,EACpDrE,EAAI,IAAO2C,EAAMe,EAAMd,EAAMkB,EAAMjB,EAAMqB,EAAMpB,EAAMwB,EAErDtE,EAAI,GAAM+C,EAAMQ,EAAMP,EAAMW,EAAMV,EAAMc,EAAMb,EAAMiB,EACpDnE,EAAI,GAAM+C,EAAMS,EAAMR,EAAMY,EAAMX,EAAMe,EAAMd,EAAMkB,EACpDpE,EAAI,IAAO+C,EAAMU,EAAMT,EAAMa,EAAMZ,EAAMgB,EAAMf,EAAMmB,EACrDrE,EAAI,IAAO+C,EAAMW,EAAMV,EAAMc,EAAMb,EAAMiB,EAAMhB,EAAMoB,EAErDtE,EAAI,GAAMmD,EAAMI,EAAMH,EAAMO,EAAMN,EAAMU,EAAMT,EAAMa,EACpDnE,EAAI,GAAMmD,EAAMK,EAAMJ,EAAMQ,EAAMP,EAAMW,EAAMV,EAAMc,EACpDpE,EAAI,IAAOmD,EAAMM,EAAML,EAAMS,EAAMR,EAAMY,EAAMX,EAAMe,EACrDrE,EAAI,IAAOmD,EAAMO,EAAMN,EAAMU,EAAMT,EAAMa,EAAMZ,EAAMgB,EAE9Ct3E,MAIRyxB,eAAgB,SAAWujC,GAE1B,GAAIge,GAAKhzE,KAAKM,QAOd,OALA0yE,GAAI,IAAOhe,EAAGge,EAAI,IAAOhe,EAAGge,EAAI,IAAOhe,EAAGge,EAAI,KAAQhe,EACtDge,EAAI,IAAOhe,EAAGge,EAAI,IAAOhe,EAAGge,EAAI,IAAOhe,EAAGge,EAAI,KAAQhe,EACtDge,EAAI,IAAOhe,EAAGge,EAAI,IAAOhe,EAAGge,EAAI,KAAQhe,EAAGge,EAAI,KAAQhe,EACvDge,EAAI,IAAOhe,EAAGge,EAAI,IAAOhe,EAAGge,EAAI,KAAQhe,EAAGge,EAAI,KAAQhe,EAEhDh1D,MAIRu3E,uBAAwB,WAEvB,GAAI1c,GAAK,GAAI15D,EAEb,OAAO,UAAiCif,GAEvC,IAAM,GAAIpa,GAAI,EAAG8K,EAAIsP,EAAUoB,MAAOxb,EAAI8K,EAAG9K,IAE5C60D,EAAG16D,EAAIigB,EAAU4pC,KAAMhkD,GACvB60D,EAAGz6D,EAAIggB,EAAUyxD,KAAM7rE,GACvB60D,EAAGj6D,EAAIwf,EAAUo3D,KAAMxxE,GAEvB60D,EAAG5pD,aAAcjR,MAEjBogB,EAAUq3D,OAAQzxE,EAAG60D,EAAG16D,EAAG06D,EAAGz6D,EAAGy6D,EAAGj6D,EAIrC,OAAOwf,OAMTs3D,YAAa,WAEZ,GAAI1E,GAAKhzE,KAAKM,SAEV0xE,EAAMgB,EAAI,GAAKf,EAAMe,EAAI,GAAKd,EAAMc,EAAI,GAAKb,EAAMa,EAAI,IACvDZ,EAAMY,EAAI,GAAKX,EAAMW,EAAI,GAAKV,EAAMU,EAAI,GAAKT,EAAMS,EAAI,IACvDR,EAAMQ,EAAI,GAAKP,EAAMO,EAAI,GAAKN,EAAMM,EAAI,IAAML,EAAMK,EAAI,GAM5D,OALUA,GAAI,KAOVb,EAAMG,EAAMG,EACXP,EAAMK,EAAME,EACZN,EAAME,EAAMK,EACZT,EAAMM,EAAMG,EACZR,EAAMG,EAAMM,EACZV,EAAMK,EAAMK,GAZQK,EAAI,KAezBhB,EAAMM,EAAMK,EACXX,EAAMO,EAAMG,EACZP,EAAMC,EAAMM,EACZR,EAAME,EAAMO,EACZT,EAAMK,EAAMC,EACZL,EAAMG,EAAME,GApBuBQ,EAAI,MAuBxChB,EAAMO,EAAME,EACXT,EAAMK,EAAMM,EACZR,EAAMC,EAAMK,EACZR,EAAMG,EAAMO,EACZR,EAAME,EAAMG,EACZP,EAAMM,EAAMC,GA5BuCQ,EAAI,MA+BxDd,EAAMG,EAAMG,EACXR,EAAMM,EAAMG,EACZT,EAAMK,EAAMK,EACZR,EAAME,EAAMK,EACZR,EAAMG,EAAMM,EACZT,EAAMK,EAAME,IAOlBmF,UAAW,WAEV,GACIC,GADA5E,EAAKhzE,KAAKM,QAWd,OARAs3E,GAAM5E,EAAI,GAAKA,EAAI,GAAMA,EAAI,GAAKA,EAAI,GAAM4E,EAC5CA,EAAM5E,EAAI,GAAKA,EAAI,GAAMA,EAAI,GAAKA,EAAI,GAAM4E,EAC5CA,EAAM5E,EAAI,GAAKA,EAAI,GAAMA,EAAI,GAAKA,EAAI,GAAM4E,EAE5CA,EAAM5E,EAAI,GAAKA,EAAI,GAAMA,EAAI,IAAMA,EAAI,IAAO4E,EAC9CA,EAAM5E,EAAI,GAAKA,EAAI,GAAMA,EAAI,IAAMA,EAAI,IAAO4E,EAC9CA,EAAM5E,EAAI,IAAMA,EAAI,IAAOA,EAAI,IAAMA,EAAI,IAAO4E,EAEzC53E,MAIR63E,YAAa,SAAWrxE,GAEvB,GAAIwsE,GAAKhzE,KAAKM,QAMd,OAJA0yE,GAAI,IAAOxsE,EAAErG,EACb6yE,EAAI,IAAOxsE,EAAEpG,EACb4yE,EAAI,IAAOxsE,EAAE5F,EAENZ,MAIRgxC,WAAY,SAAW+9B,EAAG+I,GAGzB,GAAI9E,GAAKhzE,KAAKM,SACb2yE,EAAKlE,EAAEzuE,SAEP0xE,EAAMiB,EAAI,GAAKb,EAAMa,EAAI,GAAKT,EAAMS,EAAI,GAAKL,EAAMK,EAAI,GACvDhB,EAAMgB,EAAI,GAAKZ,EAAMY,EAAI,GAAKR,EAAMQ,EAAI,GAAKJ,EAAMI,EAAI,GACvDf,EAAMe,EAAI,GAAKX,EAAMW,EAAI,GAAKP,EAAMO,EAAI,IAAMH,EAAMG,EAAI,IACxDd,EAAMc,EAAI,IAAMV,EAAMU,EAAI,IAAMN,EAAMM,EAAI,IAAMF,EAAME,EAAI,IAE1D8E,EAAMzF,EAAMK,EAAME,EAAMN,EAAMG,EAAMG,EAAMN,EAAME,EAAMK,EAAMT,EAAMM,EAAMG,EAAMR,EAAMG,EAAMM,EAAMV,EAAMK,EAAMK,EAC5GiF,EAAM7F,EAAMO,EAAMG,EAAMX,EAAMS,EAAME,EAAMV,EAAMM,EAAMK,EAAMb,EAAMU,EAAMG,EAAMZ,EAAMO,EAAMM,EAAMd,EAAMS,EAAMK,EAC5GkF,EAAM/F,EAAMK,EAAMM,EAAMV,EAAMG,EAAMO,EAAMV,EAAME,EAAMS,EAAMb,EAAMM,EAAMO,EAAMZ,EAAMG,EAAMU,EAAMd,EAAMK,EAAMS,EAC5GmF,EAAM/F,EAAMG,EAAMG,EAAMP,EAAMK,EAAME,EAAMN,EAAME,EAAMK,EAAMT,EAAMM,EAAMG,EAAMR,EAAMG,EAAMM,EAAMV,EAAMK,EAAMK,EAEzGwF,EAAMnG,EAAM+F,EAAM3F,EAAM4F,EAAMxF,EAAMyF,EAAMrF,EAAMsF,CAEpD,IAAa,IAARC,EAAY,CAEhB,GAAIC,GAAM,oEAEV,KAA2B,IAAtBN,EAEJ,KAAM,IAAIrjD,OAAO2jD,EAQlB,OAJC33E,SAAQqa,KAAMs9D,GAIRp4E,KAAK0yB,WAIb,GAAI2lD,GAAS,EAAIF,CAsBjB,OApBAnF,GAAI,GAAM+E,EAAMM,EAChBrF,EAAI,IAAQT,EAAMG,EAAME,EAAMN,EAAMK,EAAMC,EAAML,EAAMC,EAAMM,EAAMV,EAAMO,EAAMG,EAAMR,EAAME,EAAMO,EAAMX,EAAMM,EAAMK,GAAQsF,EAC1HrF,EAAI,IAAQX,EAAMM,EAAMC,EAAML,EAAME,EAAMG,EAAML,EAAMC,EAAMK,EAAMT,EAAMO,EAAME,EAAMR,EAAMG,EAAMO,EAAMX,EAAMK,EAAMM,GAAQsF,EAC1HrF,EAAI,IAAQV,EAAMG,EAAMG,EAAMP,EAAMK,EAAME,EAAMN,EAAME,EAAMK,EAAMT,EAAMM,EAAMG,EAAMR,EAAMG,EAAMM,EAAMV,EAAMK,EAAMK,GAAQuF,EAE1HrF,EAAI,GAAMgF,EAAMK,EAChBrF,EAAI,IAAQd,EAAMS,EAAMC,EAAMT,EAAMO,EAAME,EAAMT,EAAMK,EAAMM,EAAMd,EAAMW,EAAMG,EAAMZ,EAAMM,EAAMO,EAAMf,EAAMU,EAAMK,GAAQsF,EAC1HrF,EAAI,IAAQb,EAAMM,EAAMG,EAAMX,EAAMU,EAAMC,EAAMT,EAAMK,EAAMK,EAAMb,EAAMW,EAAME,EAAMZ,EAAMO,EAAMO,EAAMf,EAAMS,EAAMM,GAAQsF,EAC1HrF,EAAI,IAAQf,EAAMS,EAAME,EAAMV,EAAMO,EAAMG,EAAMV,EAAMM,EAAMK,EAAMb,EAAMU,EAAMG,EAAMZ,EAAMO,EAAMM,EAAMd,EAAMS,EAAMK,GAAQuF,EAE1HrF,EAAI,GAAMiF,EAAMI,EAChBrF,EAAI,IAAQb,EAAMG,EAAMM,EAAMV,EAAMK,EAAMK,EAAMT,EAAMC,EAAMU,EAAMd,EAAMO,EAAMO,EAAMZ,EAAME,EAAMW,EAAMf,EAAMM,EAAMS,GAAQsF,EAC1HrF,EAAI,KAASf,EAAMM,EAAMK,EAAMT,EAAME,EAAMO,EAAMT,EAAMC,EAAMS,EAAMb,EAAMO,EAAMM,EAAMZ,EAAMG,EAAMW,EAAMf,EAAMK,EAAMU,GAAQsF,EAC3HrF,EAAI,KAASd,EAAMG,EAAMO,EAAMX,EAAMK,EAAMM,EAAMV,EAAME,EAAMS,EAAMb,EAAMM,EAAMO,EAAMZ,EAAMG,EAAMU,EAAMd,EAAMK,EAAMS,GAAQuF,EAE3HrF,EAAI,IAAOkF,EAAMG,EACjBrF,EAAI,KAASd,EAAMK,EAAMC,EAAML,EAAMG,EAAME,EAAML,EAAMC,EAAMM,EAAMV,EAAMO,EAAMG,EAAMR,EAAME,EAAMO,EAAMX,EAAMM,EAAMK,GAAQ0F,EAC3HrF,EAAI,KAASb,EAAME,EAAMG,EAAMP,EAAMM,EAAMC,EAAML,EAAMC,EAAMK,EAAMT,EAAMO,EAAME,EAAMR,EAAMG,EAAMO,EAAMX,EAAMK,EAAMM,GAAQ0F,EAC3HrF,EAAI,KAASf,EAAMK,EAAME,EAAMN,EAAMG,EAAMG,EAAMN,EAAME,EAAMK,EAAMT,EAAMM,EAAMG,EAAMR,EAAMG,EAAMM,EAAMV,EAAMK,EAAMK,GAAQ2F,EAEpHr4E,MAIR8O,MAAO,SAAWtI,GAEjB,GAAIwsE,GAAKhzE,KAAKM,SACVH,EAAIqG,EAAErG,EAAGC,EAAIoG,EAAEpG,EAAGQ,EAAI4F,EAAE5F,CAO5B,OALAoyE,GAAI,IAAO7yE,EAAG6yE,EAAI,IAAO5yE,EAAG4yE,EAAI,IAAOpyE,EACvCoyE,EAAI,IAAO7yE,EAAG6yE,EAAI,IAAO5yE,EAAG4yE,EAAI,IAAOpyE,EACvCoyE,EAAI,IAAO7yE,EAAG6yE,EAAI,IAAO5yE,EAAG4yE,EAAI,KAAQpyE,EACxCoyE,EAAI,IAAO7yE,EAAG6yE,EAAI,IAAO5yE,EAAG4yE,EAAI,KAAQpyE,EAEjCZ,MAIRs4E,kBAAmB,WAElB,GAAItF,GAAKhzE,KAAKM,SAEVi4E,EAAWvF,EAAI,GAAMA,EAAI,GAAMA,EAAI,GAAMA,EAAI,GAAMA,EAAI,GAAMA,EAAI,GACjEwF,EAAWxF,EAAI,GAAMA,EAAI,GAAMA,EAAI,GAAMA,EAAI,GAAMA,EAAI,GAAMA,EAAI,GACjEyF,EAAWzF,EAAI,GAAMA,EAAI,GAAMA,EAAI,GAAMA,EAAI,GAAMA,EAAI,IAAOA,EAAI,GAEtE,OAAOvqD,MAAK81B,KAAM91B,KAAK3c,IAAKysE,EAAUC,EAAUC,KAIjDl5D,gBAAiB,SAAWpf,EAAGC,EAAGQ,GAWjC,MATAZ,MAAK6H,IAEJ,EAAG,EAAG,EAAG1H,EACT,EAAG,EAAG,EAAGC,EACT,EAAG,EAAG,EAAGQ,EACT,EAAG,EAAG,EAAG,GAIHZ,MAIR04E,cAAe,SAAWpkB,GAEzB,GAAIxwC,GAAI2E,KAAKyJ,IAAKoiC,GAASU,EAAIvsC,KAAK0lC,IAAKmG,EAWzC,OATAt0D,MAAK6H,IAEJ,EAAG,EAAG,EAAG,EACT,EAAGic,GAAKkxC,EAAG,EACX,EAAGA,EAAGlxC,EAAG,EACT,EAAG,EAAG,EAAG,GAIH9jB,MAIR24E,cAAe,SAAWrkB,GAEzB,GAAIxwC,GAAI2E,KAAKyJ,IAAKoiC,GAASU,EAAIvsC,KAAK0lC,IAAKmG,EAWzC,OATAt0D,MAAK6H,IAEHic,EAAG,EAAGkxC,EAAG,EACT,EAAG,EAAG,EAAG,GACRA,EAAG,EAAGlxC,EAAG,EACV,EAAG,EAAG,EAAG,GAIJ9jB,MAIR44E,cAAe,SAAWtkB,GAEzB,GAAIxwC,GAAI2E,KAAKyJ,IAAKoiC,GAASU,EAAIvsC,KAAK0lC,IAAKmG,EAWzC,OATAt0D,MAAK6H,IAEJic,GAAKkxC,EAAG,EAAG,EACXA,EAAGlxC,EAAG,EAAG,EACT,EAAG,EAAG,EAAG,EACT,EAAG,EAAG,EAAG,GAIH9jB,MAIR64E,iBAAkB,SAAWC,EAAM3mD,GAIlC,GAAIrO,GAAI2E,KAAKyJ,IAAKC,GACd6iC,EAAIvsC,KAAK0lC,IAAKh8B,GACd86B,EAAI,EAAInpC,EACR3jB,EAAI24E,EAAK34E,EAAGC,EAAI04E,EAAK14E,EAAGQ,EAAIk4E,EAAKl4E,EACjCm4E,EAAK9rB,EAAI9sD,EAAG64E,EAAK/rB,EAAI7sD,CAWxB,OATDJ,MAAK6H,IAEJkxE,EAAK54E,EAAI2jB,EAAGi1D,EAAK34E,EAAI40D,EAAIp0D,EAAGm4E,EAAKn4E,EAAIo0D,EAAI50D,EAAG,EAC5C24E,EAAK34E,EAAI40D,EAAIp0D,EAAGo4E,EAAK54E,EAAI0jB,EAAGk1D,EAAKp4E,EAAIo0D,EAAI70D,EAAG,EAC5C44E,EAAKn4E,EAAIo0D,EAAI50D,EAAG44E,EAAKp4E,EAAIo0D,EAAI70D,EAAG8sD,EAAIrsD,EAAIA,EAAIkjB,EAAG,EAC/C,EAAG,EAAG,EAAG,GAIF9jB,MAITi5E,UAAW,SAAW94E,EAAGC,EAAGQ,GAW3B,MATAZ,MAAK6H,IAEJ1H,EAAG,EAAG,EAAG,EACT,EAAGC,EAAG,EAAG,EACT,EAAG,EAAGQ,EAAG,EACT,EAAG,EAAG,EAAG,GAIHZ,MAIRk5E,UAAW,SAAW/4E,EAAGC,EAAGQ,GAW3B,MATAZ,MAAK6H,IAEJ,EAAGzH,EAAGQ,EAAG,EACTT,EAAG,EAAGS,EAAG,EACTT,EAAGC,EAAG,EAAG,EACT,EAAG,EAAG,EAAG,GAIHJ,MAIRm5E,QAAS,SAAWlmE,EAAUsP,EAAYzT,GAMzC,MAJA9O,MAAK00E,2BAA4BnyD,GACjCviB,KAAK8O,MAAOA,GACZ9O,KAAK63E,YAAa5kE,GAEXjT,MAIRsV,UAAW,WAEV,GAAI8S,GAAS,GAAIjnB,GACbkC,EAAS,GAAIhD,EAEjB,OAAO,UAAoB4S,EAAUsP,EAAYzT,GAEhD,GAAIkkE,GAAKhzE,KAAKM,SAEV84E,EAAKhxD,EAAOvgB,IAAKmrE,EAAI,GAAKA,EAAI,GAAKA,EAAI,IAAMxyE,SAC7C64E,EAAKjxD,EAAOvgB,IAAKmrE,EAAI,GAAKA,EAAI,GAAKA,EAAI,IAAMxyE,SAC7C84E,EAAKlxD,EAAOvgB,IAAKmrE,EAAI,GAAKA,EAAI,GAAKA,EAAI,KAAOxyE,QAGxCR,MAAK03E,cACJ,IAAI0B,GAAOA,GAEtBnmE,EAAS9S,EAAI6yE,EAAI,IACjB//D,EAAS7S,EAAI4yE,EAAI,IACjB//D,EAASrS,EAAIoyE,EAAI,IAGjB3vE,EAAO+N,KAAMpR,KAEb,IAAIu5E,GAAQ,EAAIH,EACZI,EAAQ,EAAIH,EACZI,EAAQ,EAAIH,CAoBhB,OAlBAj2E,GAAO/C,SAAU,IAAOi5E,EACxBl2E,EAAO/C,SAAU,IAAOi5E,EACxBl2E,EAAO/C,SAAU,IAAOi5E,EAExBl2E,EAAO/C,SAAU,IAAOk5E,EACxBn2E,EAAO/C,SAAU,IAAOk5E,EACxBn2E,EAAO/C,SAAU,IAAOk5E,EAExBn2E,EAAO/C,SAAU,IAAOm5E,EACxBp2E,EAAO/C,SAAU,IAAOm5E,EACxBp2E,EAAO/C,SAAU,KAAQm5E,EAEzBl3D,EAAWm3D,sBAAuBr2E,GAElCyL,EAAM3O,EAAIi5E,EACVtqE,EAAM1O,EAAIi5E,EACVvqE,EAAMlO,EAAI04E,EAEHt5E,SAMT25E,gBAAiB,SAAWp2D,EAAMC,EAAOC,EAAKC,EAAQ7O,EAAMC,OAE9C5T,KAAR4T,GAEJrU,QAAQqa,KAAM,uGAIf,IAAIk4D,GAAKhzE,KAAKM,SACVH,EAAI,EAAI0U,GAAS2O,EAAQD,GACzBnjB,EAAI,EAAIyU,GAAS4O,EAAMC,GAEvBvP,GAAMqP,EAAQD,IAAWC,EAAQD,GACjCpc,GAAMsc,EAAMC,IAAaD,EAAMC,GAC/BI,IAAQhP,EAAMD,IAAWC,EAAMD,GAC/ByT,GAAM,EAAIxT,EAAMD,GAASC,EAAMD,EAOnC,OALAm+D,GAAI,GAAM7yE,EAAG6yE,EAAI,GAAM,EAAGA,EAAI,GAAM7+D,EAAG6+D,EAAI,IAAO,EAClDA,EAAI,GAAM,EAAGA,EAAI,GAAM5yE,EAAG4yE,EAAI,GAAM7rE,EAAG6rE,EAAI,IAAO,EAClDA,EAAI,GAAM,EAAGA,EAAI,GAAM,EAAGA,EAAI,IAAOlvD,EAAGkvD,EAAI,IAAO1qD,EACnD0qD,EAAI,GAAM,EAAGA,EAAI,GAAM,EAAGA,EAAI,KAAS,EAAGA,EAAI,IAAO,EAE9ChzE,MAIR45E,iBAAkB,SAAWr2D,EAAMC,EAAOC,EAAKC,EAAQ7O,EAAMC,GAE5D,GAAIk+D,GAAKhzE,KAAKM,SACVO,EAAI,GAAQ2iB,EAAQD,GACpBs2D,EAAI,GAAQp2D,EAAMC,GAClBqa,EAAI,GAAQjpB,EAAMD,GAElB1U,GAAMqjB,EAAQD,GAAS1iB,EACvBT,GAAMqjB,EAAMC,GAAWm2D,EACvBj5E,GAAMkU,EAAMD,GAASkpB,CAOzB,OALAi1C,GAAI,GAAM,EAAInyE,EAAGmyE,EAAI,GAAM,EAAGA,EAAI,GAAM,EAAGA,EAAI,KAAS7yE,EACxD6yE,EAAI,GAAM,EAAGA,EAAI,GAAM,EAAI6G,EAAG7G,EAAI,GAAM,EAAGA,EAAI,KAAS5yE,EACxD4yE,EAAI,GAAM,EAAGA,EAAI,GAAM,EAAGA,EAAI,KAAS,EAAIj1C,EAAGi1C,EAAI,KAASpyE,EAC3DoyE,EAAI,GAAM,EAAGA,EAAI,GAAM,EAAGA,EAAI,IAAO,EAAGA,EAAI,IAAO,EAE5ChzE,MAIR2lC,OAAQ,SAAWtiC,GAKlB,IAAM,GAHF2vE,GAAKhzE,KAAKM,SACV2yE,EAAK5vE,EAAO/C,SAEN0F,EAAI,EAAGA,EAAI,GAAIA,IAExB,GAAKgtE,EAAIhtE,KAAQitE,EAAIjtE,GAAM,OAAO,CAInC,QAAO,GAIR4qC,UAAW,SAAWrrC,EAAOvC,OAEZ9B,KAAX8B,IAAuBA,EAAS,EAErC,KAAM,GAAIgD,GAAI,EAAGA,EAAI,GAAIA,IAExBhG,KAAKM,SAAU0F,GAAMT,EAAOS,EAAIhD,EAIjC,OAAOhD,OAIR+F,QAAS,SAAWR,EAAOvC,OAEX9B,KAAVqE,IAAsBA,UACXrE,KAAX8B,IAAuBA,EAAS,EAErC,IAAIgwE,GAAKhzE,KAAKM,QAsBd,OApBAiF,GAAOvC,GAAWgwE,EAAI,GACtBztE,EAAOvC,EAAS,GAAMgwE,EAAI,GAC1BztE,EAAOvC,EAAS,GAAMgwE,EAAI,GAC1BztE,EAAOvC,EAAS,GAAMgwE,EAAI,GAE1BztE,EAAOvC,EAAS,GAAMgwE,EAAI,GAC1BztE,EAAOvC,EAAS,GAAMgwE,EAAI,GAC1BztE,EAAOvC,EAAS,GAAMgwE,EAAI,GAC1BztE,EAAOvC,EAAS,GAAMgwE,EAAI,GAE1BztE,EAAOvC,EAAS,GAAMgwE,EAAI,GAC1BztE,EAAOvC,EAAS,GAAMgwE,EAAI,GAC1BztE,EAAOvC,EAAS,IAAOgwE,EAAI,IAC3BztE,EAAOvC,EAAS,IAAOgwE,EAAI,IAE3BztE,EAAOvC,EAAS,IAAOgwE,EAAI,IAC3BztE,EAAOvC,EAAS,IAAOgwE,EAAI,IAC3BztE,EAAOvC,EAAS,IAAOgwE,EAAI,IAC3BztE,EAAOvC,EAAS,IAAOgwE,EAAI,IAEpBztE,KAsBTvD,OAAO2rE,OAAQhtE,GAEdm5E,MAAO,SAAWC,EAAIC,EAAIC,EAAIhtB,GAE7B,MAAOgtB,GAAG7oE,KAAM2oE,GAAKD,MAAOE,EAAI/sB,IAIjCitB,UAAW,SAAWC,EAAK9nC,EAAW+nC,EAAMC,EAAYC,EAAMC,EAAYttB,GAIzE,GAAIxB,GAAK2uB,EAAMC,EAAa,GAC3BG,EAAKJ,EAAMC,EAAa,GACxBI,EAAKL,EAAMC,EAAa,GACxBK,EAAKN,EAAMC,EAAa,GAExB3uB,EAAK4uB,EAAMC,EAAa,GACxBI,EAAKL,EAAMC,EAAa,GACxBK,EAAKN,EAAMC,EAAa,GACxBM,EAAKP,EAAMC,EAAa,EAEzB,IAAKG,IAAOG,GAAMpvB,IAAOC,GAAM8uB,IAAOG,GAAMF,IAAOG,EAAK,CAEvD,GAAI5lB,GAAI,EAAI/H,EAEX/6B,EAAMu5B,EAAKC,EAAK8uB,EAAKG,EAAKF,EAAKG,EAAKF,EAAKG,EAEzC5R,EAAQ/2C,GAAO,EAAI,GAAM,EACzB4oD,EAAS,EAAI5oD,EAAMA,CAGpB,IAAK4oD,EAASxN,OAAOC,QAAU,CAE9B,GAAIpf,GAAM1lC,KAAK81B,KAAMu8B,GACpBC,EAAMtyD,KAAK8jC,MAAO4B,EAAKj8B,EAAM+2C,EAE9BjU,GAAIvsC,KAAK0lC,IAAK6G,EAAI+lB,GAAQ5sB,EAC1BlB,EAAIxkC,KAAK0lC,IAAKlB,EAAI8tB,GAAQ5sB,EAI3B,GAAI6sB,GAAO/tB,EAAIgc,CAQf,IANAxd,EAAKA,EAAKuJ,EAAItJ,EAAKsvB,EACnBR,EAAKA,EAAKxlB,EAAI2lB,EAAKK,EACnBP,EAAKA,EAAKzlB,EAAI4lB,EAAKI,EACnBN,EAAKA,EAAK1lB,EAAI6lB,EAAKG,EAGdhmB,IAAM,EAAI/H,EAAI,CAElB,GAAI7tB,GAAI,EAAI3W,KAAK81B,KAAMkN,EAAKA,EAAK+uB,EAAKA,EAAKC,EAAKA,EAAKC,EAAKA,EAE1DjvB,IAAMrsB,EACNo7C,GAAMp7C,EACNq7C,GAAMr7C,EACNs7C,GAAMt7C,GAMR+6C,EAAK9nC,GAAcoZ,EACnB0uB,EAAK9nC,EAAY,GAAMmoC,EACvBL,EAAK9nC,EAAY,GAAMooC,EACvBN,EAAK9nC,EAAY,GAAMqoC,KAMzB14E,OAAO+gB,iBAAkBpiB,EAAWwgE,WAEnChhE,GAECwhB,IAAK,WAEJ,MAAO3hB,MAAKc,IAIb+G,IAAK,SAAW3F,GAEflC,KAAKc,GAAKoB,EACVlC,KAAKi7E,qBAMP76E,GAECuhB,IAAK,WAEJ,MAAO3hB,MAAKe,IAIb8G,IAAK,SAAW3F,GAEflC,KAAKe,GAAKmB,EACVlC,KAAKi7E,qBAMPr6E,GAEC+gB,IAAK,WAEJ,MAAO3hB,MAAKgB,IAIb6G,IAAK,SAAW3F,GAEflC,KAAKgB,GAAKkB,EACVlC,KAAKi7E,qBAMPp6E,GAEC8gB,IAAK,WAEJ,MAAO3hB,MAAKiB,IAIb4G,IAAK,SAAW3F,GAEflC,KAAKiB,GAAKiB,EACVlC,KAAKi7E,uBAQRj5E,OAAO2rE,OAAQhtE,EAAWwgE,WAEzBt5D,IAAK,SAAW1H,EAAGC,EAAGQ,EAAGC,GASxB,MAPAb,MAAKc,GAAKX,EACVH,KAAKe,GAAKX,EACVJ,KAAKgB,GAAKJ,EACVZ,KAAKiB,GAAKJ,EAEVb,KAAKi7E,mBAEEj7E,MAIRyb,MAAO,WAEN,MAAO,IAAIzb,MAAKg4D,YAAah4D,KAAKc,GAAId,KAAKe,GAAIf,KAAKgB,GAAIhB,KAAKiB,KAI9DmQ,KAAM,SAAWmR,GAShB,MAPAviB,MAAKc,GAAKyhB,EAAWpiB,EACrBH,KAAKe,GAAKwhB,EAAWniB,EACrBJ,KAAKgB,GAAKuhB,EAAW3hB,EACrBZ,KAAKiB,GAAKshB,EAAW1hB,EAErBb,KAAKi7E,mBAEEj7E,MAIRwiB,aAAc,SAAWoxD,EAAOh3D,GAE/B,IAASg3D,IAASA,EAAMC,QAEvB,KAAM,IAAIp/C,OAAO,mGAIlB,IAAIt0B,GAAIyzE,EAAM9yE,GAAIV,EAAIwzE,EAAM7yE,GAAIH,EAAIgzE,EAAM5yE,GAAIghB,EAAQ4xD,EAAM5xD,MAMxDkQ,EAAMzJ,KAAKyJ,IACXi8B,EAAM1lC,KAAK0lC,IAEX2b,EAAK53C,EAAK/xB,EAAI,GACd4pE,EAAK73C,EAAK9xB,EAAI,GACd4pE,EAAK93C,EAAKtxB,EAAI,GAEds6E,EAAK/sB,EAAKhuD,EAAI,GACdg7E,EAAKhtB,EAAK/tD,EAAI,GACdg7E,EAAKjtB,EAAKvtD,EAAI,EAgDlB,OA9Ce,QAAVohB,GAEJhiB,KAAKc,GAAKo6E,EAAKnR,EAAKC,EAAKF,EAAKqR,EAAKC,EACnCp7E,KAAKe,GAAK+oE,EAAKqR,EAAKnR,EAAKkR,EAAKnR,EAAKqR,EACnCp7E,KAAKgB,GAAK8oE,EAAKC,EAAKqR,EAAKF,EAAKC,EAAKnR,EACnChqE,KAAKiB,GAAK6oE,EAAKC,EAAKC,EAAKkR,EAAKC,EAAKC,GAEd,QAAVp5D,GAEXhiB,KAAKc,GAAKo6E,EAAKnR,EAAKC,EAAKF,EAAKqR,EAAKC,EACnCp7E,KAAKe,GAAK+oE,EAAKqR,EAAKnR,EAAKkR,EAAKnR,EAAKqR,EACnCp7E,KAAKgB,GAAK8oE,EAAKC,EAAKqR,EAAKF,EAAKC,EAAKnR,EACnChqE,KAAKiB,GAAK6oE,EAAKC,EAAKC,EAAKkR,EAAKC,EAAKC,GAEd,QAAVp5D,GAEXhiB,KAAKc,GAAKo6E,EAAKnR,EAAKC,EAAKF,EAAKqR,EAAKC,EACnCp7E,KAAKe,GAAK+oE,EAAKqR,EAAKnR,EAAKkR,EAAKnR,EAAKqR,EACnCp7E,KAAKgB,GAAK8oE,EAAKC,EAAKqR,EAAKF,EAAKC,EAAKnR,EACnChqE,KAAKiB,GAAK6oE,EAAKC,EAAKC,EAAKkR,EAAKC,EAAKC,GAEd,QAAVp5D,GAEXhiB,KAAKc,GAAKo6E,EAAKnR,EAAKC,EAAKF,EAAKqR,EAAKC,EACnCp7E,KAAKe,GAAK+oE,EAAKqR,EAAKnR,EAAKkR,EAAKnR,EAAKqR,EACnCp7E,KAAKgB,GAAK8oE,EAAKC,EAAKqR,EAAKF,EAAKC,EAAKnR,EACnChqE,KAAKiB,GAAK6oE,EAAKC,EAAKC,EAAKkR,EAAKC,EAAKC,GAEd,QAAVp5D,GAEXhiB,KAAKc,GAAKo6E,EAAKnR,EAAKC,EAAKF,EAAKqR,EAAKC,EACnCp7E,KAAKe,GAAK+oE,EAAKqR,EAAKnR,EAAKkR,EAAKnR,EAAKqR,EACnCp7E,KAAKgB,GAAK8oE,EAAKC,EAAKqR,EAAKF,EAAKC,EAAKnR,EACnChqE,KAAKiB,GAAK6oE,EAAKC,EAAKC,EAAKkR,EAAKC,EAAKC,GAEd,QAAVp5D,IAEXhiB,KAAKc,GAAKo6E,EAAKnR,EAAKC,EAAKF,EAAKqR,EAAKC,EACnCp7E,KAAKe,GAAK+oE,EAAKqR,EAAKnR,EAAKkR,EAAKnR,EAAKqR,EACnCp7E,KAAKgB,GAAK8oE,EAAKC,EAAKqR,EAAKF,EAAKC,EAAKnR,EACnChqE,KAAKiB,GAAK6oE,EAAKC,EAAKC,EAAKkR,EAAKC,EAAKC,IAIpB,IAAXx+D,GAAmB5c,KAAKi7E,mBAEtBj7E,MAIRq7E,iBAAkB,SAAWvC,EAAM3mD,GAMlC,GAAImpD,GAAYnpD,EAAQ,EAAG6iC,EAAIvsC,KAAK0lC,IAAKmtB,EASzC,OAPAt7E,MAAKc,GAAKg4E,EAAK34E,EAAI60D,EACnBh1D,KAAKe,GAAK+3E,EAAK14E,EAAI40D,EACnBh1D,KAAKgB,GAAK83E,EAAKl4E,EAAIo0D,EACnBh1D,KAAKiB,GAAKwnB,KAAKyJ,IAAKopD,GAEpBt7E,KAAKi7E,mBAEEj7E,MAIR05E,sBAAuB,SAAW3K,GAMjC,GAOC/Z,GAPGge,EAAKjE,EAAEzuE,SAEVi7E,EAAMvI,EAAI,GAAKwI,EAAMxI,EAAI,GAAKyI,EAAMzI,EAAI,GACxC0I,EAAM1I,EAAI,GAAK2I,EAAM3I,EAAI,GAAK4I,EAAM5I,EAAI,GACxC6I,EAAM7I,EAAI,GAAK8I,EAAM9I,EAAI,GAAK+I,EAAM/I,EAAI,IAExCgJ,EAAQT,EAAMI,EAAMI,CA2CrB,OAxCKC,GAAQ,GAEZhnB,EAAI,GAAMvsC,KAAK81B,KAAMy9B,EAAQ,GAE7Bh8E,KAAKiB,GAAK,IAAO+zD,EACjBh1D,KAAKc,IAAOg7E,EAAMF,GAAQ5mB,EAC1Bh1D,KAAKe,IAAO06E,EAAMI,GAAQ7mB,EAC1Bh1D,KAAKgB,IAAO06E,EAAMF,GAAQxmB,GAEfumB,EAAMI,GAAOJ,EAAMQ,GAE9B/mB,EAAI,EAAMvsC,KAAK81B,KAAM,EAAMg9B,EAAMI,EAAMI,GAEvC/7E,KAAKiB,IAAO66E,EAAMF,GAAQ5mB,EAC1Bh1D,KAAKc,GAAK,IAAOk0D,EACjBh1D,KAAKe,IAAOy6E,EAAME,GAAQ1mB,EAC1Bh1D,KAAKgB,IAAOy6E,EAAMI,GAAQ7mB,GAEf2mB,EAAMI,GAEjB/mB,EAAI,EAAMvsC,KAAK81B,KAAM,EAAMo9B,EAAMJ,EAAMQ,GAEvC/7E,KAAKiB,IAAOw6E,EAAMI,GAAQ7mB,EAC1Bh1D,KAAKc,IAAO06E,EAAME,GAAQ1mB,EAC1Bh1D,KAAKe,GAAK,IAAOi0D,EACjBh1D,KAAKgB,IAAO46E,EAAME,GAAQ9mB,IAI1BA,EAAI,EAAMvsC,KAAK81B,KAAM,EAAMw9B,EAAMR,EAAMI,GAEvC37E,KAAKiB,IAAOy6E,EAAMF,GAAQxmB,EAC1Bh1D,KAAKc,IAAO26E,EAAMI,GAAQ7mB,EAC1Bh1D,KAAKe,IAAO66E,EAAME,GAAQ9mB,EAC1Bh1D,KAAKgB,GAAK,IAAOg0D,GAIlBh1D,KAAKi7E,mBAEEj7E,MAIRi8E,mBAAoB,WAInB,GACIr2E,GADAi1D,EAAK,GAAI15D,EAKb,OAAO,UAA6B+6E,EAAOC,GA+B1C,WA7BYj7E,KAAP25D,IAAmBA,EAAK,GAAI15D,IAEjCyE,EAAIs2E,EAAMtoB,IAAKuoB,GAAQ,EAElBv2E,EARI,MAURA,EAAI,EAEC6iB,KAAKmF,IAAKsuD,EAAM/7E,GAAMsoB,KAAKmF,IAAKsuD,EAAMt7E,GAE1Ci6D,EAAGhzD,KAAOq0E,EAAM97E,EAAG87E,EAAM/7E,EAAG,GAI5B06D,EAAGhzD,IAAK,GAAKq0E,EAAMt7E,EAAGs7E,EAAM97E,IAM7By6D,EAAGlQ,aAAcuxB,EAAOC,GAIzBn8E,KAAKc,GAAK+5D,EAAG16D,EACbH,KAAKe,GAAK85D,EAAGz6D,EACbJ,KAAKgB,GAAK65D,EAAGj6D,EACbZ,KAAKiB,GAAK2E,EAEH5F,KAAKmzB,gBAMdipD,QAAS,WAER,MAAOp8E,MAAKq8E,YAAYlpD,aAIzBkpD,UAAW,WAQV,MANAr8E,MAAKc,KAAQ,EACbd,KAAKe,KAAQ,EACbf,KAAKgB,KAAQ,EAEbhB,KAAKi7E,mBAEEj7E,MAIR4zD,IAAK,SAAWptD,GAEf,MAAOxG,MAAKc,GAAK0F,EAAE1F,GAAKd,KAAKe,GAAKyF,EAAEzF,GAAKf,KAAKgB,GAAKwF,EAAExF,GAAKhB,KAAKiB,GAAKuF,EAAEvF,IAIvEowE,SAAU,WAET,MAAOrxE,MAAKc,GAAKd,KAAKc,GAAKd,KAAKe,GAAKf,KAAKe,GAAKf,KAAKgB,GAAKhB,KAAKgB,GAAKhB,KAAKiB,GAAKjB,KAAKiB,IAInFT,OAAQ,WAEP,MAAOioB,MAAK81B,KAAMv+C,KAAKc,GAAKd,KAAKc,GAAKd,KAAKe,GAAKf,KAAKe,GAAKf,KAAKgB,GAAKhB,KAAKgB,GAAKhB,KAAKiB,GAAKjB,KAAKiB,KAI9FkyB,UAAW,WAEV,GAAIriB,GAAI9Q,KAAKQ,QAsBb,OApBW,KAANsQ,GAEJ9Q,KAAKc,GAAK,EACVd,KAAKe,GAAK,EACVf,KAAKgB,GAAK,EACVhB,KAAKiB,GAAK,IAIV6P,EAAI,EAAIA,EAER9Q,KAAKc,GAAKd,KAAKc,GAAKgQ,EACpB9Q,KAAKe,GAAKf,KAAKe,GAAK+P,EACpB9Q,KAAKgB,GAAKhB,KAAKgB,GAAK8P,EACpB9Q,KAAKiB,GAAKjB,KAAKiB,GAAK6P,GAIrB9Q,KAAKi7E,mBAEEj7E,MAIR2f,SAAU,SAAW8uC,EAAG1wB,GAEvB,WAAW78B,KAAN68B,GAEJt9B,QAAQqa,KAAM,0GACP9a,KAAKs8E,oBAAqB7tB,EAAG1wB,IAI9B/9B,KAAKs8E,oBAAqBt8E,KAAMyuD,IAIxC77B,YAAa,SAAW67B,GAEvB,MAAOzuD,MAAKs8E,oBAAqB7tB,EAAGzuD,OAIrCs8E,oBAAqB,SAAWnoE,EAAGhN,GAIlC,GAAIo1E,GAAMpoE,EAAErT,GAAI07E,EAAMroE,EAAEpT,GAAI07E,EAAMtoE,EAAEnT,GAAI07E,EAAMvoE,EAAElT,GAC5C07E,EAAMx1E,EAAErG,GAAI87E,EAAMz1E,EAAEpG,GAAI87E,EAAM11E,EAAEnG,GAAI87E,EAAM31E,EAAElG,EAShD,OAPAjB,MAAKc,GAAKy7E,EAAMO,EAAMJ,EAAMC,EAAMH,EAAMK,EAAMJ,EAAMG,EACpD58E,KAAKe,GAAKy7E,EAAMM,EAAMJ,EAAME,EAAMH,EAAME,EAAMJ,EAAMM,EACpD78E,KAAKgB,GAAKy7E,EAAMK,EAAMJ,EAAMG,EAAMN,EAAMK,EAAMJ,EAAMG,EACpD38E,KAAKiB,GAAKy7E,EAAMI,EAAMP,EAAMI,EAAMH,EAAMI,EAAMH,EAAMI,EAEpD78E,KAAKi7E,mBAEEj7E,MAIR85E,MAAO,SAAWE,EAAI/sB,GAErB,GAAW,IAANA,EAAU,MAAOjtD,KACtB,IAAW,IAANitD,EAAU,MAAOjtD,MAAKoR,KAAM4oE,EAEjC,IAAI75E,GAAIH,KAAKc,GAAIV,EAAIJ,KAAKe,GAAIH,EAAIZ,KAAKgB,GAAIH,EAAIb,KAAKiB,GAIhD87E,EAAel8E,EAAIm5E,EAAG/4E,GAAKd,EAAI65E,EAAGl5E,GAAKV,EAAI45E,EAAGj5E,GAAKH,EAAIo5E,EAAGh5E,EAiB9D,IAfK+7E,EAAe,GAEnB/8E,KAAKiB,IAAO+4E,EAAG/4E,GACfjB,KAAKc,IAAOk5E,EAAGl5E,GACfd,KAAKe,IAAOi5E,EAAGj5E,GACff,KAAKgB,IAAOg5E,EAAGh5E,GAEf+7E,GAAiBA,GAIjB/8E,KAAKoR,KAAM4oE,GAIP+C,GAAgB,EAOpB,MALA/8E,MAAKiB,GAAKJ,EACVb,KAAKc,GAAKX,EACVH,KAAKe,GAAKX,EACVJ,KAAKgB,GAAKJ,EAEHZ,IAIR,IAAIg9E,GAAev0D,KAAK81B,KAAM,EAAMw+B,EAAeA,EAEnD,IAAKt0D,KAAKmF,IAAKovD,GAAiB,KAO/B,MALAh9E,MAAKiB,GAAK,IAAQJ,EAAIb,KAAKiB,IAC3BjB,KAAKc,GAAK,IAAQX,EAAIH,KAAKc,IAC3Bd,KAAKe,GAAK,IAAQX,EAAIJ,KAAKe,IAC3Bf,KAAKgB,GAAK,IAAQJ,EAAIZ,KAAKgB,IAEpBhB,IAIR,IAAIi9E,GAAYx0D,KAAK8jC,MAAOywB,EAAcD,GACtCG,EAASz0D,KAAK0lC,KAAO,EAAIlB,GAAMgwB,GAAcD,EAChDG,EAAS10D,KAAK0lC,IAAKlB,EAAIgwB,GAAcD,CAStC,OAPAh9E,MAAKiB,GAAOJ,EAAIq8E,EAASl9E,KAAKiB,GAAKk8E,EACnCn9E,KAAKc,GAAOX,EAAI+8E,EAASl9E,KAAKc,GAAKq8E,EACnCn9E,KAAKe,GAAOX,EAAI88E,EAASl9E,KAAKe,GAAKo8E,EACnCn9E,KAAKgB,GAAOJ,EAAIs8E,EAASl9E,KAAKgB,GAAKm8E,EAEnCn9E,KAAKi7E,mBAEEj7E,MAIR2lC,OAAQ,SAAWpjB,GAElB,MAASA,GAAWzhB,KAAOd,KAAKc,IAAUyhB,EAAWxhB,KAAOf,KAAKe,IAAUwhB,EAAWvhB,KAAOhB,KAAKgB,IAAUuhB,EAAWthB,KAAOjB,KAAKiB,IAIpI2vC,UAAW,SAAWrrC,EAAOvC,GAW5B,WATgB9B,KAAX8B,IAAuBA,EAAS,GAErChD,KAAKc,GAAKyE,EAAOvC,GACjBhD,KAAKe,GAAKwE,EAAOvC,EAAS,GAC1BhD,KAAKgB,GAAKuE,EAAOvC,EAAS,GAC1BhD,KAAKiB,GAAKsE,EAAOvC,EAAS,GAE1BhD,KAAKi7E,mBAEEj7E,MAIR+F,QAAS,SAAWR,EAAOvC,GAU1B,WARe9B,KAAVqE,IAAsBA,UACXrE,KAAX8B,IAAuBA,EAAS,GAErCuC,EAAOvC,GAAWhD,KAAKc,GACvByE,EAAOvC,EAAS,GAAMhD,KAAKe,GAC3BwE,EAAOvC,EAAS,GAAMhD,KAAKgB,GAC3BuE,EAAOvC,EAAS,GAAMhD,KAAKiB,GAEpBsE,GAIRud,SAAU,SAAWojC,GAIpB,MAFAlmD,MAAKi7E,iBAAmB/0B,EAEjBlmD,MAIRi7E,iBAAkB,eAqBnBj5E,OAAO2rE,OAAQxsE,EAAQggE,WAEtBp9C,WAAW,EAEXlc,IAAK,SAAW1H,EAAGC,EAAGQ,GAMrB,MAJAZ,MAAKG,EAAIA,EACTH,KAAKI,EAAIA,EACTJ,KAAKY,EAAIA,EAEFZ,MAIRmwE,UAAW,SAAWC,GAMrB,MAJApwE,MAAKG,EAAIiwE,EACTpwE,KAAKI,EAAIgwE,EACTpwE,KAAKY,EAAIwvE,EAEFpwE,MAIRqwE,KAAM,SAAWlwE,GAIhB,MAFAH,MAAKG,EAAIA,EAEFH,MAIRswE,KAAM,SAAWlwE,GAIhB,MAFAJ,MAAKI,EAAIA,EAEFJ,MAIRo9E,KAAM,SAAWx8E,GAIhB,MAFAZ,MAAKY,EAAIA,EAEFZ,MAIRuwE,aAAc,SAAW9pD,EAAOvkB,GAE/B,OAASukB,GAER,IAAK,GAAGzmB,KAAKG,EAAI+B,CAAO,MACxB,KAAK,GAAGlC,KAAKI,EAAI8B,CAAO,MACxB,KAAK,GAAGlC,KAAKY,EAAIsB,CAAO,MACxB,SAAS,KAAM,IAAIuyB,OAAO,0BAA4BhO,GAIvD,MAAOzmB,OAIRwwE,aAAc,SAAW/pD,GAExB,OAASA,GAER,IAAK,GAAG,MAAOzmB,MAAKG,CACpB,KAAK,GAAG,MAAOH,MAAKI,CACpB,KAAK,GAAG,MAAOJ,MAAKY,CACpB,SAAS,KAAM,IAAI6zB,OAAO,0BAA4BhO,KAMxDhL,MAAO,WAEN,MAAO,IAAIzb,MAAKg4D,YAAah4D,KAAKG,EAAGH,KAAKI,EAAGJ,KAAKY,IAInDwQ,KAAM,SAAW5K,GAMhB,MAJAxG,MAAKG,EAAIqG,EAAErG,EACXH,KAAKI,EAAIoG,EAAEpG,EACXJ,KAAKY,EAAI4F,EAAE5F,EAEJZ,MAIR+f,IAAK,SAAWvZ,EAAG3F,GAElB,WAAWK,KAANL,GAEJJ,QAAQqa,KAAM,yFACP9a,KAAKovD,WAAY5oD,EAAG3F,KAI5Bb,KAAKG,GAAKqG,EAAErG,EACZH,KAAKI,GAAKoG,EAAEpG,EACZJ,KAAKY,GAAK4F,EAAE5F,EAELZ,OAIRywE,UAAW,SAAWzb,GAMrB,MAJAh1D,MAAKG,GAAK60D,EACVh1D,KAAKI,GAAK40D,EACVh1D,KAAKY,GAAKo0D,EAEHh1D,MAIRovD,WAAY,SAAWj7C,EAAGhN,GAMzB,MAJAnH,MAAKG,EAAIgU,EAAEhU,EAAIgH,EAAEhH,EACjBH,KAAKI,EAAI+T,EAAE/T,EAAI+G,EAAE/G,EACjBJ,KAAKY,EAAIuT,EAAEvT,EAAIuG,EAAEvG,EAEVZ,MAIR0wE,gBAAiB,SAAWlqE,EAAGwuD,GAM9B,MAJAh1D,MAAKG,GAAKqG,EAAErG,EAAI60D,EAChBh1D,KAAKI,GAAKoG,EAAEpG,EAAI40D,EAChBh1D,KAAKY,GAAK4F,EAAE5F,EAAIo0D,EAETh1D,MAIR2xB,IAAK,SAAWnrB,EAAG3F,GAElB,WAAWK,KAANL,GAEJJ,QAAQqa,KAAM,yFACP9a,KAAK0qD,WAAYlkD,EAAG3F,KAI5Bb,KAAKG,GAAKqG,EAAErG,EACZH,KAAKI,GAAKoG,EAAEpG,EACZJ,KAAKY,GAAK4F,EAAE5F,EAELZ,OAIR2wE,UAAW,SAAW3b,GAMrB,MAJAh1D,MAAKG,GAAK60D,EACVh1D,KAAKI,GAAK40D,EACVh1D,KAAKY,GAAKo0D,EAEHh1D,MAIR0qD,WAAY,SAAWv2C,EAAGhN,GAMzB,MAJAnH,MAAKG,EAAIgU,EAAEhU,EAAIgH,EAAEhH,EACjBH,KAAKI,EAAI+T,EAAE/T,EAAI+G,EAAE/G,EACjBJ,KAAKY,EAAIuT,EAAEvT,EAAIuG,EAAEvG,EAEVZ,MAIR2f,SAAU,SAAWnZ,EAAG3F,GAEvB,WAAWK,KAANL,GAEJJ,QAAQqa,KAAM,mGACP9a,KAAKq9E,gBAAiB72E,EAAG3F,KAIjCb,KAAKG,GAAKqG,EAAErG,EACZH,KAAKI,GAAKoG,EAAEpG,EACZJ,KAAKY,GAAK4F,EAAE5F,EAELZ,OAIRyxB,eAAgB,SAAW2+C,GAM1B,MAJApwE,MAAKG,GAAKiwE,EACVpwE,KAAKI,GAAKgwE,EACVpwE,KAAKY,GAAKwvE,EAEHpwE,MAIRq9E,gBAAiB,SAAWlpE,EAAGhN,GAM9B,MAJAnH,MAAKG,EAAIgU,EAAEhU,EAAIgH,EAAEhH,EACjBH,KAAKI,EAAI+T,EAAE/T,EAAI+G,EAAE/G,EACjBJ,KAAKY,EAAIuT,EAAEvT,EAAIuG,EAAEvG,EAEVZ,MAIRs9E,WAAY,WAEX,GAAI/6D,GAAa,GAAI5hB,EAErB,OAAO,UAAqBizE,GAQ3B,MANSA,IAASA,EAAMC,SAEvBpzE,QAAQC,MAAO,+FAITV,KAAKu9E,gBAAiBh7D,EAAWC,aAAcoxD,QAMxD4J,eAAgB,WAEf,GAAIj7D,GAAa,GAAI5hB,EAErB,OAAO,UAAyBm4E,EAAM3mD,GAErC,MAAOnyB,MAAKu9E,gBAAiBh7D,EAAW84D,iBAAkBvC,EAAM3mD,QAMlE0+C,aAAc,SAAW9B,GAExB,GAAI5uE,GAAIH,KAAKG,EAAGC,EAAIJ,KAAKI,EAAGQ,EAAIZ,KAAKY,EACjC2oD,EAAIwlB,EAAEzuE,QAMV,OAJAN,MAAKG,EAAIopD,EAAG,GAAMppD,EAAIopD,EAAG,GAAMnpD,EAAImpD,EAAG,GAAM3oD,EAC5CZ,KAAKI,EAAImpD,EAAG,GAAMppD,EAAIopD,EAAG,GAAMnpD,EAAImpD,EAAG,GAAM3oD,EAC5CZ,KAAKY,EAAI2oD,EAAG,GAAMppD,EAAIopD,EAAG,GAAMnpD,EAAImpD,EAAG,GAAM3oD,EAErCZ,MAIRiR,aAAc,SAAW89D,GAExB,GAAI5uE,GAAIH,KAAKG,EAAGC,EAAIJ,KAAKI,EAAGQ,EAAIZ,KAAKY,EACjC2oD,EAAIwlB,EAAEzuE,SAENO,EAAI,GAAM0oD,EAAG,GAAMppD,EAAIopD,EAAG,GAAMnpD,EAAImpD,EAAG,IAAO3oD,EAAI2oD,EAAG,IAMzD,OAJAvpD,MAAKG,GAAMopD,EAAG,GAAMppD,EAAIopD,EAAG,GAAMnpD,EAAImpD,EAAG,GAAM3oD,EAAI2oD,EAAG,KAAS1oD,EAC9Db,KAAKI,GAAMmpD,EAAG,GAAMppD,EAAIopD,EAAG,GAAMnpD,EAAImpD,EAAG,GAAM3oD,EAAI2oD,EAAG,KAAS1oD,EAC9Db,KAAKY,GAAM2oD,EAAG,GAAMppD,EAAIopD,EAAG,GAAMnpD,EAAImpD,EAAG,IAAO3oD,EAAI2oD,EAAG,KAAS1oD,EAExDb,MAIRu9E,gBAAiB,SAAW9uB,GAE3B,GAAItuD,GAAIH,KAAKG,EAAGC,EAAIJ,KAAKI,EAAGQ,EAAIZ,KAAKY,EACjC68E,EAAKhvB,EAAEtuD,EAAGu9E,EAAKjvB,EAAEruD,EAAGu9E,EAAKlvB,EAAE7tD,EAAGg9E,EAAKnvB,EAAE5tD,EAIrC4mB,EAAKm2D,EAAKz9E,EAAIu9E,EAAK98E,EAAI+8E,EAAKv9E,EAC5BsnB,EAAKk2D,EAAKx9E,EAAIu9E,EAAKx9E,EAAIs9E,EAAK78E,EAC5Bi9E,EAAKD,EAAKh9E,EAAI68E,EAAKr9E,EAAIs9E,EAAKv9E,EAC5B29E,GAAOL,EAAKt9E,EAAIu9E,EAAKt9E,EAAIu9E,EAAK/8E,CAQlC,OAJAZ,MAAKG,EAAIsnB,EAAKm2D,EAAKE,GAAOL,EAAK/1D,GAAOi2D,EAAKE,GAAOH,EAClD19E,KAAKI,EAAIsnB,EAAKk2D,EAAKE,GAAOJ,EAAKG,GAAOJ,EAAKh2D,GAAOk2D,EAClD39E,KAAKY,EAAIi9E,EAAKD,EAAKE,GAAOH,EAAKl2D,GAAOi2D,EAAKh2D,GAAO+1D,EAE3Cz9E,MAIRitE,QAAS,WAER,GAAI5pE,GAAS,GAAIhD,EAEjB,OAAO,UAAkBuP,GAGxB,MADAvM,GAAO4R,iBAAkBrF,EAAOuB,iBAAkB9N,EAAO2tC,WAAYphC,EAAOoB,cACrEhR,KAAKiR,aAAc5N,OAM5B8pE,UAAW,WAEV,GAAI9pE,GAAS,GAAIhD,EAEjB,OAAO,UAAoBuP,GAG1B,MADAvM,GAAO4R,iBAAkBrF,EAAOoB,YAAa3N,EAAO2tC,WAAYphC,EAAOuB,mBAChEnR,KAAKiR,aAAc5N,OAM5BuuB,mBAAoB,SAAWm9C,GAK9B,GAAI5uE,GAAIH,KAAKG,EAAGC,EAAIJ,KAAKI,EAAGQ,EAAIZ,KAAKY,EACjC2oD,EAAIwlB,EAAEzuE,QAMV,OAJAN,MAAKG,EAAIopD,EAAG,GAAMppD,EAAIopD,EAAG,GAAMnpD,EAAImpD,EAAG,GAAM3oD,EAC5CZ,KAAKI,EAAImpD,EAAG,GAAMppD,EAAIopD,EAAG,GAAMnpD,EAAImpD,EAAG,GAAM3oD,EAC5CZ,KAAKY,EAAI2oD,EAAG,GAAMppD,EAAIopD,EAAG,GAAMnpD,EAAImpD,EAAG,IAAO3oD,EAEtCZ,KAAKmzB,aAIby9C,OAAQ,SAAWpqE,GAMlB,MAJAxG,MAAKG,GAAKqG,EAAErG,EACZH,KAAKI,GAAKoG,EAAEpG,EACZJ,KAAKY,GAAK4F,EAAE5F,EAELZ,MAIRksD,aAAc,SAAWkkB,GAExB,MAAOpwE,MAAKyxB,eAAgB,EAAI2+C,IAIjCvkE,IAAK,SAAWrF,GAMf,MAJAxG,MAAKG,EAAIsoB,KAAK5c,IAAK7L,KAAKG,EAAGqG,EAAErG,GAC7BH,KAAKI,EAAIqoB,KAAK5c,IAAK7L,KAAKI,EAAGoG,EAAEpG,GAC7BJ,KAAKY,EAAI6nB,KAAK5c,IAAK7L,KAAKY,EAAG4F,EAAE5F,GAEtBZ,MAIR8L,IAAK,SAAWtF,GAMf,MAJAxG,MAAKG,EAAIsoB,KAAK3c,IAAK9L,KAAKG,EAAGqG,EAAErG,GAC7BH,KAAKI,EAAIqoB,KAAK3c,IAAK9L,KAAKI,EAAGoG,EAAEpG,GAC7BJ,KAAKY,EAAI6nB,KAAK3c,IAAK9L,KAAKY,EAAG4F,EAAE5F,GAEtBZ,MAIR8xD,MAAO,SAAWjmD,EAAKC,GAQtB,MAJA9L,MAAKG,EAAIsoB,KAAK3c,IAAKD,EAAI1L,EAAGsoB,KAAK5c,IAAKC,EAAI3L,EAAGH,KAAKG,IAChDH,KAAKI,EAAIqoB,KAAK3c,IAAKD,EAAIzL,EAAGqoB,KAAK5c,IAAKC,EAAI1L,EAAGJ,KAAKI,IAChDJ,KAAKY,EAAI6nB,KAAK3c,IAAKD,EAAIjL,EAAG6nB,KAAK5c,IAAKC,EAAIlL,EAAGZ,KAAKY,IAEzCZ,MAIR8wE,YAAa,WAEZ,GAAIjlE,GAAM,GAAI1K,GACV2K,EAAM,GAAI3K,EAEd,OAAO,UAAsB4vE,EAAQC,GAKpC,MAHAnlE,GAAIhE,IAAKkpE,EAAQA,EAAQA,GACzBjlE,EAAIjE,IAAKmpE,EAAQA,EAAQA,GAElBhxE,KAAK8xD,MAAOjmD,EAAKC,OAM1BmlE,YAAa,SAAWplE,EAAKC,GAE5B,GAAItL,GAASR,KAAKQ,QAElB,OAAOR,MAAKksD,aAAc1rD,GAAU,GAAIixB,eAAgBhJ,KAAK3c,IAAKD,EAAK4c,KAAK5c,IAAKC,EAAKtL,MAIvFkoB,MAAO,WAMN,MAJA1oB,MAAKG,EAAIsoB,KAAKC,MAAO1oB,KAAKG,GAC1BH,KAAKI,EAAIqoB,KAAKC,MAAO1oB,KAAKI,GAC1BJ,KAAKY,EAAI6nB,KAAKC,MAAO1oB,KAAKY,GAEnBZ,MAIRiwE,KAAM,WAML,MAJAjwE,MAAKG,EAAIsoB,KAAKwnD,KAAMjwE,KAAKG,GACzBH,KAAKI,EAAIqoB,KAAKwnD,KAAMjwE,KAAKI,GACzBJ,KAAKY,EAAI6nB,KAAKwnD,KAAMjwE,KAAKY,GAElBZ,MAIRkxE,MAAO,WAMN,MAJAlxE,MAAKG,EAAIsoB,KAAKyoD,MAAOlxE,KAAKG,GAC1BH,KAAKI,EAAIqoB,KAAKyoD,MAAOlxE,KAAKI,GAC1BJ,KAAKY,EAAI6nB,KAAKyoD,MAAOlxE,KAAKY,GAEnBZ,MAIRmxE,YAAa,WAMZ,MAJAnxE,MAAKG,EAAMH,KAAKG,EAAI,EAAMsoB,KAAKwnD,KAAMjwE,KAAKG,GAAMsoB,KAAKC,MAAO1oB,KAAKG,GACjEH,KAAKI,EAAMJ,KAAKI,EAAI,EAAMqoB,KAAKwnD,KAAMjwE,KAAKI,GAAMqoB,KAAKC,MAAO1oB,KAAKI,GACjEJ,KAAKY,EAAMZ,KAAKY,EAAI,EAAM6nB,KAAKwnD,KAAMjwE,KAAKY,GAAM6nB,KAAKC,MAAO1oB,KAAKY,GAE1DZ,MAIRoxE,OAAQ,WAMP,MAJApxE,MAAKG,GAAMH,KAAKG,EAChBH,KAAKI,GAAMJ,KAAKI,EAChBJ,KAAKY,GAAMZ,KAAKY,EAETZ,MAIR4zD,IAAK,SAAWptD,GAEf,MAAOxG,MAAKG,EAAIqG,EAAErG,EAAIH,KAAKI,EAAIoG,EAAEpG,EAAIJ,KAAKY,EAAI4F,EAAE5F,GAMjDywE,SAAU,WAET,MAAOrxE,MAAKG,EAAIH,KAAKG,EAAIH,KAAKI,EAAIJ,KAAKI,EAAIJ,KAAKY,EAAIZ,KAAKY,GAI1DJ,OAAQ,WAEP,MAAOioB,MAAK81B,KAAMv+C,KAAKG,EAAIH,KAAKG,EAAIH,KAAKI,EAAIJ,KAAKI,EAAIJ,KAAKY,EAAIZ,KAAKY,IAIrE0wE,gBAAiB,WAEhB,MAAO7oD,MAAKmF,IAAK5tB,KAAKG,GAAMsoB,KAAKmF,IAAK5tB,KAAKI,GAAMqoB,KAAKmF,IAAK5tB,KAAKY,IAIjEuyB,UAAW,WAEV,MAAOnzB,MAAKksD,aAAclsD,KAAKQ,UAAY,IAI5CgpE,UAAW,SAAWhpE,GAErB,MAAOR,MAAKmzB,YAAY1B,eAAgBjxB,IAIzC2qD,KAAM,SAAW3kD,EAAGmmB,GAMnB,MAJA3sB,MAAKG,IAAOqG,EAAErG,EAAIH,KAAKG,GAAMwsB,EAC7B3sB,KAAKI,IAAOoG,EAAEpG,EAAIJ,KAAKI,GAAMusB,EAC7B3sB,KAAKY,IAAO4F,EAAE5F,EAAIZ,KAAKY,GAAM+rB,EAEtB3sB,MAIR4xE,YAAa,SAAW/W,EAAIc,EAAIhvC,GAE/B,MAAO3sB,MAAK0qD,WAAYiR,EAAId,GAAKppC,eAAgB9E,GAAQ5M,IAAK86C,IAI/DkjB,MAAO,SAAWv3E,EAAG3F,GAEpB,WAAWK,KAANL,GAEJJ,QAAQqa,KAAM,6FACP9a,KAAK2qD,aAAcnkD,EAAG3F,IAIvBb,KAAK2qD,aAAc3qD,KAAMwG,IAIjCmkD,aAAc,SAAWx2C,EAAGhN,GAE3B,GAAI62E,GAAK7pE,EAAEhU,EAAG89E,EAAK9pE,EAAE/T,EAAG89E,EAAK/pE,EAAEvT,EAC3Bu9E,EAAKh3E,EAAEhH,EAAGi+E,EAAKj3E,EAAE/G,EAAGi+E,EAAKl3E,EAAEvG,CAM/B,OAJAZ,MAAKG,EAAI89E,EAAKI,EAAKH,EAAKE,EACxBp+E,KAAKI,EAAI89E,EAAKC,EAAKH,EAAKK,EACxBr+E,KAAKY,EAAIo9E,EAAKI,EAAKH,EAAKE,EAEjBn+E,MAIRs+E,gBAAiB,SAAWl2D,GAE3B,GAAIgoD,GAAShoD,EAAOwrC,IAAK5zD,MAASooB,EAAOipD,UAEzC,OAAOrxE,MAAKoR,KAAMgX,GAASqJ,eAAgB2+C,IAI5CmO,eAAgB,WAEf,GAAI1jB,GAAK,GAAI15D,EAEb,OAAO,UAAyBq9E,GAI/B,MAFA3jB,GAAGzpD,KAAMpR,MAAOs+E,gBAAiBE,GAE1Bx+E,KAAK2xB,IAAKkpC,OAMnB4jB,QAAS,WAKR,GAAI5jB,GAAK,GAAI15D,EAEb,OAAO,UAAkB0X,GAExB,MAAO7Y,MAAK2xB,IAAKkpC,EAAGzpD,KAAMyH,GAAS4Y,eAAgB,EAAIzxB,KAAK4zD,IAAK/6C,SAMnE6lE,QAAS,SAAWl4E,GAEnB,GAAI8tD,GAAQt0D,KAAK4zD,IAAKptD,GAAQiiB,KAAK81B,KAAMv+C,KAAKqxE,WAAa7qE,EAAE6qE,WAI7D,OAAO5oD,MAAKk2D,KAAMt8E,GAAMyvD,MAAOwC,GAAS,EAAG,KAI5Cid,WAAY,SAAW/qE,GAEtB,MAAOiiB,MAAK81B,KAAMv+C,KAAKwxE,kBAAmBhrE,KAI3CgrE,kBAAmB,SAAWhrE,GAE7B,GAAIirE,GAAKzxE,KAAKG,EAAIqG,EAAErG,EAAGuxE,EAAK1xE,KAAKI,EAAIoG,EAAEpG,EAAGw+E,EAAK5+E,KAAKY,EAAI4F,EAAE5F,CAE1D,OAAO6wE,GAAKA,EAAKC,EAAKA,EAAKkN,EAAKA,GAIjCjN,oBAAqB,SAAWnrE,GAE/B,MAAOiiB,MAAKmF,IAAK5tB,KAAKG,EAAIqG,EAAErG,GAAMsoB,KAAKmF,IAAK5tB,KAAKI,EAAIoG,EAAEpG,GAAMqoB,KAAKmF,IAAK5tB,KAAKY,EAAI4F,EAAE5F,IAInFi+E,iBAAkB,SAAW7pB,GAE5B,GAAI8pB,GAAer2D,KAAK0lC,IAAK6G,EAAE/C,KAAQ+C,EAAEr8C,MAMzC,OAJA3Y,MAAKG,EAAI2+E,EAAer2D,KAAK0lC,IAAK6G,EAAEV,OACpCt0D,KAAKI,EAAIqoB,KAAKyJ,IAAK8iC,EAAE/C,KAAQ+C,EAAEr8C,OAC/B3Y,KAAKY,EAAIk+E,EAAer2D,KAAKyJ,IAAK8iC,EAAEV,OAE7Bt0D,MAIR++E,mBAAoB,SAAWj7D,GAM9B,MAJA9jB,MAAKG,EAAI2jB,EAAEnL,OAAS8P,KAAK0lC,IAAKrqC,EAAEwwC,OAChCt0D,KAAKI,EAAI0jB,EAAE1jB,EACXJ,KAAKY,EAAIkjB,EAAEnL,OAAS8P,KAAKyJ,IAAKpO,EAAEwwC,OAEzBt0D,MAIRsf,sBAAuB,SAAWyvD,GAEjC,GAAIxlB,GAAIwlB,EAAEzuE,QAMV,OAJAN,MAAKG,EAAIopD,EAAG,IACZvpD,KAAKI,EAAImpD,EAAG,IACZvpD,KAAKY,EAAI2oD,EAAG,IAELvpD,MAIRg/E,mBAAoB,SAAWjQ,GAE9B,GAAIqK,GAAKp5E,KAAKszE,oBAAqBvE,EAAG,GAAIvuE,SACtC64E,EAAKr5E,KAAKszE,oBAAqBvE,EAAG,GAAIvuE,SACtC84E,EAAKt5E,KAAKszE,oBAAqBvE,EAAG,GAAIvuE,QAM1C,OAJAR,MAAKG,EAAIi5E,EACTp5E,KAAKI,EAAIi5E,EACTr5E,KAAKY,EAAI04E,EAEFt5E,MAIRszE,oBAAqB,SAAWvE,EAAGtoD,GAElC,MAAOzmB,MAAK4wC,UAAWm+B,EAAEzuE,SAAkB,EAARmmB,IAIpCkf,OAAQ,SAAWn/B,GAElB,MAAWA,GAAErG,IAAMH,KAAKG,GAASqG,EAAEpG,IAAMJ,KAAKI,GAASoG,EAAE5F,IAAMZ,KAAKY,GAIrEgwC,UAAW,SAAWrrC,EAAOvC,GAQ5B,WANgB9B,KAAX8B,IAAuBA,EAAS,GAErChD,KAAKG,EAAIoF,EAAOvC,GAChBhD,KAAKI,EAAImF,EAAOvC,EAAS,GACzBhD,KAAKY,EAAI2E,EAAOvC,EAAS,GAElBhD,MAIR+F,QAAS,SAAWR,EAAOvC,GAS1B,WAPe9B,KAAVqE,IAAsBA,UACXrE,KAAX8B,IAAuBA,EAAS,GAErCuC,EAAOvC,GAAWhD,KAAKG,EACvBoF,EAAOvC,EAAS,GAAMhD,KAAKI,EAC3BmF,EAAOvC,EAAS,GAAMhD,KAAKY,EAEpB2E,GAIR0kD,oBAAqB,SAAW7pC,EAAWqG,EAAOzjB,GAYjD,WAVgB9B,KAAX8B,GAEJvC,QAAQqa,KAAM,uEAIf9a,KAAKG,EAAIigB,EAAU4pC,KAAMvjC,GACzBzmB,KAAKI,EAAIggB,EAAUyxD,KAAMprD,GACzBzmB,KAAKY,EAAIwf,EAAUo3D,KAAM/wD,GAElBzmB,QA+BTgC,OAAO2rE,OAAQvsE,EAAQ+/D,WAEtB8d,WAAW,EAEXp3E,IAAK,SAAWmqE,EAAKC,EAAKC,EAAKE,EAAKC,EAAKC,EAAKE,EAAKC,EAAKC,GAEvD,GAAIM,GAAKhzE,KAAKM,QAMd,OAJA0yE,GAAI,GAAMhB,EAAKgB,EAAI,GAAMZ,EAAKY,EAAI,GAAMR,EACxCQ,EAAI,GAAMf,EAAKe,EAAI,GAAMX,EAAKW,EAAI,GAAMP,EACxCO,EAAI,GAAMd,EAAKc,EAAI,GAAMV,EAAKU,EAAI,GAAMN,EAEjC1yE,MAIR0yB,SAAU,WAUT,MARA1yB,MAAK6H,IAEJ,EAAG,EAAG,EACN,EAAG,EAAG,EACN,EAAG,EAAG,GAIA7H,MAIRyb,MAAO,WAEN,OAAO,GAAIzb,MAAKg4D,aAAcpnB,UAAW5wC,KAAKM,WAI/C8Q,KAAM,SAAW29D,GAEhB,GAAIiE,GAAKhzE,KAAKM,SACV2yE,EAAKlE,EAAEzuE,QAMX,OAJA0yE,GAAI,GAAMC,EAAI,GAAKD,EAAI,GAAMC,EAAI,GAAKD,EAAI,GAAMC,EAAI,GACpDD,EAAI,GAAMC,EAAI,GAAKD,EAAI,GAAMC,EAAI,GAAKD,EAAI,GAAMC,EAAI,GACpDD,EAAI,GAAMC,EAAI,GAAKD,EAAI,GAAMC,EAAI,GAAKD,EAAI,GAAMC,EAAI,GAE7CjzE,MAIRk/E,eAAgB,SAAWnQ,GAE1B,GAAIkE,GAAKlE,EAAEzuE,QAUX,OARAN,MAAK6H,IAEJorE,EAAI,GAAKA,EAAI,GAAKA,EAAI,GACtBA,EAAI,GAAKA,EAAI,GAAKA,EAAI,GACtBA,EAAI,GAAKA,EAAI,GAAKA,EAAI,KAIhBjzE,MAIRu3E,uBAAwB,WAEvB,GAAI1c,GAAK,GAAI15D,EAEb,OAAO,UAAiCif,GAEvC,IAAM,GAAIpa,GAAI,EAAG8K,EAAIsP,EAAUoB,MAAOxb,EAAI8K,EAAG9K,IAE5C60D,EAAG16D,EAAIigB,EAAU4pC,KAAMhkD,GACvB60D,EAAGz6D,EAAIggB,EAAUyxD,KAAM7rE,GACvB60D,EAAGj6D,EAAIwf,EAAUo3D,KAAMxxE,GAEvB60D,EAAGgW,aAAc7wE,MAEjBogB,EAAUq3D,OAAQzxE,EAAG60D,EAAG16D,EAAG06D,EAAGz6D,EAAGy6D,EAAGj6D,EAIrC,OAAOwf,OAMTT,SAAU,SAAWovD,GAEpB,MAAO/uE,MAAKiV,iBAAkBjV,KAAM+uE,IAIrCn8C,YAAa,SAAWm8C,GAEvB,MAAO/uE,MAAKiV,iBAAkB85D,EAAG/uE,OAIlCiV,iBAAkB,SAAWd,EAAGhN,GAE/B,GAAI2sE,GAAK3/D,EAAE7T,SACP0zE,EAAK7sE,EAAE7G,SACP0yE,EAAKhzE,KAAKM,SAEVi1E,EAAMzB,EAAI,GAAK0B,EAAM1B,EAAI,GAAK2B,EAAM3B,EAAI,GACxC6B,EAAM7B,EAAI,GAAK8B,EAAM9B,EAAI,GAAK+B,EAAM/B,EAAI,GACxCiC,EAAMjC,EAAI,GAAKkC,EAAMlC,EAAI,GAAKmC,EAAMnC,EAAI,GAExCyC,EAAMvC,EAAI,GAAKwC,EAAMxC,EAAI,GAAKyC,EAAMzC,EAAI,GACxC2C,EAAM3C,EAAI,GAAK4C,EAAM5C,EAAI,GAAK6C,EAAM7C,EAAI,GACxC+C,EAAM/C,EAAI,GAAKgD,EAAMhD,EAAI,GAAKiD,EAAMjD,EAAI,EAc5C,OAZAhB,GAAI,GAAMuC,EAAMgB,EAAMf,EAAMmB,EAAMlB,EAAMsB,EACxC/D,EAAI,GAAMuC,EAAMiB,EAAMhB,EAAMoB,EAAMnB,EAAMuB,EACxChE,EAAI,GAAMuC,EAAMkB,EAAMjB,EAAMqB,EAAMpB,EAAMwB,EAExCjE,EAAI,GAAM2C,EAAMY,EAAMX,EAAMe,EAAMd,EAAMkB,EACxC/D,EAAI,GAAM2C,EAAMa,EAAMZ,EAAMgB,EAAMf,EAAMmB,EACxChE,EAAI,GAAM2C,EAAMc,EAAMb,EAAMiB,EAAMhB,EAAMoB,EAExCjE,EAAI,GAAM+C,EAAMQ,EAAMP,EAAMW,EAAMV,EAAMc,EACxC/D,EAAI,GAAM+C,EAAMS,EAAMR,EAAMY,EAAMX,EAAMe,EACxChE,EAAI,GAAM+C,EAAMU,EAAMT,EAAMa,EAAMZ,EAAMgB,EAEjCj3E,MAIRyxB,eAAgB,SAAWujC,GAE1B,GAAIge,GAAKhzE,KAAKM,QAMd,OAJA0yE,GAAI,IAAOhe,EAAGge,EAAI,IAAOhe,EAAGge,EAAI,IAAOhe,EACvCge,EAAI,IAAOhe,EAAGge,EAAI,IAAOhe,EAAGge,EAAI,IAAOhe,EACvCge,EAAI,IAAOhe,EAAGge,EAAI,IAAOhe,EAAGge,EAAI,IAAOhe,EAEhCh1D,MAIR03E,YAAa,WAEZ,GAAI1E,GAAKhzE,KAAKM,SAEV6T,EAAI6+D,EAAI,GAAK7rE,EAAI6rE,EAAI,GAAKlvD,EAAIkvD,EAAI,GACrC1qD,EAAI0qD,EAAI,GAAKzpB,EAAIypB,EAAI,GAAK5zC,EAAI4zC,EAAI,GAClC9rE,EAAI8rE,EAAI,GAAK6G,EAAI7G,EAAI,GAAKhtE,EAAIgtE,EAAI,EAEnC,OAAO7+D,GAAIo1C,EAAIvjD,EAAImO,EAAIirB,EAAIy6C,EAAI1yE,EAAImhB,EAAItiB,EAAImB,EAAIi4B,EAAIl4B,EAAI4c,EAAIwE,EAAIuxD,EAAI/1D,EAAIylC,EAAIriD,GAI5E8pC,WAAY,SAAW3tC,EAAQy0E,GAEzBz0E,GAAUA,EAAO0uE,WAErBtxE,QAAQC,MAAO,mEAIhB,IAAIuyE,GAAK5vE,EAAO/C,SACf0yE,EAAKhzE,KAAKM,SAEV0xE,EAAMiB,EAAI,GAAKb,EAAMa,EAAI,GAAKT,EAAMS,EAAI,GACxChB,EAAMgB,EAAI,GAAKZ,EAAMY,EAAI,GAAKR,EAAMQ,EAAI,GACxCf,EAAMe,EAAI,GAAKX,EAAMW,EAAI,GAAKP,EAAMO,EAAI,GAExC8E,EAAMrF,EAAML,EAAMI,EAAMH,EACxB0F,EAAMvF,EAAMP,EAAMQ,EAAMT,EACxBgG,EAAM3F,EAAML,EAAMI,EAAMH,EAExBiG,EAAMnG,EAAM+F,EAAM3F,EAAM4F,EAAMxF,EAAMyF,CAErC,IAAa,IAARE,EAAY,CAEhB,GAAIC,GAAM,oEAEV,KAA2B,IAAtBN,EAEJ,KAAM,IAAIrjD,OAAO2jD,EAQlB,OAJC33E,SAAQqa,KAAMs9D,GAIRp4E,KAAK0yB,WAIb,GAAI2lD,GAAS,EAAIF,CAcjB,OAZAnF,GAAI,GAAM+E,EAAMM,EAChBrF,EAAI,IAAQR,EAAMF,EAAMI,EAAMN,GAAQiG,EACtCrF,EAAI,IAAQP,EAAML,EAAMI,EAAMH,GAAQgG,EAEtCrF,EAAI,GAAMgF,EAAMK,EAChBrF,EAAI,IAAQN,EAAMV,EAAMQ,EAAMN,GAAQmG,EACtCrF,EAAI,IAAQR,EAAMP,EAAMQ,EAAMT,GAAQqG,EAEtCrF,EAAI,GAAMiF,EAAMI,EAChBrF,EAAI,IAAQZ,EAAMF,EAAMI,EAAMN,GAAQqG,EACtCrF,EAAI,IAAQX,EAAML,EAAMI,EAAMH,GAAQoG,EAE/Br4E,MAIR23E,UAAW,WAEV,GAAIC,GAAK7I,EAAI/uE,KAAKM,QAMlB,OAJAs3E,GAAM7I,EAAG,GAAKA,EAAG,GAAMA,EAAG,GAAKA,EAAG,GAAM6I,EACxCA,EAAM7I,EAAG,GAAKA,EAAG,GAAMA,EAAG,GAAKA,EAAG,GAAM6I,EACxCA,EAAM7I,EAAG,GAAKA,EAAG,GAAMA,EAAG,GAAKA,EAAG,GAAM6I,EAEjC53E,MAIR2yC,gBAAiB,SAAWhgB,GAE3B,MAAO3yB,MAAKk/E,eAAgBvsD,GAAUqe,WAAYhxC,MAAO23E,aAI1DwH,mBAAoB,SAAWv5E,GAE9B,GAAImpE,GAAI/uE,KAAKM,QAYb,OAVAsF,GAAG,GAAMmpE,EAAG,GACZnpE,EAAG,GAAMmpE,EAAG,GACZnpE,EAAG,GAAMmpE,EAAG,GACZnpE,EAAG,GAAMmpE,EAAG,GACZnpE,EAAG,GAAMmpE,EAAG,GACZnpE,EAAG,GAAMmpE,EAAG,GACZnpE,EAAG,GAAMmpE,EAAG,GACZnpE,EAAG,GAAMmpE,EAAG,GACZnpE,EAAG,GAAMmpE,EAAG,GAEL/uE,MAIR8gD,eAAgB,SAAWi4B,EAAIC,EAAII,EAAIC,EAAIl2E,EAAUksD,EAAIC,GAExD,GAAIxrC,GAAI2E,KAAKyJ,IAAK/uB,GACd6xD,EAAIvsC,KAAK0lC,IAAKhrD,EAElBnD,MAAK6H,IACJuxE,EAAKt1D,EAAGs1D,EAAKpkB,GAAKokB,GAAOt1D,EAAIurC,EAAK2F,EAAI1F,GAAOD,EAAK0pB,GAChDM,EAAKrkB,EAAGqkB,EAAKv1D,GAAKu1D,IAASrkB,EAAI3F,EAAKvrC,EAAIwrC,GAAOA,EAAK0pB,EACtD,EAAG,EAAG,IAKRlqE,MAAO,SAAWsqE,EAAIC,GAErB,GAAIrG,GAAKhzE,KAAKM,QAKd,OAHA0yE,GAAI,IAAOoG,EAAIpG,EAAI,IAAOoG,EAAIpG,EAAI,IAAOoG,EACzCpG,EAAI,IAAOqG,EAAIrG,EAAI,IAAOqG,EAAIrG,EAAI,IAAOqG,EAElCr5E,MAIRo/E,OAAQ,SAAW9qB,GAElB,GAAIxwC,GAAI2E,KAAKyJ,IAAKoiC,GACdU,EAAIvsC,KAAK0lC,IAAKmG,GAEd0e,EAAKhzE,KAAKM,SAEVi1E,EAAMvC,EAAI,GAAKwC,EAAMxC,EAAI,GAAKyC,EAAMzC,EAAI,GACxC2C,EAAM3C,EAAI,GAAK4C,EAAM5C,EAAI,GAAK6C,EAAM7C,EAAI,EAU5C,OARAA,GAAI,GAAMlvD,EAAIyxD,EAAMvgB,EAAI2gB,EACxB3C,EAAI,GAAMlvD,EAAI0xD,EAAMxgB,EAAI4gB,EACxB5C,EAAI,GAAMlvD,EAAI2xD,EAAMzgB,EAAI6gB,EAExB7C,EAAI,IAAQhe,EAAIugB,EAAMzxD,EAAI6xD,EAC1B3C,EAAI,IAAQhe,EAAIwgB,EAAM1xD,EAAI8xD,EAC1B5C,EAAI,IAAQhe,EAAIygB,EAAM3xD,EAAI+xD,EAEnB71E,MAIRspE,UAAW,SAAWyP,EAAIC,GAEzB,GAAIhG,GAAKhzE,KAAKM,QAKd,OAHA0yE,GAAI,IAAO+F,EAAK/F,EAAI,GAAKA,EAAI,IAAO+F,EAAK/F,EAAI,GAAKA,EAAI,IAAO+F,EAAK/F,EAAI,GACtEA,EAAI,IAAOgG,EAAKhG,EAAI,GAAKA,EAAI,IAAOgG,EAAKhG,EAAI,GAAKA,EAAI,IAAOgG,EAAKhG,EAAI,GAE/DhzE,MAIR2lC,OAAQ,SAAWtiC,GAKlB,IAAM,GAHF2vE,GAAKhzE,KAAKM,SACV2yE,EAAK5vE,EAAO/C,SAEN0F,EAAI,EAAGA,EAAI,EAAGA,IAEvB,GAAKgtE,EAAIhtE,KAAQitE,EAAIjtE,GAAM,OAAO,CAInC,QAAO,GAIR4qC,UAAW,SAAWrrC,EAAOvC,OAEZ9B,KAAX8B,IAAuBA,EAAS,EAErC,KAAM,GAAIgD,GAAI,EAAGA,EAAI,EAAGA,IAEvBhG,KAAKM,SAAU0F,GAAMT,EAAOS,EAAIhD,EAIjC,OAAOhD,OAIR+F,QAAS,SAAWR,EAAOvC,OAEX9B,KAAVqE,IAAsBA,UACXrE,KAAX8B,IAAuBA,EAAS,EAErC,IAAIgwE,GAAKhzE,KAAKM,QAcd,OAZAiF,GAAOvC,GAAWgwE,EAAI,GACtBztE,EAAOvC,EAAS,GAAMgwE,EAAI,GAC1BztE,EAAOvC,EAAS,GAAMgwE,EAAI,GAE1BztE,EAAOvC,EAAS,GAAMgwE,EAAI,GAC1BztE,EAAOvC,EAAS,GAAMgwE,EAAI,GAC1BztE,EAAOvC,EAAS,GAAMgwE,EAAI,GAE1BztE,EAAOvC,EAAS,GAAMgwE,EAAI,GAC1BztE,EAAOvC,EAAS,GAAMgwE,EAAI,GAC1BztE,EAAOvC,EAAS,GAAMgwE,EAAI,GAEnBztE,IAYT,IAAIpD,IAAY,CAkDhBd,GAAQmB,kBAAgBtB,GACxBG,EAAQqB,gBAr1GQ,IAu1GhBV,OAAOC,eAAgBZ,EAAQ8/D,UAAW,eAEzCt5D,IAAK,SAAW3F,IAEA,IAAVA,GAAiBlC,KAAK2D,aAM7B3B,OAAO2rE,OAAQtsE,EAAQ8/D,UAAWlhE,EAAgBkhE,WAEjDnJ,YAAa32D,EAEbmrB,WAAW,EAEX/Q,MAAO,WAEN,OAAO,GAAIzb,MAAKg4D,aAAc5mD,KAAMpR,OAIrCoR,KAAM,SAAWy8D,GAkChB,MAhCA7tE,MAAKuC,KAAOsrE,EAAOtrE,KAEnBvC,KAAKsB,MAAQusE,EAAOvsE,MACpBtB,KAAKyC,QAAUorE,EAAOprE,QAAQolD,MAAO,GAErC7nD,KAAKuB,QAAUssE,EAAOtsE,QAEtBvB,KAAKwB,MAAQqsE,EAAOrsE,MACpBxB,KAAKyB,MAAQosE,EAAOpsE,MAEpBzB,KAAK0B,UAAYmsE,EAAOnsE,UACxB1B,KAAK2B,UAAYksE,EAAOlsE,UAExB3B,KAAK8B,WAAa+rE,EAAO/rE,WAEzB9B,KAAK4B,OAASisE,EAAOjsE,OACrB5B,KAAK6B,KAAOgsE,EAAOhsE,KAEnB7B,KAAKgD,OAAOoO,KAAMy8D,EAAO7qE,QACzBhD,KAAKiD,OAAOmO,KAAMy8D,EAAO5qE,QACzBjD,KAAKkD,OAAOkO,KAAMy8D,EAAO3qE,QACzBlD,KAAKmD,SAAW0qE,EAAO1qE,SAEvBnD,KAAKoD,iBAAmByqE,EAAOzqE,iBAC/BpD,KAAKqD,OAAO+N,KAAMy8D,EAAOxqE,QAEzBrD,KAAKsD,gBAAkBuqE,EAAOvqE,gBAC9BtD,KAAKuD,iBAAmBsqE,EAAOtqE,iBAC/BvD,KAAKwD,MAAQqqE,EAAOrqE,MACpBxD,KAAKyD,gBAAkBoqE,EAAOpqE,gBAC9BzD,KAAK+B,SAAW8rE,EAAO9rE,SAEhB/B,MAIRq/E,OAAQ,SAAWC,GAElB,GAAIC,OAA0Br+E,KAATo+E,GAAsC,gBAATA,EAElD,KAAOC,OAA+Cr+E,KAA/Bo+E,EAAKpzE,SAAUlM,KAAKoC,MAE1C,MAAOk9E,GAAKpzE,SAAUlM,KAAKoC,KA4C5B,IAAIwrE,IACH4R,UACC77E,QAAS,IACT9B,KAAM,UACN49E,UAAW,kBAGZr9E,KAAMpC,KAAKoC,KACXG,KAAMvC,KAAKuC,KAEXhB,QAASvB,KAAKuB,QAEd0B,QAAUjD,KAAKiD,OAAO9C,EAAGH,KAAKiD,OAAO7C,GACrC4C,QAAUhD,KAAKgD,OAAO7C,EAAGH,KAAKgD,OAAO5C,GACrC8C,QAAUlD,KAAKkD,OAAO/C,EAAGH,KAAKkD,OAAO9C,GACrC+C,SAAUnD,KAAKmD,SAEfu8E,MAAQ1/E,KAAKwB,MAAOxB,KAAKyB,OAEzBE,UAAW3B,KAAK2B,UAChBD,UAAW1B,KAAK0B,UAChBI,WAAY9B,KAAK8B,WAEjB0B,MAAOxD,KAAKwD,MAGb,QAAoBtC,KAAflB,KAAKsB,MAAsB,CAI/B,GAAIA,GAAQtB,KAAKsB,UAEGJ,KAAfI,EAAMc,OAEVd,EAAMc,KAAOC,GAAMC,gBAIbi9E,OAA8Cr+E,KAA9Bo+E,EAAKr6E,OAAQ3D,EAAMc,QAEzCk9E,EAAKr6E,OAAQ3D,EAAMc,OAClBA,KAAMd,EAAMc,KACZ2zD,IAlFH,SAAqBz0D,GAEpB,GAAIwR,EAEJ,IAAKxR,YAAiBw9B,mBAErBhsB,EAASxR,MAEH,CAENwR,EAASc,SAASC,gBAAiB,+BAAgC,UACnEf,EAAO/O,MAAQzC,EAAMyC,MACrB+O,EAAO9O,OAAS1C,EAAM0C,MAEtB,IAAI8P,GAAUhB,EAAOiB,WAAY,KAE5BzS,aAAiBq+E,WAErB7rE,EAAQ8rE,aAAct+E,EAAO,EAAG,GAIhCwS,EAAQ4qB,UAAWp9B,EAAO,EAAG,EAAGA,EAAMyC,MAAOzC,EAAM0C,QAMrD,MAAK8O,GAAO/O,MAAQ,MAAQ+O,EAAO9O,OAAS,KAEpC8O,EAAO+sE,UAAW,aAAc,IAIhC/sE,EAAO+sE,UAAW,cAgDPv+E,KAKnBssE,EAAOtsE,MAAQA,EAAMc,KAUtB,MANOm9E,KAEND,EAAKpzE,SAAUlM,KAAKoC,MAASwrE,GAIvBA,GAIRlgD,QAAS,WAER1tB,KAAKquE,eAAiBxsE,KAAM,aAI7Bi+E,YAAa,SAAWtxE,GAEvB,GA1gHc,MA0gHTxO,KAAKuB,QAAV,CAIA,GAFAiN,EAAGqiE,aAAc7wE,KAAKqD,QAEjBmL,EAAGrO,EAAI,GAAKqO,EAAGrO,EAAI,EAEvB,OAASH,KAAKwB,OAEb,IAAKgyC,IAEJhlC,EAAGrO,EAAIqO,EAAGrO,EAAIsoB,KAAKC,MAAOla,EAAGrO,EAC7B,MAED,KAAKwC,IAEJ6L,EAAGrO,EAAIqO,EAAGrO,EAAI,EAAI,EAAI,CACtB,MAED,KAAKuzC,IAEwC,IAAvCjrB,KAAKmF,IAAKnF,KAAKC,MAAOla,EAAGrO,GAAM,GAEnCqO,EAAGrO,EAAIsoB,KAAKwnD,KAAMzhE,EAAGrO,GAAMqO,EAAGrO,EAI9BqO,EAAGrO,EAAIqO,EAAGrO,EAAIsoB,KAAKC,MAAOla,EAAGrO,GASjC,GAAKqO,EAAGpO,EAAI,GAAKoO,EAAGpO,EAAI,EAEvB,OAASJ,KAAKyB,OAEb,IAAK+xC,IAEJhlC,EAAGpO,EAAIoO,EAAGpO,EAAIqoB,KAAKC,MAAOla,EAAGpO,EAC7B,MAED,KAAKuC,IAEJ6L,EAAGpO,EAAIoO,EAAGpO,EAAI,EAAI,EAAI,CACtB,MAED,KAAKszC,IAEwC,IAAvCjrB,KAAKmF,IAAKnF,KAAKC,MAAOla,EAAGpO,GAAM,GAEnCoO,EAAGpO,EAAIqoB,KAAKwnD,KAAMzhE,EAAGpO,GAAMoO,EAAGpO,EAI9BoO,EAAGpO,EAAIoO,EAAGpO,EAAIqoB,KAAKC,MAAOla,EAAGpO,GAS5BJ,KAAKwD,QAETgL,EAAGpO,EAAI,EAAIoO,EAAGpO,OAyBjB4B,OAAO2rE,OAAQ9pE,EAAQs9D,WAEtB4e,WAAW,EAEXl4E,IAAK,SAAW1H,EAAGC,EAAGQ,EAAGC,GAOxB,MALAb,MAAKG,EAAIA,EACTH,KAAKI,EAAIA,EACTJ,KAAKY,EAAIA,EACTZ,KAAKa,EAAIA,EAEFb,MAIRmwE,UAAW,SAAWC,GAOrB,MALApwE,MAAKG,EAAIiwE,EACTpwE,KAAKI,EAAIgwE,EACTpwE,KAAKY,EAAIwvE,EACTpwE,KAAKa,EAAIuvE,EAEFpwE,MAIRqwE,KAAM,SAAWlwE,GAIhB,MAFAH,MAAKG,EAAIA,EAEFH,MAIRswE,KAAM,SAAWlwE,GAIhB,MAFAJ,MAAKI,EAAIA,EAEFJ,MAIRo9E,KAAM,SAAWx8E,GAIhB,MAFAZ,MAAKY,EAAIA,EAEFZ,MAIRggF,KAAM,SAAWn/E,GAIhB,MAFAb,MAAKa,EAAIA,EAEFb,MAIRuwE,aAAc,SAAW9pD,EAAOvkB,GAE/B,OAASukB,GAER,IAAK,GAAGzmB,KAAKG,EAAI+B,CAAO,MACxB,KAAK,GAAGlC,KAAKI,EAAI8B,CAAO,MACxB,KAAK,GAAGlC,KAAKY,EAAIsB,CAAO,MACxB,KAAK,GAAGlC,KAAKa,EAAIqB,CAAO,MACxB,SAAS,KAAM,IAAIuyB,OAAO,0BAA4BhO,GAIvD,MAAOzmB,OAIRwwE,aAAc,SAAW/pD,GAExB,OAASA,GAER,IAAK,GAAG,MAAOzmB,MAAKG,CACpB,KAAK,GAAG,MAAOH,MAAKI,CACpB,KAAK,GAAG,MAAOJ,MAAKY,CACpB,KAAK,GAAG,MAAOZ,MAAKa,CACpB,SAAS,KAAM,IAAI4zB,OAAO,0BAA4BhO,KAMxDhL,MAAO,WAEN,MAAO,IAAIzb,MAAKg4D,YAAah4D,KAAKG,EAAGH,KAAKI,EAAGJ,KAAKY,EAAGZ,KAAKa,IAI3DuQ,KAAM,SAAW5K,GAOhB,MALAxG,MAAKG,EAAIqG,EAAErG,EACXH,KAAKI,EAAIoG,EAAEpG,EACXJ,KAAKY,EAAI4F,EAAE5F,EACXZ,KAAKa,MAAcK,KAARsF,EAAE3F,EAAoB2F,EAAE3F,EAAI,EAEhCb,MAIR+f,IAAK,SAAWvZ,EAAG3F,GAElB,WAAWK,KAANL,GAEJJ,QAAQqa,KAAM,yFACP9a,KAAKovD,WAAY5oD,EAAG3F,KAI5Bb,KAAKG,GAAKqG,EAAErG,EACZH,KAAKI,GAAKoG,EAAEpG,EACZJ,KAAKY,GAAK4F,EAAE5F,EACZZ,KAAKa,GAAK2F,EAAE3F,EAELb,OAIRywE,UAAW,SAAWzb,GAOrB,MALAh1D,MAAKG,GAAK60D,EACVh1D,KAAKI,GAAK40D,EACVh1D,KAAKY,GAAKo0D,EACVh1D,KAAKa,GAAKm0D,EAEHh1D,MAIRovD,WAAY,SAAWj7C,EAAGhN,GAOzB,MALAnH,MAAKG,EAAIgU,EAAEhU,EAAIgH,EAAEhH,EACjBH,KAAKI,EAAI+T,EAAE/T,EAAI+G,EAAE/G,EACjBJ,KAAKY,EAAIuT,EAAEvT,EAAIuG,EAAEvG,EACjBZ,KAAKa,EAAIsT,EAAEtT,EAAIsG,EAAEtG,EAEVb,MAIR0wE,gBAAiB,SAAWlqE,EAAGwuD,GAO9B,MALAh1D,MAAKG,GAAKqG,EAAErG,EAAI60D,EAChBh1D,KAAKI,GAAKoG,EAAEpG,EAAI40D,EAChBh1D,KAAKY,GAAK4F,EAAE5F,EAAIo0D,EAChBh1D,KAAKa,GAAK2F,EAAE3F,EAAIm0D,EAETh1D,MAIR2xB,IAAK,SAAWnrB,EAAG3F,GAElB,WAAWK,KAANL,GAEJJ,QAAQqa,KAAM,yFACP9a,KAAK0qD,WAAYlkD,EAAG3F,KAI5Bb,KAAKG,GAAKqG,EAAErG,EACZH,KAAKI,GAAKoG,EAAEpG,EACZJ,KAAKY,GAAK4F,EAAE5F,EACZZ,KAAKa,GAAK2F,EAAE3F,EAELb,OAIR2wE,UAAW,SAAW3b,GAOrB,MALAh1D,MAAKG,GAAK60D,EACVh1D,KAAKI,GAAK40D,EACVh1D,KAAKY,GAAKo0D,EACVh1D,KAAKa,GAAKm0D,EAEHh1D,MAIR0qD,WAAY,SAAWv2C,EAAGhN,GAOzB,MALAnH,MAAKG,EAAIgU,EAAEhU,EAAIgH,EAAEhH,EACjBH,KAAKI,EAAI+T,EAAE/T,EAAI+G,EAAE/G,EACjBJ,KAAKY,EAAIuT,EAAEvT,EAAIuG,EAAEvG,EACjBZ,KAAKa,EAAIsT,EAAEtT,EAAIsG,EAAEtG,EAEVb,MAIRyxB,eAAgB,SAAW2+C,GAO1B,MALApwE,MAAKG,GAAKiwE,EACVpwE,KAAKI,GAAKgwE,EACVpwE,KAAKY,GAAKwvE,EACVpwE,KAAKa,GAAKuvE,EAEHpwE,MAIRiR,aAAc,SAAW89D,GAExB,GAAI5uE,GAAIH,KAAKG,EAAGC,EAAIJ,KAAKI,EAAGQ,EAAIZ,KAAKY,EAAGC,EAAIb,KAAKa,EAC7C0oD,EAAIwlB,EAAEzuE,QAOV,OALAN,MAAKG,EAAIopD,EAAG,GAAMppD,EAAIopD,EAAG,GAAMnpD,EAAImpD,EAAG,GAAM3oD,EAAI2oD,EAAG,IAAO1oD,EAC1Db,KAAKI,EAAImpD,EAAG,GAAMppD,EAAIopD,EAAG,GAAMnpD,EAAImpD,EAAG,GAAM3oD,EAAI2oD,EAAG,IAAO1oD,EAC1Db,KAAKY,EAAI2oD,EAAG,GAAMppD,EAAIopD,EAAG,GAAMnpD,EAAImpD,EAAG,IAAO3oD,EAAI2oD,EAAG,IAAO1oD,EAC3Db,KAAKa,EAAI0oD,EAAG,GAAMppD,EAAIopD,EAAG,GAAMnpD,EAAImpD,EAAG,IAAO3oD,EAAI2oD,EAAG,IAAO1oD,EAEpDb,MAIRksD,aAAc,SAAWkkB,GAExB,MAAOpwE,MAAKyxB,eAAgB,EAAI2+C,IAIjC6P,2BAA4B,SAAWxxB,GAMtCzuD,KAAKa,EAAI,EAAI4nB,KAAKk2D,KAAMlwB,EAAE5tD,EAE1B,IAAIm0D,GAAIvsC,KAAK81B,KAAM,EAAIkQ,EAAE5tD,EAAI4tD,EAAE5tD,EAgB/B,OAdKm0D,GAAI,MAERh1D,KAAKG,EAAI,EACTH,KAAKI,EAAI,EACTJ,KAAKY,EAAI,IAITZ,KAAKG,EAAIsuD,EAAEtuD,EAAI60D,EACfh1D,KAAKI,EAAIquD,EAAEruD,EAAI40D,EACfh1D,KAAKY,EAAI6tD,EAAE7tD,EAAIo0D,GAITh1D,MAIRkgF,+BAAgC,SAAWnR,GAM1C,GAAI58C,GAAOhyB,EAAGC,EAAGQ,EAIhBoyE,EAAKjE,EAAEzuE,SAEPi7E,EAAMvI,EAAI,GAAKwI,EAAMxI,EAAI,GAAKyI,EAAMzI,EAAI,GACxC0I,EAAM1I,EAAI,GAAK2I,EAAM3I,EAAI,GAAK4I,EAAM5I,EAAI,GACxC6I,EAAM7I,EAAI,GAAK8I,EAAM9I,EAAI,GAAK+I,EAAM/I,EAAI,GAEzC,IAAOvqD,KAAKmF,IAAK4tD,EAAME,GATZ,KAUJjzD,KAAKmF,IAAK6tD,EAAMI,GAVZ,KAWJpzD,KAAKmF,IAAKguD,EAAME,GAXZ,IAWgC,CAM1C,GAAOrzD,KAAKmF,IAAK4tD,EAAME,GAhBZ,IAiBJjzD,KAAKmF,IAAK6tD,EAAMI,GAjBZ,IAkBJpzD,KAAKmF,IAAKguD,EAAME,GAlBZ,IAmBJrzD,KAAKmF,IAAK2tD,EAAMI,EAAMI,EAAM,GAnBxB,GAyBV,MAFA/7E,MAAK6H,IAAK,EAAG,EAAG,EAAG,GAEZ7H,IAMRmyB,GAAQ1J,KAAK6jC,EAEb,IAAIuoB,IAAO0G,EAAM,GAAM,EACnBvG,GAAO2G,EAAM,GAAM,EACnBzG,GAAO6G,EAAM,GAAM,EACnBjH,GAAO0G,EAAME,GAAQ,EACrB3G,GAAO0G,EAAMI,GAAQ,EACrB5G,GAAO2G,EAAME,GAAQ,CA4DzB,OA1DOjH,GAAKG,GAAUH,EAAKK,EAIrBL,EA7CI,KA+CR10E,EAAI;4BACJC,EAAI,WACJQ,EAAI,aAIJT,EAAIsoB,KAAK81B,KAAMs2B,GACfz0E,EAAI00E,EAAK30E,EACTS,EAAIm0E,EAAK50E,GAIC60E,EAAKE,EAIXF,EA/DI,KAiER70E,EAAI,WACJC,EAAI,EACJQ,EAAI,aAIJR,EAAIqoB,KAAK81B,KAAMy2B,GACf70E,EAAI20E,EAAK10E,EACTQ,EAAIq0E,EAAK70E,GAQL80E,EAjFI,KAmFR/0E,EAAI,WACJC,EAAI,WACJQ,EAAI,IAIJA,EAAI6nB,KAAK81B,KAAM22B,GACf/0E,EAAI40E,EAAKn0E,EACTR,EAAI60E,EAAKr0E,GAMXZ,KAAK6H,IAAK1H,EAAGC,EAAGQ,EAAGuxB,GAEZnyB,KAMR,GAAIg1D,GAAIvsC,KAAK81B,MAAQu9B,EAAMF,IAAUE,EAAMF,IACtBH,EAAMI,IAAUJ,EAAMI,IACtBH,EAAMF,IAAUE,EAAMF,GAY3C,OAVK/yD,MAAKmF,IAAKonC,GAAM,OAAQA,EAAI,GAKjCh1D,KAAKG,GAAM27E,EAAMF,GAAQ5mB,EACzBh1D,KAAKI,GAAMq7E,EAAMI,GAAQ7mB,EACzBh1D,KAAKY,GAAM86E,EAAMF,GAAQxmB,EACzBh1D,KAAKa,EAAI4nB,KAAKk2D,MAAQpD,EAAMI,EAAMI,EAAM,GAAM,GAEvC/7E,MAIR6L,IAAK,SAAWrF,GAOf,MALAxG,MAAKG,EAAIsoB,KAAK5c,IAAK7L,KAAKG,EAAGqG,EAAErG,GAC7BH,KAAKI,EAAIqoB,KAAK5c,IAAK7L,KAAKI,EAAGoG,EAAEpG,GAC7BJ,KAAKY,EAAI6nB,KAAK5c,IAAK7L,KAAKY,EAAG4F,EAAE5F,GAC7BZ,KAAKa,EAAI4nB,KAAK5c,IAAK7L,KAAKa,EAAG2F,EAAE3F,GAEtBb,MAIR8L,IAAK,SAAWtF,GAOf,MALAxG,MAAKG,EAAIsoB,KAAK3c,IAAK9L,KAAKG,EAAGqG,EAAErG,GAC7BH,KAAKI,EAAIqoB,KAAK3c,IAAK9L,KAAKI,EAAGoG,EAAEpG,GAC7BJ,KAAKY,EAAI6nB,KAAK3c,IAAK9L,KAAKY,EAAG4F,EAAE5F,GAC7BZ,KAAKa,EAAI4nB,KAAK3c,IAAK9L,KAAKa,EAAG2F,EAAE3F,GAEtBb,MAIR8xD,MAAO,SAAWjmD,EAAKC,GAStB,MALA9L,MAAKG,EAAIsoB,KAAK3c,IAAKD,EAAI1L,EAAGsoB,KAAK5c,IAAKC,EAAI3L,EAAGH,KAAKG,IAChDH,KAAKI,EAAIqoB,KAAK3c,IAAKD,EAAIzL,EAAGqoB,KAAK5c,IAAKC,EAAI1L,EAAGJ,KAAKI,IAChDJ,KAAKY,EAAI6nB,KAAK3c,IAAKD,EAAIjL,EAAG6nB,KAAK5c,IAAKC,EAAIlL,EAAGZ,KAAKY,IAChDZ,KAAKa,EAAI4nB,KAAK3c,IAAKD,EAAIhL,EAAG4nB,KAAK5c,IAAKC,EAAIjL,EAAGb,KAAKa,IAEzCb,MAIR8wE,YAAa,WAEZ,GAAIjlE,GAAKC,CAET,OAAO,UAAsBilE,EAAQC,GAYpC,WAVa9vE,KAAR2K,IAEJA,EAAM,GAAIhI,GACViI,EAAM,GAAIjI,IAIXgI,EAAIhE,IAAKkpE,EAAQA,EAAQA,EAAQA,GACjCjlE,EAAIjE,IAAKmpE,EAAQA,EAAQA,EAAQA,GAE1BhxE,KAAK8xD,MAAOjmD,EAAKC,OAM1BmlE,YAAa,SAAWplE,EAAKC,GAE5B,GAAItL,GAASR,KAAKQ,QAElB,OAAOR,MAAKksD,aAAc1rD,GAAU,GAAIixB,eAAgBhJ,KAAK3c,IAAKD,EAAK4c,KAAK5c,IAAKC,EAAKtL,MAIvFkoB,MAAO,WAON,MALA1oB,MAAKG,EAAIsoB,KAAKC,MAAO1oB,KAAKG,GAC1BH,KAAKI,EAAIqoB,KAAKC,MAAO1oB,KAAKI,GAC1BJ,KAAKY,EAAI6nB,KAAKC,MAAO1oB,KAAKY,GAC1BZ,KAAKa,EAAI4nB,KAAKC,MAAO1oB,KAAKa,GAEnBb,MAIRiwE,KAAM,WAOL,MALAjwE,MAAKG,EAAIsoB,KAAKwnD,KAAMjwE,KAAKG,GACzBH,KAAKI,EAAIqoB,KAAKwnD,KAAMjwE,KAAKI,GACzBJ,KAAKY,EAAI6nB,KAAKwnD,KAAMjwE,KAAKY,GACzBZ,KAAKa,EAAI4nB,KAAKwnD,KAAMjwE,KAAKa,GAElBb,MAIRkxE,MAAO,WAON,MALAlxE,MAAKG,EAAIsoB,KAAKyoD,MAAOlxE,KAAKG,GAC1BH,KAAKI,EAAIqoB,KAAKyoD,MAAOlxE,KAAKI,GAC1BJ,KAAKY,EAAI6nB,KAAKyoD,MAAOlxE,KAAKY,GAC1BZ,KAAKa,EAAI4nB,KAAKyoD,MAAOlxE,KAAKa,GAEnBb,MAIRmxE,YAAa,WAOZ,MALAnxE,MAAKG,EAAMH,KAAKG,EAAI,EAAMsoB,KAAKwnD,KAAMjwE,KAAKG,GAAMsoB,KAAKC,MAAO1oB,KAAKG,GACjEH,KAAKI,EAAMJ,KAAKI,EAAI,EAAMqoB,KAAKwnD,KAAMjwE,KAAKI,GAAMqoB,KAAKC,MAAO1oB,KAAKI,GACjEJ,KAAKY,EAAMZ,KAAKY,EAAI,EAAM6nB,KAAKwnD,KAAMjwE,KAAKY,GAAM6nB,KAAKC,MAAO1oB,KAAKY,GACjEZ,KAAKa,EAAMb,KAAKa,EAAI,EAAM4nB,KAAKwnD,KAAMjwE,KAAKa,GAAM4nB,KAAKC,MAAO1oB,KAAKa,GAE1Db,MAIRoxE,OAAQ,WAOP,MALApxE,MAAKG,GAAMH,KAAKG,EAChBH,KAAKI,GAAMJ,KAAKI,EAChBJ,KAAKY,GAAMZ,KAAKY,EAChBZ,KAAKa,GAAMb,KAAKa,EAETb,MAIR4zD,IAAK,SAAWptD,GAEf,MAAOxG,MAAKG,EAAIqG,EAAErG,EAAIH,KAAKI,EAAIoG,EAAEpG,EAAIJ,KAAKY,EAAI4F,EAAE5F,EAAIZ,KAAKa,EAAI2F,EAAE3F,GAIhEwwE,SAAU,WAET,MAAOrxE,MAAKG,EAAIH,KAAKG,EAAIH,KAAKI,EAAIJ,KAAKI,EAAIJ,KAAKY,EAAIZ,KAAKY,EAAIZ,KAAKa,EAAIb,KAAKa,GAI5EL,OAAQ,WAEP,MAAOioB,MAAK81B,KAAMv+C,KAAKG,EAAIH,KAAKG,EAAIH,KAAKI,EAAIJ,KAAKI,EAAIJ,KAAKY,EAAIZ,KAAKY,EAAIZ,KAAKa,EAAIb,KAAKa,IAIvFywE,gBAAiB,WAEhB,MAAO7oD,MAAKmF,IAAK5tB,KAAKG,GAAMsoB,KAAKmF,IAAK5tB,KAAKI,GAAMqoB,KAAKmF,IAAK5tB,KAAKY,GAAM6nB,KAAKmF,IAAK5tB,KAAKa,IAItFsyB,UAAW,WAEV,MAAOnzB,MAAKksD,aAAclsD,KAAKQ,UAAY,IAI5CgpE,UAAW,SAAWhpE,GAErB,MAAOR,MAAKmzB,YAAY1B,eAAgBjxB,IAIzC2qD,KAAM,SAAW3kD,EAAGmmB,GAOnB,MALA3sB,MAAKG,IAAOqG,EAAErG,EAAIH,KAAKG,GAAMwsB,EAC7B3sB,KAAKI,IAAOoG,EAAEpG,EAAIJ,KAAKI,GAAMusB,EAC7B3sB,KAAKY,IAAO4F,EAAE5F,EAAIZ,KAAKY,GAAM+rB,EAC7B3sB,KAAKa,IAAO2F,EAAE3F,EAAIb,KAAKa,GAAM8rB,EAEtB3sB,MAIR4xE,YAAa,SAAW/W,EAAIc,EAAIhvC,GAE/B,MAAO3sB,MAAK0qD,WAAYiR,EAAId,GAAKppC,eAAgB9E,GAAQ5M,IAAK86C,IAI/Dl1B,OAAQ,SAAWn/B,GAElB,MAAWA,GAAErG,IAAMH,KAAKG,GAASqG,EAAEpG,IAAMJ,KAAKI,GAASoG,EAAE5F,IAAMZ,KAAKY,GAAS4F,EAAE3F,IAAMb,KAAKa,GAI3F+vC,UAAW,SAAWrrC,EAAOvC,GAS5B,WAPgB9B,KAAX8B,IAAuBA,EAAS,GAErChD,KAAKG,EAAIoF,EAAOvC,GAChBhD,KAAKI,EAAImF,EAAOvC,EAAS,GACzBhD,KAAKY,EAAI2E,EAAOvC,EAAS,GACzBhD,KAAKa,EAAI0E,EAAOvC,EAAS,GAElBhD,MAIR+F,QAAS,SAAWR,EAAOvC,GAU1B,WARe9B,KAAVqE,IAAsBA,UACXrE,KAAX8B,IAAuBA,EAAS,GAErCuC,EAAOvC,GAAWhD,KAAKG,EACvBoF,EAAOvC,EAAS,GAAMhD,KAAKI,EAC3BmF,EAAOvC,EAAS,GAAMhD,KAAKY,EAC3B2E,EAAOvC,EAAS,GAAMhD,KAAKa,EAEpB0E,GAIR0kD,oBAAqB,SAAW7pC,EAAWqG,EAAOzjB,GAajD,WAXgB9B,KAAX8B,GAEJvC,QAAQqa,KAAM,uEAIf9a,KAAKG,EAAIigB,EAAU4pC,KAAMvjC,GACzBzmB,KAAKI,EAAIggB,EAAUyxD,KAAMprD,GACzBzmB,KAAKY,EAAIwf,EAAUo3D,KAAM/wD,GACzBzmB,KAAKa,EAAIuf,EAAU+/D,KAAM15D,GAElBzmB,QAyCTgC,OAAO2rE,OAAQ7pE,EAAkBq9D,UAAWlhE,EAAgBkhE,WAE3DnlC,qBAAqB,EAErBqnB,QAAS,SAAWt/C,EAAOC,GAErBhE,KAAK+D,QAAUA,GAAS/D,KAAKgE,SAAWA,IAE5ChE,KAAK+D,MAAQA,EACb/D,KAAKgE,OAASA,EAEdhE,KAAK0tB,WAIN1tB,KAAKoE,SAASyD,IAAK,EAAG,EAAG9D,EAAOC,GAChChE,KAAKkE,QAAQ2D,IAAK,EAAG,EAAG9D,EAAOC,IAIhCyX,MAAO,WAEN,OAAO,GAAIzb,MAAKg4D,aAAc5mD,KAAMpR,OAIrCoR,KAAM,SAAWy8D,GAahB,MAXA7tE,MAAK+D,MAAQ8pE,EAAO9pE,MACpB/D,KAAKgE,OAAS6pE,EAAO7pE,OAErBhE,KAAKoE,SAASgN,KAAMy8D,EAAOzpE,UAE3BpE,KAAKqE,QAAUwpE,EAAOxpE,QAAQoX,QAE9Bzb,KAAKsE,YAAcupE,EAAOvpE,YAC1BtE,KAAKuE,cAAgBspE,EAAOtpE,cAC5BvE,KAAKwE,aAAeqpE,EAAOrpE,aAEpBxE,MAIR0tB,QAAS,WAER1tB,KAAKquE,eAAiBxsE,KAAM,eAmB9B4C,EAAsB08D,UAAYn/D,OAAOo+E,OAAQt8E,EAAkBq9D,WACnE18D,EAAsB08D,UAAUnJ,YAAcvzD,EAE9CA,EAAsB08D,UAAUhhC,yBAA0B,EAqB1Dt7B,EAAYs8D,UAAYn/D,OAAOo+E,OAAQ/+E,EAAQ8/D,WAC/Ct8D,EAAYs8D,UAAUnJ,YAAcnzD,EAEpCA,EAAYs8D,UAAUlgC,eAAgB,EAiBtCj8B,EAAYm8D,UAAYn/D,OAAOo+E,OAAQ/+E,EAAQ8/D,WAC/Cn8D,EAAYm8D,UAAUnJ,YAAchzD,EAEpCA,EAAYm8D,UAAUl1C,eAAgB,EAEtCjqB,OAAOC,eAAgB+C,EAAYm8D,UAAW,UAE7Cx/C,IAAK,WAEJ,MAAO3hB,MAAKsB,OAIbuG,IAAK,SAAW3F,GAEflC,KAAKsB,MAAQY,IAuDf,IAAIkG,IAAe,GAAI/G,GACnBkH,GAAmB,GAAIvD,GAevBa,MACAM,MAIA6B,GAAY,GAAIlC,cAAc,IAC9B8B,GAAY,GAAI9B,cAAc,EAoXlCqE,GAAkBg3D,UAAUl3D,SAAW,SAAW1D,EAAIrE,GAOrD,IAAM,GAFFkD,GAAMpF,KAAKoF,IAELY,EAAI,EAAGL,EAAIP,EAAI5E,OAAQwF,IAAML,IAAMK,EAAI,CAEhD,GAAIohB,GAAIhiB,EAAKY,EACbohB,GAAEnd,SAAU1D,EAAIrE,EAAOklB,EAAErd,MAU3B,IAAIY,IAAa,0BA0FjBQ,GAAcg2D,UAAUl3D,SAAW,SAAW1D,EAAIhE,EAAML,GAEvD,GAAIklB,GAAIpnB,KAAKqF,IAAK9C,OAEPrB,KAANkmB,GAAkBA,EAAEnd,SAAU1D,EAAIrE,EAAOlC,KAAKkG,WAIpDiF,EAAcg2D,UAAU9iB,YAAc,SAAW93C,EAAIqT,EAAQrX,GAE5D,GAAIiE,GAAIoT,EAAQrX,OAELrB,KAANsF,GAAkBxG,KAAKiK,SAAU1D,EAAIhE,EAAMiE,IAOjD2E,EAAcq1C,OAAS,SAAWj6C,EAAInB,EAAKuzD,EAAQzyD,GAElD,IAAM,GAAIF,GAAI,EAAGL,EAAIP,EAAI5E,OAAQwF,IAAML,IAAMK,EAAI,CAEhD,GAAIohB,GAAIhiB,EAAKY,GACZQ,EAAImyD,EAAQvxC,EAAErd,KAEQ,IAAlBvD,EAAEuM,aAGNqU,EAAEnd,SAAU1D,EAAIC,EAAEtE,MAAOgE,KAQ5BiF,EAAc+xC,aAAe,SAAW93C,EAAKuzD,GAI5C,IAAM,GAFF/yD,MAEMI,EAAI,EAAGL,EAAIP,EAAI5E,OAAQwF,IAAML,IAAMK,EAAI,CAEhD,GAAIohB,GAAIhiB,EAAKY,EACRohB,GAAErd,KAAM4uD,IAAS/yD,EAAE2E,KAAM6c,GAI/B,MAAOxhB,GAQR,IAAIy6E,KAAkBC,UAAa,SAAUC,aAAgB,SAAUC,KAAQ,MAAUC,WAAc,QAAUC,MAAS,SACzHC,MAAS,SAAUC,OAAU,SAAUC,MAAS,EAAUC,eAAkB,SAAUC,KAAQ,IAAUC,WAAc,QACtHC,MAAS,SAAUC,UAAa,SAAUC,UAAa,QAAUC,WAAc,QAAUC,UAAa,SAAUC,MAAS,SACzHC,eAAkB,QAAUC,SAAY,SAAUC,QAAW,SAAUC,KAAQ,MAAUC,SAAY,IAAUC,SAAY,MAC3HC,cAAiB,SAAUC,SAAY,SAAUC,UAAa,MAAUC,SAAY,SAAUC,UAAa,SAAUC,YAAe,QACpIC,eAAkB,QAAUC,WAAc,SAAUC,WAAc,SAAUC,QAAW,QAAUC,WAAc,SAAUC,aAAgB,QACzIC,cAAiB,QAAUC,cAAiB,QAAUC,cAAiB,QAAUC,cAAiB,MAAUC,WAAc,QAC1HC,SAAY,SAAUC,YAAe,MAAUC,QAAW,QAAUC,QAAW,QAAUC,WAAc,QAAUC,UAAa,SAC9HC,YAAe,SAAUC,YAAe,QAAUC,QAAW,SAAUC,UAAa,SAAUC,WAAc,SAAUC,KAAQ,SAC9HC,UAAa,SAAUC,KAAQ,QAAUC,MAAS,MAAUC,YAAe,SAAUC,KAAQ,QAAUC,SAAY,SAAUC,QAAW,SACxIC,UAAa,SAAUC,OAAU,QAAUC,MAAS,SAAUC,MAAS,SAAUC,SAAY,SAAUC,cAAiB,SAAUC,UAAa,QAC/IC,aAAgB,SAAUC,UAAa,SAAUC,WAAc,SAAUC,UAAa,SAAUC,qBAAwB,SAAUC,UAAa,SAC/IC,WAAc,QAAUC,UAAa,SAAUC,UAAa,SAAUC,YAAe,SAAUC,cAAiB,QAAUC,aAAgB,QAC1IC,eAAkB,QAAUC,eAAkB,QAAUC,eAAkB,SAAUC,YAAe,SAAUC,KAAQ,MAAUC,UAAa,QAC5IC,MAAS,SAAUC,QAAW,SAAUC,OAAU,QAAUC,iBAAoB,QAAUC,WAAc,IAAUC,aAAgB,SAClIC,aAAgB,QAAUC,eAAkB,QAAUC,gBAAmB,QAAUC,kBAAqB,MAAUC,gBAAmB,QACrIC,gBAAmB,SAAUC,aAAgB,QAAUC,UAAa,SAAUC,UAAa,SAAUC,SAAY,SAAUC,YAAe,SAC1IC,KAAQ,IAAUC,QAAW,SAAUC,MAAS,QAAUC,UAAa,QAAUC,OAAU,SAAUC,UAAa,SAAUC,OAAU,SACtIC,cAAiB,SAAUC,UAAa,SAAUC,cAAiB,SAAUC,cAAiB,SAAUC,WAAc,SAAUC,UAAa,SAC7IC,KAAQ,SAAUC,KAAQ,SAAUC,KAAQ,SAAUC,WAAc,SAAUC,OAAU,QAAUC,cAAiB,QAAUC,IAAO,SAAUC,UAAa,SAC3JC,UAAa,QAAUC,YAAe,QAAUC,OAAU,SAAUC,WAAc,SAAUC,SAAY,QAAUC,SAAY,SAC9HC,OAAU,SAAUC,OAAU,SAAUC,QAAW,QAAUC,UAAa,QAAUC,UAAa,QAAUC,UAAa,QAAUC,KAAQ,SAC1IC,YAAe,MAAUC,UAAa,QAAUC,IAAO,SAAUC,KAAQ,MAAUC,QAAW,SAAUC,OAAU,SAAUC,UAAa,QACzIC,OAAU,SAAUC,MAAS,SAAUC,MAAS,SAAUC,WAAc,SAAUC,OAAU,SAAUC,YAAe,SAetHznF,QAAO2rE,OAAQjiE,EAAMy1D,WAEpBl9C,SAAS,EAETre,EAAG,EAAGsB,EAAG,EAAGC,EAAG,EAEfU,IAAK,SAAW3F,GAgBf,MAdKA,IAASA,EAAM+hB,QAEnBjkB,KAAKoR,KAAMlP,GAEiB,gBAAVA,GAElBlC,KAAK0pF,OAAQxnF,GAEe,gBAAVA,IAElBlC,KAAK2pF,SAAUznF,GAITlC,MAIRmwE,UAAW,SAAWC,GAMrB,MAJApwE,MAAK4F,EAAIwqE,EACTpwE,KAAKkH,EAAIkpE,EACTpwE,KAAKmH,EAAIipE,EAEFpwE,MAIR0pF,OAAQ,SAAW1jB,GAQlB,MANAA,GAAMv9C,KAAKC,MAAOs9C,GAElBhmE,KAAK4F,GAAMogE,GAAO,GAAK,KAAQ,IAC/BhmE,KAAKkH,GAAM8+D,GAAO,EAAI,KAAQ,IAC9BhmE,KAAKmH,GAAY,IAAN6+D,GAAc,IAElBhmE,MAIR2L,OAAQ,SAAW/F,EAAGsB,EAAGC,GAMxB,MAJAnH,MAAK4F,EAAIA,EACT5F,KAAKkH,EAAIA,EACTlH,KAAKmH,EAAIA,EAEFnH,MAIR4pF,OAAQ,WAEP,QAASC,GAAS9rD,EAAG0wB,EAAGxB,GAIvB,MAFKA,GAAI,IAAIA,GAAK,GACbA,EAAI,IAAIA,GAAK,GACbA,EAAI,EAAI,EAAWlvB,EAAgB,GAAV0wB,EAAI1wB,GAAUkvB,EACvCA,EAAI,GAAewB,EACnBxB,EAAI,EAAI,EAAWlvB,EAAgB,GAAV0wB,EAAI1wB,IAAY,EAAI,EAAIkvB,GAC/ClvB,EAIR,MAAO,UAAiB87C,EAAG7kB,EAAGlkD,GAO7B,GAJA+oE,EAAIx3E,GAAMysE,gBAAiB+K,EAAG,GAC9B7kB,EAAI3yD,GAAMyvD,MAAOkD,EAAG,EAAG,GACvBlkD,EAAIzO,GAAMyvD,MAAOhhD,EAAG,EAAG,GAEZ,IAANkkD,EAEJh1D,KAAK4F,EAAI5F,KAAKkH,EAAIlH,KAAKmH,EAAI2J,MAErB,CAEN,GAAIitB,GAAIjtB,GAAK,GAAMA,GAAM,EAAIkkD,GAAMlkD,EAAIkkD,EAAMlkD,EAAIkkD,EAC7CvG,EAAM,EAAI39C,EAAMitB,CAEpB/9B,MAAK4F,EAAIikF,EAASp7B,EAAG1wB,EAAG87C,EAAI,EAAI,GAChC75E,KAAKkH,EAAI2iF,EAASp7B,EAAG1wB,EAAG87C,GACxB75E,KAAKmH,EAAI0iF,EAASp7B,EAAG1wB,EAAG87C,EAAI,EAAI,GAIjC,MAAO75E,UAMT2pF,SAAU,SAAWpmC,GAEpB,QAASumC,GAAan2D,OAELzyB,KAAXyyB,GAEAuZ,WAAYvZ,GAAW,GAE3BlzB,QAAQqa,KAAM,mCAAqCyoC,EAAQ,qBAO7D,GAAIwrB,EAEJ,IAAKA,EAAI,kCAAkCjkE,KAAMy4C,GAAU,CAI1D,GAAI10C,GACAtM,EAAOwsE,EAAG,GACVn6C,EAAam6C,EAAG,EAEpB,QAASxsE,GAER,IAAK,MACL,IAAK,OAEJ,GAAKsM,EAAQ,gEAAgE/D,KAAM8pB,GASlF,MANA50B,MAAK4F,EAAI6iB,KAAK5c,IAAK,IAAKmrB,SAAUnoB,EAAO,GAAK,KAAS,IACvD7O,KAAKkH,EAAIuhB,KAAK5c,IAAK,IAAKmrB,SAAUnoB,EAAO,GAAK,KAAS,IACvD7O,KAAKmH,EAAIshB,KAAK5c,IAAK,IAAKmrB,SAAUnoB,EAAO,GAAK,KAAS,IAEvDi7E,EAAaj7E,EAAO,IAEb7O,IAIR,IAAK6O,EAAQ,sEAAsE/D,KAAM8pB,GASxF,MANA50B,MAAK4F,EAAI6iB,KAAK5c,IAAK,IAAKmrB,SAAUnoB,EAAO,GAAK,KAAS,IACvD7O,KAAKkH,EAAIuhB,KAAK5c,IAAK,IAAKmrB,SAAUnoB,EAAO,GAAK,KAAS,IACvD7O,KAAKmH,EAAIshB,KAAK5c,IAAK,IAAKmrB,SAAUnoB,EAAO,GAAK,KAAS,IAEvDi7E,EAAaj7E,EAAO,IAEb7O,IAIR,MAED,KAAK,MACL,IAAK,OAEJ,GAAK6O,EAAQ,gFAAgF/D,KAAM8pB,GAAe,CAGjH,GAAIilD,GAAI3sC,WAAYr+B,EAAO,IAAQ,IAC/BmmD,EAAIh+B,SAAUnoB,EAAO,GAAK,IAAO,IACjCiC,EAAIkmB,SAAUnoB,EAAO,GAAK,IAAO,GAIrC,OAFAi7E,GAAaj7E,EAAO,IAEb7O,KAAK4pF,OAAQ/P,EAAG7kB,EAAGlkD,SAQvB,IAAKi+D,EAAI,qBAAqBjkE,KAAMy4C,GAAU,CAIpD,GAAIyiB,GAAM+I,EAAG,GACT3lE,EAAO48D,EAAIxlE,MAEf,IAAc,IAAT4I,EAOJ,MAJApJ,MAAK4F,EAAIoxB,SAAUgvC,EAAI+jB,OAAQ,GAAM/jB,EAAI+jB,OAAQ,GAAK,IAAO,IAC7D/pF,KAAKkH,EAAI8vB,SAAUgvC,EAAI+jB,OAAQ,GAAM/jB,EAAI+jB,OAAQ,GAAK,IAAO,IAC7D/pF,KAAKmH,EAAI6vB,SAAUgvC,EAAI+jB,OAAQ,GAAM/jB,EAAI+jB,OAAQ,GAAK,IAAO,IAEtD/pF,IAED,IAAc,IAAToJ,EAOX,MAJApJ,MAAK4F,EAAIoxB,SAAUgvC,EAAI+jB,OAAQ,GAAM/jB,EAAI+jB,OAAQ,GAAK,IAAO,IAC7D/pF,KAAKkH,EAAI8vB,SAAUgvC,EAAI+jB,OAAQ,GAAM/jB,EAAI+jB,OAAQ,GAAK,IAAO,IAC7D/pF,KAAKmH,EAAI6vB,SAAUgvC,EAAI+jB,OAAQ,GAAM/jB,EAAI+jB,OAAQ,GAAK,IAAO,IAEtD/pF,KAMT,GAAKujD,GAASA,EAAM/iD,OAAS,EAAI,CAGhC,GAAIwlE,GAAMqa,GAAe98B,OAEZriD,KAAR8kE,EAGJhmE,KAAK0pF,OAAQ1jB,GAKbvlE,QAAQqa,KAAM,8BAAgCyoC,GAMhD,MAAOvjD,OAIRyb,MAAO,WAEN,MAAO,IAAIzb,MAAKg4D,YAAah4D,KAAK4F,EAAG5F,KAAKkH,EAAGlH,KAAKmH,IAInDiK,KAAM,SAAWvC,GAMhB,MAJA7O,MAAK4F,EAAIiJ,EAAMjJ,EACf5F,KAAKkH,EAAI2H,EAAM3H,EACflH,KAAKmH,EAAI0H,EAAM1H,EAERnH,MAIRgqF,kBAAmB,SAAWn7E,EAAOupB,GAQpC,WANqBl3B,KAAhBk3B,IAA4BA,EAAc,GAE/Cp4B,KAAK4F,EAAI6iB,KAAKwiC,IAAKp8C,EAAMjJ,EAAGwyB,GAC5Bp4B,KAAKkH,EAAIuhB,KAAKwiC,IAAKp8C,EAAM3H,EAAGkxB,GAC5Bp4B,KAAKmH,EAAIshB,KAAKwiC,IAAKp8C,EAAM1H,EAAGixB,GAErBp4B,MAIRiqF,kBAAmB,SAAWp7E,EAAOupB,OAEfl3B,KAAhBk3B,IAA4BA,EAAc,EAE/C,IAAI8xD,GAAgB9xD,EAAc,EAAQ,EAAMA,EAAgB,CAMhE,OAJAp4B,MAAK4F,EAAI6iB,KAAKwiC,IAAKp8C,EAAMjJ,EAAGskF,GAC5BlqF,KAAKkH,EAAIuhB,KAAKwiC,IAAKp8C,EAAM3H,EAAGgjF,GAC5BlqF,KAAKmH,EAAIshB,KAAKwiC,IAAKp8C,EAAM1H,EAAG+iF,GAErBlqF,MAIRmqF,qBAAsB,WAErB,GAAIvkF,GAAI5F,KAAK4F,EAAGsB,EAAIlH,KAAKkH,EAAGC,EAAInH,KAAKmH,CAMrC,OAJAnH,MAAK4F,EAAIA,EAAIA,EACb5F,KAAKkH,EAAIA,EAAIA,EACblH,KAAKmH,EAAIA,EAAIA,EAENnH,MAIRoqF,qBAAsB,WAMrB,MAJApqF,MAAK4F,EAAI6iB,KAAK81B,KAAMv+C,KAAK4F,GACzB5F,KAAKkH,EAAIuhB,KAAK81B,KAAMv+C,KAAKkH,GACzBlH,KAAKmH,EAAIshB,KAAK81B,KAAMv+C,KAAKmH,GAElBnH,MAIRqqF,OAAQ,WAEP,MAAkB,KAATrqF,KAAK4F,GAAa,GAAgB,IAAT5F,KAAKkH,GAAa,EAAe,IAATlH,KAAKmH,GAAa,GAI7EmjF,aAAc,WAEb,OAAS,SAAWtqF,KAAKqqF,SAASxsD,SAAU,KAAOgqB,OAAS,IAI7D0iC,OAAQ,SAAWC,GAIlB,GAOIC,GAAKC,EAPLC,EAAMH,IAAoB3Q,EAAG,EAAG7kB,EAAG,EAAGlkD,EAAG,GAEzClL,EAAI5F,KAAK4F,EAAGsB,EAAIlH,KAAKkH,EAAGC,EAAInH,KAAKmH,EAEjC2E,EAAM2c,KAAK3c,IAAKlG,EAAGsB,EAAGC,GACtB0E,EAAM4c,KAAK5c,IAAKjG,EAAGsB,EAAGC,GAGtByjF,GAAc/+E,EAAMC,GAAQ,CAEhC,IAAKD,IAAQC,EAEZ2+E,EAAM,EACNC,EAAa,MAEP,CAEN,GAAIG,GAAQ/+E,EAAMD,CAIlB,QAFA6+E,EAAaE,GAAa,GAAMC,GAAU/+E,EAAMD,GAAQg/E,GAAU,EAAI/+E,EAAMD,GAEnEC,GAER,IAAKlG,GAAG6kF,GAAQvjF,EAAIC,GAAM0jF,GAAU3jF,EAAIC,EAAI,EAAI,EAAK,MACrD,KAAKD,GAAGujF,GAAQtjF,EAAIvB,GAAMilF,EAAQ,CAAG,MACrC,KAAK1jF,GAAGsjF,GAAQ7kF,EAAIsB,GAAM2jF,EAAQ,EAInCJ,GAAO,EAQR,MAJAE,GAAI9Q,EAAI4Q,EACRE,EAAI31B,EAAI01B,EACRC,EAAI75E,EAAI85E,EAEDD,GAIRG,SAAU,WAET,MAAO,QAAsB,IAAT9qF,KAAK4F,EAAY,GAAM,KAAmB,IAAT5F,KAAKkH,EAAY,GAAM,KAAmB,IAATlH,KAAKmH,EAAY,GAAM,KAI9G4jF,UAAW,SAAWlR,EAAG7kB,EAAGlkD,GAE3B,GAAI65E,GAAM3qF,KAAKuqF,QAMf,OAJAI,GAAI9Q,GAAKA,EAAG8Q,EAAI31B,GAAKA,EAAG21B,EAAI75E,GAAKA,EAEjC9Q,KAAK4pF,OAAQe,EAAI9Q,EAAG8Q,EAAI31B,EAAG21B,EAAI75E,GAExB9Q,MAIR+f,IAAK,SAAWlR,GAMf,MAJA7O,MAAK4F,GAAKiJ,EAAMjJ,EAChB5F,KAAKkH,GAAK2H,EAAM3H,EAChBlH,KAAKmH,GAAK0H,EAAM1H,EAETnH,MAIRgrF,UAAW,SAAWtkB,EAAQC,GAM7B,MAJA3mE,MAAK4F,EAAI8gE,EAAO9gE,EAAI+gE,EAAO/gE,EAC3B5F,KAAKkH,EAAIw/D,EAAOx/D,EAAIy/D,EAAOz/D,EAC3BlH,KAAKmH,EAAIu/D,EAAOv/D,EAAIw/D,EAAOx/D,EAEpBnH,MAIRywE,UAAW,SAAWzb,GAMrB,MAJAh1D,MAAK4F,GAAKovD,EACVh1D,KAAKkH,GAAK8tD,EACVh1D,KAAKmH,GAAK6tD,EAEHh1D,MAIR2xB,IAAK,SAAW9iB,GAMf,MAJA7O,MAAK4F,EAAI6iB,KAAK3c,IAAK,EAAG9L,KAAK4F,EAAIiJ,EAAMjJ,GACrC5F,KAAKkH,EAAIuhB,KAAK3c,IAAK,EAAG9L,KAAKkH,EAAI2H,EAAM3H,GACrClH,KAAKmH,EAAIshB,KAAK3c,IAAK,EAAG9L,KAAKmH,EAAI0H,EAAM1H,GAE9BnH,MAIR2f,SAAU,SAAW9Q,GAMpB,MAJA7O,MAAK4F,GAAKiJ,EAAMjJ,EAChB5F,KAAKkH,GAAK2H,EAAM3H,EAChBlH,KAAKmH,GAAK0H,EAAM1H,EAETnH,MAIRyxB,eAAgB,SAAWujC,GAM1B,MAJAh1D,MAAK4F,GAAKovD,EACVh1D,KAAKkH,GAAK8tD,EACVh1D,KAAKmH,GAAK6tD,EAEHh1D,MAIRmrD,KAAM,SAAWt8C,EAAO8d,GAMvB,MAJA3sB,MAAK4F,IAAOiJ,EAAMjJ,EAAI5F,KAAK4F,GAAM+mB,EACjC3sB,KAAKkH,IAAO2H,EAAM3H,EAAIlH,KAAKkH,GAAMylB,EACjC3sB,KAAKmH,IAAO0H,EAAM1H,EAAInH,KAAKmH,GAAMwlB,EAE1B3sB,MAIR2lC,OAAQ,SAAW7hB,GAElB,MAASA,GAAEle,IAAM5F,KAAK4F,GAASke,EAAE5c,IAAMlH,KAAKkH,GAAS4c,EAAE3c,IAAMnH,KAAKmH,GAInEypC,UAAW,SAAWrrC,EAAOvC,GAQ5B,WANgB9B,KAAX8B,IAAuBA,EAAS,GAErChD,KAAK4F,EAAIL,EAAOvC,GAChBhD,KAAKkH,EAAI3B,EAAOvC,EAAS,GACzBhD,KAAKmH,EAAI5B,EAAOvC,EAAS,GAElBhD,MAIR+F,QAAS,SAAWR,EAAOvC,GAS1B,WAPe9B,KAAVqE,IAAsBA,UACXrE,KAAX8B,IAAuBA,EAAS,GAErCuC,EAAOvC,GAAWhD,KAAK4F,EACvBL,EAAOvC,EAAS,GAAMhD,KAAKkH,EAC3B3B,EAAOvC,EAAS,GAAMhD,KAAKmH,EAEpB5B,GAIR85E,OAAQ,WAEP,MAAOr/E,MAAKqqF,WAUd,IAAIjqC,KAEH6qC,QAECxqC,SAAWv+C,MAAO,GAAIwJ,GAAO,WAC7BkD,SAAW1M,MAAO,GAElBmD,KAAOnD,MAAO,MACd6+C,aAAe7+C,MAAO,GAAId,IAE1B0W,UAAY5V,MAAO,OAIpBgpF,aAEC1hE,aAAetnB,MAAO,OAIvBipF,QAEC1hE,QAAUvnB,MAAO,MACjB0+C,YAAc1+C,OAAS,GACvB0nB,cAAgB1nB,MAAO,GACvB2nB,iBAAmB3nB,MAAO,MAI3BkpF,OAEC9hE,OAASpnB,MAAO,MAChBqnB,gBAAkBrnB,MAAO,IAI1BmpF,UAECjiE,UAAYlnB,MAAO,MACnBmnB,mBAAqBnnB,MAAO,IAI7BopF,aAEC1yD,aAAe12B,MAAO,OAIvBqpF,SAEC/1D,SAAWtzB,MAAO,MAClBm/C,WAAan/C,MAAO,IAIrBspF,WAEC/1D,WAAavzB,MAAO,MACpBo/C,aAAep/C,MAAO,GAAIhC,GAAS,EAAG,KAIvCurF,iBAEC1zE,iBAAmB7V,MAAO,MAC1B8V,mBAAqB9V,MAAO,GAC5B+V,kBAAoB/V,MAAO,IAI5BwpF,cAEC7yD,cAAgB32B,MAAO,OAIxBypF,cAEC7yD,cAAgB52B,MAAO,OAIxB0pF,aAECvyD,aAAen3B,MAAO,OAIvByS,KAECrB,YAAcpR,MAAO,OACrBqR,SAAWrR,MAAO,GAClBsR,QAAUtR,MAAO,KACjBuR,UAAYvR,MAAO,GAAIwJ,GAAO,YAI/BwK,QAECwmC,mBAAqBx6C,UAErBy6C,mBAAqBz6C,SAAWo8B,YAC/BzT,aACAhc,SAEAgQ,UACAoR,cACAC,gBACAC,mBAGD2B,sBAAwB5vB,UACxB6vB,yBAA2B7vB,UAE3B06C,YAAc16C,SAAWo8B,YACxBzvB,SACAoE,YACA4X,aACAuF,YACAC,WACAC,eACAC,SAEA1R,UACAoR,cACAC,gBACAC,mBAGDkC,eAAiBnwB,UACjBowB,kBAAoBpwB,UAEpB46C,aAAe56C,SAAWo8B,YACzBzvB,SACAoE,YACAsd,SACAH,YAEAvR,UACAoR,cACAC,gBACAC,iBACApW,oBACAC,qBAGD+Y,gBAAkB7wB,UAClB8wB,mBAAqB9wB,UAErB66C,kBAAoB76C,SAAWo8B,YAC9BzT,aACA2F,YACAC,iBAIDosB,gBAAkB36C,SAAWo8B,YAC5BzvB,SACAoE,YACAlP,SACAC,aAKF2qB,QAEC8xB,SAAWv+C,MAAO,GAAIwJ,GAAO,WAC7BkD,SAAW1M,MAAO,GAClBkH,MAAQlH,MAAO,GACf4M,OAAS5M,MAAO,GAChBmD,KAAOnD,MAAO,MACd6+C,aAAe7+C,MAAO,GAAId,MAUxBk7C,IAEHuvC,MAAO,SAAWp9E,GAIjB,IAAM,GAFFq9E,MAEM1kE,EAAI,EAAGA,EAAI3Y,EAASjO,OAAQ4mB,IAAO,CAE5C,GAAIwwD,GAAM53E,KAAKyb,MAAOhN,EAAU2Y,GAEhC,KAAM,GAAI2W,KAAK65C,GAEdkU,EAAQ/tD,GAAM65C,EAAK75C,GAMrB,MAAO+tD,IAIRrwE,MAAO,SAAWswE,GAEjB,GAAIC,KAEJ,KAAM,GAAI5kE,KAAK2kE,GAAe,CAE7BC,EAAc5kE,KAEd,KAAM,GAAI2W,KAAKguD,GAAc3kE,GAAM,CAElC,GAAI6kE,GAAgBF,EAAc3kE,GAAK2W,EAElCkuD,KAAmBA,EAAchoE,SACrCgoE,EAAchN,WAAagN,EAAcla,WACzCka,EAAc/b,WAAa+b,EAAcloE,WAAakoE,EAAclM,WACpEkM,EAAcz/D,WAEdw/D,EAAc5kE,GAAK2W,GAAMkuD,EAAcxwE,QAE5BoB,MAAMC,QAASmvE,GAE1BD,EAAc5kE,GAAK2W,GAAMkuD,EAAcpkC,QAIvCmkC,EAAc5kE,GAAK2W,GAAMkuD,GAQ5B,MAAOD,KAgOLr1D,IACHu1D,kBA3NuB,mFA4NvBC,uBA1N4B,+DA2N5BC,mBAzNwB,2EA0NxBC,eAxNoB,6aAyNpBC,oBAvNyB,wFAwNzBC,aAtNkB,2CAuNlBC,mBArNwB,0CAsNxBC,MApNW,+7LAqNXC,sBAnN2B,65BAoN3BC,yBAlN8B,ghBAmN9BC,8BAjNmC,6LAkNnCC,4BAhNiC,sHAiNjCC,uBA/M4B,4HAgN5BC,eA9MoB,0DA+MpBC,oBA7MyB,qDA8MzBC,kBA5MuB,mDA6MvBC,aA3MkB,sDA4MlBjC,OA1MY,4rEA2MZkC,4BAzMiC,qlIA0MjCC,qBAxM0B,iIAyM1BC,4BAvMiC,oJAwMjCC,uBAtM4B,oKAuM5BC,qBArM0B,+MAsM1BC,0BApM+B,qEAqM/BC,mBAnMwB,0DAoMxBC,wBAlM6B;wwFAmM7BC,gBAjMqB,iqDAkMrBC,qBAhM0B,mnBAiM1BC,mBA/LwB,iOAgMxBC,cA9LmB,ugBA+LnBC,WA7LgB,sDA8LhBC,gBA5LqB,sDA6LrBC,aA3LkB,+SA4LlBC,kBA1LuB,4MA2LvBC,0BAzL+B,0YA0L/BC,kBAxLuB,+HAyLvBC,uBAvL4B,iGAwL5BC,sBAtL2B,6oEAuL3BC,YArLiB,wiOAsLjBC,sBApL2B,wMAqL3BC,2BAnLgC,66CAoLhCC,yBAlL8B,8iBAmL9BC,8BAjLmC,gqJAkLnCC,gBAhLqB,m/GAiLrBC,qBA/K0B,0IAgL1BC,0BA9K+B,0IA+K/BC,wBA7K6B,wIA8K7BC,mBA5KwB,wPA6KxBC,aA3KkB,sJA4KlBC,kBA1KuB,qDA2KvBC,sBAzK2B,0MA0K3BC,2BAxKgC,kFAyKhCC,sBAvK2B,yKAwK3BC,2BAtKgC,qEAuKhCC,mBArKwB,gVAsKxBC,wBApK6B,2KAqK7BC,mBAnKwB,0qBAoKxBC,gBAlKqB,2lBAmKrBC,wBAjK6B,wrBAkK7BC,QAhKa;6yCAiKbC,6BA/JkC,8EAgKlCC,eA9JoB,gHA+JpBC,mBA7JwB,0FA8JxBC,wBA5J6B,qVA6J7BC,sBA3J2B,yKA4J3BC,2BA1JgC,qEA2JhCC,wBAzJ6B,kpNA0J7BC,sBAxJ2B,0eAyJ3BC,iBAvJsB,ihBAwJtBC,yBAtJ8B,usCAuJ9BC,gBArJqB,kOAsJrBC,qBApJ0B,4gCAqJ1BC,gBAnJqB,iYAoJrBC,kBAlJuB,8WAmJvBC,qBAjJ0B,0LAkJ1BC,0BAhJ+B,mEAiJ/BC,qBA/I0B,+FAgJ1BC,0BA9I+B,g7BA+I/BC,iBA7IsB,iQA8ItBC,eA5IoB,gSA6IpBC,UA3Ie,yRA4IfC,kBA1IuB,oFA2IvBC,gBAzIqB,2GA0IrBC,WAxIgB,6EAyIhBC,gBAvIqB,0JAyIrBC,UAvIe,wPAwIfC,UAtIe,iOAuIfC,WArIgB,ivBAsIhBC,WApIgB,oqBAqIhBC,kBAnIuB,+rBAoIvBC,kBAlIuB,otBAmIvBC,cAjImB,oXAkInBC,cAhImB,+LAiInBC,gBA/HqB,qyBAgIrBC,gBA9HqB,khBA+HrBC,eA7HoB,w8CA8HpBC,eA5HoB,u2BA6HpBC,iBA3HsB,mlEA4HtBC,iBA1HsB,4jCA2HtBC,eAzHoB,g4DA0HpBC,eAxHoB,uqCAyHpBC,kBAvHuB;4nEAwHvBC,kBAtHuB,+mCAuHvBC,YArHiB,wgBAsHjBC,YApHiB,i8BAqHjBC,YAnHiB,8yBAoHjBC,YAlHiB,4mBAmHjBC,YAjHiB,2VAkHjBC,YAhHiB,kOAyHd1mE,IAEH2mE,OAECrkF,SAAU6tC,GAAcuvC,OACvBzrC,GAAY6qC,OACZ7qC,GAAY8qC,YACZ9qC,GAAY+qC,OACZ/qC,GAAYgrC,MACZhrC,GAAYirC,SACZjrC,GAAYzrC,MAGb1G,aAAc0oB,GAAYs7D,eAC1B9jF,eAAgBwoB,GAAYq7D,gBAI7Be,SAECtkF,SAAU6tC,GAAcuvC,OACvBzrC,GAAY6qC,OACZ7qC,GAAY8qC,YACZ9qC,GAAY+qC,OACZ/qC,GAAYgrC,MACZhrC,GAAYirC,SACZjrC,GAAYkrC,YACZlrC,GAAYzrC,IACZyrC,GAAYlqC,QAEXwqC,UAAYx+C,MAAO,GAAIwJ,GAAO,OAIhCuC,aAAc0oB,GAAYw7D,iBAC1BhkF,eAAgBwoB,GAAYu7D,kBAI7Bc,OAECvkF,SAAU6tC,GAAcuvC,OACvBzrC,GAAY6qC,OACZ7qC,GAAY8qC,YACZ9qC,GAAY+qC,OACZ/qC,GAAYgrC,MACZhrC,GAAYirC,SACZjrC,GAAYkrC,YACZlrC,GAAYmrC,QACZnrC,GAAYorC,UACZprC,GAAYqrC,gBACZrrC,GAAYwrC,YACZxrC,GAAYzrC,IACZyrC,GAAYlqC,QAEXwqC,UAAYx+C,MAAO,GAAIwJ,GAAO,IAC9By1C,UAAYj/C,MAAO,GAAIwJ,GAAO,UAC9B01C,WAAal/C,MAAO,OAItB+L,aAAc0oB,GAAY07D,eAC1BlkF,eAAgBwoB,GAAYy7D,gBAI7Ba,UAECxkF,SAAU6tC,GAAcuvC,OACvBzrC,GAAY6qC,OACZ7qC,GAAY+qC,OACZ/qC,GAAYgrC,MACZhrC,GAAYirC,SACZjrC,GAAYkrC,YACZlrC,GAAYmrC,QACZnrC,GAAYorC,UACZprC,GAAYqrC,gBACZrrC,GAAYsrC,aACZtrC,GAAYurC,aACZvrC,GAAYzrC,IACZyrC,GAAYlqC,QAEXwqC,UAAYx+C,MAAO,GAAIwJ,GAAO,IAC9B61C,WAAar/C,MAAO,IACpBs/C,WAAat/C,MAAO,IACpBu/C,iBAAmBv/C,MAAO,MAI5B+L,aAAc0oB,GAAY47D,kBAC1BpkF,eAAgBwoB,GAAY27D,mBAI7B3jE,QAEClgB,SAAU6tC,GAAcuvC,OACvBzrC,GAAYzxB,OACZyxB,GAAYzrC,MAGb1G,aAAc0oB,GAAYg8D,YAC1BxkF,eAAgBwoB,GAAY+7D,aAI7BQ,QAECzkF,SAAU6tC,GAAcuvC,OACvBzrC,GAAY6qC,OACZ7qC,GAAYzrC,KAEX7F,OAAS5M,MAAO,GAChB8+C,UAAY9+C,MAAO,GACnB++C,WAAa/+C,MAAO,MAItB+L,aAAc0oB,GAAYo7D,gBAC1B5jF,eAAgBwoB,GAAYm7D,iBAI7BlhF,OAECnC,SAAU6tC,GAAcuvC,OACvBzrC,GAAY6qC,OACZ7qC,GAAYqrC,kBAGbx9E,aAAc0oB,GAAY86D,WAC1BtjF,eAAgBwoB,GAAY66D,YAI7B34E,QAECpK,SAAU6tC,GAAcuvC,OACvBzrC,GAAY6qC,OACZ7qC,GAAYmrC,QACZnrC,GAAYorC,UACZprC,GAAYqrC,iBAEX78E,SAAW1M,MAAO,MAIpB+L,aAAc0oB,GAAY87D,YAC1BtkF,eAAgBwoB,GAAY67D,aAQ7BpmE,MAEC3d,UACC8d,OAASrqB,MAAO,MAChBixF,OAASjxF,OAAS,GAClB0M,SAAW1M,MAAO,IAGnB+L,aAAc0oB,GAAY46D,UAC1BpjF,eAAgBwoB,GAAY26D,WAI7B8B,UAEC3kF,UACC4kF,WAAanxF,MAAO,OAGrB+L,aAAc0oB,GAAYk7D,cAC1B1jF,eAAgBwoB,GAAYi7D,eAI7B0B,cAEC7kF,SAAU6tC,GAAcuvC,OACvBzrC,GAAY6qC,OACZ7qC,GAAYqrC,iBAEXnzE,mBAAqBpW,MAAO,GAAIf,IAChCoX,cAAgBrW,MAAO,GACvBsW,aAAetW,MAAO,QAIxB+L,aAAc0oB,GAAYg7D,kBAC1BxjF,eAAgBwoB,GAAY+6D,mBAI7B7yE,QAECpQ,SAAU6tC,GAAcuvC,OACvBzrC,GAAYlqC,OACZkqC,GAAYzrC,KAEX9F,OAAS3M,MAAO,GAAIwJ,GAAO,IAC3BkD,SAAW1M,MAAO,MAIpB+L,aAAc0oB,GAAYk8D,YAC1B1kF,eAAgBwoB,GAAYi8D,aAM9BzmE,IAAUonE,UAET9kF,SAAU6tC,GAAcuvC,OACvB1/D,GAAU8mE,SAASxkF,UAElBizC,WAAax/C,MAAO,GACpBy/C,oBAAsBz/C,MAAO,MAI/B+L,aAAc0oB,GAAY47D,kBAC1BpkF,eAAgBwoB,GAAY27D,mBAe7BtwF,OAAO2rE,OAAQ/hE,EAAKu1D,WAEnBt5D,IAAK,SAAWgE,EAAKC,GAKpB,MAHA9L,MAAK6L,IAAIuF,KAAMvF,GACf7L,KAAK8L,IAAIsF,KAAMtF,GAER9L,MAIR88D,cAAe,SAAWnuC,GAEzB3uB,KAAKwzF,WAEL,KAAM,GAAIxtF,GAAI,EAAG2Y,EAAKgQ,EAAOnuB,OAAQwF,EAAI2Y,EAAI3Y,IAE5ChG,KAAKyzF,cAAe9kE,EAAQ3oB,GAI7B,OAAOhG,OAIR0zF,qBAAsB,WAErB,GAAI74B,GAAK,GAAI36D,EAEb,OAAO,UAA+BgD,EAAQkG,GAE7C,GAAIo+D,GAAW3M,EAAGzpD,KAAMhI,GAAOqoB,eAAgB,GAI/C,OAHAzxB,MAAK6L,IAAIuF,KAAMlO,GAASyuB,IAAK61C,GAC7BxnE,KAAK8L,IAAIsF,KAAMlO,GAAS6c,IAAKynD,GAEtBxnE,SAMTyb,MAAO,WAEN,OAAO,GAAIzb,MAAKg4D,aAAc5mD,KAAMpR,OAIrCoR,KAAM,SAAWw3D,GAKhB,MAHA5oE,MAAK6L,IAAIuF,KAAMw3D,EAAI/8D,KACnB7L,KAAK8L,IAAIsF,KAAMw3D,EAAI98D,KAEZ9L,MAIRwzF,UAAW,WAKV,MAHAxzF,MAAK6L,IAAI1L,EAAIH,KAAK6L,IAAIzL,EAAM2L,EAAAA,EAC5B/L,KAAK8L,IAAI3L,EAAIH,KAAK8L,IAAI1L,GAAM2L,EAAAA,EAErB/L,MAIR2zF,QAAS,WAIR,MAAS3zF,MAAK8L,IAAI3L,EAAIH,KAAK6L,IAAI1L,GAASH,KAAK8L,IAAI1L,EAAIJ,KAAK6L,IAAIzL,GAI/DwzF,UAAW,SAAWpJ,GAErB,GAAItwE,GAASswE,GAAkB,GAAItqF,EACnC,OAAOF,MAAK2zF,UAAYz5E,EAAOrS,IAAK,EAAG,GAAMqS,EAAOk1C,WAAYpvD,KAAK6L,IAAK7L,KAAK8L,KAAM2lB,eAAgB,KAItGie,QAAS,SAAW86C,GAEnB,GAAItwE,GAASswE,GAAkB,GAAItqF,EACnC,OAAOF,MAAK2zF,UAAYz5E,EAAOrS,IAAK,EAAG,GAAMqS,EAAOwwC,WAAY1qD,KAAK8L,IAAK9L,KAAK6L,MAIhF4nF,cAAe,SAAWxgE,GAKzB,MAHAjzB,MAAK6L,IAAIA,IAAKonB,GACdjzB,KAAK8L,IAAIA,IAAKmnB,GAEPjzB,MAIR6zF,eAAgB,SAAWzrE,GAK1B,MAHApoB,MAAK6L,IAAI8lB,IAAKvJ,GACdpoB,KAAK8L,IAAIiU,IAAKqI,GAEPpoB,MAIR8zF,eAAgB,SAAW1jB,GAK1B,MAHApwE,MAAK6L,IAAI4kE,WAAaL,GACtBpwE,KAAK8L,IAAI2kE,UAAWL,GAEbpwE,MAIRqR,cAAe,SAAW4hB,GAEzB,QAAOA,EAAM9yB,EAAIH,KAAK6L,IAAI1L,GAAK8yB,EAAM9yB,EAAIH,KAAK8L,IAAI3L,GACjD8yB,EAAM7yB,EAAIJ,KAAK6L,IAAIzL,GAAK6yB,EAAM7yB,EAAIJ,KAAK8L,IAAI1L,IAI7C2zF,YAAa,SAAWnrB,GAEvB,MAAO5oE,MAAK6L,IAAI1L,GAAKyoE,EAAI/8D,IAAI1L,GAAKyoE,EAAI98D,IAAI3L,GAAKH,KAAK8L,IAAI3L,GACvDH,KAAK6L,IAAIzL,GAAKwoE,EAAI/8D,IAAIzL,GAAKwoE,EAAI98D,IAAI1L,GAAKJ,KAAK8L,IAAI1L,GAInD6oC,aAAc,SAAWhW,EAAOu3D,GAO/B,OAFaA,GAAkB,GAAItqF,IAErB2H,KACXorB,EAAM9yB,EAAIH,KAAK6L,IAAI1L,IAAQH,KAAK8L,IAAI3L,EAAIH,KAAK6L,IAAI1L,IACjD8yB,EAAM7yB,EAAIJ,KAAK6L,IAAIzL,IAAQJ,KAAK8L,IAAI1L,EAAIJ,KAAK6L,IAAIzL,KAKrD4zF,cAAe,SAAWprB,GAIzB,QAAOA,EAAI98D,IAAI3L,EAAIH,KAAK6L,IAAI1L,GAAKyoE,EAAI/8D,IAAI1L,EAAIH,KAAK8L,IAAI3L,GACrDyoE,EAAI98D,IAAI1L,EAAIJ,KAAK6L,IAAIzL,GAAKwoE,EAAI/8D,IAAIzL,EAAIJ,KAAK8L,IAAI1L,IAIjD6zF,WAAY,SAAWhhE,EAAOu3D,GAG7B,OADaA,GAAkB,GAAItqF,IACrBkR,KAAM6hB,GAAQ6+B,MAAO9xD,KAAK6L,IAAK7L,KAAK8L,MAInDooF,gBAAiB,WAEhB,GAAIr5B,GAAK,GAAI36D,EAEb,OAAO,UAA0B+yB,GAGhC,MADmB4nC,GAAGzpD,KAAM6hB,GAAQ6+B,MAAO9xD,KAAK6L,IAAK7L,KAAK8L,KACtC6lB,IAAKsB,GAAQzyB,aAMnC2zF,UAAW,SAAWvrB,GAKrB,MAHA5oE,MAAK6L,IAAIC,IAAK88D,EAAI/8D,KAClB7L,KAAK8L,IAAID,IAAK+8D,EAAI98D,KAEX9L,MAIRo0F,MAAO,SAAWxrB,GAKjB,MAHA5oE,MAAK6L,IAAIA,IAAK+8D,EAAI/8D,KAClB7L,KAAK8L,IAAIA,IAAK88D,EAAI98D,KAEX9L,MAIRspE,UAAW,SAAWtmE,GAKrB,MAHAhD,MAAK6L,IAAIkU,IAAK/c,GACdhD,KAAK8L,IAAIiU,IAAK/c,GAEPhD,MAIR2lC,OAAQ,SAAWijC,GAElB,MAAOA,GAAI/8D,IAAI85B,OAAQ3lC,KAAK6L,MAAS+8D,EAAI98D,IAAI65B,OAAQ3lC,KAAK8L,QA+Y5D+G,EAAcsuD,UAAYn/D,OAAOo+E,OAAQ/+E,EAAQ8/D,WACjDtuD,EAAcsuD,UAAUnJ,YAAcnlD,CA6XtC,IAAIoD,IAAa,CA4DjBjU,QAAO2rE,OAAQ33D,EAASmrD,UAAWlhE,EAAgBkhE,WAElDkzB,YAAY,EAEZz2D,gBAAiB,aAEjBxlB,UAAW,SAAWugD,GAErB,OAAgBz3D,KAAXy3D,EAEL,IAAM,GAAIjP,KAAOiP,GAAS,CAEzB,GAAI27B,GAAW37B,EAAQjP,EAEvB,QAAkBxoD,KAAbozF,EAQL,GAAa,YAAR5qC,EAAL,CAQA,GAAI6qC,GAAev0F,KAAM0pD,OAEHxoD,KAAjBqzF,EAOAA,GAAgBA,EAAatwE,QAEjCswE,EAAa1sF,IAAKysF,GAELC,GAAgBA,EAAaxwE,WAAiBuwE,GAAYA,EAASvwE,UAEhFwwE,EAAanjF,KAAMkjF,GAKnBt0F,KAAM0pD,GAHa,aAARA,EAGG4jB,OAAQgnB,GAIRA,EApBd7zF,QAAQqa,KAAM,SAAW9a,KAAK6B,KAAO,MAAQ6nD,EAAM,6CAVnDjpD,SAAQqa,KAAM,SAAW9a,KAAK6B,KAAO,sEACrC7B,KAAKsW,YAh2OS,IAg2OOg+E,MATrB7zF,SAAQqa,KAAM,oBAAsB4uC,EAAM,+BA8C7C21B,OAAQ,SAAWC,GA0HlB,QAASkV,GAAkBhjE,GAE1B,GAAImnC,KAEJ,KAAM,GAAIjP,KAAOl4B,GAAQ,CAExB,GAAI1sB,GAAO0sB,EAAOk4B,SACX5kD,GAAK06E,SACZ7mB,EAAOpuD,KAAMzF,GAId,MAAO6zD,GApIR,GAAI87B,OAAoBvzF,KAATo+E,GAAsC,gBAATA,EAEvCmV,KAEJnV,GACCpzE,YACAjH,WAKF,IAAIH,IACH06E,UACC77E,QAAS,IACT9B,KAAM,WACN49E,UAAW,mBAyHb,IApHA36E,EAAK1C,KAAOpC,KAAKoC,KACjB0C,EAAKjD,KAAO7B,KAAK6B,KAEE,KAAd7B,KAAKuC,OAAcuC,EAAKvC,KAAOvC,KAAKuC,MAEpCvC,KAAK6O,OAAS7O,KAAK6O,MAAMoV,UAAUnf,EAAK+J,MAAQ7O,KAAK6O,MAAMw7E,cAExCnpF,KAAnBlB,KAAKuhD,YAA0Bz8C,EAAKy8C,UAAYvhD,KAAKuhD,eAClCrgD,KAAnBlB,KAAKwhD,YAA0B18C,EAAK08C,UAAYxhD,KAAKwhD,WAErDxhD,KAAK0gD,UAAY1gD,KAAK0gD,SAASz8B,UAAUnf,EAAK47C,SAAW1gD,KAAK0gD,SAAS2pC,UAC5C,IAA3BrqF,KAAK2gD,oBAA0B77C,EAAK67C,kBAAoB3gD,KAAK2gD,mBAE7D3gD,KAAKmhD,UAAYnhD,KAAKmhD,SAASl9B,UAAUnf,EAAKq8C,SAAWnhD,KAAKmhD,SAASkpC,cACpDnpF,KAAnBlB,KAAKohD,YAA0Bt8C,EAAKs8C,UAAYphD,KAAKohD,eAClClgD,KAAnBlB,KAAK0hD,YAA0B58C,EAAK48C,UAAY1hD,KAAK0hD,eACzBxgD,KAA5BlB,KAAK2hD,qBAAmC78C,EAAK68C,mBAAqB3hD,KAAK2hD,oBAEvE3hD,KAAKqF,KAAOrF,KAAKqF,IAAImnB,YAAY1nB,EAAKO,IAAMrF,KAAKqF,IAAIg6E,OAAQC,GAAOl9E,MACpEpC,KAAK8X,UAAY9X,KAAK8X,SAAS0U,YAAY1nB,EAAKgT,SAAW9X,KAAK8X,SAASunE,OAAQC,GAAOl9E,MACxFpC,KAAKopB,UAAYppB,KAAKopB,SAASoD,YAAY1nB,EAAKskB,SAAWppB,KAAKopB,SAASi2D,OAAQC,GAAOl9E,MACxFpC,KAAKw1B,SAAWx1B,KAAKw1B,QAAQhJ,YAEjC1nB,EAAK0wB,QAAUx1B,KAAKw1B,QAAQ6pD,OAAQC,GAAOl9E,KAC3C0C,EAAKu8C,UAAYrhD,KAAKqhD,WAGlBrhD,KAAKy1B,WAAaz1B,KAAKy1B,UAAUjJ,YAErC1nB,EAAK2wB,UAAYz1B,KAAKy1B,UAAU4pD,OAAQC,GAAOl9E,KAC/C0C,EAAKw8C,YAActhD,KAAKshD,YAAYv7C,WAGhC/F,KAAK+X,iBAAmB/X,KAAK+X,gBAAgByU,YAEjD1nB,EAAKiT,gBAAkB/X,KAAK+X,gBAAgBsnE,OAAQC,GAAOl9E,KAC3D0C,EAAKkT,kBAAoBhY,KAAKgY,kBAC9BlT,EAAKmT,iBAAmBjY,KAAKiY,kBAGzBjY,KAAK64B,cAAgB74B,KAAK64B,aAAarM,YAAY1nB,EAAK+zB,aAAe74B,KAAK64B,aAAawmD,OAAQC,GAAOl9E,MACxGpC,KAAK84B,cAAgB94B,KAAK84B,aAAatM,YAAY1nB,EAAKg0B,aAAe94B,KAAK84B,aAAaumD,OAAQC,GAAOl9E,MAExGpC,KAAK44B,aAAe54B,KAAK44B,YAAYpM,YAAY1nB,EAAK8zB,YAAc54B,KAAK44B,YAAYymD,OAAQC,GAAOl9E,MACpGpC,KAAKwpB,aAAexpB,KAAKwpB,YAAYgD,YAAY1nB,EAAK0kB,YAAcxpB,KAAKwpB,YAAY61D,OAAQC,GAAOl9E,MAEpGpC,KAAKypB,QAAUzpB,KAAKypB,OAAO+C,YAE/B1nB,EAAK2kB,OAASzpB,KAAKypB,OAAO41D,OAAQC,GAAOl9E,KACzC0C,EAAK8kB,aAAe5pB,KAAK4pB,cAIrB5pB,KAAKq5B,aAAer5B,KAAKq5B,YAAY7M,YAEzC1nB,EAAKu0B,YAAcr5B,KAAKq5B,YAAYgmD,OAAQC,GAAOl9E,UAIjClB,KAAdlB,KAAKoJ,OAAqBtE,EAAKsE,KAAOpJ,KAAKoJ,UAClBlI,KAAzBlB,KAAKo5B,kBAAgCt0B,EAAKs0B,gBAAkBp5B,KAAKo5B,iBAEjEp5B,KAAKwS,WAAa2D,KAAiBrR,EAAK0N,SAAWxS,KAAKwS,WACnC,IAArBxS,KAAKsW,cAAuBxR,EAAKwR,YAActW,KAAKsW,aACpDtW,KAAKoW,OAASC,KAAYvR,EAAKsR,KAAOpW,KAAKoW,MAC3CpW,KAAKuW,eAAiBC,KAAW1R,EAAKyR,aAAevW,KAAKuW,cAE1DvW,KAAK4O,QAAU,IAAI9J,EAAK8J,QAAU5O,KAAK4O,UAClB,IAArB5O,KAAKyW,cAAuB3R,EAAK2R,YAAczW,KAAKyW,aAEzD3R,EAAK+R,UAAY7W,KAAK6W,UACtB/R,EAAK8Q,UAAY5V,KAAK4V,UACtB9Q,EAAK+Q,WAAa7V,KAAK6V,WAGA,IAAlB7V,KAAKmD,WAAiB2B,EAAK3B,SAAWnD,KAAKmD,UAExB,IAAnBnD,KAAK+b,YAAkBjX,EAAKiX,UAAY/b,KAAK+b,eAC3B7a,KAAlBlB,KAAKghD,WAAyBl8C,EAAKk8C,SAAWhhD,KAAKghD,cAClC9/C,KAAjBlB,KAAKkhD,UAAwBp8C,EAAKo8C,QAAUlhD,KAAKkhD,aAClChgD,KAAflB,KAAK8O,QAAsBhK,EAAKgK,MAAQ9O,KAAK8O,QAE1B,IAAnB9O,KAAKqX,YAAqBvS,EAAKuS,WAAY,GAE3CrX,KAAK2T,UAAY,IAAI7O,EAAK6O,UAAY3T,KAAK2T,YACf,IAA5B3T,KAAK0V,qBAA8B5Q,EAAK4Q,mBAAqB1V,KAAK0V,qBAE/C,IAAnB1V,KAAKkY,YAAqBpT,EAAKoT,UAAYlY,KAAKkY,WAChDlY,KAAKmY,mBAAqB,IAAIrT,EAAKqT,mBAAqBnY,KAAKmY,oBACnC,UAA1BnY,KAAK8pB,mBAA+BhlB,EAAKglB,iBAAmB9pB,KAAK8pB,kBACtC,UAA3B9pB,KAAK+pB,oBAAgCjlB,EAAKilB,kBAAoB/pB,KAAK+pB,oBAE7C,IAAtB/pB,KAAK6X,eAAwB/S,EAAK+S,cAAe,IAC/B,IAAlB7X,KAAK4X,WAAoB9S,EAAK8S,UAAW,IAExB,IAAjB5X,KAAKoV,UAAoBtQ,EAAKsQ,SAAU,GACJ,OAApCs/E,KAAKC,UAAW30F,KAAKuX,YAAsBzS,EAAKyS,SAAWvX,KAAKuX,UAoBhEk9E,EAAS,CAEb,GAAIvoF,GAAWsoF,EAAkBlV,EAAKpzE,UAClCjH,EAASuvF,EAAkBlV,EAAKr6E,OAE/BiH,GAAS1L,OAAS,IAAIsE,EAAKoH,SAAWA,GACtCjH,EAAOzE,OAAS,IAAIsE,EAAKG,OAASA,GAIxC,MAAOH,IAIR2W,MAAO,WAEN,OAAO,GAAIzb,MAAKg4D,aAAc5mD,KAAMpR,OAIrCoR,KAAM,SAAWy8D,GAEhB7tE,KAAKuC,KAAOsrE,EAAOtrE,KAEnBvC,KAAK2U,IAAMk5D,EAAOl5D,IAClB3U,KAAKkW,OAAS23D,EAAO33D,OAErBlW,KAAKwS,SAAWq7D,EAAOr7D,SACvBxS,KAAKoW,KAAOy3D,EAAOz3D,KACnBpW,KAAKsW,YAAcu3D,EAAOv3D,YAC1BtW,KAAKuW,aAAes3D,EAAOt3D,aAE3BvW,KAAK4O,QAAUi/D,EAAOj/D,QACtB5O,KAAKyW,YAAco3D,EAAOp3D,YAE1BzW,KAAK0S,SAAWm7D,EAAOn7D,SACvB1S,KAAK2S,SAAWk7D,EAAOl7D,SACvB3S,KAAKyS,cAAgBo7D,EAAOp7D,cAC5BzS,KAAKwV,cAAgBq4D,EAAOr4D,cAC5BxV,KAAKyV,cAAgBo4D,EAAOp4D,cAC5BzV,KAAKuV,mBAAqBs4D,EAAOt4D,mBAEjCvV,KAAK6W,UAAYg3D,EAAOh3D,UACxB7W,KAAK4V,UAAYi4D,EAAOj4D,UACxB5V,KAAK6V,WAAag4D,EAAOh4D,WAEzB7V,KAAK8V,WAAa+3D,EAAO/3D,WAEzB9V,KAAKoP,UAAYy+D,EAAOz+D,UAExBpP,KAAKkX,cAAgB22D,EAAO32D,cAC5BlX,KAAKmX,oBAAsB02D,EAAO12D,oBAClCnX,KAAKoX,mBAAqBy2D,EAAOz2D,mBAEjCpX,KAAKqX,UAAYw2D,EAAOx2D,UAExBrX,KAAK2T,UAAYk6D,EAAOl6D,UACxB3T,KAAK0V,mBAAqBm4D,EAAOn4D,mBAEjC1V,KAAKsX,SAAWu2D,EAAOv2D,SAEvBtX,KAAKoV,QAAUy4D,EAAOz4D,QACtBpV,KAAKuX,SAAWm9E,KAAKE,MAAOF,KAAKC,UAAW9mB,EAAOt2D,WAEnDvX,KAAKiX,YAAc42D,EAAO52D,YAC1BjX,KAAKgX,iBAAmB62D,EAAO72D,gBAE/B,IAAI69E,GAAYhnB,EAAO92D,eACtB+9E,EAAY,IAEb,IAAmB,OAAdD,EAAqB,CAEzB,GAAIlvF,GAAIkvF,EAAUr0F,MAClBs0F,GAAY,GAAIj4E,OAAOlX,EAEvB,KAAM,GAAIK,GAAI,EAAGA,IAAML,IAAMK,EAC5B8uF,EAAW9uF,GAAM6uF,EAAW7uF,GAAIyV,QAMlC,MAFAzb,MAAK+W,eAAiB+9E,EAEf90F,MAIR0tB,QAAS,WAER1tB,KAAKquE,eAAiBxsE,KAAM,eA0D9B2V,EAAkB2pD,UAAYn/D,OAAOo+E,OAAQpqE,EAASmrD,WACtD3pD,EAAkB2pD,UAAUnJ,YAAcxgD,EAE1CA,EAAkB2pD,UAAU5hB,qBAAsB,EAElD/nC,EAAkB2pD,UAAU/vD,KAAO,SAAWy8D,GAoB7C,MAlBA73D,GAASmrD,UAAU/vD,KAAK1M,KAAM1E,KAAM6tE,GAEpC7tE,KAAK0X,aAAem2D,EAAOn2D,aAE3B1X,KAAK4X,SAAWi2D,EAAOj2D,SACvB5X,KAAK6X,aAAeg2D,EAAOh2D,aAE3B7X,KAAKqF,IAAMwoE,EAAOxoE,IAElBrF,KAAK8X,SAAW+1D,EAAO/1D,SAEvB9X,KAAK+X,gBAAkB81D,EAAO91D,gBAC9B/X,KAAKgY,kBAAoB61D,EAAO71D,kBAChChY,KAAKiY,iBAAmB41D,EAAO51D,iBAE/BjY,KAAKkY,UAAY21D,EAAO31D,UACxBlY,KAAKmY,mBAAqB01D,EAAO11D,mBAE1BnY,MAuDRqY,GAAqB8oD,UAAYn/D,OAAOo+E,OAAQpqE,EAASmrD,WACzD9oD,GAAqB8oD,UAAUnJ,YAAc3/C,GAE7CA,GAAqB8oD,UAAUnlD,wBAAyB,EAExD3D,GAAqB8oD,UAAU/vD,KAAO,SAAWy8D,GAmBhD,MAjBA73D,GAASmrD,UAAU/vD,KAAK1M,KAAM1E,KAAM6tE,GAEpC7tE,KAAKsY,kBAAkBlH,KAAMy8D,EAAOv1D,mBACpCtY,KAAKuY,aAAes1D,EAAOt1D,aAC3BvY,KAAKwY,YAAcq1D,EAAOr1D,YAE1BxY,KAAK4X,SAAWi2D,EAAOj2D,SACvB5X,KAAK6X,aAAeg2D,EAAOh2D,aAE3B7X,KAAKqF,IAAMwoE,EAAOxoE,IAElBrF,KAAK8X,SAAW+1D,EAAO/1D,SAEvB9X,KAAK+X,gBAAkB81D,EAAO91D,gBAC9B/X,KAAKgY,kBAAoB61D,EAAO71D,kBAChChY,KAAKiY,iBAAmB41D,EAAO51D,iBAExBjY,MAgBRgC,OAAO2rE,OAAQl1D,GAAK0oD,WAEnB4zB,QAAQ,EAERltF,IAAK,SAAWgE,EAAKC,GAKpB,MAHA9L,MAAK6L,IAAIuF,KAAMvF,GACf7L,KAAK8L,IAAIsF,KAAMtF,GAER9L,MAIRg1F,aAAc,SAAWzvF,GAUxB,IAAM,GARF0vF,GAASlpF,EAAAA,EACTmpF,EAASnpF,EAAAA,EACTopF,EAASppF,EAAAA,EAETqpF,GAASrpF,EAAAA,EACTspF,GAAStpF,EAAAA,EACTupF,GAASvpF,EAAAA,EAEH/F,EAAI,EAAG8K,EAAIvL,EAAM/E,OAAQwF,EAAI8K,EAAG9K,GAAK,EAAI,CAElD,GAAI7F,GAAIoF,EAAOS,GACX5F,EAAImF,EAAOS,EAAI,GACfpF,EAAI2E,EAAOS,EAAI,EAEd7F,GAAI80F,IAAOA,EAAO90F,GAClBC,EAAI80F,IAAOA,EAAO90F,GAClBQ,EAAIu0F,IAAOA,EAAOv0F,GAElBT,EAAIi1F,IAAOA,EAAOj1F,GAClBC,EAAIi1F,IAAOA,EAAOj1F,GAClBQ,EAAI00F,IAAOA,EAAO10F,GAOxB,MAHAZ,MAAK6L,IAAIhE,IAAKotF,EAAMC,EAAMC,GAC1Bn1F,KAAK8L,IAAIjE,IAAKutF,EAAMC,EAAMC,GAEnBt1F,MAIRu1F,uBAAwB,SAAWn1E,GAUlC,IAAM,GARF60E,GAASlpF,EAAAA,EACTmpF,EAASnpF,EAAAA,EACTopF,EAASppF,EAAAA,EAETqpF,GAASrpF,EAAAA,EACTspF,GAAStpF,EAAAA,EACTupF,GAASvpF,EAAAA,EAEH/F,EAAI,EAAG8K,EAAIsP,EAAUoB,MAAOxb,EAAI8K,EAAG9K,IAAO,CAEnD,GAAI7F,GAAIigB,EAAU4pC,KAAMhkD,GACpB5F,EAAIggB,EAAUyxD,KAAM7rE,GACpBpF,EAAIwf,EAAUo3D,KAAMxxE,EAEnB7F,GAAI80F,IAAOA,EAAO90F,GAClBC,EAAI80F,IAAOA,EAAO90F,GAClBQ,EAAIu0F,IAAOA,EAAOv0F,GAElBT,EAAIi1F,IAAOA,EAAOj1F,GAClBC,EAAIi1F,IAAOA,EAAOj1F,GAClBQ,EAAI00F,IAAOA,EAAO10F,GAOxB,MAHAZ,MAAK6L,IAAIhE,IAAKotF,EAAMC,EAAMC,GAC1Bn1F,KAAK8L,IAAIjE,IAAKutF,EAAMC,EAAMC,GAEnBt1F,MAIR88D,cAAe,SAAWnuC,GAEzB3uB,KAAKwzF,WAEL,KAAM,GAAIxtF,GAAI,EAAG2Y,EAAKgQ,EAAOnuB,OAAQwF,EAAI2Y,EAAI3Y,IAE5ChG,KAAKyzF,cAAe9kE,EAAQ3oB,GAI7B,OAAOhG,OAIR0zF,qBAAsB,WAErB,GAAI74B,GAAK,GAAI15D,EAEb,OAAO,UAA+B+B,EAAQkG,GAE7C,GAAIo+D,GAAW3M,EAAGzpD,KAAMhI,GAAOqoB,eAAgB,GAK/C,OAHAzxB,MAAK6L,IAAIuF,KAAMlO,GAASyuB,IAAK61C,GAC7BxnE,KAAK8L,IAAIsF,KAAMlO,GAAS6c,IAAKynD,GAEtBxnE,SAMT4vB,cAAe,SAAWhW,GAIzB,MAFA5Z,MAAKwzF,YAEExzF,KAAKw1F,eAAgB57E,IAI7B6B,MAAO,WAEN,OAAO,GAAIzb,MAAKg4D,aAAc5mD,KAAMpR,OAIrCoR,KAAM,SAAWw3D,GAKhB,MAHA5oE,MAAK6L,IAAIuF,KAAMw3D,EAAI/8D,KACnB7L,KAAK8L,IAAIsF,KAAMw3D,EAAI98D,KAEZ9L,MAIRwzF,UAAW,WAKV,MAHAxzF,MAAK6L,IAAI1L,EAAIH,KAAK6L,IAAIzL,EAAIJ,KAAK6L,IAAIjL,EAAMmL,EAAAA,EACzC/L,KAAK8L,IAAI3L,EAAIH,KAAK8L,IAAI1L,EAAIJ,KAAK8L,IAAIlL,GAAMmL,EAAAA,EAElC/L,MAIR2zF,QAAS,WAIR,MAAS3zF,MAAK8L,IAAI3L,EAAIH,KAAK6L,IAAI1L,GAASH,KAAK8L,IAAI1L,EAAIJ,KAAK6L,IAAIzL,GAASJ,KAAK8L,IAAIlL,EAAIZ,KAAK6L,IAAIjL,GAI9FgzF,UAAW,SAAWpJ,GAErB,GAAItwE,GAASswE,GAAkB,GAAIrpF,EACnC,OAAOnB,MAAK2zF,UAAYz5E,EAAOrS,IAAK,EAAG,EAAG,GAAMqS,EAAOk1C,WAAYpvD,KAAK6L,IAAK7L,KAAK8L,KAAM2lB,eAAgB,KAIzGie,QAAS,SAAW86C,GAEnB,GAAItwE,GAASswE,GAAkB,GAAIrpF,EACnC,OAAOnB,MAAK2zF,UAAYz5E,EAAOrS,IAAK,EAAG,EAAG,GAAMqS,EAAOwwC,WAAY1qD,KAAK8L,IAAK9L,KAAK6L,MAInF4nF,cAAe,SAAWxgE,GAKzB,MAHAjzB,MAAK6L,IAAIA,IAAKonB,GACdjzB,KAAK8L,IAAIA,IAAKmnB,GAEPjzB,MAIR6zF,eAAgB,SAAWzrE,GAK1B,MAHApoB,MAAK6L,IAAI8lB,IAAKvJ,GACdpoB,KAAK8L,IAAIiU,IAAKqI,GAEPpoB,MAIR8zF,eAAgB,SAAW1jB,GAK1B,MAHApwE,MAAK6L,IAAI4kE,WAAaL,GACtBpwE,KAAK8L,IAAI2kE,UAAWL,GAEbpwE,MAIRw1F,eAAgB,WASf,QAASxvC,GAAU+a,GAElB,GAAI9mD,GAAW8mD,EAAK9mD,QAEpB,QAAkB/Y,KAAb+Y,EAEJ,GAAKA,EAASW,WAAa,CAE1B,GAAIvO,GAAW4N,EAAS5N,QAExB,KAAMrG,EAAI,EAAG8K,EAAIzE,EAAS7L,OAAQwF,EAAI8K,EAAG9K,IAExC60D,EAAGzpD,KAAM/E,EAAUrG,IACnB60D,EAAG5pD,aAAc8vD,EAAK/vD,aAEtB0K,EAAM+3E,cAAe54B,OAIhB,IAAK5gD,EAASS,iBAAmB,CAEvC,GAAI0F,GAAYnG,EAAS5L,WAAW4E,QAEpC,QAAmB/R,KAAdkf,EAEJ,IAAMpa,EAAI,EAAG8K,EAAIsP,EAAUoB,MAAOxb,EAAI8K,EAAG9K,IAExC60D,EAAG5Q,oBAAqB7pC,EAAWpa,GAAIiL,aAAc8vD,EAAK/vD,aAE1D0K,EAAM+3E,cAAe54B,IAjC1B,GAAIn/C,GAAO1V,EAAG8K,EAEV+pD,EAAK,GAAI15D,EA2Cb,OAAO,UAAyByY,GAQ/B,MANA8B,GAAQ1b,KAER4Z,EAAO8F,mBAAmB,GAE1B9F,EAAOosC,SAAUA,GAEVhmD,SAMTqR,cAAe,SAAW4hB,GAEzB,QAAOA,EAAM9yB,EAAIH,KAAK6L,IAAI1L,GAAK8yB,EAAM9yB,EAAIH,KAAK8L,IAAI3L,GACjD8yB,EAAM7yB,EAAIJ,KAAK6L,IAAIzL,GAAK6yB,EAAM7yB,EAAIJ,KAAK8L,IAAI1L,GAC3C6yB,EAAMryB,EAAIZ,KAAK6L,IAAIjL,GAAKqyB,EAAMryB,EAAIZ,KAAK8L,IAAIlL,IAI7CmzF,YAAa,SAAWnrB,GAEvB,MAAO5oE,MAAK6L,IAAI1L,GAAKyoE,EAAI/8D,IAAI1L,GAAKyoE,EAAI98D,IAAI3L,GAAKH,KAAK8L,IAAI3L,GACvDH,KAAK6L,IAAIzL,GAAKwoE,EAAI/8D,IAAIzL,GAAKwoE,EAAI98D,IAAI1L,GAAKJ,KAAK8L,IAAI1L,GACjDJ,KAAK6L,IAAIjL,GAAKgoE,EAAI/8D,IAAIjL,GAAKgoE,EAAI98D,IAAIlL,GAAKZ,KAAK8L,IAAIlL,GAInDqoC,aAAc,SAAWhW,EAAOu3D,GAO/B,OAFaA,GAAkB,GAAIrpF,IAErB0G,KACXorB,EAAM9yB,EAAIH,KAAK6L,IAAI1L,IAAQH,KAAK8L,IAAI3L,EAAIH,KAAK6L,IAAI1L,IACjD8yB,EAAM7yB,EAAIJ,KAAK6L,IAAIzL,IAAQJ,KAAK8L,IAAI1L,EAAIJ,KAAK6L,IAAIzL,IACjD6yB,EAAMryB,EAAIZ,KAAK6L,IAAIjL,IAAQZ,KAAK8L,IAAIlL,EAAIZ,KAAK6L,IAAIjL,KAKrDozF,cAAe,SAAWprB,GAGzB,QAAOA,EAAI98D,IAAI3L,EAAIH,KAAK6L,IAAI1L,GAAKyoE,EAAI/8D,IAAI1L,EAAIH,KAAK8L,IAAI3L,GACrDyoE,EAAI98D,IAAI1L,EAAIJ,KAAK6L,IAAIzL,GAAKwoE,EAAI/8D,IAAIzL,EAAIJ,KAAK8L,IAAI1L,GAC/CwoE,EAAI98D,IAAIlL,EAAIZ,KAAK6L,IAAIjL,GAAKgoE,EAAI/8D,IAAIjL,EAAIZ,KAAK8L,IAAIlL,IAIjD60F,iBAAkB,WAEjB,GAAIC,GAAe,GAAIv0F,EAEvB,OAAO,UAA2Bw0F,GAMjC,MAHA31F,MAAKi0F,WAAY0B,EAAOzyF,OAAQwyF,GAGzBA,EAAalkB,kBAAmBmkB,EAAOzyF,SAAcyyF,EAAOh9E,OAASg9E,EAAOh9E,WAMrFi9E,gBAAiB,SAAW/iD,GAK3B,GAAIhnC,GAAKC,CAsCT,OApCK+mC,GAAMh6B,OAAO1Y,EAAI,GAErB0L,EAAMgnC,EAAMh6B,OAAO1Y,EAAIH,KAAK6L,IAAI1L,EAChC2L,EAAM+mC,EAAMh6B,OAAO1Y,EAAIH,KAAK8L,IAAI3L,IAIhC0L,EAAMgnC,EAAMh6B,OAAO1Y,EAAIH,KAAK8L,IAAI3L,EAChC2L,EAAM+mC,EAAMh6B,OAAO1Y,EAAIH,KAAK6L,IAAI1L,GAI5B0yC,EAAMh6B,OAAOzY,EAAI,GAErByL,GAAOgnC,EAAMh6B,OAAOzY,EAAIJ,KAAK6L,IAAIzL,EACjC0L,GAAO+mC,EAAMh6B,OAAOzY,EAAIJ,KAAK8L,IAAI1L,IAIjCyL,GAAOgnC,EAAMh6B,OAAOzY,EAAIJ,KAAK8L,IAAI1L,EACjC0L,GAAO+mC,EAAMh6B,OAAOzY,EAAIJ,KAAK6L,IAAIzL,GAI7ByyC,EAAMh6B,OAAOjY,EAAI,GAErBiL,GAAOgnC,EAAMh6B,OAAOjY,EAAIZ,KAAK6L,IAAIjL,EACjCkL,GAAO+mC,EAAMh6B,OAAOjY,EAAIZ,KAAK8L,IAAIlL,IAIjCiL,GAAOgnC,EAAMh6B,OAAOjY,EAAIZ,KAAK8L,IAAIlL,EACjCkL,GAAO+mC,EAAMh6B,OAAOjY,EAAIZ,KAAK6L,IAAIjL,GAIzBiL,GAAOgnC,EAAM/5B,UAAYhN,GAAO+mC,EAAM/5B,UAIhDm7E,WAAY,SAAWhhE,EAAOu3D,GAG7B,OADaA,GAAkB,GAAIrpF,IACrBiQ,KAAM6hB,GAAQ6+B,MAAO9xD,KAAK6L,IAAK7L,KAAK8L,MAInDooF,gBAAiB,WAEhB,GAAIr5B,GAAK,GAAI15D,EAEb,OAAO,UAA0B8xB,GAGhC,MADmB4nC,GAAGzpD,KAAM6hB,GAAQ6+B,MAAO9xD,KAAK6L,IAAK7L,KAAK8L,KACtC6lB,IAAKsB,GAAQzyB,aAMnCq1F,kBAAmB,WAElB,GAAIh7B,GAAK,GAAI15D,EAEb,OAAO,UAA4BqpF,GAElC,GAAItwE,GAASswE,GAAkB,GAAI9xE,GAMnC,OAJA1Y,MAAK4zF,UAAW15E,EAAOhX,QAEvBgX,EAAOvB,OAAuC,GAA9B3Y,KAAK0vC,QAASmrB,GAAKr6D,SAE5B0Z,MAMTi6E,UAAW,SAAWvrB,GAQrB,MANA5oE,MAAK6L,IAAIC,IAAK88D,EAAI/8D,KAClB7L,KAAK8L,IAAID,IAAK+8D,EAAI98D,KAGb9L,KAAK2zF,WAAY3zF,KAAKwzF,YAEpBxzF,MAIRo0F,MAAO,SAAWxrB,GAKjB,MAHA5oE,MAAK6L,IAAIA,IAAK+8D,EAAI/8D,KAClB7L,KAAK8L,IAAIA,IAAK88D,EAAI98D,KAEX9L,MAIRiR,aAAc,WAEb,GAAI0d,IACH,GAAIxtB,GACJ,GAAIA,GACJ,GAAIA,GACJ,GAAIA,GACJ,GAAIA,GACJ,GAAIA,GACJ,GAAIA,GACJ,GAAIA,GAGL,OAAO,UAAuBkC,GAG7B,MAAKrD,MAAK2zF,UAAmB3zF,MAG7B2uB,EAAQ,GAAI9mB,IAAK7H,KAAK6L,IAAI1L,EAAGH,KAAK6L,IAAIzL,EAAGJ,KAAK6L,IAAIjL,GAAIqQ,aAAc5N,GACpEsrB,EAAQ,GAAI9mB,IAAK7H,KAAK6L,IAAI1L,EAAGH,KAAK6L,IAAIzL,EAAGJ,KAAK8L,IAAIlL,GAAIqQ,aAAc5N,GACpEsrB,EAAQ,GAAI9mB,IAAK7H,KAAK6L,IAAI1L,EAAGH,KAAK8L,IAAI1L,EAAGJ,KAAK6L,IAAIjL,GAAIqQ,aAAc5N,GACpEsrB,EAAQ,GAAI9mB,IAAK7H,KAAK6L,IAAI1L,EAAGH,KAAK8L,IAAI1L,EAAGJ,KAAK8L,IAAIlL,GAAIqQ,aAAc5N,GACpEsrB,EAAQ,GAAI9mB,IAAK7H,KAAK8L,IAAI3L,EAAGH,KAAK6L,IAAIzL,EAAGJ,KAAK6L,IAAIjL,GAAIqQ,aAAc5N,GACpEsrB,EAAQ,GAAI9mB,IAAK7H,KAAK8L,IAAI3L,EAAGH,KAAK6L,IAAIzL,EAAGJ,KAAK8L,IAAIlL,GAAIqQ,aAAc5N,GACpEsrB,EAAQ,GAAI9mB,IAAK7H,KAAK8L,IAAI3L,EAAGH,KAAK8L,IAAI1L,EAAGJ,KAAK6L,IAAIjL,GAAIqQ,aAAc5N,GACpEsrB,EAAQ,GAAI9mB,IAAK7H,KAAK8L,IAAI3L,EAAGH,KAAK8L,IAAI1L,EAAGJ,KAAK8L,IAAIlL,GAAIqQ,aAAc5N,GAEpErD,KAAK88D,cAAenuC,GAEb3uB,UAMTspE,UAAW,SAAWtmE,GAKrB,MAHAhD,MAAK6L,IAAIkU,IAAK/c,GACdhD,KAAK8L,IAAIiU,IAAK/c,GAEPhD,MAIR2lC,OAAQ,SAAWijC,GAElB,MAAOA,GAAI/8D,IAAI85B,OAAQ3lC,KAAK6L,MAAS+8D,EAAI98D,IAAI65B,OAAQ3lC,KAAK8L,QAkB5D9J,OAAO2rE,OAAQj1D,GAAOyoD,WAErBt5D,IAAK,SAAW3E,EAAQyV,GAKvB,MAHA3Y,MAAKkD,OAAOkO,KAAMlO,GAClBlD,KAAK2Y,OAASA,EAEP3Y,MAIR88D,cAAe,WAEd,GAAI8L,GAAM,GAAInwD,GAEd,OAAO,UAAwBkW,EAAQmnE,GAEtC,GAAI5yF,GAASlD,KAAKkD,WAEMhC,KAAnB40F,EAEJ5yF,EAAOkO,KAAM0kF,GAIbltB,EAAI9L,cAAenuC,GAASilE,UAAW1wF,EAMxC,KAAM,GAFF6yF,GAAc,EAER/vF,EAAI,EAAG2Y,EAAKgQ,EAAOnuB,OAAQwF,EAAI2Y,EAAI3Y,IAE5C+vF,EAActtE,KAAK3c,IAAKiqF,EAAa7yF,EAAOsuE,kBAAmB7iD,EAAQ3oB,IAMxE,OAFAhG,MAAK2Y,OAAS8P,KAAK81B,KAAMw3C,GAElB/1F,SAMTyb,MAAO,WAEN,OAAO,GAAIzb,MAAKg4D,aAAc5mD,KAAMpR,OAIrCoR,KAAM,SAAWukF,GAKhB,MAHA31F,MAAKkD,OAAOkO,KAAMukF,EAAOzyF,QACzBlD,KAAK2Y,OAASg9E,EAAOh9E,OAEd3Y,MAIRg2F,MAAO,WAEN,MAASh2F,MAAK2Y,QAAU,GAIzBtH,cAAe,SAAW4hB,GAEzB,MAASA,GAAMu+C,kBAAmBxxE,KAAKkD,SAAclD,KAAK2Y,OAAS3Y,KAAK2Y,QAIzEu7E,gBAAiB,SAAWjhE,GAE3B,MAASA,GAAMs+C,WAAYvxE,KAAKkD,QAAWlD,KAAK2Y,QAIjD88E,iBAAkB,SAAWE,GAE5B,GAAIM,GAAYj2F,KAAK2Y,OAASg9E,EAAOh9E,MAErC,OAAOg9E,GAAOzyF,OAAOsuE,kBAAmBxxE,KAAKkD,SAAc+yF,EAAYA,GAIxEjC,cAAe,SAAWprB,GAEzB,MAAOA,GAAI6sB,iBAAkBz1F,OAI9B41F,gBAAiB,SAAW/iD,GAE3B,MAAOpqB,MAAKmF,IAAKilB,EAAMqhD,gBAAiBl0F,KAAKkD,UAAclD,KAAK2Y,QAIjEs7E,WAAY,SAAWhhE,EAAOu3D,GAE7B,GAAI0L,GAAgBl2F,KAAKkD,OAAOsuE,kBAAmBv+C,GAE/C/Y,EAASswE,GAAkB,GAAIrpF,EAWnC,OATA+Y,GAAO9I,KAAM6hB,GAERijE,EAAkBl2F,KAAK2Y,OAAS3Y,KAAK2Y,SAEzCuB,EAAOyX,IAAK3xB,KAAKkD,QAASiwB,YAC1BjZ,EAAOuX,eAAgBzxB,KAAK2Y,QAASoH,IAAK/f,KAAKkD,SAIzCgX,GAIRi8E,eAAgB,SAAW3L,GAE1B,GAAI5hB,GAAM4hB,GAAkB,GAAI/xE,GAKhC,OAHAmwD,GAAI/gE,IAAK7H,KAAKkD,OAAQlD,KAAKkD,QAC3B0lE,EAAIkrB,eAAgB9zF,KAAK2Y,QAElBiwD,GAIR33D,aAAc,SAAW5N,GAKxB,MAHArD,MAAKkD,OAAO+N,aAAc5N,GAC1BrD,KAAK2Y,OAAS3Y,KAAK2Y,OAAStV,EAAOi1E,oBAE5Bt4E,MAIRspE,UAAW,SAAWtmE,GAIrB,MAFAhD,MAAKkD,OAAO6c,IAAK/c,GAEVhD,MAIR2lC,OAAQ,SAAWgwD,GAElB,MAAOA,GAAOzyF,OAAOyiC,OAAQ3lC,KAAKkD,SAAcyyF,EAAOh9E,SAAW3Y,KAAK2Y,UAmBzE3W,OAAO2rE,OAAQ/0D,GAAMuoD,WAEpBt5D,IAAK,SAAWgR,EAAQC,GAKvB,MAHA9Y,MAAK6Y,OAAOzH,KAAMyH,GAClB7Y,KAAK8Y,SAAWA,EAET9Y,MAIRo2F,cAAe,SAAWj2F,EAAGC,EAAGQ,EAAGC,GAKlC,MAHAb,MAAK6Y,OAAOhR,IAAK1H,EAAGC,EAAGQ,GACvBZ,KAAK8Y,SAAWjY,EAETb,MAIRq2F,8BAA+B,SAAWx9E,EAAQoa,GAKjD,MAHAjzB,MAAK6Y,OAAOzH,KAAMyH,GAClB7Y,KAAK8Y,UAAama,EAAM2gC,IAAK5zD,KAAK6Y,QAE3B7Y,MAIRs2F,sBAAuB,WAEtB,GAAIz7B,GAAK,GAAI15D,GACTw6D,EAAK,GAAIx6D,EAEb,OAAO,UAAgCgT,EAAGhN,EAAG2c,GAE5C,GAAIjL,GAASgiD,EAAGnQ,WAAY5mC,EAAG3c,GAAI42E,MAAOpiB,EAAGjR,WAAYv2C,EAAGhN,IAAMgsB,WAMlE,OAFAnzB,MAAKq2F,8BAA+Bx9E,EAAQ1E,GAErCnU,SAMTyb,MAAO,WAEN,OAAO,GAAIzb,MAAKg4D,aAAc5mD,KAAMpR,OAIrCoR,KAAM,SAAWyhC,GAKhB,MAHA7yC,MAAK6Y,OAAOzH,KAAMyhC,EAAMh6B,QACxB7Y,KAAK8Y,SAAW+5B,EAAM/5B,SAEf9Y,MAIRmzB,UAAW,WAIV,GAAIojE,GAAsB,EAAMv2F,KAAK6Y,OAAOrY,QAI5C,OAHAR,MAAK6Y,OAAO4Y,eAAgB8kE,GAC5Bv2F,KAAK8Y,UAAYy9E,EAEVv2F,MAIRoxE,OAAQ,WAKP,MAHApxE,MAAK8Y,WAAc,EACnB9Y,KAAK6Y,OAAOu4D,SAELpxE,MAIRk0F,gBAAiB,SAAWjhE,GAE3B,MAAOjzB,MAAK6Y,OAAO+6C,IAAK3gC,GAAUjzB,KAAK8Y,UAIxC09E,iBAAkB,SAAWb,GAE5B,MAAO31F,MAAKk0F,gBAAiByB,EAAOzyF,QAAWyyF,EAAOh9E,QAIvD89E,aAAc,SAAWxjE,EAAOu3D,GAI/B,OAFaA,GAAkB,GAAIrpF,IAErBiQ,KAAMpR,KAAK6Y,QAAS4Y,gBAAkBzxB,KAAKk0F,gBAAiBjhE,IAAUlT,IAAKkT,IAI1FyjE,cAAe,WAEd,GAAI77B,GAAK,GAAI15D,EAEb,OAAO,UAAwB8lE,EAAMujB,GAEpC,GAAItwE,GAASswE,GAAkB,GAAIrpF,GAE/B0pB,EAAYo8C,EAAK4jB,MAAOhwB,GAExB87B,EAAc32F,KAAK6Y,OAAO+6C,IAAK/oC,EAEnC,IAAqB,IAAhB8rE,EAAL,CAcA,GAAI1pC,KAAQga,EAAKtgD,MAAMitC,IAAK5zD,KAAK6Y,QAAW7Y,KAAK8Y,UAAa69E,CAE9D,MAAK1pC,EAAI,GAAKA,EAAI,GAMlB,MAAO/yC,GAAO9I,KAAMyZ,GAAY4G,eAAgBw7B,GAAIltC,IAAKknD,EAAKtgD,WAnB7D,IAA4C,IAAvC3mB,KAAKk0F,gBAAiBjtB,EAAKtgD,OAE/B,MAAOzM,GAAO9I,KAAM61D,EAAKtgD,WAuB7BiwE,eAAgB,SAAW3vB,GAI1B,GAAI4vB,GAAY72F,KAAKk0F,gBAAiBjtB,EAAKtgD,OACvCmwE,EAAU92F,KAAKk0F,gBAAiBjtB,EAAKl8C,IAEzC,OAAS8rE,GAAY,GAAKC,EAAU,GAASA,EAAU,GAAKD,EAAY,GAIzE7C,cAAe,SAAWprB,GAEzB,MAAOA,GAAIgtB,gBAAiB51F,OAI7By1F,iBAAkB,SAAWE,GAE5B,MAAOA,GAAOC,gBAAiB51F,OAIhC+2F,cAAe,SAAWvM,GAIzB,OAFaA,GAAkB,GAAIrpF,IAErBiQ,KAAMpR,KAAK6Y,QAAS4Y,gBAAkBzxB,KAAK8Y,WAI1D7H,aAAc,WAEb,GAAI4pD,GAAK,GAAI15D,GACT61F,EAAK,GAAI51F,EAEb,OAAO,UAAuBiC,EAAQ4zF,GAErC,GAAIh0E,GAAeg0E,GAAwBD,EAAGrkD,gBAAiBtvC,GAE3D6zF,EAAiBl3F,KAAK+2F,cAAel8B,GAAK5pD,aAAc5N,GAExDwV,EAAS7Y,KAAK6Y,OAAOg4D,aAAc5tD,GAAekQ,WAItD,OAFAnzB,MAAK8Y,UAAao+E,EAAetjC,IAAK/6C,GAE/B7Y,SAMTspE,UAAW,SAAWtmE,GAIrB,MAFAhD,MAAK8Y,UAAY9V,EAAO4wD,IAAK5zD,KAAK6Y,QAE3B7Y,MAIR2lC,OAAQ,SAAWkN,GAElB,MAAOA,GAAMh6B,OAAO8sB,OAAQ3lC,KAAK6Y,SAAcg6B,EAAM/5B,WAAa9Y,KAAK8Y,YA2BzE9W,OAAO2rE,OAAQ50D,GAAQooD,WAEtBt5D,IAAK,SAAWmR,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,GAEnC,GAAIC,GAAStZ,KAAKsZ,MASlB,OAPAA,GAAQ,GAAIlI,KAAM4H,GAClBM,EAAQ,GAAIlI,KAAM6H,GAClBK,EAAQ,GAAIlI,KAAM8H,GAClBI,EAAQ,GAAIlI,KAAM+H,GAClBG,EAAQ,GAAIlI,KAAMgI,GAClBE,EAAQ,GAAIlI,KAAMiI,GAEXrZ,MAIRyb,MAAO,WAEN,OAAO,GAAIzb,MAAKg4D,aAAc5mD,KAAMpR,OAIrCoR,KAAM,SAAW+lF,GAIhB,IAAM,GAFF79E,GAAStZ,KAAKsZ,OAERtT,EAAI,EAAGA,EAAI,EAAGA,IAEvBsT,EAAQtT,GAAIoL,KAAM+lF,EAAQ79E,OAAQtT,GAInC,OAAOhG,OAIRkgB,cAAe,SAAW6uD,GAEzB,GAAIz1D,GAAStZ,KAAKsZ,OACd25D,EAAKlE,EAAEzuE,SACP82F,EAAMnkB,EAAI,GAAKokB,EAAMpkB,EAAI,GAAKqkB,EAAMrkB,EAAI,GAAKskB,EAAMtkB,EAAI,GACvDukB,EAAMvkB,EAAI,GAAKwkB,EAAMxkB,EAAI,GAAKykB,EAAMzkB,EAAI,GAAK0kB,EAAM1kB,EAAI,GACvD2kB,EAAM3kB,EAAI,GAAK4kB,EAAM5kB,EAAI,GAAK6kB,EAAO7kB,EAAI,IAAM8kB,EAAO9kB,EAAI,IAC1D+kB,EAAO/kB,EAAI,IAAMglB,EAAOhlB,EAAI,IAAMilB,EAAOjlB,EAAI,IAAMklB,EAAOllB,EAAI,GASlE,OAPA35D,GAAQ,GAAI88E,cAAemB,EAAMH,EAAKO,EAAMH,EAAKO,EAAOH,EAAKO,EAAOH,GAAO7kE,YAC3E7Z,EAAQ,GAAI88E,cAAemB,EAAMH,EAAKO,EAAMH,EAAKO,EAAOH,EAAKO,EAAOH,GAAO7kE,YAC3E7Z,EAAQ,GAAI88E,cAAemB,EAAMF,EAAKM,EAAMF,EAAKM,EAAOF,EAAKM,EAAOF,GAAO9kE,YAC3E7Z,EAAQ,GAAI88E,cAAemB,EAAMF,EAAKM,EAAMF,EAAKM,EAAOF,EAAKM,EAAOF,GAAO9kE,YAC3E7Z,EAAQ,GAAI88E,cAAemB,EAAMD,EAAKK,EAAMD,EAAKK,EAAOD,EAAMK,EAAOD,GAAO/kE,YAC5E7Z,EAAQ,GAAI88E,cAAemB,EAAMD,EAAKK,EAAMD,EAAKK,EAAOD,EAAMK,EAAOD,GAAO/kE,YAErEnzB,MAIR2c,iBAAkB,WAEjB,GAAIg5E,GAAS,GAAIj9E,GAEjB,OAAO,UAA2BkB,GAEjC,GAAIK,GAAWL,EAAOK,QAQtB,OANiC,QAA5BA,EAAS0K,gBACb1K,EAAS4uD,wBAEV8sB,EAAOvkF,KAAM6I,EAAS0K,gBACpB1T,aAAc2I,EAAO5I,aAEhBhR,KAAKy1F,iBAAkBE,OAMhCz6C,iBAAkB,WAEjB,GAAIy6C,GAAS,GAAIj9E,GAEjB,OAAO,UAA2BpG,GAMjC,MAJAqjF,GAAOzyF,OAAO2E,IAAK,EAAG,EAAG,GACzB8tF,EAAOh9E,OAAS,kBAChBg9E,EAAO1kF,aAAcqB,EAAOtB,aAErBhR,KAAKy1F,iBAAkBE,OAMhCF,iBAAkB,SAAWE,GAM5B,IAAM,GAJFr8E,GAAStZ,KAAKsZ,OACdpW,EAASyyF,EAAOzyF,OAChBk1F,GAAczC,EAAOh9E,OAEf3S,EAAI,EAAGA,EAAI,EAAGA,IAAO,CAI9B,GAFesT,EAAQtT,GAAIkuF,gBAAiBhxF,GAE5Bk1F,EAEf,OAAO,EAMT,OAAO,GAIRpE,cAAe,WAEd,GAAI/6E,GAAK,GAAI9X,GACZ+X,EAAK,GAAI/X,EAEV,OAAO,UAAwBynE,GAI9B,IAAM,GAFFtvD,GAAStZ,KAAKsZ,OAERtT,EAAI,EAAGA,EAAI,EAAGA,IAAO,CAE9B,GAAI6sC,GAAQv5B,EAAQtT,EAEpBiT,GAAG9Y,EAAI0yC,EAAMh6B,OAAO1Y,EAAI,EAAIyoE,EAAI/8D,IAAI1L,EAAIyoE,EAAI98D,IAAI3L,EAChD+Y,EAAG/Y,EAAI0yC,EAAMh6B,OAAO1Y,EAAI,EAAIyoE,EAAI98D,IAAI3L,EAAIyoE,EAAI/8D,IAAI1L,EAChD8Y,EAAG7Y,EAAIyyC,EAAMh6B,OAAOzY,EAAI,EAAIwoE,EAAI/8D,IAAIzL,EAAIwoE,EAAI98D,IAAI1L,EAChD8Y,EAAG9Y,EAAIyyC,EAAMh6B,OAAOzY,EAAI,EAAIwoE,EAAI98D,IAAI1L,EAAIwoE,EAAI/8D,IAAIzL,EAChD6Y,EAAGrY,EAAIiyC,EAAMh6B,OAAOjY,EAAI,EAAIgoE,EAAI/8D,IAAIjL,EAAIgoE,EAAI98D,IAAIlL,EAChDsY,EAAGtY,EAAIiyC,EAAMh6B,OAAOjY,EAAI,EAAIgoE,EAAI98D,IAAIlL,EAAIgoE,EAAI/8D,IAAIjL,CAEhD,IAAIy3F,GAAKxlD,EAAMqhD,gBAAiBj7E,GAC5Bq/E,EAAKzlD,EAAMqhD,gBAAiBh7E,EAIhC,IAAKm/E,EAAK,GAAKC,EAAK,EAEnB,OAAO,EAMT,OAAO,MAMTjnF,cAAe,SAAW4hB,GAIzB,IAAM,GAFF3Z,GAAStZ,KAAKsZ,OAERtT,EAAI,EAAGA,EAAI,EAAGA,IAEvB,GAAKsT,EAAQtT,GAAIkuF,gBAAiBjhE,GAAU,EAE3C,OAAO,CAMT,QAAO,KAgmBTlR,GAAMw2E,gBAAmB,MAAO,MAAO,MAAO,MAAO,MAAO,OAE5Dx2E,GAAMG,aAAe,MAErBlgB,OAAO+gB,iBAAkBhB,GAAMo/C,WAE9BhhE,GAECwhB,IAAK,WAEJ,MAAO3hB,MAAKc,IAIb+G,IAAK,SAAW3F,GAEflC,KAAKc,GAAKoB,EACVlC,KAAKi7E,qBAMP76E,GAECuhB,IAAK,WAEJ,MAAO3hB,MAAKe,IAIb8G,IAAK,SAAW3F,GAEflC,KAAKe,GAAKmB,EACVlC,KAAKi7E,qBAMPr6E,GAEC+gB,IAAK,WAEJ,MAAO3hB,MAAKgB,IAIb6G,IAAK,SAAW3F,GAEflC,KAAKgB,GAAKkB,EACVlC,KAAKi7E,qBAMPj5D,OAECL,IAAK,WAEJ,MAAO3hB,MAAKiiB,QAIbpa,IAAK,SAAW3F,GAEflC,KAAKiiB,OAAS/f,EACdlC,KAAKi7E,uBAQRj5E,OAAO2rE,OAAQ5rD,GAAMo/C,WAEpB0S,SAAS,EAEThsE,IAAK,SAAW1H,EAAGC,EAAGQ,EAAGohB,GASxB,MAPAhiB,MAAKc,GAAKX,EACVH,KAAKe,GAAKX,EACVJ,KAAKgB,GAAKJ,EACVZ,KAAKiiB,OAASD,GAAShiB,KAAKiiB,OAE5BjiB,KAAKi7E,mBAEEj7E,MAIRyb,MAAO,WAEN,MAAO,IAAIzb,MAAKg4D,YAAah4D,KAAKc,GAAId,KAAKe,GAAIf,KAAKgB,GAAIhB,KAAKiiB,SAI9D7Q,KAAM,SAAWwiE,GAShB,MAPA5zE,MAAKc,GAAK8yE,EAAM9yE,GAChBd,KAAKe,GAAK6yE,EAAM7yE,GAChBf,KAAKgB,GAAK4yE,EAAM5yE,GAChBhB,KAAKiiB,OAAS2xD,EAAM3xD,OAEpBjiB,KAAKi7E,mBAEEj7E,MAIR05E,sBAAuB,SAAW3K,EAAG/sD,EAAOpF,GAE3C,GAAIk1C,GAAQzvD,GAAMyvD,MAIdkhB,EAAKjE,EAAEzuE,SACPi7E,EAAMvI,EAAI,GAAKwI,EAAMxI,EAAI,GAAKyI,EAAMzI,EAAI,GACxC0I,EAAM1I,EAAI,GAAK2I,EAAM3I,EAAI,GAAK4I,EAAM5I,EAAI,GACxC6I,EAAM7I,EAAI,GAAK8I,EAAM9I,EAAI,GAAK+I,EAAM/I,EAAI,GA8G5C,OA5GAhxD,GAAQA,GAAShiB,KAAKiiB,OAEP,QAAVD,GAEJhiB,KAAKe,GAAK0nB,KAAK+vE,KAAM1mC,EAAO2pB,GAAO,EAAG,IAEjChzD,KAAKmF,IAAK6tD,GAAQ,QAEtBz7E,KAAKc,GAAK2nB,KAAK8jC,OAASqvB,EAAKG,GAC7B/7E,KAAKgB,GAAKynB,KAAK8jC,OAASivB,EAAKD,KAI7Bv7E,KAAKc,GAAK2nB,KAAK8jC,MAAOuvB,EAAKH,GAC3B37E,KAAKgB,GAAK,IAIU,QAAVghB,GAEXhiB,KAAKc,GAAK2nB,KAAK+vE,MAAQ1mC,EAAO8pB,GAAO,EAAG,IAEnCnzD,KAAKmF,IAAKguD,GAAQ,QAEtB57E,KAAKe,GAAK0nB,KAAK8jC,MAAOkvB,EAAKM,GAC3B/7E,KAAKgB,GAAKynB,KAAK8jC,MAAOmvB,EAAKC,KAI3B37E,KAAKe,GAAK0nB,KAAK8jC,OAASsvB,EAAKN,GAC7Bv7E,KAAKgB,GAAK,IAIU,QAAVghB,GAEXhiB,KAAKc,GAAK2nB,KAAK+vE,KAAM1mC,EAAOgqB,GAAO,EAAG,IAEjCrzD,KAAKmF,IAAKkuD,GAAQ,QAEtB97E,KAAKe,GAAK0nB,KAAK8jC,OAASsvB,EAAKE,GAC7B/7E,KAAKgB,GAAKynB,KAAK8jC,OAASivB,EAAKG,KAI7B37E,KAAKe,GAAK,EACVf,KAAKgB,GAAKynB,KAAK8jC,MAAOmvB,EAAKH,KAIP,QAAVv5D,GAEXhiB,KAAKe,GAAK0nB,KAAK+vE,MAAQ1mC,EAAO+pB,GAAO,EAAG,IAEnCpzD,KAAKmF,IAAKiuD,GAAQ,QAEtB77E,KAAKc,GAAK2nB,KAAK8jC,MAAOuvB,EAAKC,GAC3B/7E,KAAKgB,GAAKynB,KAAK8jC,MAAOmvB,EAAKH,KAI3Bv7E,KAAKc,GAAK,EACVd,KAAKgB,GAAKynB,KAAK8jC,OAASivB,EAAKG,KAIT,QAAV35D,GAEXhiB,KAAKgB,GAAKynB,KAAK+vE,KAAM1mC,EAAO4pB,GAAO,EAAG,IAEjCjzD,KAAKmF,IAAK8tD,GAAQ,QAEtB17E,KAAKc,GAAK2nB,KAAK8jC,OAASqvB,EAAKD,GAC7B37E,KAAKe,GAAK0nB,KAAK8jC,OAASsvB,EAAKN,KAI7Bv7E,KAAKc,GAAK,EACVd,KAAKe,GAAK0nB,KAAK8jC,MAAOkvB,EAAKM,KAIP,QAAV/5D,GAEXhiB,KAAKgB,GAAKynB,KAAK+vE,MAAQ1mC,EAAO0pB,GAAO,EAAG,IAEnC/yD,KAAKmF,IAAK4tD,GAAQ,QAEtBx7E,KAAKc,GAAK2nB,KAAK8jC,MAAOuvB,EAAKH,GAC3B37E,KAAKe,GAAK0nB,KAAK8jC,MAAOkvB,EAAKF,KAI3Bv7E,KAAKc,GAAK2nB,KAAK8jC,OAASqvB,EAAKG,GAC7B/7E,KAAKe,GAAK,IAMXN,QAAQqa,KAAM,kEAAoEkH,GAInFhiB,KAAKiiB,OAASD,GAEE,IAAXpF,GAAmB5c,KAAKi7E,mBAEtBj7E,MAIR0iB,kBAAmB,WAElB,GAAIrf,GAAS,GAAIhD,EAEjB,OAAO,UAA4BouD,EAAGzsC,EAAOpF,GAI5C,MAFAvZ,GAAOqxE,2BAA4BjmB,GAE5BzuD,KAAK05E,sBAAuBr2E,EAAQ2e,EAAOpF,OAMpD67E,eAAgB,SAAWjyF,EAAGwb,GAE7B,MAAOhiB,MAAK6H,IAAKrB,EAAErG,EAAGqG,EAAEpG,EAAGoG,EAAE5F,EAAGohB,GAAShiB,KAAKiiB,SAI/Cy2E,QAAS,WAIR,GAAIjqC,GAAI,GAAI9tD,EAEZ,OAAO,UAAkBg4F,GAIxB,MAFAlqC,GAAEjsC,aAAcxiB,MAETA,KAAK0iB,kBAAmB+rC,EAAGkqC,OAMpChzD,OAAQ,SAAWiuC,GAElB,MAASA,GAAM9yE,KAAOd,KAAKc,IAAU8yE,EAAM7yE,KAAOf,KAAKe,IAAU6yE,EAAM5yE,KAAOhB,KAAKgB,IAAU4yE,EAAM3xD,SAAWjiB,KAAKiiB,QAIpH2uB,UAAW,SAAWrrC,GASrB,MAPAvF,MAAKc,GAAKyE,EAAO,GACjBvF,KAAKe,GAAKwE,EAAO,GACjBvF,KAAKgB,GAAKuE,EAAO,OACGrE,KAAfqE,EAAO,KAAoBvF,KAAKiiB,OAAS1c,EAAO,IAErDvF,KAAKi7E,mBAEEj7E,MAIR+F,QAAS,SAAWR,EAAOvC,GAU1B,WARe9B,KAAVqE,IAAsBA,UACXrE,KAAX8B,IAAuBA,EAAS,GAErCuC,EAAOvC,GAAWhD,KAAKc,GACvByE,EAAOvC,EAAS,GAAMhD,KAAKe,GAC3BwE,EAAOvC,EAAS,GAAMhD,KAAKgB,GAC3BuE,EAAOvC,EAAS,GAAMhD,KAAKiiB,OAEpB1c,GAIRqzF,UAAW,SAAWC,GAErB,MAAKA,GAEGA,EAAehxF,IAAK7H,KAAKc,GAAId,KAAKe,GAAIf,KAAKgB,IAI3C,GAAIG,GAASnB,KAAKc,GAAId,KAAKe,GAAIf,KAAKgB,KAM7C8hB,SAAU,SAAWojC,GAIpB,MAFAlmD,MAAKi7E,iBAAmB/0B,EAEjBlmD,MAIRi7E,iBAAkB,eAcnBj5E,OAAO2rE,OAAQxrD,GAAOg/C,WAErBt5D,IAAK,SAAWixF,GAEf94F,KAAKoiB,KAAO,GAAK02E,EAAU,GAI5BnnF,OAAQ,SAAWmnF,GAElB94F,KAAKoiB,MAAQ,GAAK02E,EAAU,GAI7BC,OAAQ,SAAWD,GAElB94F,KAAKoiB,MAAQ,GAAK02E,EAAU,GAI7BroF,QAAS,SAAWqoF,GAEnB94F,KAAKoiB,QAAY,GAAK02E,EAAU,IAIjC18E,KAAM,SAAWD,GAEhB,MAAuC,KAA9Bnc,KAAKoiB,KAAOjG,EAAOiG,QAc9B,IAAIO,IAAa,CAgFjBN,IAASQ,UAAY,GAAI1hB,GAAS,EAAG,EAAG,GACxCkhB,GAASa,yBAA0B,EAEnClhB,OAAO2rE,OAAQtrD,GAAS8+C,UAAWlhE,EAAgBkhE,WAElD63B,YAAY,EAEZ3jF,eAAgB,aAChBU,cAAe,aAEfkjF,YAAa,SAAW51F,GAEvBrD,KAAKqD,OAAO4R,iBAAkB5R,EAAQrD,KAAKqD,QAE3CrD,KAAKqD,OAAOiS,UAAWtV,KAAKiT,SAAUjT,KAAKuiB,WAAYviB,KAAK8O,QAI7DyuE,gBAAiB,SAAW9uB,GAI3B,MAFAzuD,MAAKuiB,WAAWqQ,YAAa67B,GAEtBzuD,MAIRk5F,yBAA0B,SAAWpgB,EAAM3mD,GAI1CnyB,KAAKuiB,WAAW84D,iBAAkBvC,EAAM3mD,IAIzCgnE,qBAAsB,SAAWvlB,GAEhC5zE,KAAKuiB,WAAWC,aAAcoxD,GAAO,IAItCwlB,sBAAuB,SAAWrqB,GAIjC/uE,KAAKuiB,WAAWm3D,sBAAuB3K,IAIxCsqB,0BAA2B,SAAW5qC,GAIrCzuD,KAAKuiB,WAAWnR,KAAMq9C,IAIvB6qC,aAAc,WAKb,GAAIC,GAAK,GAAI54F,EAEb,OAAO,UAAuBm4E,EAAM3mD,GAMnC,MAJAonE,GAAGle,iBAAkBvC,EAAM3mD,GAE3BnyB,KAAKuiB,WAAW5C,SAAU45E,GAEnBv5F,SAMTw5F,kBAAmB,WAMlB,GAAID,GAAK,GAAI54F,EAEb,OAAO,UAA4Bm4E,EAAM3mD,GAMxC,MAJAonE,GAAGle,iBAAkBvC,EAAM3mD,GAE3BnyB,KAAKuiB,WAAWqQ,YAAa2mE,GAEtBv5F,SAMTy5F,QAAS,WAER,GAAI5+B,GAAK,GAAI15D,GAAS,EAAG,EAAG,EAE5B,OAAO,UAAkBgxB,GAExB,MAAOnyB,MAAKs5F,aAAcz+B,EAAI1oC,OAMhCg1C,QAAS,WAER,GAAItM,GAAK,GAAI15D,GAAS,EAAG,EAAG;kBAE5B,OAAO,UAAkBgxB,GAExB,MAAOnyB,MAAKs5F,aAAcz+B,EAAI1oC,OAMhCunE,QAAS,WAER,GAAI7+B,GAAK,GAAI15D,GAAS,EAAG,EAAG,EAE5B,OAAO,UAAkBgxB,GAExB,MAAOnyB,MAAKs5F,aAAcz+B,EAAI1oC,OAMhCwnE,gBAAiB,WAKhB,GAAI9+B,GAAK,GAAI15D,EAEb,OAAO,UAA0B23E,EAAM1oD,GAMtC,MAJAyqC,GAAGzpD,KAAM0nE,GAAOyE,gBAAiBv9E,KAAKuiB,YAEtCviB,KAAKiT,SAAS8M,IAAK86C,EAAGppC,eAAgBrB,IAE/BpwB,SAMT45F,WAAY,WAEX,GAAI/+B,GAAK,GAAI15D,GAAS,EAAG,EAAG,EAE5B,OAAO,UAAqBivB,GAE3B,MAAOpwB,MAAK25F,gBAAiB9+B,EAAIzqC,OAMnCypE,WAAY,WAEX,GAAIh/B,GAAK,GAAI15D,GAAS,EAAG,EAAG,EAE5B,OAAO,UAAqBivB,GAE3B,MAAOpwB,MAAK25F,gBAAiB9+B,EAAIzqC,OAMnC0pE,WAAY,WAEX,GAAIj/B,GAAK,GAAI15D,GAAS,EAAG,EAAG,EAE5B,OAAO,UAAqBivB,GAE3B,MAAOpwB,MAAK25F,gBAAiB9+B,EAAIzqC,OAMnC2pE,aAAc,SAAW3xE,GAExB,MAAOA,GAAOnX,aAAcjR,KAAKgR,cAIlCgpF,aAAc,WAEb,GAAIhD,GAAK,GAAI32F,EAEb,OAAO,UAAuB+nB,GAE7B,MAAOA,GAAOnX,aAAc+lF,EAAGhmD,WAAYhxC,KAAKgR,kBAMlDyO,OAAQ,WAIP,GAAIu3E,GAAK,GAAI32F,GACT+nB,EAAS,GAAIjnB,EAEjB,OAAO,UAAiBhB,EAAGC,EAAGQ,GAExBT,EAAE4jB,UAENqE,EAAOhX,KAAMjR,GAIbioB,EAAOvgB,IAAK1H,EAAGC,EAAGQ,GAIdZ,KAAKmmD,SAET6wC,EAAGv3E,OAAQzf,KAAKiT,SAAUmV,EAAQpoB,KAAKggB,IAIvCg3E,EAAGv3E,OAAQ2I,EAAQpoB,KAAKiT,SAAUjT,KAAKggB,IAIxChgB,KAAKuiB,WAAWm3D,sBAAuBsd,OAMzCj3E,IAAK,SAAWnG,GAEf,GAAKrZ,UAAUC,OAAS,EAAI,CAE3B,IAAM,GAAIwF,GAAI,EAAGA,EAAIzF,UAAUC,OAAQwF,IAEtChG,KAAK+f,IAAKxf,UAAWyF,GAItB,OAAOhG,MAIR,MAAK4Z,KAAW5Z,MAEfS,QAAQC,MAAO,kEAAmEkZ,GAC3E5Z,OAID4Z,GAAUA,EAAOo/E,YAEA,OAAlBp/E,EAAOgJ,QAEXhJ,EAAOgJ,OAAOf,OAAQjI,GAIvBA,EAAOgJ,OAAS5iB,KAChB4Z,EAAOy0D,eAAiBxsE,KAAM,UAE9B7B,KAAKwd,SAASjT,KAAMqP,IAIpBnZ,QAAQC,MAAO,gEAAiEkZ,GAI1E5Z,OAIR6hB,OAAQ,SAAWjI,GAElB,GAAKrZ,UAAUC,OAAS,EAAI,CAE3B,IAAM,GAAIwF,GAAI,EAAGA,EAAIzF,UAAUC,OAAQwF,IAEtChG,KAAK6hB,OAAQthB,UAAWyF,GAIzB,OAAOhG,MAIR,GAAIymB,GAAQzmB,KAAKwd,SAAS2gB,QAASvkB,EAYnC,QAViB,IAAZ6M,IAEJ7M,EAAOgJ,OAAS,KAEhBhJ,EAAOy0D,eAAiBxsE,KAAM,YAE9B7B,KAAKwd,SAAS4wD,OAAQ3nD,EAAO,IAIvBzmB,MAIRi6F,cAAe,SAAWlwF,GAEzB,MAAO/J,MAAKk6F,oBAAqB,KAAMnwF,IAIxCowF,gBAAiB,SAAW53F,GAE3B,MAAOvC,MAAKk6F,oBAAqB,OAAQ33F,IAI1C23F,oBAAqB,SAAW33F,EAAML,GAErC,GAAKlC,KAAMuC,KAAWL,EAAQ,MAAOlC,KAErC,KAAM,GAAIgG,GAAI,EAAG8K,EAAI9Q,KAAKwd,SAAShd,OAAQwF,EAAI8K,EAAG9K,IAAO,CAExD,GAAIo0F,GAAQp6F,KAAKwd,SAAUxX,GACvB4T,EAASwgF,EAAMF,oBAAqB33F,EAAML,EAE9C,QAAgBhB,KAAX0Y,EAEJ,MAAOA,KAUVygF,iBAAkB,SAAW7P,GAE5B,GAAItwE,GAASswE,GAAkB,GAAIrpF,EAInC,OAFAnB,MAAK0f,mBAAmB,GAEjBxF,EAAOoF,sBAAuBtf,KAAKgR,cAI3CspF,mBAAoB,WAEnB,GAAIrnF,GAAW,GAAI9R,GACf2N,EAAQ,GAAI3N,EAEhB,OAAO,UAA6BqpF,GAEnC,GAAItwE,GAASswE,GAAkB,GAAI7pF,EAMnC,OAJAX,MAAK0f,mBAAmB,GAExB1f,KAAKgR,YAAYsE,UAAWrC,EAAUiH,EAAQpL,GAEvCoL,MAMTqgF,iBAAkB,WAEjB,GAAIh4E,GAAa,GAAI5hB,EAErB,OAAO,UAA2B6pF,GAEjC,GAAItwE,GAASswE,GAAkB,GAAIzoE,GAInC,OAFA/hB,MAAKs6F,mBAAoB/3E,GAElBrI,EAAOwI,kBAAmBH,EAAYviB,KAAKmD,SAAS6e,OAAO,OAMpEw4E,cAAe,WAEd,GAAIvnF,GAAW,GAAI9R,GACfohB,EAAa,GAAI5hB,EAErB,OAAO,UAAwB6pF,GAE9B,GAAItwE,GAASswE,GAAkB,GAAIrpF,EAMnC,OAJAnB,MAAK0f,mBAAmB,GAExB1f,KAAKgR,YAAYsE,UAAWrC,EAAUsP,EAAYrI,GAE3CA,MAMTugF,kBAAmB,WAElB,GAAIl4E,GAAa,GAAI5hB,EAErB,OAAO,UAA4B6pF,GAElC,GAAItwE,GAASswE,GAAkB,GAAIrpF,EAInC,OAFAnB,MAAKs6F,mBAAoB/3E,GAElBrI,EAAOrS,IAAK,EAAG,EAAG,GAAI01E,gBAAiBh7D,OAMhD+iD,QAAS,aAETtf,SAAU,SAAWE,GAEpBA,EAAUlmD,KAIV,KAAM,GAFFwd,GAAWxd,KAAKwd,SAEVxX,EAAI,EAAG8K,EAAI0M,EAAShd,OAAQwF,EAAI8K,EAAG9K,IAE5CwX,EAAUxX,GAAIggD,SAAUE,IAM1Bw0C,gBAAiB,SAAWx0C,GAE3B,IAAsB,IAAjBlmD,KAAKoV,QAAV,CAEA8wC,EAAUlmD,KAIV,KAAM,GAFFwd,GAAWxd,KAAKwd,SAEVxX,EAAI,EAAG8K,EAAI0M,EAAShd,OAAQwF,EAAI8K,EAAG9K,IAE5CwX,EAAUxX,GAAI00F,gBAAiBx0C,KAMjCy0C,kBAAmB,SAAWz0C,GAE7B,GAAItjC,GAAS5iB,KAAK4iB,MAEF,QAAXA,IAEJsjC,EAAUtjC,GAEVA,EAAO+3E,kBAAmBz0C,KAM5B8Q,aAAc,WAEbh3D,KAAKqD,OAAO81E,QAASn5E,KAAKiT,SAAUjT,KAAKuiB,WAAYviB,KAAK8O,OAE1D9O,KAAKmjB,wBAAyB,GAI/BzD,kBAAmB,SAAWk7E,GAExB56F,KAAKoD,kBAAmBpD,KAAKg3D,gBAE7Bh3D,KAAKmjB,wBAA0By3E,KAEd,OAAhB56F,KAAK4iB,OAET5iB,KAAKgR,YAAYI,KAAMpR,KAAKqD,QAI5BrD,KAAKgR,YAAYiE,iBAAkBjV,KAAK4iB,OAAO5R,YAAahR,KAAKqD,QAIlErD,KAAKmjB,wBAAyB,EAE9By3E,GAAQ,EAQT,KAAM,GAFFp9E,GAAWxd,KAAKwd,SAEVxX,EAAI,EAAG8K,EAAI0M,EAAShd,OAAQwF,EAAI8K,EAAG9K,IAE5CwX,EAAUxX,GAAI0Z,kBAAmBk7E,IAMnCvb,OAAQ,SAAWC,GA6ClB,QAASub,GAAWC,EAASC,GAQ5B,WANiC75F,KAA5B45F,EAASC,EAAQ34F,QAErB04F,EAASC,EAAQ34F,MAAS24F,EAAQ1b,OAAQC,IAIpCyb,EAAQ34F,KAmEhB,QAASoyF,GAAkBhjE,GAE1B,GAAImnC,KACJ,KAAM,GAAIjP,KAAOl4B,GAAQ,CAExB,GAAI1sB,GAAO0sB,EAAOk4B,SACX5kD,GAAK06E,SACZ7mB,EAAOpuD,KAAMzF,GAGd,MAAO6zD,GA/HR,GAAI4mB,OAA0Br+E,KAATo+E,GAAsC,gBAATA,GAE9C1R,IAKC2R,KAGJD,GACC/zD,cACA2/C,aACAh/D,YACAjH,WAGD2oE,EAAO4R,UACN77E,QAAS,IACT9B,KAAM,SACN49E,UAAW,mBAOb,IAAI7lE,KAiCJ,IA/BAA,EAAOxX,KAAOpC,KAAKoC,KACnBwX,EAAO/X,KAAO7B,KAAK6B,KAEA,KAAd7B,KAAKuC,OAAcqX,EAAOrX,KAAOvC,KAAKuC,OAClB,IAApBvC,KAAKwc,aAAsB5C,EAAO4C,YAAa,IACxB,IAAvBxc,KAAKojB,gBAAyBxJ,EAAOwJ,eAAgB,IACpC,IAAjBpjB,KAAKoV,UAAoBwE,EAAOxE,SAAU,GACN,OAApCs/E,KAAKC,UAAW30F,KAAKuX,YAAsBqC,EAAOrC,SAAWvX,KAAKuX,UAEvEqC,EAAOvW,OAASrD,KAAKqD,OAAO0C,cAgBL7E,KAAlBlB,KAAKia,WAETL,EAAOK,SAAW4gF,EAAWvb,EAAK/zD,WAAYvrB,KAAKia,eAI7B/Y,KAAlBlB,KAAKmV,SAET,GAAK0H,MAAMC,QAAS9c,KAAKmV,UAAa,CAIrC,IAAM,GAFF6lF,MAEMh1F,EAAI,EAAG8K,EAAI9Q,KAAKmV,SAAS3U,OAAQwF,EAAI8K,EAAG9K,IAEjDg1F,EAAMzwF,KAAMswF,EAAWvb,EAAKpU,UAAWlrE,KAAKmV,SAAUnP,IAIvD4T,GAAOzE,SAAW6lF,MAIlBphF,GAAOzE,SAAW0lF,EAAWvb,EAAKpU,UAAWlrE,KAAKmV,SAQpD,IAAKnV,KAAKwd,SAAShd,OAAS,EAAI,CAE/BoZ,EAAO4D,WAEP,KAAM,GAAIxX,GAAI,EAAGA,EAAIhG,KAAKwd,SAAShd,OAAQwF,IAE1C4T,EAAO4D,SAASjT,KAAMvK,KAAKwd,SAAUxX,GAAIq5E,OAAQC,GAAO1lE,QAM1D,GAAK2lE,EAAe,CAEnB,GAAIh0D,GAAaipE,EAAkBlV,EAAK/zD,YACpC2/C,EAAYspB,EAAkBlV,EAAKpU,WACnCh/D,EAAWsoF,EAAkBlV,EAAKpzE,UAClCjH,EAASuvF,EAAkBlV,EAAKr6E,OAE/BsmB,GAAW/qB,OAAS,IAAIotE,EAAOriD,WAAaA,GAC5C2/C,EAAU1qE,OAAS,IAAIotE,EAAO1C,UAAYA,GAC1Ch/D,EAAS1L,OAAS,IAAIotE,EAAO1hE,SAAWA,GACxCjH,EAAOzE,OAAS,IAAIotE,EAAO3oE,OAASA,GAM1C,MAFA2oE,GAAOh0D,OAASA,EAETg0D,GAqBRnyD,MAAO,SAAW4pD,GAEjB,OAAO,GAAIrlE,MAAKg4D,aAAc5mD,KAAMpR,KAAMqlE,IAI3Cj0D,KAAM,SAAWy8D,EAAQxI,GA6BxB,OA3BmBnkE,KAAdmkE,IAA0BA,GAAY,GAE3CrlE,KAAKuC,KAAOsrE,EAAOtrE,KAEnBvC,KAAKggB,GAAG5O,KAAMy8D,EAAO7tD,IAErBhgB,KAAKiT,SAAS7B,KAAMy8D,EAAO56D,UAC3BjT,KAAKuiB,WAAWnR,KAAMy8D,EAAOtrD,YAC7BviB,KAAK8O,MAAMsC,KAAMy8D,EAAO/+D,OAExB9O,KAAKqD,OAAO+N,KAAMy8D,EAAOxqE,QACzBrD,KAAKgR,YAAYI,KAAMy8D,EAAO78D,aAE9BhR,KAAKoD,iBAAmByqE,EAAOzqE,iBAC/BpD,KAAKmjB,uBAAyB0qD,EAAO1qD,uBAErCnjB,KAAKmc,OAAOiG,KAAOyrD,EAAO1xD,OAAOiG,KACjCpiB,KAAKoV,QAAUy4D,EAAOz4D,QAEtBpV,KAAKwc,WAAaqxD,EAAOrxD,WACzBxc,KAAKojB,cAAgByqD,EAAOzqD,cAE5BpjB,KAAKyc,cAAgBoxD,EAAOpxD,cAC5Bzc,KAAKoU,YAAcy5D,EAAOz5D,YAE1BpU,KAAKuX,SAAWm9E,KAAKE,MAAOF,KAAKC,UAAW9mB,EAAOt2D,YAEhC,IAAd8tD,EAEJ,IAAM,GAAIr/D,GAAI,EAAGA,EAAI6nE,EAAOrwD,SAAShd,OAAQwF,IAAO,CAEnD,GAAIo0F,GAAQvsB,EAAOrwD,SAAUxX,EAC7BhG,MAAK+f,IAAKq6E,EAAM3+E,SAMlB,MAAOzb,SAuBTqjB,GAAO89C,UAAYn/D,OAAO2rE,OAAQ3rE,OAAOo+E,OAAQ/9D,GAAS8+C,YAEzDnJ,YAAa30C,GAEb8iC,UAAU,EAEV/0C,KAAM,SAAWy8D,EAAQxI,GAOxB,MALAhjD,IAAS8+C,UAAU/vD,KAAK1M,KAAM1E,KAAM6tE,EAAQxI,GAE5CrlE,KAAKkR,mBAAmBE,KAAMy8D,EAAO38D,oBACrClR,KAAKmR,iBAAiBC,KAAMy8D,EAAO18D,kBAE5BnR,MAIRy6F,kBAAmB,WAElB,GAAIl4E,GAAa,GAAI5hB,EAErB,OAAO,UAA4B6pF,GAElC,GAAItwE,GAASswE,GAAkB,GAAIrpF,EAInC,OAFAnB,MAAKs6F,mBAAoB/3E,GAElBrI,EAAOrS,IAAK,EAAG,GAAK,GAAI01E,gBAAiBh7D,OAMlD7C,kBAAmB,SAAWk7E,GAE7Bv4E,GAAS8+C,UAAUzhD,kBAAkBhb,KAAM1E,KAAM46F,GAEjD56F,KAAKkR,mBAAmB8/B,WAAYhxC,KAAKgR,cAI1CyK,MAAO,WAEN,OAAO,GAAIzb,MAAKg4D,aAAc5mD,KAAMpR,SAgCtCsjB,GAAmB69C,UAAYn/D,OAAO2rE,OAAQ3rE,OAAOo+E,OAAQ/8D,GAAO89C,YAEnEnJ,YAAa10C,GAEb23E,sBAAsB,EAEtB7pF,KAAM,SAAWy8D,EAAQxI,GAcxB,MAZAhiD,IAAO89C,UAAU/vD,KAAK1M,KAAM1E,KAAM6tE,EAAQxI,GAE1CrlE,KAAKujB,KAAOsqD,EAAOtqD,KACnBvjB,KAAKwjB,MAAQqqD,EAAOrqD,MACpBxjB,KAAKyjB,IAAMoqD,EAAOpqD,IAClBzjB,KAAK0jB,OAASmqD,EAAOnqD,OACrB1jB,KAAK6U,KAAOg5D,EAAOh5D,KACnB7U,KAAK8U,IAAM+4D,EAAO/4D,IAElB9U,KAAK2jB,KAAOkqD,EAAOlqD,KACnB3jB,KAAK4jB,KAAuB,OAAhBiqD,EAAOjqD,KAAgB,KAAO5hB,OAAO2rE,UAAYE,EAAOjqD,MAE7D5jB,MAIRk7F,cAAe,SAAWC,EAAWC,EAAYj7F,EAAGC,EAAG2D,EAAOC,GAE1C,OAAdhE,KAAK4jB,OAET5jB,KAAK4jB,MACJzF,SAAS,EACTg9E,UAAW,EACXC,WAAY,EACZC,QAAS,EACTC,QAAS,EACTv3F,MAAO,EACPC,OAAQ,IAKVhE,KAAK4jB,KAAKzF,SAAU,EACpBne,KAAK4jB,KAAKu3E,UAAYA,EACtBn7F,KAAK4jB,KAAKw3E,WAAaA,EACvBp7F,KAAK4jB,KAAKy3E,QAAUl7F,EACpBH,KAAK4jB,KAAK03E,QAAUl7F,EACpBJ,KAAK4jB,KAAK7f,MAAQA,EAClB/D,KAAK4jB,KAAK5f,OAASA,EAEnBhE,KAAKkf,0BAINq8E,gBAAiB,WAEG,OAAdv7F,KAAK4jB,OAET5jB,KAAK4jB,KAAKzF,SAAU,GAIrBne,KAAKkf,0BAINA,uBAAwB,WAEvB,GAAIuyD,IAAOzxE,KAAKwjB,MAAQxjB,KAAKujB,OAAW,EAAIvjB,KAAK2jB,MAC7C+tD,GAAO1xE,KAAKyjB,IAAMzjB,KAAK0jB,SAAa,EAAI1jB,KAAK2jB,MAC7C0rC,GAAOrvD,KAAKwjB,MAAQxjB,KAAKujB,MAAS,EAClC+rC,GAAOtvD,KAAKyjB,IAAMzjB,KAAK0jB,QAAW,EAElCH,EAAO8rC,EAAKoiB,EACZjuD,EAAQ6rC,EAAKoiB,EACbhuD,EAAM6rC,EAAKoiB,EACXhuD,EAAS4rC,EAAKoiB,CAElB,IAAmB,OAAd1xE,KAAK4jB,MAAiB5jB,KAAK4jB,KAAKzF,QAAU,CAE9C,GAAIq9E,GAAQx7F,KAAK2jB,MAAS3jB,KAAK4jB,KAAK7f,MAAQ/D,KAAK4jB,KAAKu3E,WAClDM,EAAQz7F,KAAK2jB,MAAS3jB,KAAK4jB,KAAK5f,OAAShE,KAAK4jB,KAAKw3E,YACnDM,GAAW17F,KAAKwjB,MAAQxjB,KAAKujB,MAASvjB,KAAK4jB,KAAK7f,MAChD43F,GAAW37F,KAAKyjB,IAAMzjB,KAAK0jB,QAAW1jB,KAAK4jB,KAAK5f,MAEpDuf,IAAQm4E,GAAW17F,KAAK4jB,KAAKy3E,QAAUG,GACvCh4E,EAAQD,EAAOm4E,GAAW17F,KAAK4jB,KAAK7f,MAAQy3F,GAC5C/3E,GAAOk4E,GAAW37F,KAAK4jB,KAAK03E,QAAUG,GACtC/3E,EAASD,EAAMk4E,GAAW37F,KAAK4jB,KAAK5f,OAASy3F,GAI9Cz7F,KAAKmR,iBAAiByoE,iBAAkBr2D,EAAMC,EAAOC,EAAKC,EAAQ1jB,KAAK6U,KAAM7U,KAAK8U,MAInFuqE,OAAQ,SAAWC,GAElB,GAAIx6E,GAAOud,GAAS8+C,UAAUke,OAAO36E,KAAM1E,KAAMs/E,EAYjD,OAVAx6E,GAAK8U,OAAO+J,KAAO3jB,KAAK2jB,KACxB7e,EAAK8U,OAAO2J,KAAOvjB,KAAKujB,KACxBze,EAAK8U,OAAO4J,MAAQxjB,KAAKwjB,MACzB1e,EAAK8U,OAAO6J,IAAMzjB,KAAKyjB,IACvB3e,EAAK8U,OAAO8J,OAAS1jB,KAAK0jB,OAC1B5e,EAAK8U,OAAO/E,KAAO7U,KAAK6U,KACxB/P,EAAK8U,OAAO9E,IAAM9U,KAAK8U,IAEJ,OAAd9U,KAAK4jB,OAAgB9e,EAAK8U,OAAOgK,KAAO5hB,OAAO2rE,UAAY3tE,KAAK4jB,OAE9D9e,KA2BT9C,OAAO2rE,OAAQ9pD,GAAMs9C,WAEpB1lD,MAAO,WAEN,OAAO,GAAIzb,MAAKg4D,aAAc5mD,KAAMpR,OAIrCoR,KAAM,SAAWy8D,GAEhB7tE,KAAKmU,EAAI05D,EAAO15D,EAChBnU,KAAKmH,EAAI0mE,EAAO1mE,EAChBnH,KAAK8jB,EAAI+pD,EAAO/pD,EAEhB9jB,KAAK6Y,OAAOzH,KAAMy8D,EAAOh1D,QACzB7Y,KAAK6O,MAAMuC,KAAMy8D,EAAOh/D,OAExB7O,KAAKod,cAAgBywD,EAAOzwD,aAE5B,KAAM,GAAIpX,GAAI,EAAG2Y,EAAKkvD,EAAO7pD,cAAcxjB,OAAQwF,EAAI2Y,EAAI3Y,IAE1DhG,KAAKgkB,cAAehe,GAAM6nE,EAAO7pD,cAAehe,GAAIyV,OAIrD,KAAM,GAAIzV,GAAI,EAAG2Y,EAAKkvD,EAAOt3D,aAAa/V,OAAQwF,EAAI2Y,EAAI3Y,IAEzDhG,KAAKuW,aAAcvQ,GAAM6nE,EAAOt3D,aAAcvQ,GAAIyV,OAInD,OAAOzb,QAeT,IAAImkB,IAAa,CAuCjBniB,QAAO2rE,OAAQzpD,GAASi9C,UAAWlhE,EAAgBkhE,WAElDvmD,YAAY,EAEZq+E,YAAa,SAAW51F,GAIvB,IAAM,GAFF4f,IAAe,GAAI7hB,IAAUuxC,gBAAiBtvC,GAExC2C,EAAI,EAAG2Y,EAAK3e,KAAKqM,SAAS7L,OAAQwF,EAAI2Y,EAAI3Y,IAAO,CAE7ChG,KAAKqM,SAAUrG,GACrBiL,aAAc5N,GAItB,IAAM,GAAI2C,GAAI,EAAG2Y,EAAK3e,KAAKsM,MAAM9L,OAAQwF,EAAI2Y,EAAI3Y,IAAO,CAEvD,GAAI8Z,GAAO9f,KAAKsM,MAAOtG,EACvB8Z,GAAKjH,OAAOg4D,aAAc5tD,GAAekQ,WAEzC,KAAM,GAAIhhB,GAAI,EAAGC,EAAK0N,EAAKkE,cAAcxjB,OAAQ2R,EAAIC,EAAID,IAExD2N,EAAKkE,cAAe7R,GAAI0+D,aAAc5tD,GAAekQ,YAqBvD,MAf0B,QAArBnzB,KAAK0kB,aAET1kB,KAAK47F,qBAIuB,OAAxB57F,KAAK2kB,gBAET3kB,KAAK6oE,wBAIN7oE,KAAK6kB,oBAAqB,EAC1B7kB,KAAK+kB,mBAAoB,EAElB/kB,MAIRy5F,QAAS,WAIR,GAAIzC,GAAK,GAAI32F,EAEb,OAAO,UAAkB8xB,GAMxB,MAJA6kE,GAAGte,cAAevmD,GAElBnyB,KAAKi5F,YAAajC,GAEXh3F,SAMTmnE,QAAS,WAIR,GAAI6vB,GAAK,GAAI32F,EAEb,OAAO,UAAkB8xB,GAMxB,MAJA6kE,GAAGre,cAAexmD,GAElBnyB,KAAKi5F,YAAajC,GAEXh3F,SAMT05F,QAAS,WAIR,GAAI1C,GAAK,GAAI32F,EAEb,OAAO,UAAkB8xB,GAMxB,MAJA6kE,GAAGpe,cAAezmD,GAElBnyB,KAAKi5F,YAAajC,GAEXh3F,SAMTspE,UAAW,WAIV,GAAI0tB,GAAK,GAAI32F,EAEb,OAAO,UAAoBF,EAAGC,EAAGQ,GAMhC,MAJAo2F,GAAGz3E,gBAAiBpf,EAAGC,EAAGQ,GAE1BZ,KAAKi5F,YAAajC,GAEXh3F,SAMT8O,MAAO,WAIN,GAAIkoF,GAAK,GAAI32F,EAEb,OAAO,UAAgBF,EAAGC,EAAGQ,GAM5B,MAJAo2F,GAAG/d,UAAW94E,EAAGC,EAAGQ,GAEpBZ,KAAKi5F,YAAajC,GAEXh3F,SAMTyf,OAAQ,WAEP,GAAIo8E,GAAM,GAAIx5E,GAEd,OAAO,UAAiB+F,GAEvByzE,EAAIp8E,OAAQ2I,GAEZyzE,EAAI7kC,eAEJh3D,KAAKi5F,YAAa4C,EAAIx4F,YAMxB2jB,mBAAoB,SAAW/M,GAiD9B,QAAS6hF,GAAS3nF,EAAGhN,EAAG2c,EAAG1G,GAE1B,GAAI4G,OAA4B9iB,KAAZilB,GAA0B41E,EAAa5nF,GAAIsH,QAASsgF,EAAa50F,GAAIsU,QAASsgF,EAAaj4E,GAAIrI,YAC/GlF,MAA0BrV,KAAXkjB,GAAyB1I,EAAM0I,OAAQjQ,GAAIsH,QAASC,EAAM0I,OAAQjd,GAAIsU,QAASC,EAAM0I,OAAQN,GAAIrI,YAEhHqE,EAAO,GAAI+D,IAAO1P,EAAGhN,EAAG2c,EAAGE,EAAezN,EAAc6G,EAE5D1B,GAAMpP,MAAM/B,KAAMuV,OAEL5e,KAARklB,GAEJ1K,EAAM2I,cAAe,GAAI9Z,MAAQyxF,EAAS7nF,GAAIsH,QAASugF,EAAS70F,GAAIsU,QAASugF,EAASl4E,GAAIrI,cAI7Eva,KAATmlB,GAEJ3K,EAAM2I,cAAe,GAAI9Z,MAAQ0xF,EAAU9nF,GAAIsH,QAASwgF,EAAU90F,GAAIsU,QAASwgF,EAAUn4E,GAAIrI,UAhE/F,GAAIC,GAAQ1b,KAERkmB,EAA6B,OAAnBjM,EAASwM,MAAiBxM,EAASwM,MAAMlhB,UAAQrE,GAC3DmN,EAAa4L,EAAS5L,WAEtB83D,EAAY93D,EAAW4E,SAAS1N,MAChC4gB,MAAgCjlB,KAAtBmN,EAAWwK,OAAuBxK,EAAWwK,OAAOtT,UAAQrE,GACtEkjB,MAA8BljB,KAArBmN,EAAWQ,MAAsBR,EAAWQ,MAAMtJ,UAAQrE,GACnEklB,MAAwBllB,KAAlBmN,EAAWG,GAAmBH,EAAWG,GAAGjJ,UAAQrE,GAC1DmlB,MAA0BnlB,KAAnBmN,EAAWoc,IAAoBpc,EAAWoc,IAAIllB,UAAQrE,OAEnDA,KAATmlB,IAAqBrmB,KAAKqkB,cAAe,MAM9C,KAAM,GAJF03E,MACAC,KACAC,KAEMj2F,EAAI,EAAGmM,EAAI,EAAGnM,EAAImgE,EAAU3lE,OAAQwF,GAAK,EAAGmM,GAAK,EAE1DuJ,EAAMrP,SAAS9B,KAAM,GAAIpJ,GAASglE,EAAWngE,GAAKmgE,EAAWngE,EAAI,GAAKmgE,EAAWngE,EAAI,SAEpE9E,KAAZilB,GAEJ41E,EAAYxxF,KAAM,GAAIpJ,GAASglB,EAASngB,GAAKmgB,EAASngB,EAAI,GAAKmgB,EAASngB,EAAI,SAI7D9E,KAAXkjB,GAEJ1I,EAAM0I,OAAO7Z,KAAM,GAAImB,GAAO0Y,EAAQpe,GAAKoe,EAAQpe,EAAI,GAAKoe,EAAQpe,EAAI,SAI5D9E,KAARklB,GAEJ41E,EAAQzxF,KAAM,GAAIrK,GAASkmB,EAAKjU,GAAKiU,EAAKjU,EAAI,SAIjCjR,KAATmlB,GAEJ41E,EAAS1xF,KAAM,GAAIrK,GAASmmB,EAAMlU,GAAKkU,EAAMlU,EAAI,IA6BnD,IAAI4K,GAAS9C,EAAS8C,MAEtB,IAAKA,EAAOvc,OAAS,EAEpB,IAAM,GAAIwF,GAAI,EAAGA,EAAI+W,EAAOvc,OAAQwF,IAOnC,IAAM,GALFkX,GAAQH,EAAQ/W,GAEhB2gB,EAAQzJ,EAAMyJ,MACdnF,EAAQtE,EAAMsE,MAERrP,EAAIwU,EAAOvU,EAAKuU,EAAQnF,EAAOrP,EAAIC,EAAID,GAAK,MAEpCjR,KAAZglB,EAEJ41E,EAAS51E,EAAS/T,GAAK+T,EAAS/T,EAAI,GAAK+T,EAAS/T,EAAI,GAAK+K,EAAME,eAIjE0+E,EAAS3pF,EAAGA,EAAI,EAAGA,EAAI,EAAG+K,EAAME,mBAUnC,QAAiBlc,KAAZglB,EAEJ,IAAM,GAAIlgB,GAAI,EAAGA,EAAIkgB,EAAQ1lB,OAAQwF,GAAK,EAEzC81F,EAAS51E,EAASlgB,GAAKkgB,EAASlgB,EAAI,GAAKkgB,EAASlgB,EAAI,QAMvD,KAAM,GAAIA,GAAI,EAAGA,EAAImgE,EAAU3lE,OAAS,EAAGwF,GAAK,EAE/C81F,EAAS91F,EAAGA,EAAI,EAAGA,EAAI,EAsB1B,OAdAhG,MAAKwzD,qBAEyB,OAAzBv5C,EAASyK,cAEb1kB,KAAK0kB,YAAczK,EAASyK,YAAYjJ,SAIR,OAA5BxB,EAAS0K,iBAEb3kB,KAAK2kB,eAAiB1K,EAAS0K,eAAelJ,SAIxCzb,MAIRkD,OAAQ,WAEPlD,KAAK47F,oBAEL,IAAI54F,GAAShD,KAAK0kB,YAAYkvE,YAAYxiB,QAI1C,OAFApxE,MAAKspE,UAAWtmE,EAAO7C,EAAG6C,EAAO5C,EAAG4C,EAAOpC,GAEpCoC,GAIRmwB,UAAW,WAEVnzB,KAAK6oE,uBAEL,IAAI3lE,GAASlD,KAAK2kB,eAAezhB,OAC7ByV,EAAS3Y,KAAK2kB,eAAehM,OAE7Bq8C,EAAe,IAAXr8C,EAAe,EAAI,EAAMA,EAE7BtV,EAAS,GAAIhD,EAUjB,OATAgD,GAAOwE,IACNmtD,EAAG,EAAG,GAAKA,EAAI9xD,EAAO/C,EACtB,EAAG60D,EAAG,GAAKA,EAAI9xD,EAAO9C,EACtB,EAAG,EAAG40D,GAAKA,EAAI9xD,EAAOtC,EACtB,EAAG,EAAG,EAAG,GAGVZ,KAAKi5F,YAAa51F,GAEXrD,MAIRwzD,mBAAoB,WAInB,IAAM,GAFF0oC,GAAK,GAAI/6F,GAAWg7F,EAAK,GAAIh7F,GAEvBi+B,EAAI,EAAGg9D,EAAKp8F,KAAKsM,MAAM9L,OAAQ4+B,EAAIg9D,EAAIh9D,IAAO,CAEvD,GAAItf,GAAO9f,KAAKsM,MAAO8yB,GAEnBi9D,EAAKr8F,KAAKqM,SAAUyT,EAAK3L,GACzBmoF,EAAKt8F,KAAKqM,SAAUyT,EAAK3Y,GACzBo1F,EAAKv8F,KAAKqM,SAAUyT,EAAKgE,EAE7Bo4E,GAAGxxC,WAAY6xC,EAAID,GACnBH,EAAGzxC,WAAY2xC,EAAIC,GACnBJ,EAAGne,MAAOoe,GAEVD,EAAG/oE,YAEHrT,EAAKjH,OAAOzH,KAAM8qF,KAMpBzvC,qBAAsB,SAAW+vC,OAEVt7F,KAAjBs7F,IAA6BA,GAAe,EAEjD,IAAIh2F,GAAGi2F,EAAIr9D,EAAGg9D,EAAIt8E,EAAMzT,CAIxB,KAFAA,EAAW,GAAIwQ,OAAO7c,KAAKqM,SAAS7L,QAE9BgG,EAAI,EAAGi2F,EAAKz8F,KAAKqM,SAAS7L,OAAQgG,EAAIi2F,EAAIj2F,IAE/C6F,EAAU7F,GAAM,GAAIrF,EAIrB,IAAKq7F,EAAe,CAKnB,GAAIH,GAAIC,EAAIC,EACRL,EAAK,GAAI/6F,GAAWg7F,EAAK,GAAIh7F,EAEjC,KAAMi+B,EAAI,EAAGg9D,EAAKp8F,KAAKsM,MAAM9L,OAAQ4+B,EAAIg9D,EAAIh9D,IAE5Ctf,EAAO9f,KAAKsM,MAAO8yB,GAEnBi9D,EAAKr8F,KAAKqM,SAAUyT,EAAK3L,GACzBmoF,EAAKt8F,KAAKqM,SAAUyT,EAAK3Y,GACzBo1F,EAAKv8F,KAAKqM,SAAUyT,EAAKgE,GAEzBo4E,EAAGxxC,WAAY6xC,EAAID,GACnBH,EAAGzxC,WAAY2xC,EAAIC,GACnBJ,EAAGne,MAAOoe,GAEV9vF,EAAUyT,EAAK3L,GAAI4L,IAAKm8E,GACxB7vF,EAAUyT,EAAK3Y,GAAI4Y,IAAKm8E,GACxB7vF,EAAUyT,EAAKgE,GAAI/D,IAAKm8E,OAQzB,KAFAl8F,KAAKwzD,qBAECp0B,EAAI,EAAGg9D,EAAKp8F,KAAKsM,MAAM9L,OAAQ4+B,EAAIg9D,EAAIh9D,IAE5Ctf,EAAO9f,KAAKsM,MAAO8yB,GAEnB/yB,EAAUyT,EAAK3L,GAAI4L,IAAKD,EAAKjH,QAC7BxM,EAAUyT,EAAK3Y,GAAI4Y,IAAKD,EAAKjH,QAC7BxM,EAAUyT,EAAKgE,GAAI/D,IAAKD,EAAKjH,OAM/B,KAAMrS,EAAI,EAAGi2F,EAAKz8F,KAAKqM,SAAS7L,OAAQgG,EAAIi2F,EAAIj2F,IAE/C6F,EAAU7F,GAAI2sB,WAIf,KAAMiM,EAAI,EAAGg9D,EAAKp8F,KAAKsM,MAAM9L,OAAQ4+B,EAAIg9D,EAAIh9D,IAAO,CAEnDtf,EAAO9f,KAAKsM,MAAO8yB,EAEnB,IAAIpb,GAAgBlE,EAAKkE,aAEK,KAAzBA,EAAcxjB,QAElBwjB,EAAe,GAAI5S,KAAM/E,EAAUyT,EAAK3L,IACxC6P,EAAe,GAAI5S,KAAM/E,EAAUyT,EAAK3Y,IACxC6c,EAAe,GAAI5S,KAAM/E,EAAUyT,EAAKgE,MAIxCE,EAAe,GAAM3X,EAAUyT,EAAK3L,GAAIsH,QACxCuI,EAAe,GAAM3X,EAAUyT,EAAK3Y,GAAIsU,QACxCuI,EAAe,GAAM3X,EAAUyT,EAAKgE,GAAIrI,SAMrCzb,KAAKsM,MAAM9L,OAAS,IAExBR,KAAK+kB,mBAAoB,IAM3B23E,yBAA0B,WAEzB,GAAIt9D,GAAGg9D,EAAIt8E,CAIX,KAFA9f,KAAKwzD,qBAECp0B,EAAI,EAAGg9D,EAAKp8F,KAAKsM,MAAM9L,OAAQ4+B,EAAIg9D,EAAIh9D,IAAO,CAEnDtf,EAAO9f,KAAKsM,MAAO8yB,EAEnB,IAAIpb,GAAgBlE,EAAKkE,aAEK,KAAzBA,EAAcxjB,QAElBwjB,EAAe,GAAI5S,KAAM0O,EAAKjH,QAC9BmL,EAAe,GAAI5S,KAAM0O,EAAKjH,QAC9BmL,EAAe,GAAI5S,KAAM0O,EAAKjH,UAI9BmL,EAAe,GAAMlE,EAAKjH,OAAO4C,QACjCuI,EAAe,GAAMlE,EAAKjH,OAAO4C,QACjCuI,EAAe,GAAMlE,EAAKjH,OAAO4C,SAM9Bzb,KAAKsM,MAAM9L,OAAS,IAExBR,KAAK+kB,mBAAoB,IAM3B43E,oBAAqB,WAEpB,GAAI32F,GAAG2Y,EAAIygB,EAAGg9D,EAAIt8E,CAMlB,KAAMsf,EAAI,EAAGg9D,EAAKp8F,KAAKsM,MAAM9L,OAAQ4+B,EAAIg9D,EAAIh9D,IAgB5C,IAdAtf,EAAO9f,KAAKsM,MAAO8yB,GAEZtf,EAAK88E,qBAMX98E,EAAK88E,qBAAqBxrF,KAAM0O,EAAKjH,QAJrCiH,EAAK88E,qBAAuB98E,EAAKjH,OAAO4C,QAQlCqE,EAAK+8E,0BAA0B/8E,EAAK+8E,4BAErC72F,EAAI,EAAG2Y,EAAKmB,EAAKkE,cAAcxjB,OAAQwF,EAAI2Y,EAAI3Y,IAE7C8Z,EAAK+8E,wBAAyB72F,GAMpC8Z,EAAK+8E,wBAAyB72F,GAAIoL,KAAM0O,EAAKkE,cAAehe,IAJ5D8Z,EAAK+8E,wBAAyB72F,GAAM8Z,EAAKkE,cAAehe,GAAIyV,OAc/D,IAAIqhF,GAAS,GAAI54E,GAGjB,KAFA44E,EAAOxwF,MAAQtM,KAAKsM,MAEdtG,EAAI,EAAG2Y,EAAK3e,KAAK6X,aAAarX,OAAQwF,EAAI2Y,EAAI3Y,IAAO,CAI1D,IAAOhG,KAAKskB,aAActe,GAAM,CAE/BhG,KAAKskB,aAActe,MACnBhG,KAAKskB,aAActe,GAAI+2F,eACvB/8F,KAAKskB,aAActe,GAAIge,gBAEvB,IAGIg5E,GAAYh5E,EAHZi5E,EAAiBj9F,KAAKskB,aAActe,GAAI+2F,YACxCG,EAAmBl9F,KAAKskB,aAActe,GAAIge,aAI9C,KAAMob,EAAI,EAAGg9D,EAAKp8F,KAAKsM,MAAM9L,OAAQ4+B,EAAIg9D,EAAIh9D,IAE5C49D,EAAa,GAAI77F,GACjB6iB,GAAkB7P,EAAG,GAAIhT,GAAWgG,EAAG,GAAIhG,GAAW2iB,EAAG,GAAI3iB,IAE7D87F,EAAe1yF,KAAMyyF,GACrBE,EAAiB3yF,KAAMyZ,GAMzB,GAAIM,GAAetkB,KAAKskB,aAActe,EAItC82F,GAAOzwF,SAAWrM,KAAK6X,aAAc7R,GAAIqG,SAIzCywF,EAAOtpC,qBACPspC,EAAOrwC,sBAIP,IAAIuwC,GAAYh5E,CAEhB,KAAMob,EAAI,EAAGg9D,EAAKp8F,KAAKsM,MAAM9L,OAAQ4+B,EAAIg9D,EAAIh9D,IAE5Ctf,EAAO9f,KAAKsM,MAAO8yB,GAEnB49D,EAAa14E,EAAay4E,YAAa39D,GACvCpb,EAAgBM,EAAaN,cAAeob,GAE5C49D,EAAW5rF,KAAM0O,EAAKjH,QAEtBmL,EAAc7P,EAAE/C,KAAM0O,EAAKkE,cAAe,IAC1CA,EAAc7c,EAAEiK,KAAM0O,EAAKkE,cAAe,IAC1CA,EAAcF,EAAE1S,KAAM0O,EAAKkE,cAAe,IAQ5C,IAAMob,EAAI,EAAGg9D,EAAKp8F,KAAKsM,MAAM9L,OAAQ4+B,EAAIg9D,EAAIh9D,IAE5Ctf,EAAO9f,KAAKsM,MAAO8yB,GAEnBtf,EAAKjH,OAASiH,EAAK88E,qBACnB98E,EAAKkE,cAAgBlE,EAAK+8E,yBAM5BM,qBAAsB,WAKrB,IAAM,GAHF70E,GAAI,EACJjc,EAAWrM,KAAKqM,SAEVrG,EAAI,EAAG2Y,EAAKtS,EAAS7L,OAAQwF,EAAI2Y,EAAI3Y,IAEzCA,EAAI,IAERsiB,GAAKjc,EAAUrG,GAAIurE,WAAYllE,EAAUrG,EAAI,KAI9ChG,KAAKykB,cAAeze,GAAMsiB,GAM5BszE,mBAAoB,WAEO,OAArB57F,KAAK0kB,cAET1kB,KAAK0kB,YAAc,GAAIjM,KAIxBzY,KAAK0kB,YAAYo4C,cAAe98D,KAAKqM,WAItCw8D,sBAAuB,WAEO,OAAxB7oE,KAAK2kB,iBAET3kB,KAAK2kB,eAAiB,GAAIjM,KAI3B1Y,KAAK2kB,eAAem4C,cAAe98D,KAAKqM,WAIzCw/E,MAAO,SAAW5xE,EAAU5W,EAAQ+5F,GAEnC,IAASnjF,IAAYA,EAASW,WAG7B,WADAna,SAAQC,MAAO,sEAAuEuZ,EAKvF,IAAIgJ,GACHo6E,EAAer9F,KAAKqM,SAAS7L,OAC7B88F,EAAYt9F,KAAKqM,SACjBkxF,EAAYtjF,EAAS5N,SACrBmxF,EAASx9F,KAAKsM,MACdmxF,EAASxjF,EAAS3N,MAClBoxF,EAAO19F,KAAKqkB,cAAe,GAC3BgC,EAAOpM,EAASoK,cAAe,GAC/Bs5E,EAAU39F,KAAKokB,OACfw5E,EAAU3jF,EAASmK,WAESljB,KAAxBk8F,IAAoCA,EAAsB,OAE/Cl8F,KAAXmC,IAEJ4f,GAAe,GAAI7hB,IAAUuxC,gBAAiBtvC,GAM/C,KAAM,GAAI2C,GAAI,EAAG2Y,EAAK4+E,EAAU/8F,OAAQwF,EAAI2Y,EAAI3Y,IAAO,CAEtD,GAAIsI,GAASivF,EAAWv3F,GAEpB63F,EAAavvF,EAAOmN,YAERva,KAAXmC,GAAuBw6F,EAAW5sF,aAAc5N,GAErDi6F,EAAU/yF,KAAMszF,GAMjB,IAAM,GAAI73F,GAAI,EAAG2Y,EAAKi/E,EAAQp9F,OAAQwF,EAAI2Y,EAAI3Y,IAE7C23F,EAAQpzF,KAAMqzF,EAAS53F,GAAIyV,QAM5B,KAAMzV,EAAI,EAAG2Y,EAAK8+E,EAAOj9F,OAAQwF,EAAI2Y,EAAI3Y,IAAO,CAE/C,GAAwB83F,GAAUjlF,EAAQhK,EAAtCiR,EAAO29E,EAAQz3F,GAClB+3F,EAAoBj+E,EAAKkE,cACzBg6E,EAAmBl+E,EAAKvJ,YAEzBunF,GAAW,GAAIj6E,IAAO/D,EAAK3L,EAAIkpF,EAAcv9E,EAAK3Y,EAAIk2F,EAAcv9E,EAAKgE,EAAIu5E,GAC7ES,EAASjlF,OAAOzH,KAAM0O,EAAKjH,YAEL3X,KAAjB+hB,GAEJ66E,EAASjlF,OAAOg4D,aAAc5tD,GAAekQ,WAI9C,KAAM,GAAIhhB,GAAI,EAAGC,EAAK2rF,EAAkBv9F,OAAQ2R,EAAIC,EAAID,IAEvD0G,EAASklF,EAAmB5rF,GAAIsJ,YAEVva,KAAjB+hB,GAEJpK,EAAOg4D,aAAc5tD,GAAekQ,YAIrC2qE,EAAS95E,cAAczZ,KAAMsO,EAI9BilF,GAASjvF,MAAMuC,KAAM0O,EAAKjR,MAE1B,KAAM,GAAIsD,GAAI,EAAGC,EAAK4rF,EAAiBx9F,OAAQ2R,EAAIC,EAAID,IAEtDtD,EAAQmvF,EAAkB7rF,GAC1B2rF,EAASvnF,aAAahM,KAAMsE,EAAM4M,QAInCqiF,GAAS1gF,cAAgB0C,EAAK1C,cAAgBggF,EAE9CI,EAAOjzF,KAAMuzF,GAMd,IAAM93F,EAAI,EAAG2Y,EAAK0H,EAAK7lB,OAAQwF,EAAI2Y,EAAI3Y,IAAO,CAE7C,GAAIwI,GAAK6X,EAAMrgB,GAAKi4F,IAEpB,QAAY/8F,KAAPsN,EAAL,CAMA,IAAM,GAAI2D,GAAI,EAAGC,EAAK5D,EAAGhO,OAAQ2R,EAAIC,EAAID,IAExC8rF,EAAO1zF,KAAMiE,EAAI2D,GAAIsJ,QAItBiiF,GAAKnzF,KAAM0zF,MAMbC,UAAW,SAAWC,GAErB,IAASA,IAAQA,EAAK9hF,OAGrB,WADA5b,SAAQC,MAAO,kEAAmEy9F,EAKnFA,GAAK/6F,kBAAoB+6F,EAAKnnC,eAE9Bh3D,KAAK6rF,MAAOsS,EAAKlkF,SAAUkkF,EAAK96F,SAUjC6jB,cAAe,WAEd,GAGI1gB,GAAGkjD,EAGH1jD,EAAG2Y,EAAImB,EACPoG,EAAS/T,EAAGC,EAPZgsF,KACAC,KAAaC,KAIblvF,EAAYqZ,KAAKwiC,IAAK,GADJ,EAKtB,KAAMjlD,EAAI,EAAG2Y,EAAK3e,KAAKqM,SAAS7L,OAAQwF,EAAI2Y,EAAI3Y,IAE/CQ,EAAIxG,KAAKqM,SAAUrG,GACnB0jD,EAAMjhC,KAAKyoD,MAAO1qE,EAAErG,EAAIiP,GAAc,IAAMqZ,KAAKyoD,MAAO1qE,EAAEpG,EAAIgP,GAAc,IAAMqZ,KAAKyoD,MAAO1qE,EAAE5F,EAAIwO,OAExElO,KAAvBk9F,EAAa10C,IAEjB00C,EAAa10C,GAAQ1jD,EACrBq4F,EAAO9zF,KAAMvK,KAAKqM,SAAUrG,IAC5Bs4F,EAASt4F,GAAMq4F,EAAO79F,OAAS,GAK/B89F,EAASt4F,GAAMs4F,EAASF,EAAa10C,GASvC,IAAI60C,KAEJ,KAAMv4F,EAAI,EAAG2Y,EAAK3e,KAAKsM,MAAM9L,OAAQwF,EAAI2Y,EAAI3Y,IAAO,CAEnD8Z,EAAO9f,KAAKsM,MAAOtG,GAEnB8Z,EAAK3L,EAAImqF,EAASx+E,EAAK3L,GACvB2L,EAAK3Y,EAAIm3F,EAASx+E,EAAK3Y,GACvB2Y,EAAKgE,EAAIw6E,EAASx+E,EAAKgE,GAEvBoC,GAAYpG,EAAK3L,EAAG2L,EAAK3Y,EAAG2Y,EAAKgE,EAIjC,KAAM,GAAIne,GAAI,EAAGA,EAAI,EAAGA,IAEvB,GAAKugB,EAASvgB,KAAQugB,GAAWvgB,EAAI,GAAM,GAAM,CAEhD44F,EAAoBh0F,KAAMvE,EAC1B,QAQH,IAAMA,EAAIu4F,EAAoB/9F,OAAS,EAAGwF,GAAK,EAAGA,IAAO,CAExD,GAAIw4F,GAAMD,EAAqBv4F,EAI/B,KAFAhG,KAAKsM,MAAM8hE,OAAQowB,EAAK,GAElBrsF,EAAI,EAAGC,EAAKpS,KAAKqkB,cAAc7jB,OAAQ2R,EAAIC,EAAID,IAEpDnS,KAAKqkB,cAAelS,GAAIi8D,OAAQowB,EAAK,GAQvC,GAAIC,GAAOz+F,KAAKqM,SAAS7L,OAAS69F,EAAO79F,MAEzC,OADAR,MAAKqM,SAAWgyF,EACTI,GAIR3hC,cAAe,SAAWnuC,GAEzB3uB,KAAKqM,WAEL,KAAM,GAAIrG,GAAI,EAAG8K,EAAI6d,EAAOnuB,OAAQwF,EAAI8K,EAAG9K,IAAO,CAEjD,GAAIitB,GAAQtE,EAAQ3oB,EACpBhG,MAAKqM,SAAS9B,KAAM,GAAIpJ,GAAS8xB,EAAM9yB,EAAG8yB,EAAM7yB,EAAG6yB,EAAMryB,GAAK,IAI/D,MAAOZ,OAIR0+F,yBAA0B,WAezB,QAASC,GAAmBxqF,EAAGhN,GAE9B,MAAOgN,GAAEiJ,cAAgBjW,EAAEiW,cAV5B,IAAM,GALF9Q,GAAQtM,KAAKsM,MACb9L,EAAS8L,EAAM9L,OAITwF,EAAI,EAAGA,EAAIxF,EAAQwF,IAE5BsG,EAAOtG,GAAI44F,IAAM54F,CAYlBsG,GAAM4I,KAAMypF,EAIZ,IAGIE,GAASC,EAHTpB,EAAO19F,KAAKqkB,cAAe,GAC3BgC,EAAOrmB,KAAKqkB,cAAe,EAI1Bq5E,IAAQA,EAAKl9F,SAAWA,IAASq+F,MACjCx4E,GAAQA,EAAK7lB,SAAWA,IAASs+F,KAEtC,KAAM,GAAI94F,GAAI,EAAGA,EAAIxF,EAAQwF,IAAO,CAEnC,GAAI+D,GAAKuC,EAAOtG,GAAI44F,GAEfC,IAAUA,EAAQt0F,KAAMmzF,EAAM3zF,IAC9B+0F,GAAUA,EAAQv0F,KAAM8b,EAAMtc,IAI/B80F,IAAU7+F,KAAKqkB,cAAe,GAAMw6E,GACpCC,IAAU9+F,KAAKqkB,cAAe,GAAMy6E,IAI1Czf,OAAQ,WA4HP,QAAS0f,GAAQ78F,EAAO+Q,EAAUkL,GAEjC,MAAOA,GAAUjc,EAAU,GAAK+Q,EAAa/Q,IAAc,GAAK+Q,GAIjE,QAAS+rF,GAAgBnmF,GAExB,GAAI0U,GAAO1U,EAAO1Y,EAAE09B,WAAahlB,EAAOzY,EAAEy9B,WAAahlB,EAAOjY,EAAEi9B,UAEhE,YAA6B38B,KAAxB+9F,EAAa1xE,GAEV0xE,EAAa1xE,IAIrB0xE,EAAa1xE,GAASpH,EAAQ3lB,OAAS,EACvC2lB,EAAQ5b,KAAMsO,EAAO1Y,EAAG0Y,EAAOzY,EAAGyY,EAAOjY,GAElCq+F,EAAa1xE,IAIrB,QAAS2xE,GAAerwF,GAEvB,GAAI0e,GAAO1e,EAAMjJ,EAAEi4B,WAAahvB,EAAM3H,EAAE22B,WAAahvB,EAAM1H,EAAE02B,UAE7D,YAA4B38B,KAAvBi+F,EAAY5xE,GAET4xE,EAAY5xE,IAIpB4xE,EAAY5xE,GAASnJ,EAAO5jB,OAC5B4jB,EAAO7Z,KAAMsE,EAAMw7E,UAEZ8U,EAAY5xE,IAIpB,QAAS6xE,GAAY5wF,GAEpB,GAAI+e,GAAO/e,EAAGrO,EAAE09B,WAAarvB,EAAGpO,EAAEy9B,UAElC,YAAyB38B,KAApBm+F,EAAS9xE,GAEN8xE,EAAS9xE,IAIjB8xE,EAAS9xE,GAASnH,EAAI5lB,OAAS,EAC/B4lB,EAAI7b,KAAMiE,EAAGrO,EAAGqO,EAAGpO,GAEZi/F,EAAS9xE,IA/KjB,GAAIzoB,IACH06E,UACC77E,QAAS,IACT9B,KAAM,WACN49E,UAAW,mBAUb,IAJA36E,EAAK1C,KAAOpC,KAAKoC,KACjB0C,EAAKjD,KAAO7B,KAAK6B,KACE,KAAd7B,KAAKuC,OAAcuC,EAAKvC,KAAOvC,KAAKuC,UAEhBrB,KAApBlB,KAAKyX,WAA2B,CAEpC,GAAIA,GAAazX,KAAKyX,UAEtB,KAAM,GAAIiyC,KAAOjyC,OAEWvW,KAAtBuW,EAAYiyC,KAAsB5kD,EAAM4kD,GAAQjyC,EAAYiyC,GAIlE,OAAO5kD,GAMR,IAAM,GAFFuH,MAEMrG,EAAI,EAAGA,EAAIhG,KAAKqM,SAAS7L,OAAQwF,IAAO,CAEjD,GAAIsI,GAAStO,KAAKqM,SAAUrG,EAC5BqG,GAAS9B,KAAM+D,EAAOnO,EAAGmO,EAAOlO,EAAGkO,EAAO1N,GAY3C,IAAM,GARF0L,MACA6Z,KACA84E,KACA76E,KACA+6E,KACA/4E,KACAi5E,KAEMr5F,EAAI,EAAGA,EAAIhG,KAAKsM,MAAM9L,OAAQwF,IAAO,CAE9C,GAAI8Z,GAAO9f,KAAKsM,MAAOtG,GAInBs5F,MAAmDp+F,KAAjClB,KAAKqkB,cAAe,GAAKre,GAC3Cu5F,EAAgBz/E,EAAKjH,OAAOrY,SAAW,EACvCg/F,EAAsB1/E,EAAKkE,cAAcxjB,OAAS,EAClDi/F,EAAgC,IAAjB3/E,EAAKjR,MAAMjJ,GAA4B,IAAjBka,EAAKjR,MAAM3H,GAA4B,IAAjB4Y,EAAKjR,MAAM1H,EACtEu4F,EAAqB5/E,EAAKvJ,aAAa/V,OAAS,EAEhDm/F,EAAW,CAef,IAbAA,EAAWZ,EAAQY,EAAU,EAAG,GAChCA,EAAWZ,EAAQY,EAAU,GAXX,GAYlBA,EAAWZ,EAAQY,EAAU,GAXb,GAYhBA,EAAWZ,EAAQY,EAAU,EAAGL,GAChCK,EAAWZ,EAAQY,EAAU,EAAGJ,GAChCI,EAAWZ,EAAQY,EAAU,EAAGH,GAChCG,EAAWZ,EAAQY,EAAU,EAAGF,GAChCE,EAAWZ,EAAQY,EAAU,EAAGD,GAEhCpzF,EAAM/B,KAAMo1F,GACZrzF,EAAM/B,KAAMuV,EAAK3L,EAAG2L,EAAK3Y,EAAG2Y,EAAKgE,GACjCxX,EAAM/B,KAAMuV,EAAK1C,eAEZkiF,EAAkB,CAEtB,GAAIj7E,GAAgBrkB,KAAKqkB,cAAe,GAAKre,EAE7CsG,GAAM/B,KACL60F,EAAY/6E,EAAe,IAC3B+6E,EAAY/6E,EAAe,IAC3B+6E,EAAY/6E,EAAe,KAW7B,GANKk7E,GAEJjzF,EAAM/B,KAAMy0F,EAAgBl/E,EAAKjH,SAI7B2mF,EAAsB,CAE1B,GAAIx7E,GAAgBlE,EAAKkE,aAEzB1X,GAAM/B,KACLy0F,EAAgBh7E,EAAe,IAC/Bg7E,EAAgBh7E,EAAe,IAC/Bg7E,EAAgBh7E,EAAe,KAWjC,GANKy7E,GAEJnzF,EAAM/B,KAAM20F,EAAep/E,EAAKjR,QAI5B6wF,EAAqB,CAEzB,GAAInpF,GAAeuJ,EAAKvJ,YAExBjK,GAAM/B,KACL20F,EAAe3oF,EAAc,IAC7B2oF,EAAe3oF,EAAc,IAC7B2oF,EAAe3oF,EAAc,MAwEhC,MARAzR,GAAKA,QAELA,EAAKA,KAAKuH,SAAWA,EACrBvH,EAAKA,KAAKqhB,QAAUA,EACf/B,EAAO5jB,OAAS,IAAIsE,EAAKA,KAAKsf,OAASA,GACvCgC,EAAI5lB,OAAS,IAAIsE,EAAKA,KAAKshB,KAAQA,IACxCthB,EAAKA,KAAKwH,MAAQA,EAEXxH,GAIR2W,MAAO,WA0BN,OAAO,GAAIyI,KAAW9S,KAAMpR,OAI7BoR,KAAM,SAAWy8D,GAEhB,GAAI7nE,GAAG2Y,EAAIxM,EAAGC,EAAI4K,EAAGC,CAIrBjd,MAAKqM,YACLrM,KAAKokB,UACLpkB,KAAKsM,SACLtM,KAAKqkB,mBACLrkB,KAAK6X,gBACL7X,KAAKskB,gBACLtkB,KAAKukB,eACLvkB,KAAKwkB,eACLxkB,KAAKykB,iBACLzkB,KAAK0kB,YAAc,KACnB1kB,KAAK2kB,eAAiB,KAItB3kB,KAAKuC,KAAOsrE,EAAOtrE,IAInB,IAAI8J,GAAWwhE,EAAOxhE,QAEtB,KAAMrG,EAAI,EAAG2Y,EAAKtS,EAAS7L,OAAQwF,EAAI2Y,EAAI3Y,IAE1ChG,KAAKqM,SAAS9B,KAAM8B,EAAUrG,GAAIyV,QAMnC,IAAI2I,GAASypD,EAAOzpD,MAEpB,KAAMpe,EAAI,EAAG2Y,EAAKyF,EAAO5jB,OAAQwF,EAAI2Y,EAAI3Y,IAExChG,KAAKokB,OAAO7Z,KAAM6Z,EAAQpe,GAAIyV,QAM/B,IAAInP,GAAQuhE,EAAOvhE,KAEnB,KAAMtG,EAAI,EAAG2Y,EAAKrS,EAAM9L,OAAQwF,EAAI2Y,EAAI3Y,IAEvChG,KAAKsM,MAAM/B,KAAM+B,EAAOtG,GAAIyV,QAM7B,KAAMzV,EAAI,EAAG2Y,EAAKkvD,EAAOxpD,cAAc7jB,OAAQwF,EAAI2Y,EAAI3Y,IAAO,CAE7D,GAAIqe,GAAgBwpD,EAAOxpD,cAAere,EAQ1C,SANiC9E,KAA5BlB,KAAKqkB,cAAere,KAExBhG,KAAKqkB,cAAere,OAIfmM,EAAI,EAAGC,EAAKiS,EAAc7jB,OAAQ2R,EAAIC,EAAID,IAAO,CAEtD,GAAIiU,GAAM/B,EAAelS,GAAKytF,IAE9B,KAAM5iF,EAAI,EAAGC,EAAKmJ,EAAI5lB,OAAQwc,EAAIC,EAAID,IAAO,CAE5C,GAAIxO,GAAK4X,EAAKpJ,EAEd4iF,GAAQr1F,KAAMiE,EAAGiN,SAIlBzb,KAAKqkB,cAAere,GAAIuE,KAAMq1F,IAQhC,GAAI/nF,GAAeg2D,EAAOh2D,YAE1B,KAAM7R,EAAI,EAAG2Y,EAAK9G,EAAarX,OAAQwF,EAAI2Y,EAAI3Y,IAAO,CAErD,GAAI65F,KAKJ,IAJAA,EAAYt9F,KAAOsV,EAAc7R,GAAIzD,SAIDrB,KAA/B2W,EAAc7R,GAAIqG,SAItB,IAFAwzF,EAAYxzF,YAEN8F,EAAI,EAAGC,EAAKyF,EAAc7R,GAAIqG,SAAS7L,OAAQ2R,EAAIC,EAAID,IAE5D0tF,EAAYxzF,SAAS9B,KAAMsN,EAAc7R,GAAIqG,SAAU8F,GAAIsJ,QAQ7D,QAAmCva,KAA9B2W,EAAc7R,GAAImgB,QAItB,IAFA05E,EAAY15E,WAENhU,EAAI,EAAGC,EAAKyF,EAAc7R,GAAImgB,QAAQ3lB,OAAQ2R,EAAIC,EAAID,IAE3D0tF,EAAY15E,QAAQ5b,KAAMsN,EAAc7R,GAAImgB,QAAShU,GAAIsJ,QAM3Dzb,MAAK6X,aAAatN,KAAMs1F,GAMzB,GAAIv7E,GAAeupD,EAAOvpD,YAE1B,KAAMte,EAAI,EAAG2Y,EAAK2F,EAAa9jB,OAAQwF,EAAI2Y,EAAI3Y,IAAO,CAErD,GAAI85F,KAIJ,QAAyC5+F,KAApCojB,EAActe,GAAIge,cAItB,IAFA87E,EAAY97E,iBAEN7R,EAAI,EAAGC,EAAKkS,EAActe,GAAIge,cAAcxjB,OAAQ2R,EAAIC,EAAID,IAAO,CAExE,GAAI4tF,GAAkBz7E,EAActe,GAAIge,cAAe7R,GACnD6tF,IAEJA,GAAiB7rF,EAAI4rF,EAAgB5rF,EAAEsH,QACvCukF,EAAiB74F,EAAI44F,EAAgB54F,EAAEsU,QACvCukF,EAAiBl8E,EAAIi8E,EAAgBj8E,EAAErI,QAEvCqkF,EAAY97E,cAAczZ,KAAMy1F,GAQlC,OAAuC9+F,KAAlCojB,EAActe,GAAI+2F,YAItB,IAFA+C,EAAY/C,eAEN5qF,EAAI,EAAGC,EAAKkS,EAActe,GAAI+2F,YAAYv8F,OAAQ2R,EAAIC,EAAID,IAE/D2tF,EAAY/C,YAAYxyF,KAAM+Z,EAActe,GAAI+2F,YAAa5qF,GAAIsJ,QAMnEzb,MAAKskB,aAAa/Z,KAAMu1F,GAMzB,GAAIv7E,GAAcspD,EAAOtpD,WAEzB,KAAMve,EAAI,EAAG2Y,EAAK4F,EAAY/jB,OAAQwF,EAAI2Y,EAAI3Y,IAE7ChG,KAAKukB,YAAYha,KAAMga,EAAave,GAAIyV,QAMzC,IAAI+I,GAAcqpD,EAAOrpD,WAEzB,KAAMxe,EAAI,EAAG2Y,EAAK6F,EAAYhkB,OAAQwF,EAAI2Y,EAAI3Y,IAE7ChG,KAAKwkB,YAAYja,KAAMia,EAAaxe,GAAIyV,QAMzC,IAAIgJ,GAAgBopD,EAAOppD,aAE3B,KAAMze,EAAI,EAAG2Y,EAAK8F,EAAcjkB,OAAQwF,EAAI2Y,EAAI3Y,IAE/ChG,KAAKykB,cAAcla,KAAMka,EAAeze,GAMzC,IAAI0e,GAAcmpD,EAAOnpD,WAEJ,QAAhBA,IAEJ1kB,KAAK0kB,YAAcA,EAAYjJ,QAMhC,IAAIkJ,GAAiBkpD,EAAOlpD,cAkB5B,OAhBwB,QAAnBA,IAEJ3kB,KAAK2kB,eAAiBA,EAAelJ,SAMtCzb,KAAK4kB,mBAAqBipD,EAAOjpD,mBACjC5kB,KAAK6kB,mBAAqBgpD,EAAOhpD,mBACjC7kB,KAAK8kB,cAAgB+oD,EAAO/oD,cAC5B9kB,KAAK+kB,kBAAoB8oD,EAAO9oD,kBAChC/kB,KAAKglB,iBAAmB6oD,EAAO7oD,iBAC/BhlB,KAAKilB,wBAA0B4oD,EAAO5oD,wBACtCjlB,KAAKklB,iBAAmB2oD,EAAO3oD,iBAExBllB,MAIR0tB,QAAS,WAER1tB,KAAKquE,eAAiBxsE,KAAM,eAmC9BG,OAAOC,eAAgBkjB,GAAgBg8C,UAAW,eAEjDt5D,IAAK,SAAW3F,IAEA,IAAVA,GAAiBlC,KAAK2D,aAM7B3B,OAAO2rE,OAAQxoD,GAAgBg8C,WAE9B8+B,mBAAmB,EAEnBC,SAAU,SAAW36F,GAEpB,GAAKsX,MAAMC,QAASvX,GAEnB,KAAM,IAAI+f,WAAW,wDAItBtlB,MAAKwhB,UAAkBtgB,KAAVqE,EAAsBA,EAAM/E,OAASR,KAAKolB,SAAW,EAClEplB,KAAKuF,MAAQA,GAIdqmE,WAAY,SAAW1pE,GAItB,MAFAlC,MAAKugB,QAAUre,EAERlC,MAIRoR,KAAM,SAAWy8D,GAShB,MAPA7tE,MAAKuF,MAAQ,GAAIsoE,GAAOtoE,MAAMyyD,YAAa6V,EAAOtoE,OAClDvF,KAAKolB,SAAWyoD,EAAOzoD,SACvBplB,KAAKwhB,MAAQqsD,EAAOrsD,MACpBxhB,KAAKqlB,WAAawoD,EAAOxoD,WAEzBrlB,KAAKugB,QAAUstD,EAAOttD,QAEfvgB,MAIRmgG,OAAQ,SAAWr2C,EAAQ1pC,EAAW2pC,GAErCD,GAAU9pD,KAAKolB,SACf2kC,GAAU3pC,EAAUgF,QAEpB,KAAM,GAAIpf,GAAI,EAAG8K,EAAI9Q,KAAKolB,SAAUpf,EAAI8K,EAAG9K,IAE1ChG,KAAKuF,MAAOukD,EAAS9jD,GAAMoa,EAAU7a,MAAOwkD,EAAS/jD,EAItD,OAAOhG,OAIRogG,UAAW,SAAW76F,GAIrB,MAFAvF,MAAKuF,MAAMsC,IAAKtC,GAETvF,MAIRqgG,gBAAiB,SAAWj8E,GAI3B,IAAM,GAFF7e,GAAQvF,KAAKuF,MAAOvC,EAAS,EAEvBgD,EAAI,EAAG8K,EAAIsT,EAAO5jB,OAAQwF,EAAI8K,EAAG9K,IAAO,CAEjD,GAAI6I,GAAQuV,EAAQpe,OAEL9E,KAAV2N,IAEJpO,QAAQqa,KAAM,8DAA+D9U,GAC7E6I,EAAQ,GAAInD,IAIbnG,EAAOvC,KAAc6L,EAAMjJ,EAC3BL,EAAOvC,KAAc6L,EAAM3H,EAC3B3B,EAAOvC,KAAc6L,EAAM1H,EAI5B,MAAOnH,OAIRsgG,iBAAkB,SAAWp6E,GAI5B,IAAM,GAFF3gB,GAAQvF,KAAKuF,MAAOvC,EAAS,EAEvBgD,EAAI,EAAG8K,EAAIoV,EAAQ1lB,OAAQwF,EAAI8K,EAAG9K,IAAO,CAElD,GAAIygB,GAAQP,EAASlgB,EAErBT,GAAOvC,KAAcyjB,EAAMtS,EAC3B5O,EAAOvC,KAAcyjB,EAAMtf,EAC3B5B,EAAOvC,KAAcyjB,EAAM3C,EAI5B,MAAO9jB,OAIRugG,kBAAmB,SAAWC,GAI7B,IAAM,GAFFj7F,GAAQvF,KAAKuF,MAAOvC,EAAS,EAEvBgD,EAAI,EAAG8K,EAAI0vF,EAAQhgG,OAAQwF,EAAI8K,EAAG9K,IAAO,CAElD,GAAIoiB,GAASo4E,EAASx6F,OAEN9E,KAAXknB,IAEJ3nB,QAAQqa,KAAM,iEAAkE9U,GAChFoiB,EAAS,GAAIloB,IAIdqF,EAAOvC,KAAcolB,EAAOjoB,EAC5BoF,EAAOvC,KAAcolB,EAAOhoB,EAI7B,MAAOJ,OAIRygG,kBAAmB,SAAWD,GAI7B,IAAM,GAFFj7F,GAAQvF,KAAKuF,MAAOvC,EAAS,EAEvBgD,EAAI,EAAG8K,EAAI0vF,EAAQhgG,OAAQwF,EAAI8K,EAAG9K,IAAO,CAElD,GAAIoiB,GAASo4E,EAASx6F,OAEN9E,KAAXknB,IAEJ3nB,QAAQqa,KAAM,iEAAkE9U,GAChFoiB,EAAS,GAAIjnB,IAIdoE,EAAOvC,KAAcolB,EAAOjoB,EAC5BoF,EAAOvC,KAAcolB,EAAOhoB,EAC5BmF,EAAOvC,KAAcolB,EAAOxnB,EAI7B,MAAOZ,OAIR0gG,kBAAmB,SAAWF,GAI7B,IAAM,GAFFj7F,GAAQvF,KAAKuF,MAAOvC,EAAS,EAEvBgD,EAAI,EAAG8K,EAAI0vF,EAAQhgG,OAAQwF,EAAI8K,EAAG9K,IAAO,CAElD,GAAIoiB,GAASo4E,EAASx6F,OAEN9E,KAAXknB,IAEJ3nB,QAAQqa,KAAM,iEAAkE9U,GAChFoiB,EAAS,GAAIvkB,IAId0B,EAAOvC,KAAcolB,EAAOjoB,EAC5BoF,EAAOvC,KAAcolB,EAAOhoB,EAC5BmF,EAAOvC,KAAcolB,EAAOxnB,EAC5B2E,EAAOvC,KAAcolB,EAAOvnB,EAI7B,MAAOb,OAIR6H,IAAK,SAAW3F,EAAOc,GAMtB,WAJgB9B,KAAX8B,IAAuBA,EAAS,GAErChD,KAAKuF,MAAMsC,IAAK3F,EAAOc,GAEhBhD,MAIRgqD,KAAM,SAAWvjC,GAEhB,MAAOzmB,MAAKuF,MAAOkhB,EAAQzmB,KAAKolB,WAIjCirD,KAAM,SAAW5pD,EAAOtmB,GAIvB,MAFAH,MAAKuF,MAAOkhB,EAAQzmB,KAAKolB,UAAajlB,EAE/BH,MAIR6xE,KAAM,SAAWprD,GAEhB,MAAOzmB,MAAKuF,MAAOkhB,EAAQzmB,KAAKolB,SAAW,IAI5CkrD,KAAM,SAAW7pD,EAAOrmB,GAIvB,MAFAJ,MAAKuF,MAAOkhB,EAAQzmB,KAAKolB,SAAW,GAAMhlB,EAEnCJ,MAIRw3E,KAAM,SAAW/wD,GAEhB,MAAOzmB,MAAKuF,MAAOkhB,EAAQzmB,KAAKolB,SAAW,IAI5Cg4D,KAAM,SAAW32D,EAAO7lB,GAIvB,MAFAZ,MAAKuF,MAAOkhB,EAAQzmB,KAAKolB,SAAW,GAAMxkB,EAEnCZ,MAIRmgF,KAAM,SAAW15D,GAEhB,MAAOzmB,MAAKuF,MAAOkhB,EAAQzmB,KAAKolB,SAAW,IAI5C46D,KAAM,SAAWv5D,EAAO5lB,GAIvB,MAFAb,MAAKuF,MAAOkhB,EAAQzmB,KAAKolB,SAAW,GAAMvkB,EAEnCb,MAIR2gG,MAAO,SAAWl6E,EAAOtmB,EAAGC,GAO3B,MALAqmB,IAASzmB,KAAKolB,SAEdplB,KAAKuF,MAAOkhB,EAAQ,GAAMtmB,EAC1BH,KAAKuF,MAAOkhB,EAAQ,GAAMrmB,EAEnBJ,MAIRy3E,OAAQ,SAAWhxD,EAAOtmB,EAAGC,EAAGQ,GAQ/B,MANA6lB,IAASzmB,KAAKolB,SAEdplB,KAAKuF,MAAOkhB,EAAQ,GAAMtmB,EAC1BH,KAAKuF,MAAOkhB,EAAQ,GAAMrmB,EAC1BJ,KAAKuF,MAAOkhB,EAAQ,GAAM7lB,EAEnBZ,MAIR4gG,QAAS,SAAWn6E,EAAOtmB,EAAGC,EAAGQ,EAAGC,GASnC,MAPA4lB,IAASzmB,KAAKolB,SAEdplB,KAAKuF,MAAOkhB,EAAQ,GAAMtmB,EAC1BH,KAAKuF,MAAOkhB,EAAQ,GAAMrmB,EAC1BJ,KAAKuF,MAAOkhB,EAAQ,GAAM7lB,EAC1BZ,KAAKuF,MAAOkhB,EAAQ,GAAM5lB,EAEnBb,MAIR6gG,SAAU,SAAW36C,GAIpB,MAFAlmD,MAAK0gB,iBAAmBwlC,EAEjBlmD,MAIRyb,MAAO,WAEN,MAAO,IAAIzb,MAAKg4D,YAAah4D,KAAKuF,MAAOvF,KAAKolB,UAAWhU,KAAMpR,SAcjEulB,GAAoB47C,UAAYn/D,OAAOo+E,OAAQj7D,GAAgBg8C,WAC/D57C,GAAoB47C,UAAUnJ,YAAczyC,GAS5CC,GAAqB27C,UAAYn/D,OAAOo+E,OAAQj7D,GAAgBg8C,WAChE37C,GAAqB27C,UAAUnJ,YAAcxyC,GAS7CC,GAA4B07C,UAAYn/D,OAAOo+E,OAAQj7D,GAAgBg8C,WACvE17C,GAA4B07C,UAAUnJ,YAAcvyC,GASpDE,GAAqBw7C,UAAYn/D,OAAOo+E,OAAQj7D,GAAgBg8C,WAChEx7C,GAAqBw7C,UAAUnJ,YAAcryC,GAS7CC,GAAsBu7C,UAAYn/D,OAAOo+E,OAAQj7D,GAAgBg8C,WACjEv7C,GAAsBu7C,UAAUnJ,YAAcpyC,GAS9CC,GAAqBs7C,UAAYn/D,OAAOo+E,OAAQj7D,GAAgBg8C,WAChEt7C,GAAqBs7C,UAAUnJ,YAAcnyC,GAS7CC,GAAsBq7C,UAAYn/D,OAAOo+E,OAAQj7D,GAAgBg8C,WACjEr7C,GAAsBq7C,UAAUnJ,YAAclyC,GAS9CC,GAAuBo7C,UAAYn/D,OAAOo+E,OAAQj7D,GAAgBg8C,WAClEp7C,GAAuBo7C,UAAUnJ,YAAcjyC,GAS/CC,GAAuBm7C,UAAYn/D,OAAOo+E,OAAQj7D,GAAgBg8C,WAClEn7C,GAAuBm7C,UAAUnJ,YAAchyC,GAqC/ChkB,OAAO2rE,OAAQ1nD,GAAek7C,WAE7B2/B,cAAe,SAAW7mF,GAQzB,IAAM,GANFiD,GACAH,KACAK,MAAgBlc,GAEhBoL,EAAQ2N,EAAS3N,MAEXtG,EAAI,EAAGA,EAAIsG,EAAM9L,OAAQwF,IAAO,CAEzC,GAAI8Z,GAAOxT,EAAOtG,EAIb8Z,GAAK1C,gBAAkBA,IAE3BA,EAAgB0C,EAAK1C,kBAENlc,KAAVgc,IAEJA,EAAMsE,MAAc,EAAJxb,EAAUkX,EAAMyJ,MAChC5J,EAAOxS,KAAM2S,IAIdA,GACCyJ,MAAW,EAAJ3gB,EACPoX,cAAeA,QAOHlc,KAAVgc,IAEJA,EAAMsE,MAAc,EAAJxb,EAAUkX,EAAMyJ,MAChC5J,EAAOxS,KAAM2S,IAIdld,KAAK+c,OAASA,GAIfgkF,aAAc,SAAW9mF,GAExB,GAYI+mF,GAZA10F,EAAQ2N,EAAS3N,MACjBD,EAAW4N,EAAS5N,SACpBgY,EAAgBpK,EAASoK,cAEzBi7E,EAAkBj7E,EAAe,IAAOA,EAAe,GAAI7jB,OAAS,EACpEygG,EAAmB58E,EAAe,IAAOA,EAAe,GAAI7jB,OAAS,EAIrEqX,EAAeoC,EAASpC,aACxBqpF,EAAqBrpF,EAAarX,MAItC,IAAK0gG,EAAqB,EAAI,CAE7BF,IAEA,KAAM,GAAIh7F,GAAI,EAAGA,EAAIk7F,EAAoBl7F,IAExCg7F,EAAsBh7F,KAIvBhG,MAAK6X,aAAa5E,SAAW+tF,EAI9B,GAGIG,GAHA78E,EAAerK,EAASqK,aACxB88E,EAAqB98E,EAAa9jB,MAItC,IAAK4gG,EAAqB,EAAI,CAE7BD,IAEA,KAAM,GAAIn7F,GAAI,EAAGA,EAAIo7F,EAAoBp7F,IAExCm7F,EAAoBn7F,KAIrBhG,MAAK6X,aAAagB,OAASsoF,EAc5B,IAAM,GARF38E,GAAcvK,EAASuK,YACvBD,EAActK,EAASsK,YAEvB88E,EAAiB78E,EAAYhkB,SAAW6L,EAAS7L,OACjD8gG,EAAiB/8E,EAAY/jB,SAAW6L,EAAS7L,OAI3CwF,EAAI,EAAGA,EAAIsG,EAAM9L,OAAQwF,IAAO,CAEzC,GAAI8Z,GAAOxT,EAAOtG,EAElBhG,MAAKqM,SAAS9B,KAAM8B,EAAUyT,EAAK3L,GAAK9H,EAAUyT,EAAK3Y,GAAKkF,EAAUyT,EAAKgE,GAE3E,IAAIE,GAAgBlE,EAAKkE,aAEzB,IAA8B,IAAzBA,EAAcxjB,OAElBR,KAAKmmB,QAAQ5b,KAAMyZ,EAAe,GAAKA,EAAe,GAAKA,EAAe,QAEpE,CAEN,GAAInL,GAASiH,EAAKjH,MAElB7Y,MAAKmmB,QAAQ5b,KAAMsO,EAAQA,EAAQA,GAIpC,GAAItC,GAAeuJ,EAAKvJ,YAExB,IAA6B,IAAxBA,EAAa/V,OAEjBR,KAAKokB,OAAO7Z,KAAMgM,EAAc,GAAKA,EAAc,GAAKA,EAAc,QAEhE,CAEN,GAAI1H,GAAQiR,EAAKjR,KAEjB7O,MAAKokB,OAAO7Z,KAAMsE,EAAOA,EAAOA,GAIjC,IAAyB,IAApBywF,EAA2B,CAE/B,GAAIiC,GAAYl9E,EAAe,GAAKre,OAEjB9E,KAAdqgG,EAEJvhG,KAAKomB,IAAI7b,KAAMg3F,EAAW,GAAKA,EAAW,GAAKA,EAAW,KAI1D9gG,QAAQqa,KAAM,2DAA4D9U,GAE1EhG,KAAKomB,IAAI7b,KAAM,GAAIrK,GAAW,GAAIA,GAAW,GAAIA,KAMnD,IAA0B,IAArB+gG,EAA4B,CAEhC,GAAIM,GAAYl9E,EAAe,GAAKre,OAEjB9E,KAAdqgG,EAEJvhG,KAAKqmB,KAAK9b,KAAMg3F,EAAW,GAAKA,EAAW,GAAKA,EAAW,KAI3D9gG,QAAQqa,KAAM,4DAA6D9U,GAE3EhG,KAAKqmB,KAAK9b,KAAM,GAAIrK,GAAW,GAAIA,GAAW,GAAIA,KAQpD,IAAM,GAAIiS,GAAI,EAAGA,EAAI+uF,EAAoB/uF,IAAO,CAE/C,GAAI0tF,GAAchoF,EAAc1F,GAAI9F,QAEpC20F,GAAsB7uF,GAAI5H,KAAMs1F,EAAa//E,EAAK3L,GAAK0rF,EAAa//E,EAAK3Y,GAAK04F,EAAa//E,EAAKgE,IAIjG,IAAM,GAAI3R,GAAI,EAAGA,EAAIivF,EAAoBjvF,IAAO,CAE/C,GAAI2tF,GAAcx7E,EAAcnS,GAAI6R,cAAehe,EAEnDm7F,GAAoBhvF,GAAI5H,KAAMu1F,EAAY3rF,EAAG2rF,EAAY34F,EAAG24F,EAAYh8E,GAMpEu9E,GAEJrhG,KAAKwkB,YAAYja,KAAMia,EAAa1E,EAAK3L,GAAKqQ,EAAa1E,EAAK3Y,GAAKqd,EAAa1E,EAAKgE,IAInFw9E,GAEJthG,KAAKukB,YAAYha,KAAMga,EAAazE,EAAK3L,GAAKoQ,EAAazE,EAAK3Y,GAAKod,EAAazE,EAAKgE,IAczF,MARA9jB,MAAK8gG,cAAe7mF,GAEpBja,KAAK6kB,mBAAqB5K,EAAS4K,mBACnC7kB,KAAK+kB,kBAAoB9K,EAAS8K,kBAClC/kB,KAAKglB,iBAAmB/K,EAAS+K,iBACjChlB,KAAK8kB,cAAgB7K,EAAS6K,cAC9B9kB,KAAKklB,iBAAmBjL,EAASiL,iBAE1BllB,OA+BT,IAAIwmB,IAAmB,CAyBvBxkB,QAAO2rE,OAAQpnD,GAAe46C,UAAWlhE,EAAgBkhE,WAExDzmD,kBAAkB,EAElB8mF,SAAU,WAET,MAAOxhG,MAAKymB,OAIbkC,SAAU,SAAWlC,GAEf5J,MAAMC,QAAS2J,GAEnBzmB,KAAKymB,MAAQ,IAAMH,GAAUG,GAAU,MAAQX,GAAwBF,IAAyBa,EAAO,GAIvGzmB,KAAKymB,MAAQA,GAMfmC,aAAc,SAAWrmB,EAAM6d,GAE9B,MAASA,IAAaA,EAAU6/E,mBAA2B7/E,GAAaA,EAAUwB,6BAUpE,UAATrf,GAEJ9B,QAAQqa,KAAM,+EACd9a,MAAK2oB,SAAUvI,KAMhBpgB,KAAKqO,WAAY9L,GAAS6d,EAEnBpgB,OAnBNS,QAAQqa,KAAM,8EAEd9a,MAAK4oB,aAAcrmB,EAAM,GAAI4iB,IAAiB5kB,UAAW,GAAKA,UAAW,OAqB3E6mE,aAAc,SAAW7kE,GAExB,MAAOvC,MAAKqO,WAAY9L,IAIzB8pB,gBAAiB,SAAW9pB,GAI3B,aAFOvC,MAAKqO,WAAY9L,GAEjBvC,MAIRuoB,SAAU,SAAW5B,EAAOnF,EAAOpE,GAElCpd,KAAK+c,OAAOxS,MAEXoc,MAAOA,EACPnF,MAAOA,EACPpE,kBAAiClc,KAAlBkc,EAA8BA,EAAgB,KAM/DqkF,YAAa,WAEZzhG,KAAK+c,WAIN2kF,aAAc,SAAW/6E,EAAOnF,GAE/BxhB,KAAK0mB,UAAUC,MAAQA,EACvB3mB,KAAK0mB,UAAUlF,MAAQA,GAIxBy3E,YAAa,SAAW51F,GAEvB,GAAI4P,GAAWjT,KAAKqO,WAAW4E,aAEb/R,KAAb+R,IAEJ5P,EAAOk0E,uBAAwBtkE,GAC/BA,EAASF,aAAc,EAIxB,IAAI8F,GAAS7Y,KAAKqO,WAAWwK,MAE7B,QAAgB3X,KAAX2X,EAAuB,EAER,GAAIzX,IAAUuxC,gBAAiBtvC,GAErCk0E,uBAAwB1+D,GACrCA,EAAO9F,aAAc,EAgBtB,MAZ0B,QAArB/S,KAAK0kB,aAET1kB,KAAK47F,qBAIuB,OAAxB57F,KAAK2kB,gBAET3kB,KAAK6oE,wBAIC7oE,MAIRy5F,QAAS,WAIR,GAAIzC,GAAK,GAAI32F,EAEb,OAAO,UAAkB8xB,GAMxB,MAJA6kE,GAAGte,cAAevmD,GAElBnyB,KAAKi5F,YAAajC,GAEXh3F,SAMTmnE,QAAS,WAIR,GAAI6vB,GAAK,GAAI32F,EAEb,OAAO,UAAkB8xB,GAMxB,MAJA6kE,GAAGre,cAAexmD,GAElBnyB,KAAKi5F,YAAajC,GAEXh3F,SAMT05F,QAAS,WAIR,GAAI1C,GAAK,GAAI32F,EAEb,OAAO,UAAkB8xB,GAMxB,MAJA6kE,GAAGpe,cAAezmD,GAElBnyB,KAAKi5F,YAAajC,GAEXh3F,SAMTspE,UAAW,WAIV,GAAI0tB,GAAK,GAAI32F,EAEb,OAAO,UAAoBF,EAAGC,EAAGQ,GAMhC,MAJAo2F,GAAGz3E,gBAAiBpf,EAAGC,EAAGQ,GAE1BZ,KAAKi5F,YAAajC,GAEXh3F,SAMT8O,MAAO,WAIN,GAAIkoF,GAAK,GAAI32F,EAEb,OAAO,UAAgBF,EAAGC,EAAGQ,GAM5B,MAJAo2F,GAAG/d,UAAW94E,EAAGC,EAAGQ,GAEpBZ,KAAKi5F,YAAajC,GAEXh3F,SAMTyf,OAAQ,WAEP,GAAIo8E,GAAM,GAAIx5E,GAEd,OAAO,UAAiB+F,GAEvByzE,EAAIp8E,OAAQ2I,GAEZyzE,EAAI7kC,eAEJh3D,KAAKi5F,YAAa4C,EAAIx4F,YAMxBH,OAAQ,WAEPlD,KAAK47F,oBAEL,IAAI54F,GAAShD,KAAK0kB,YAAYkvE,YAAYxiB,QAI1C,OAFApxE,MAAKspE,UAAWtmE,EAAO7C,EAAG6C,EAAO5C,EAAG4C,EAAOpC,GAEpCoC,GAIR4sB,cAAe,SAAWhW,GAIzB,GAAIK,GAAWL,EAAOK,QAEtB,IAAKL,EAAO2C,UAAY3C,EAAO0C,OAAS,CAEvC,GAAI6pD,GAAY,GAAIpgD,IAAmD,EAA3B9L,EAAS5N,SAAS7L,OAAY,GACtE4jB,EAAS,GAAI2B,IAAiD,EAAzB9L,EAASmK,OAAO5jB,OAAY,EAKrE,IAHAR,KAAK4oB,aAAc,WAAYu9C,EAAUs6B,kBAAmBxmF,EAAS5N,WACrErM,KAAK4oB,aAAc,QAASxE,EAAOi8E,gBAAiBpmF,EAASmK,SAExDnK,EAASwK,eAAiBxK,EAASwK,cAAcjkB,SAAWyZ,EAAS5N,SAAS7L,OAAS,CAE3F,GAAIikB,GAAgB,GAAIsB,IAAwB9L,EAASwK,cAAcjkB,OAAQ,EAE/ER,MAAK4oB,aAAc,eAAgBnE,EAAc27E,UAAWnmF,EAASwK,gBAIrC,OAA5BxK,EAAS0K,iBAEb3kB,KAAK2kB,eAAiB1K,EAAS0K,eAAelJ,SAIjB,OAAzBxB,EAASyK,cAEb1kB,KAAK0kB,YAAczK,EAASyK,YAAYjJ,aAI9B7B,GAAOyC,QAEbpC,GAAYA,EAASW,YAEzB5a,KAAK+gG,aAAc9mF,EAMrB,OAAOja,OAIR88D,cAAe,SAAWnuC,GAIzB,IAAM,GAFF1b,MAEMjN,EAAI,EAAG8K,EAAI6d,EAAOnuB,OAAQwF,EAAI8K,EAAG9K,IAAO,CAEjD,GAAIitB,GAAQtE,EAAQ3oB,EACpBiN,GAAS1I,KAAM0oB,EAAM9yB,EAAG8yB,EAAM7yB,EAAG6yB,EAAMryB,GAAK,GAM7C,MAFAZ,MAAK4oB,aAAc,WAAY,GAAI7C,IAAwB9S,EAAU,IAE9DjT,MAIRyzB,iBAAkB,SAAW7Z,GAE5B,GAAIK,GAAWL,EAAOK,QAEtB,IAAKL,EAAOyC,OAAS,CAEpB,GAAIslF,GAAS1nF,EAAS2nF,gBAStB,KAPqC,IAAhC3nF,EAAS2K,qBAEb+8E,MAASzgG,GACT+Y,EAAS2K,oBAAqB,OAIf1jB,KAAXygG,EAEJ,MAAO3hG,MAAK+gG,aAAc9mF,EAI3B0nF,GAAO98E,mBAAqB5K,EAAS4K,mBACrC88E,EAAO58E,kBAAoB9K,EAAS8K,kBACpC48E,EAAO38E,iBAAmB/K,EAAS+K,iBACnC28E,EAAO78E,cAAgB7K,EAAS6K,cAChC68E,EAAOz8E,iBAAmBjL,EAASiL,iBAEnCjL,EAAS4K,oBAAqB,EAC9B5K,EAAS8K,mBAAoB,EAC7B9K,EAAS+K,kBAAmB,EAC5B/K,EAAS6K,eAAgB,EACzB7K,EAASiL,kBAAmB,EAE5BjL,EAAW0nF,EAIZ,GAAIvhF,EAsFJ,QApFqC,IAAhCnG,EAAS4K,qBAEbzE,EAAYpgB,KAAKqO,WAAW4E,aAET/R,KAAdkf,IAEJA,EAAUqgF,kBAAmBxmF,EAAS5N,UACtC+T,EAAUrN,aAAc,GAIzBkH,EAAS4K,oBAAqB,IAIK,IAA/B5K,EAAS8K,oBAEb3E,EAAYpgB,KAAKqO,WAAWwK,WAET3X,KAAdkf,IAEJA,EAAUqgF,kBAAmBxmF,EAASkM,SACtC/F,EAAUrN,aAAc,GAIzBkH,EAAS8K,mBAAoB,IAIK,IAA9B9K,EAAS+K,mBAEb5E,EAAYpgB,KAAKqO,WAAWQ,UAET3N,KAAdkf,IAEJA,EAAUigF,gBAAiBpmF,EAASmK,QACpChE,EAAUrN,aAAc,GAIzBkH,EAAS+K,kBAAmB,GAIxB/K,EAAS6K,gBAEb1E,EAAYpgB,KAAKqO,WAAWG,OAETtN,KAAdkf,IAEJA,EAAUmgF,kBAAmBtmF,EAASmM,KACtChG,EAAUrN,aAAc,GAIzBkH,EAAS6K,eAAgB,GAIrB7K,EAASgL,0BAEb7E,EAAYpgB,KAAKqO,WAAWwzF,iBAET3gG,KAAdkf,IAEJA,EAAUggF,UAAWnmF,EAASwK,eAC9BrE,EAAUrN,aAAc,GAIzBkH,EAASgL,yBAA0B,GAI/BhL,EAASiL,mBAEbjL,EAAS6mF,cAAelnF,EAAOK,UAC/Bja,KAAK+c,OAAS9C,EAAS8C,OAEvB9C,EAASiL,kBAAmB,GAItBllB,MAIR+gG,aAAc,SAAW9mF,GAIxB,MAFAA,GAAS2nF,kBAAmB,GAAI37E,KAAiB86E,aAAc9mF,GAExDja,KAAK8hG,mBAAoB7nF,EAAS2nF,mBAI1CE,mBAAoB,SAAW7nF,GAE9B,GAAIksD,GAAY,GAAIrgE,cAAyC,EAA3BmU,EAAS5N,SAAS7L,OAGpD,IAFAR,KAAK4oB,aAAc,WAAY,GAAIzD,IAAiBghD,EAAW,GAAIs6B,kBAAmBxmF,EAAS5N,WAE1F4N,EAASkM,QAAQ3lB,OAAS,EAAI,CAElC,GAAI2lB,GAAU,GAAIrgB,cAAwC,EAA1BmU,EAASkM,QAAQ3lB,OACjDR,MAAK4oB,aAAc,SAAU,GAAIzD,IAAiBgB,EAAS,GAAIs6E,kBAAmBxmF,EAASkM,UAI5F,GAAKlM,EAASmK,OAAO5jB,OAAS,EAAI,CAEjC,GAAI4jB,GAAS,GAAIte,cAAuC,EAAzBmU,EAASmK,OAAO5jB,OAC/CR,MAAK4oB,aAAc,QAAS,GAAIzD,IAAiBf,EAAQ,GAAIi8E,gBAAiBpmF,EAASmK,SAIxF,GAAKnK,EAASmM,IAAI5lB,OAAS,EAAI,CAE9B,GAAI4lB,GAAM,GAAItgB,cAAoC,EAAtBmU,EAASmM,IAAI5lB,OACzCR,MAAK4oB,aAAc,KAAM,GAAIzD,IAAiBiB,EAAK,GAAIm6E,kBAAmBtmF,EAASmM,MAIpF,GAAKnM,EAASoM,KAAK7lB,OAAS,EAAI,CAE/B,GAAI6lB,GAAO,GAAIvgB,cAAqC,EAAvBmU,EAASoM,KAAK7lB,OAC3CR,MAAK4oB,aAAc,MAAO,GAAIzD,IAAiBkB,EAAM,GAAIk6E,kBAAmBtmF,EAASoM,OAItF,GAAKpM,EAASiM,QAAQ1lB,OAAS,EAAI,CAElC,GAAIuhG,GAAYz7E,GAAUrM,EAASiM,SAAY,MAAQpF,YAAcvU,YACjE2Z,EAAU,GAAI67E,GAAqC,EAA1B9nF,EAASiM,QAAQ1lB,OAC9CR,MAAK2oB,SAAU,GAAIxD,IAAiBe,EAAS,GAAIo6E,iBAAkBrmF,EAASiM,UAM7ElmB,KAAK+c,OAAS9C,EAAS8C,MAIvB,KAAM,GAAIxa,KAAQ0X,GAASpC,aAAe,CAKzC,IAAM,GAHFtS,MACAsS,EAAeoC,EAASpC,aAActV,GAEhCyD,EAAI,EAAG8K,EAAI+G,EAAarX,OAAQwF,EAAI8K,EAAG9K,IAAO,CAEvD,GAAI65F,GAAchoF,EAAc7R,GAE5Boa,EAAY,GAAI2F,IAA6C,EAArB85E,EAAYr/F,OAAY,EAEpE+E,GAAMgF,KAAM6V,EAAUqgF,kBAAmBZ,IAI1C7/F,KAAK2a,gBAAiBpY,GAASgD,EAMhC,GAAK0U,EAASuK,YAAYhkB,OAAS,EAAI,CAEtC,GAAIgkB,GAAc,GAAIuB,IAAsD,EAA9B9L,EAASuK,YAAYhkB,OAAY,EAC/ER,MAAK4oB,aAAc,YAAapE,EAAYk8E,kBAAmBzmF,EAASuK,cAIzE,GAAKvK,EAASsK,YAAY/jB,OAAS,EAAI,CAEtC,GAAI+jB,GAAc,GAAIwB,IAAsD,EAA9B9L,EAASsK,YAAY/jB,OAAY,EAC/ER,MAAK4oB,aAAc,aAAcrE,EAAYm8E,kBAAmBzmF,EAASsK,cAkB1E,MAZiC,QAA5BtK,EAAS0K,iBAEb3kB,KAAK2kB,eAAiB1K,EAAS0K,eAAelJ,SAIjB,OAAzBxB,EAASyK,cAEb1kB,KAAK0kB,YAAczK,EAASyK,YAAYjJ,SAIlCzb,MAIR47F,mBAAoB,WAEO,OAArB57F,KAAK0kB,cAET1kB,KAAK0kB,YAAc,GAAIjM,IAIxB,IAAIxF,GAAWjT,KAAKqO,WAAW4E,aAEb/R,KAAb+R,EAEJjT,KAAK0kB,YAAY6wE,uBAAwBtiF,GAIzCjT,KAAK0kB,YAAY8uE,aAIbwO,MAAOhiG,KAAK0kB,YAAY7Y,IAAI1L,IAAO6hG,MAAOhiG,KAAK0kB,YAAY7Y,IAAIzL,IAAO4hG,MAAOhiG,KAAK0kB,YAAY7Y,IAAIjL,KAEtGH,QAAQC,MAAO,oIAAqIV,OAMtJ6oE,sBAAuB,WAEtB,GAAID,GAAM,GAAInwD,IACV2P,EAAS,GAAIjnB,EAEjB,OAAO,YAEuB,OAAxBnB,KAAK2kB,iBAET3kB,KAAK2kB,eAAiB,GAAIjM,IAI3B,IAAIzF,GAAWjT,KAAKqO,WAAW4E,QAE/B,IAAKA,EAAW;OAEf,GAAI/P,GAASlD,KAAK2kB,eAAezhB,MAEjC0lE,GAAI2sB,uBAAwBtiF,GAC5B21D,EAAIgrB,UAAW1wF,EAOf,KAAM,GAFF6yF,GAAc,EAER/vF,EAAI,EAAG2Y,EAAK1L,EAASuO,MAAOxb,EAAI2Y,EAAI3Y,IAE7CoiB,EAAOjoB,EAAI8S,EAAS+2C,KAAMhkD,GAC1BoiB,EAAOhoB,EAAI6S,EAAS4+D,KAAM7rE,GAC1BoiB,EAAOxnB,EAAIqS,EAASukE,KAAMxxE,GAC1B+vF,EAActtE,KAAK3c,IAAKiqF,EAAa7yF,EAAOsuE,kBAAmBppD,GAIhEpoB,MAAK2kB,eAAehM,OAAS8P,KAAK81B,KAAMw3C,GAEnCiM,MAAOhiG,KAAK2kB,eAAehM,SAE/BlY,QAAQC,MAAO,+HAAgIV,WAUnJwzD,mBAAoB,aAMpB/G,qBAAsB,WAErB,GAAIhmC,GAAQzmB,KAAKymB,MACbpY,EAAarO,KAAKqO,WAClB0O,EAAS/c,KAAK+c,MAElB,IAAK1O,EAAW4E,SAAW,CAE1B,GAAIkzD,GAAY93D,EAAW4E,SAAS1N,KAEpC,QAA2BrE,KAAtBmN,EAAWwK,OAEf7Y,KAAK4oB,aAAc,SAAU,GAAIzD,IAAiB,GAAIrf,cAAcqgE,EAAU3lE,QAAU,QAQxF,KAAM,GAFF+E,GAAQ8I,EAAWwK,OAAOtT,MAEpBS,EAAI,EAAG2Y,EAAKpZ,EAAM/E,OAAQwF,EAAI2Y,EAAI3Y,IAE3CT,EAAOS,GAAM,CAMf,IAEIq2F,GAAIC,EAAIC,EAFRp2E,EAAU9X,EAAWwK,OAAOtT,MAG5B08F,EAAK,GAAI9gG,GAAW+gG,EAAK,GAAI/gG,GAAWghG,EAAK,GAAIhhG,GACjD+6F,EAAK,GAAI/6F,GAAWg7F,EAAK,GAAIh7F,EAIjC,IAAKslB,EAAQ,CAEZ,GAAIP,GAAUO,EAAMlhB,KAEG,KAAlBwX,EAAOvc,QAEXR,KAAKuoB,SAAU,EAAGrC,EAAQ1lB,OAI3B,KAAM,GAAI2R,GAAI,EAAGC,EAAK2K,EAAOvc,OAAQ2R,EAAIC,IAAOD,EAO/C,IAAM,GALF+K,GAAQH,EAAQ5K,GAEhBwU,EAAQzJ,EAAMyJ,MACdnF,EAAQtE,EAAMsE,MAERxb,EAAI2gB,EAAOhI,EAAKgI,EAAQnF,EAAOxb,EAAI2Y,EAAI3Y,GAAK,EAErDq2F,EAAwB,EAAnBn2E,EAASlgB,EAAI,GAClBs2F,EAAwB,EAAnBp2E,EAASlgB,EAAI,GAClBu2F,EAAwB,EAAnBr2E,EAASlgB,EAAI,GAElBi8F,EAAGrxD,UAAWu1B,EAAWk2B,GACzB6F,EAAGtxD,UAAWu1B,EAAWm2B,GACzB6F,EAAGvxD,UAAWu1B,EAAWo2B,GAEzBL,EAAGxxC,WAAYy3C,EAAID,GACnB/F,EAAGzxC,WAAYu3C,EAAIC,GACnBhG,EAAGne,MAAOoe,GAEVh2E,EAASk2E,IAAQH,EAAG/7F,EACpBgmB,EAASk2E,EAAK,IAAOH,EAAG97F,EACxB+lB,EAASk2E,EAAK,IAAOH,EAAGt7F,EAExBulB,EAASm2E,IAAQJ,EAAG/7F,EACpBgmB,EAASm2E,EAAK,IAAOJ,EAAG97F,EACxB+lB,EAASm2E,EAAK,IAAOJ,EAAGt7F,EAExBulB,EAASo2E,IAAQL,EAAG/7F,EACpBgmB,EAASo2E,EAAK,IAAOL,EAAG97F,EACxB+lB,EAASo2E,EAAK,IAAOL,EAAGt7F,MAU1B,KAAM,GAAIoF,GAAI,EAAG2Y,EAAKwnD,EAAU3lE,OAAQwF,EAAI2Y,EAAI3Y,GAAK,EAEpDi8F,EAAGrxD,UAAWu1B,EAAWngE,GACzBk8F,EAAGtxD,UAAWu1B,EAAWngE,EAAI,GAC7Bm8F,EAAGvxD,UAAWu1B,EAAWngE,EAAI,GAE7Bk2F,EAAGxxC,WAAYy3C,EAAID,GACnB/F,EAAGzxC,WAAYu3C,EAAIC,GACnBhG,EAAGne,MAAOoe,GAEVh2E,EAASngB,GAAMk2F,EAAG/7F,EAClBgmB,EAASngB,EAAI,GAAMk2F,EAAG97F,EACtB+lB,EAASngB,EAAI,GAAMk2F,EAAGt7F,EAEtBulB,EAASngB,EAAI,GAAMk2F,EAAG/7F,EACtBgmB,EAASngB,EAAI,GAAMk2F,EAAG97F,EACtB+lB,EAASngB,EAAI,GAAMk2F,EAAGt7F,EAEtBulB,EAASngB,EAAI,GAAMk2F,EAAG/7F,EACtBgmB,EAASngB,EAAI,GAAMk2F,EAAG97F,EACtB+lB,EAASngB,EAAI,GAAMk2F,EAAGt7F,CAMxBZ,MAAK0sD,mBAELr+C,EAAWwK,OAAO9F,aAAc,IAMlC84E,MAAO,SAAW5xE,EAAUjX,GAE3B,IAASiX,IAAYA,EAASS,iBAG7B,WADAja,SAAQC,MAAO,kFAAmFuZ,OAKnF/Y,KAAX8B,IAAuBA,EAAS,EAErC,IAAIqL,GAAarO,KAAKqO,UAEtB,KAAM,GAAIq7C,KAAOr7C,GAEhB,OAAoCnN,KAA/B+Y,EAAS5L,WAAYq7C,GAU1B,IAAM,GARF04C,GAAa/zF,EAAYq7C,GACzB24C,EAAkBD,EAAW78F,MAE7B+8F,EAAaroF,EAAS5L,WAAYq7C,GAClC64C,EAAkBD,EAAW/8F,MAE7Bi9F,EAAgBF,EAAWl9E,SAErBpf,EAAI,EAAGmM,EAAIqwF,EAAgBx/F,EAAQgD,EAAIu8F,EAAgB/hG,OAAQwF,IAAMmM,IAE9EkwF,EAAiBlwF,GAAMowF,EAAiBv8F,EAM1C,OAAOhG,OAIR0sD,iBAAkB,WAEjB,GAAItkC,GAAS,GAAIjnB,EAEjB,OAAO,YAIN,IAAM,GAFFglB,GAAUnmB,KAAKqO,WAAWwK,OAEpB7S,EAAI,EAAG2Y,EAAKwH,EAAQ3E,MAAOxb,EAAI2Y,EAAI3Y,IAE5CoiB,EAAOjoB,EAAIgmB,EAAQ6jC,KAAMhkD,GACzBoiB,EAAOhoB,EAAI+lB,EAAQ0rD,KAAM7rE,GACzBoiB,EAAOxnB,EAAIulB,EAAQqxD,KAAMxxE,GAEzBoiB,EAAO+K,YAEPhN,EAAQsxD,OAAQzxE,EAAGoiB,EAAOjoB,EAAGioB,EAAOhoB,EAAGgoB,EAAOxnB,OAQjD6hG,aAAc,WAEb,GAAoB,OAAfziG,KAAKymB,MAGT,MADAhmB,SAAQqa,KAAM,yEACP9a,IAIR,IAAIqzD,GAAY,GAAI9sC,IAEhBL,EAAUlmB,KAAKymB,MAAMlhB,MACrB8I,EAAarO,KAAKqO,UAEtB,KAAM,GAAI9L,KAAQ8L,GAAa,CAW9B,IAAM,GATF+R,GAAY/R,EAAY9L,GAExBgD,EAAQ6a,EAAU7a,MAClB6f,EAAWhF,EAAUgF,SAErBs9E,EAAS,GAAIn9F,GAAMyyD,YAAa9xC,EAAQ1lB,OAAS4kB,GAEjDqB,EAAQ,EAAGsjC,EAAS,EAEd/jD,EAAI,EAAG8K,EAAIoV,EAAQ1lB,OAAQwF,EAAI8K,EAAG9K,IAAO,CAElDygB,EAAQP,EAASlgB,GAAMof,CAEvB,KAAM,GAAIjT,GAAI,EAAGA,EAAIiT,EAAUjT,IAE9BuwF,EAAQ34C,KAAcxkD,EAAOkhB,KAM/B4sC,EAAUzqC,aAAcrmB,EAAM,GAAI4iB,IAAiBu9E,EAAQt9E,IAI5D,MAAOiuC,IAIRgsB,OAAQ,WAEP,GAAIv6E,IACH06E,UACC77E,QAAS,IACT9B,KAAM,iBACN49E,UAAW,yBAUb,IAJA36E,EAAK1C,KAAOpC,KAAKoC,KACjB0C,EAAKjD,KAAO7B,KAAK6B,KACE,KAAd7B,KAAKuC,OAAcuC,EAAKvC,KAAOvC,KAAKuC,UAEhBrB,KAApBlB,KAAKyX,WAA2B,CAEpC,GAAIA,GAAazX,KAAKyX,UAEtB,KAAM,GAAIiyC,KAAOjyC,OAEWvW,KAAtBuW,EAAYiyC,KAAsB5kD,EAAM4kD,GAAQjyC,EAAYiyC,GAIlE,OAAO5kD,GAIRA,EAAKA,MAASuJ,cAEd,IAAIoY,GAAQzmB,KAAKymB,KAEjB,IAAe,OAAVA,EAAiB,CAErB,GAAIlhB,GAAQsX,MAAMskD,UAAUtZ,MAAMnjD,KAAM+hB,EAAMlhB,MAE9CT,GAAKA,KAAK2hB,OACT5kB,KAAM4kB,EAAMlhB,MAAMyyD,YAAYz1D,KAC9BgD,MAAOA,GAKT,GAAI8I,GAAarO,KAAKqO,UAEtB,KAAM,GAAIq7C,KAAOr7C,GAAa,CAE7B,GAAI+R,GAAY/R,EAAYq7C,GAExBnkD,EAAQsX,MAAMskD,UAAUtZ,MAAMnjD,KAAM0b,EAAU7a,MAElDT,GAAKA,KAAKuJ,WAAYq7C,IACrBtkC,SAAUhF,EAAUgF,SACpBvjB,KAAMue,EAAU7a,MAAMyyD,YAAYz1D,KAClCgD,MAAOA,EACP8f,WAAYjF,EAAUiF,YAKxB,GAAItI,GAAS/c,KAAK+c,MAEbA,GAAOvc,OAAS,IAEpBsE,EAAKA,KAAKiY,OAAS23E,KAAKE,MAAOF,KAAKC,UAAW53E,IAIhD,IAAI4H,GAAiB3kB,KAAK2kB,cAW1B,OATwB,QAAnBA,IAEJ7f,EAAKA,KAAK6f,gBACTzhB,OAAQyhB,EAAezhB,OAAO6C,UAC9B4S,OAAQgM,EAAehM,SAKlB7T,GAIR2W,MAAO,WA0BN,OAAO,GAAI8K,KAAiBnV,KAAMpR,OAInCoR,KAAM,SAAWy8D,GAEhB,GAAItrE,GAAMyD,EAAG8K,CAIb9Q,MAAKymB,MAAQ,KACbzmB,KAAKqO,cACLrO,KAAK2a,mBACL3a,KAAK+c,UACL/c,KAAK0kB,YAAc,KACnB1kB,KAAK2kB,eAAiB,KAItB3kB,KAAKuC,KAAOsrE,EAAOtrE,IAInB,IAAIkkB,GAAQonD,EAAOpnD,KAEJ,QAAVA,GAEJzmB,KAAK2oB,SAAUlC,EAAMhL,QAMtB,IAAIpN,GAAaw/D,EAAOx/D,UAExB,KAAM9L,IAAQ8L,GAAa,CAE1B,GAAI+R,GAAY/R,EAAY9L,EAC5BvC,MAAK4oB,aAAcrmB,EAAM6d,EAAU3E,SAMpC,GAAId,GAAkBkzD,EAAOlzD,eAE7B,KAAMpY,IAAQoY,GAAkB,CAE/B,GAAIpV,MACAo9F,EAAiBhoF,EAAiBpY,EAEtC,KAAMyD,EAAI,EAAG8K,EAAI6xF,EAAeniG,OAAQwF,EAAI8K,EAAG9K,IAE9CT,EAAMgF,KAAMo4F,EAAgB38F,GAAIyV,QAIjCzb,MAAK2a,gBAAiBpY,GAASgD,EAMhC,GAAIwX,GAAS8wD,EAAO9wD,MAEpB,KAAM/W,EAAI,EAAG8K,EAAIiM,EAAOvc,OAAQwF,EAAI8K,EAAG9K,IAAO,CAE7C,GAAIkX,GAAQH,EAAQ/W,EACpBhG,MAAKuoB,SAAUrL,EAAMyJ,MAAOzJ,EAAMsE,MAAOtE,EAAME,eAMhD,GAAIsH,GAAcmpD,EAAOnpD,WAEJ,QAAhBA,IAEJ1kB,KAAK0kB,YAAcA,EAAYjJ,QAMhC,IAAIkJ,GAAiBkpD,EAAOlpD,cAa5B,OAXwB,QAAnBA,IAEJ3kB,KAAK2kB,eAAiBA,EAAelJ,SAMtCzb,KAAK0mB,UAAUC,MAAQknD,EAAOnnD,UAAUC,MACxC3mB,KAAK0mB,UAAUlF,MAAQqsD,EAAOnnD,UAAUlF,MAEjCxhB,MAIR0tB,QAAS,WAER1tB,KAAKquE,eAAiBxsE,KAAM,eAiC9B+kB,GAAYu6C,UAAYn/D,OAAOo+E,OAAQl8D,GAASi9C,WAChDv6C,GAAYu6C,UAAUnJ,YAAcpxC,GAqKpCK,GAAkBk6C,UAAYn/D,OAAOo+E,OAAQ75D,GAAe46C,WAC5Dl6C,GAAkBk6C,UAAUnJ,YAAc/wC,GA2B1C4B,GAAcs4C,UAAYn/D,OAAOo+E,OAAQl8D,GAASi9C,WAClDt4C,GAAcs4C,UAAUnJ,YAAcnvC,GA2FtCC,GAAoBq4C,UAAYn/D,OAAOo+E,OAAQ75D,GAAe46C,WAC9Dr4C,GAAoBq4C,UAAUnJ,YAAclvC,GA4E5CK,GAAkBg4C,UAAYn/D,OAAOo+E,OAAQpqE,EAASmrD,WACtDh4C,GAAkBg4C,UAAUnJ,YAAc7uC,GAE1CA,GAAkBg4C,UAAU/iB,qBAAsB,EAElDj1B,GAAkBg4C,UAAU/vD,KAAO,SAAWy8D,GA+B7C,MA7BA73D,GAASmrD,UAAU/vD,KAAK1M,KAAM1E,KAAM6tE,GAEpC7tE,KAAK6O,MAAMuC,KAAMy8D,EAAOh/D,OAExB7O,KAAKqF,IAAMwoE,EAAOxoE,IAElBrF,KAAKopB,SAAWykD,EAAOzkD,SACvBppB,KAAKqpB,kBAAoBwkD,EAAOxkD,kBAEhCrpB,KAAKspB,MAAQukD,EAAOvkD,MACpBtpB,KAAKupB,eAAiBskD,EAAOtkD,eAE7BvpB,KAAKwpB,YAAcqkD,EAAOrkD,YAE1BxpB,KAAK8X,SAAW+1D,EAAO/1D,SAEvB9X,KAAKypB,OAASokD,EAAOpkD,OACrBzpB,KAAK0pB,QAAUmkD,EAAOnkD,QACtB1pB,KAAK4pB,aAAeikD,EAAOjkD,aAC3B5pB,KAAK6pB,gBAAkBgkD,EAAOhkD,gBAE9B7pB,KAAKkY,UAAY21D,EAAO31D,UACxBlY,KAAKmY,mBAAqB01D,EAAO11D,mBACjCnY,KAAK8pB,iBAAmB+jD,EAAO/jD,iBAC/B9pB,KAAK+pB,kBAAoB8jD,EAAO9jD,kBAEhC/pB,KAAK4X,SAAWi2D,EAAOj2D,SACvB5X,KAAK6X,aAAeg2D,EAAOh2D,aAEpB7X,MAiFRgqB,GAAem3C,UAAYn/D,OAAOo+E,OAAQpqE,EAASmrD,WACnDn3C,GAAem3C,UAAUnJ,YAAchuC,GAEvCA,GAAem3C,UAAUtnC,kBAAmB,EAE5C7P,GAAem3C,UAAU/vD,KAAO,SAAWy8D,GAwB1C,MAtBA73D,GAASmrD,UAAU/vD,KAAK1M,KAAM1E,KAAM6tE,GAEpC7tE,KAAKmO,eAAiB0/D,EAAO1/D,eAC7BnO,KAAKiO,aAAe4/D,EAAO5/D,aAE3BjO,KAAKyO,SAAW6tC,GAAc7gC,MAAOoyD,EAAOp/D,UAE5CzO,KAAKiqB,QAAU4jD,EAAO5jD,QAEtBjqB,KAAKkY,UAAY21D,EAAO31D,UACxBlY,KAAKmY,mBAAqB01D,EAAO11D,mBAEjCnY,KAAKkW,OAAS23D,EAAO33D,OACrBlW,KAAKkqB,SAAW2jD,EAAO3jD,SAEvBlqB,KAAK4X,SAAWi2D,EAAOj2D,SAEvB5X,KAAK6X,aAAeg2D,EAAOh2D,aAC3B7X,KAAKskB,aAAeupD,EAAOvpD,aAE3BtkB,KAAKmqB,WAAa0jD,EAAO1jD,WAElBnqB,MAIRgqB,GAAem3C,UAAUke,OAAS,SAAWC,GAE5C,GAAIx6E,GAAOkR,EAASmrD,UAAUke,OAAO36E,KAAM1E,KAAMs/E,EAMjD,OAJAx6E,GAAK2J,SAAWzO,KAAKyO,SACrB3J,EAAKmJ,aAAejO,KAAKiO,aACzBnJ,EAAKqJ,eAAiBnO,KAAKmO,eAEpBrJ,GAeR9C,OAAO2rE,OAAQhjD,GAAIw2C,WAElBt5D,IAAK,SAAW+iB,EAAQC,GAKvB,MAHA7qB,MAAK4qB,OAAOxZ,KAAMwZ,GAClB5qB,KAAK6qB,UAAUzZ,KAAMyZ,GAEd7qB,MAIRyb,MAAO,WAEN,OAAO,GAAIzb,MAAKg4D,aAAc5mD,KAAMpR,OAIrCoR,KAAM,SAAWyzD,GAKhB,MAHA7kE,MAAK4qB,OAAOxZ,KAAMyzD,EAAIj6C,QACtB5qB,KAAK6qB,UAAUzZ,KAAMyzD,EAAIh6C,WAElB7qB,MAIR4iG,GAAI,SAAW31C,EAAGu9B,GAIjB,OAFaA,GAAkB,GAAIrpF,IAErBiQ,KAAMpR,KAAK6qB,WAAY4G,eAAgBw7B,GAAIltC,IAAK/f,KAAK4qB,SAIpEnL,OAAQ,SAAWjZ,GAIlB,MAFAxG,MAAK6qB,UAAUzZ,KAAM5K,GAAImrB,IAAK3xB,KAAK4qB,QAASuI,YAErCnzB,MAIR6iG,OAAQ,WAEP,GAAIhoC,GAAK,GAAI15D,EAEb,OAAO,UAAiB8rD,GAIvB,MAFAjtD,MAAK4qB,OAAOxZ,KAAMpR,KAAK4iG,GAAI31C,EAAG4N,IAEvB76D,SAMT8iG,oBAAqB,SAAW7vE,EAAOu3D,GAEtC,GAAItwE,GAASswE,GAAkB,GAAIrpF,EACnC+Y,GAAOwwC,WAAYz3B,EAAOjzB,KAAK4qB,OAC/B,IAAIm4E,GAAoB7oF,EAAO05C,IAAK5zD,KAAK6qB,UAEzC,OAAKk4E,GAAoB,EAEjB7oF,EAAO9I,KAAMpR,KAAK4qB,QAInB1Q,EAAO9I,KAAMpR,KAAK6qB,WAAY4G,eAAgBsxE,GAAoBhjF,IAAK/f,KAAK4qB,SAIpFspE,gBAAiB,SAAWjhE,GAE3B,MAAOxK,MAAK81B,KAAMv+C,KAAKgjG,kBAAmB/vE,KAI3C+vE,kBAAmB,WAElB,GAAInoC,GAAK,GAAI15D,EAEb,OAAO,UAA4B8xB,GAElC,GAAI8vE,GAAoBloC,EAAGnQ,WAAYz3B,EAAOjzB,KAAK4qB,QAASgpC,IAAK5zD,KAAK6qB,UAItE,OAAKk4E,GAAoB,EAEjB/iG,KAAK4qB,OAAO4mD,kBAAmBv+C,IAIvC4nC,EAAGzpD,KAAMpR,KAAK6qB,WAAY4G,eAAgBsxE,GAAoBhjF,IAAK/f,KAAK4qB,QAEjEiwC,EAAG2W,kBAAmBv+C,QAM/BgwE,oBAAqB,WAEpB,GAAIC,GAAY,GAAI/hG,GAChBgiG,EAAS,GAAIhiG,GACbs9F,EAAO,GAAIt9F,EAEf,OAAO,UAA8By5D,EAAIC,EAAIuoC,EAAoBC,GAShEH,EAAU9xF,KAAMwpD,GAAK76C,IAAK86C,GAAKppC,eAAgB,IAC/C0xE,EAAO/xF,KAAMypD,GAAKlpC,IAAKipC,GAAKznC,YAC5BsrE,EAAKrtF,KAAMpR,KAAK4qB,QAAS+G,IAAKuxE,EAE9B,IAMII,GAAIpoB,EAAIqoB,EAASC,EANjBC,EAAkC,GAAtB7oC,EAAG2W,WAAY1W,GAC3B6oC,GAAQ1jG,KAAK6qB,UAAU+oC,IAAKuvC,GAC5BQ,EAAKlF,EAAK7qC,IAAK5zD,KAAK6qB,WACpBskD,GAAOsvB,EAAK7qC,IAAKuvC,GACjBr/E,EAAI26E,EAAKptB,WACT8G,EAAM1vD,KAAKmF,IAAK,EAAI81E,EAAMA,EAG9B,IAAKvrB,EAAM,EAQV,GAJAmrB,EAAKI,EAAMv0B,EAAKw0B,EAChBzoB,EAAKwoB,EAAMC,EAAKx0B,EAChBq0B,EAASC,EAAYtrB,EAEhBmrB,GAAM,EAEV,GAAKpoB,IAAQsoB,EAEZ,GAAKtoB,GAAMsoB,EAAS,CAKnB,GAAII,GAAS,EAAIzrB,CACjBmrB,IAAMM,EACN1oB,GAAM0oB,EACNL,EAAUD,GAAOA,EAAKI,EAAMxoB,EAAK,EAAIyoB,GAAOzoB,GAAOwoB,EAAMJ,EAAKpoB,EAAK,EAAI/L,GAAOrrD,MAM9Eo3D,GAAKuoB,EACLH,EAAK76E,KAAK3c,IAAK,IAAO43F,EAAMxoB,EAAKyoB,IACjCJ,GAAYD,EAAKA,EAAKpoB,GAAOA,EAAK,EAAI/L,GAAOrrD,MAQ9Co3D,IAAOuoB,EACPH,EAAK76E,KAAK3c,IAAK,IAAO43F,EAAMxoB,EAAKyoB,IACjCJ,GAAYD,EAAKA,EAAKpoB,GAAOA,EAAK,EAAI/L,GAAOrrD,MAMzCo3D,KAAQsoB,GAIZF,EAAK76E,KAAK3c,IAAK,KAAS43F,EAAMD,EAAYE,IAC1CzoB,EAAOooB,EAAK,GAAQG,EAAYh7E,KAAK5c,IAAK4c,KAAK3c,KAAO23F,GAAat0B,GAAMs0B,GACzEF,GAAYD,EAAKA,EAAKpoB,GAAOA,EAAK,EAAI/L,GAAOrrD,GAElCo3D,GAAMsoB,GAIjBF,EAAK,EACLpoB,EAAKzyD,KAAK5c,IAAK4c,KAAK3c,KAAO23F,GAAat0B,GAAMs0B,GAC9CF,EAAUroB,GAAOA,EAAK,EAAI/L,GAAOrrD,IAMjCw/E,EAAK76E,KAAK3c,IAAK,IAAO43F,EAAMD,EAAYE,IACxCzoB,EAAOooB,EAAK,EAAMG,EAAYh7E,KAAK5c,IAAK4c,KAAK3c,KAAO23F,GAAat0B,GAAMs0B,GACvEF,GAAYD,EAAKA,EAAKpoB,GAAOA,EAAK,EAAI/L,GAAOrrD,OAU/Co3D,GAAOwoB,EAAM,GAAQD,EAAYA,EACjCH,EAAK76E,KAAK3c,IAAK,IAAO43F,EAAMxoB,EAAKyoB,IACjCJ,GAAYD,EAAKA,EAAKpoB,GAAOA,EAAK,EAAI/L,GAAOrrD,CAgB9C,OAZKs/E,IAEJA,EAAmBhyF,KAAMpR,KAAK6qB,WAAY4G,eAAgB6xE,GAAKvjF,IAAK/f,KAAK4qB,QAIrEy4E,GAEJA,EAAuBjyF,KAAM+xF,GAAS1xE,eAAgBypD,GAAKn7D,IAAKmjF,GAI1DK,MAMTM,gBAAiB,WAEhB,GAAIhpC,GAAK,GAAI15D,EAEb,OAAO,UAA0Bw0F,EAAQnL,GAExC3vB,EAAGnQ,WAAYirC,EAAOzyF,OAAQlD,KAAK4qB,OACnC,IAAIk5E,GAAMjpC,EAAGjH,IAAK5zD,KAAK6qB,WACnBytE,EAAKz9B,EAAGjH,IAAKiH,GAAOipC,EAAMA,EAC1BC,EAAUpO,EAAOh9E,OAASg9E,EAAOh9E,MAErC,IAAK2/E,EAAKyL,EAAU,MAAO,KAE3B,IAAIC,GAAMv7E,KAAK81B,KAAMwlD,EAAUzL,GAG3B3uB,EAAKm6B,EAAME,EAGXp6B,EAAKk6B,EAAME,CAGf,OAAKr6B,GAAK,GAAKC,EAAK,EAAW,KAK1BD,EAAK,EAAW3pE,KAAK4iG,GAAIh5B,EAAI4gB,GAG3BxqF,KAAK4iG,GAAIj5B,EAAI6gB,OAMtBiL,iBAAkB,SAAWE,GAE5B,MAAO31F,MAAKk0F,gBAAiByB,EAAOzyF,SAAYyyF,EAAOh9E,QAIxDsrF,gBAAiB,SAAWpxD,GAE3B,GAAI8jD,GAAc9jD,EAAMh6B,OAAO+6C,IAAK5zD,KAAK6qB,UAEzC,IAAqB,IAAhB8rE,EAGJ,MAA8C,KAAzC9jD,EAAMqhD,gBAAiBl0F,KAAK4qB,QAEzB,EAMD,IAIR,IAAIqiC,KAAQjtD,KAAK4qB,OAAOgpC,IAAK/gB,EAAMh6B,QAAWg6B,EAAM/5B,UAAa69E,CAIjE,OAAO1pC,IAAK,EAAIA,EAAI,MAIrBi3C,eAAgB,SAAWrxD,EAAO23C,GAEjC,GAAIv9B,GAAIjtD,KAAKikG,gBAAiBpxD,EAE9B,OAAW,QAANoa,EAEG,KAIDjtD,KAAK4iG,GAAI31C,EAAGu9B,IAIpBoL,gBAAiB,SAAW/iD,GAI3B,GAAIsxD,GAActxD,EAAMqhD,gBAAiBl0F,KAAK4qB,OAE9C,OAAqB,KAAhBu5E,GAMatxD,EAAMh6B,OAAO+6C,IAAK5zD,KAAK6qB,WAEtBs5E,EAAc,GAYlCC,aAAc,SAAWx7B,EAAK4hB,GAE7B,GAAI6Z,GAAMC,EAAMC,EAAOC,EAAOC,EAAOC,EAEjCC,EAAU,EAAI3kG,KAAK6qB,UAAU1qB,EAChCykG,EAAU,EAAI5kG,KAAK6qB,UAAUzqB,EAC7BykG,EAAU,EAAI7kG,KAAK6qB,UAAUjqB,EAE1BgqB,EAAS5qB,KAAK4qB,MA0BlB,OAxBK+5E,IAAW,GAEfN,GAASz7B,EAAI/8D,IAAI1L,EAAIyqB,EAAOzqB,GAAMwkG,EAClCL,GAAS17B,EAAI98D,IAAI3L,EAAIyqB,EAAOzqB,GAAMwkG,IAIlCN,GAASz7B,EAAI98D,IAAI3L,EAAIyqB,EAAOzqB,GAAMwkG,EAClCL,GAAS17B,EAAI/8D,IAAI1L,EAAIyqB,EAAOzqB,GAAMwkG,GAI9BC,GAAW,GAEfL,GAAU37B,EAAI/8D,IAAIzL,EAAIwqB,EAAOxqB,GAAMwkG,EACnCJ,GAAU57B,EAAI98D,IAAI1L,EAAIwqB,EAAOxqB,GAAMwkG,IAInCL,GAAU37B,EAAI98D,IAAI1L,EAAIwqB,EAAOxqB,GAAMwkG,EACnCJ,GAAU57B,EAAI/8D,IAAIzL,EAAIwqB,EAAOxqB,GAAMwkG,GAI7BP,EAAOG,GAAaD,EAAQD,EAAgB,OAK9CC,EAAQF,GAAQA,IAASA,KAAOA,EAAOE,IAEvCC,EAAQF,GAAQA,IAASA,KAAOA,EAAOE,GAEvCK,GAAW,GAEfJ,GAAU77B,EAAI/8D,IAAIjL,EAAIgqB,EAAOhqB,GAAMikG,EACnCH,GAAU97B,EAAI98D,IAAIlL,EAAIgqB,EAAOhqB,GAAMikG,IAInCJ,GAAU77B,EAAI98D,IAAIlL,EAAIgqB,EAAOhqB,GAAMikG,EACnCH,GAAU97B,EAAI/8D,IAAIjL,EAAIgqB,EAAOhqB,GAAMikG,GAI7BR,EAAOK,GAAaD,EAAQH,EAAgB,OAE9CG,EAAQJ,GAAQA,IAASA,KAAOA,EAAOI,IAEvCC,EAAQJ,GAAQA,IAASA,KAAOA,EAAOI,GAIvCJ,EAAO,EAAW,KAEhBtkG,KAAK4iG,GAAIyB,GAAQ,EAAIA,EAAOC,EAAM9Z,MAI1CwJ,cAAe,WAEd,GAAIxtF,GAAI,GAAIrF,EAEZ,OAAO,UAAwBynE,GAE9B,MAAuC,QAAhC5oE,KAAKokG,aAAcx7B,EAAKpiE,OAMjCs+F,kBAAmB,WAGlB,GAAIrG,GAAO,GAAIt9F,GACXqoD,EAAQ,GAAIroD,GACZsoD,EAAQ,GAAItoD,GACZ0X,EAAS,GAAI1X,EAEjB,OAAO,UAA4BgT,EAAGhN,EAAG2c,EAAGihF,EAAiBva,GAI5DhhC,EAAMkB,WAAYvjD,EAAGgN,GACrBs1C,EAAMiB,WAAY5mC,EAAG3P,GACrB0E,EAAO8xC,aAAcnB,EAAOC,EAO5B,IACI4K,GADA2wC,EAAMhlG,KAAK6qB,UAAU+oC,IAAK/6C,EAG9B,IAAKmsF,EAAM,EAAI,CAEd,GAAKD,EAAkB,MAAO,KAC9B1wC,GAAO,MAED,CAAA,KAAK2wC,EAAM,GAOjB,MAAO,KALP3wC,IAAS,EACT2wC,GAAQA,EAQTvG,EAAK/zC,WAAY1qD,KAAK4qB,OAAQzW,EAC9B,IAAI8wF,GAAS5wC,EAAOr0D,KAAK6qB,UAAU+oC,IAAKnK,EAAMkB,aAAc8zC,EAAMh1C,GAGlE,IAAKw7C,EAAS,EAEb,MAAO,KAIR,IAAIC,GAAS7wC,EAAOr0D,KAAK6qB,UAAU+oC,IAAKpK,EAAMu0B,MAAO0gB,GAGrD,IAAKyG,EAAS,EAEb,MAAO,KAKR,IAAKD,EAASC,EAASF,EAEtB,MAAO,KAKR,IAAIG,IAAQ9wC,EAAOoqC,EAAK7qC,IAAK/6C,EAG7B,OAAKssF,GAAM,EAEH,KAKDnlG,KAAK4iG,GAAIuC,EAAMH,EAAKxa,OAM7Bv5E,aAAc,SAAW0hB,GAKxB,MAHA3yB,MAAK4qB,OAAO3Z,aAAc0hB,GAC1B3yB,KAAK6qB,UAAU+G,mBAAoBe,GAE5B3yB,MAIR2lC,OAAQ,SAAWk/B,GAElB,MAAOA,GAAIj6C,OAAO+a,OAAQ3lC,KAAK4qB,SAAYi6C,EAAIh6C,UAAU8a,OAAQ3lC,KAAK6qB,cAiBxE7oB,OAAO2rE,OAAQ7iD,GAAMq2C,WAEpBt5D,IAAK,SAAW8e,EAAOoE,GAKtB,MAHA/qB,MAAK2mB,MAAMvV,KAAMuV,GACjB3mB,KAAK+qB,IAAI3Z,KAAM2Z,GAER/qB,MAIRyb,MAAO,WAEN,OAAO,GAAIzb,MAAKg4D,aAAc5mD,KAAMpR,OAIrCoR,KAAM,SAAW61D,GAKhB,MAHAjnE,MAAK2mB,MAAMvV,KAAM61D,EAAKtgD,OACtB3mB,KAAK+qB,IAAI3Z,KAAM61D,EAAKl8C,KAEb/qB,MAIR4zF,UAAW,SAAWpJ,GAGrB,OADaA,GAAkB,GAAIrpF,IACrBiuD,WAAYpvD,KAAK2mB,MAAO3mB,KAAK+qB,KAAM0G,eAAgB,KAIlEo5D,MAAO,SAAWL,GAGjB,OADaA,GAAkB,GAAIrpF,IACrBupD,WAAY1qD,KAAK+qB,IAAK/qB,KAAK2mB,QAI1Cy+E,WAAY,WAEX,MAAOplG,MAAK2mB,MAAM6qD,kBAAmBxxE,KAAK+qB,MAI3CqF,SAAU,WAET,MAAOpwB,MAAK2mB,MAAM4qD,WAAYvxE,KAAK+qB,MAIpC63E,GAAI,SAAW31C,EAAGu9B,GAEjB,GAAItwE,GAASswE,GAAkB,GAAIrpF,EAEnC,OAAOnB,MAAK6qF,MAAO3wE,GAASuX,eAAgBw7B,GAAIltC,IAAK/f,KAAK2mB,QAI3D0+E,6BAA8B,WAE7B,GAAIC,GAAS,GAAInkG,GACbokG,EAAW,GAAIpkG,EAEnB,OAAO,UAAuC8xB,EAAOuyE,GAEpDF,EAAO56C,WAAYz3B,EAAOjzB,KAAK2mB,OAC/B4+E,EAAS76C,WAAY1qD,KAAK+qB,IAAK/qB,KAAK2mB,MAEpC,IAAI8+E,GAAYF,EAAS3xC,IAAK2xC,GAC1BG,EAAkBH,EAAS3xC,IAAK0xC,GAEhCr4C,EAAIy4C,EAAkBD,CAQ1B,OANKD,KAEJv4C,EAAI5qD,GAAMyvD,MAAO7E,EAAG,EAAG,IAIjBA,MAMT61C,oBAAqB,SAAW7vE,EAAOuyE,EAAahb,GAEnD,GAAIv9B,GAAIjtD,KAAKqlG,6BAA8BpyE,EAAOuyE,GAE9CtrF,EAASswE,GAAkB,GAAIrpF,EAEnC,OAAOnB,MAAK6qF,MAAO3wE,GAASuX,eAAgBw7B,GAAIltC,IAAK/f,KAAK2mB,QAI3D1V,aAAc,SAAW5N,GAKxB,MAHArD,MAAK2mB,MAAM1V,aAAc5N,GACzBrD,KAAK+qB,IAAI9Z,aAAc5N,GAEhBrD,MAIR2lC,OAAQ,SAAWshC,GAElB,MAAOA,GAAKtgD,MAAMgf,OAAQ3lC,KAAK2mB,QAAWsgD,EAAKl8C,IAAI4a,OAAQ3lC,KAAK+qB,QAmBlE/oB,OAAO2rE,OAAQ3iD,IAEdnS,OAAQ,WAEP,GAAI+hD,GAAK,GAAIz5D,EAEb,OAAO,UAAiBgT,EAAGhN,EAAG2c,EAAG0mE,GAEhC,GAAItwE,GAASswE,GAAkB,GAAIrpF,EAEnC+Y,GAAOwwC,WAAY5mC,EAAG3c,GACtByzD,EAAGlQ,WAAYv2C,EAAGhN,GAClB+S,EAAO6jE,MAAOnjB,EAEd,IAAI+qC,GAAiBzrF,EAAOm3D,UAC5B,OAAKs0B,GAAiB,EAEdzrF,EAAOuX,eAAgB,EAAIhJ,KAAK81B,KAAMonD,IAIvCzrF,EAAOrS,IAAK,EAAG,EAAG,OAQ3B+9F,mBAAoB,WAEnB,GAAIhrC,GAAK,GAAIz5D,GACT05D,EAAK,GAAI15D,GACTw6D,EAAK,GAAIx6D,EAEb,OAAO,UAA6B8xB,EAAO9e,EAAGhN,EAAG2c,EAAG0mE,GAEnD5vB,EAAGlQ,WAAY5mC,EAAG3P,GAClB0mD,EAAGnQ,WAAYvjD,EAAGgN,GAClBwnD,EAAGjR,WAAYz3B,EAAO9e,EAEtB,IAAI0xF,GAAQjrC,EAAGhH,IAAKgH,GAChBkrC,EAAQlrC,EAAGhH,IAAKiH,GAChBkrC,EAAQnrC,EAAGhH,IAAK+H,GAChBqqC,EAAQnrC,EAAGjH,IAAKiH,GAChBorC,EAAQprC,EAAGjH,IAAK+H,GAEhBuqC,EAAUL,EAAQG,EAAQF,EAAQA,EAElC5rF,EAASswE,GAAkB,GAAIrpF,EAGnC,IAAe,IAAV+kG,EAIJ,MAAOhsF,GAAOrS,KAAO,GAAK,GAAK,EAIhC,IAAIs+F,GAAW,EAAID,EACf9+E,GAAM4+E,EAAQD,EAAQD,EAAQG,GAAUE,EACxC3/F,GAAMq/F,EAAQI,EAAQH,EAAQC,GAAUI,CAG5C,OAAOjsF,GAAOrS,IAAK,EAAIuf,EAAI5gB,EAAGA,EAAG4gB,OAMnC/V,cAAe,WAEd,GAAIwpD,GAAK,GAAI15D,EAEb,OAAO,UAAwB8xB,EAAO9e,EAAGhN,EAAG2c,GAE3C,GAAI5J,GAAS8Q,GAAS46E,mBAAoB3yE,EAAO9e,EAAGhN,EAAG2c,EAAG+2C,EAE1D,OAAS3gD,GAAO/Z,GAAK,GAAS+Z,EAAO9Z,GAAK,GAAW8Z,EAAO/Z,EAAI+Z,EAAO9Z,GAAO,QAQjF4B,OAAO2rE,OAAQ3iD,GAASm2C,WAEvBt5D,IAAK,SAAWsM,EAAGhN,EAAG2c,GAMrB,MAJA9jB,MAAKmU,EAAE/C,KAAM+C,GACbnU,KAAKmH,EAAEiK,KAAMjK,GACbnH,KAAK8jB,EAAE1S,KAAM0S,GAEN9jB,MAIRomG,wBAAyB,SAAWz3E,EAAQ03E,EAAIC,EAAIC,GAMnD,MAJAvmG,MAAKmU,EAAE/C,KAAMud,EAAQ03E,IACrBrmG,KAAKmH,EAAEiK,KAAMud,EAAQ23E,IACrBtmG,KAAK8jB,EAAE1S,KAAMud,EAAQ43E,IAEdvmG,MAIRyb,MAAO,WAEN,OAAO,GAAIzb,MAAKg4D,aAAc5mD,KAAMpR,OAIrCoR,KAAM,SAAWo1F,GAMhB,MAJAxmG,MAAKmU,EAAE/C,KAAMo1F,EAASryF,GACtBnU,KAAKmH,EAAEiK,KAAMo1F,EAASr/F,GACtBnH,KAAK8jB,EAAE1S,KAAMo1F,EAAS1iF,GAEf9jB,MAIRymG,KAAM,WAEL,GAAI7rC,GAAK,GAAIz5D,GACT05D,EAAK,GAAI15D,EAEb,OAAO,YAKN,MAHAy5D,GAAGlQ,WAAY1qD,KAAK8jB,EAAG9jB,KAAKmH,GAC5B0zD,EAAGnQ,WAAY1qD,KAAKmU,EAAGnU,KAAKmH,GAEK,GAA1ByzD,EAAGmjB,MAAOljB,GAAKr6D,aAMxBkmG,SAAU,SAAWlc,GAGpB,OADaA,GAAkB,GAAIrpF,IACrBiuD,WAAYpvD,KAAKmU,EAAGnU,KAAKmH,GAAI4Y,IAAK/f,KAAK8jB,GAAI2N,eAAgB,EAAI,IAI9E5Y,OAAQ,SAAW2xE,GAElB,MAAOx/D,IAASnS,OAAQ7Y,KAAKmU,EAAGnU,KAAKmH,EAAGnH,KAAK8jB,EAAG0mE,IAIjD33C,MAAO,SAAW23C,GAIjB,OAFaA,GAAkB,GAAI5xE,KAErB09E,sBAAuBt2F,KAAKmU,EAAGnU,KAAKmH,EAAGnH,KAAK8jB,IAI3D8hF,mBAAoB,SAAW3yE,EAAOu3D,GAErC,MAAOx/D,IAAS46E,mBAAoB3yE,EAAOjzB,KAAKmU,EAAGnU,KAAKmH,EAAGnH,KAAK8jB,EAAG0mE,IAIpEn5E,cAAe,SAAW4hB,GAEzB,MAAOjI,IAAS3Z,cAAe4hB,EAAOjzB,KAAKmU,EAAGnU,KAAKmH,EAAGnH,KAAK8jB,IAI5Dg/E,oBAAqB,WAEpB,GAAIjwD,GAAQ,GAAIj6B,IACZ+tF,GAAa,GAAI77E,IAAS,GAAIA,IAAS,GAAIA,KAC3C87E,EAAiB,GAAIzlG,GACrBu0F,EAAe,GAAIv0F,EAEvB,OAAO,UAA8B8xB,EAAOu3D,GAE3C,GAAItwE,GAASswE,GAAkB,GAAIrpF,GAC/B0lG,EAAc96F,EAAAA,CASlB,IALA8mC,EAAMyjD,sBAAuBt2F,KAAKmU,EAAGnU,KAAKmH,EAAGnH,KAAK8jB,GAClD+uB,EAAM4jD,aAAcxjE,EAAO2zE,IAImB,IAAzC5mG,KAAKqR,cAAeu1F,GAIxB1sF,EAAO9I,KAAMw1F,OAEP,CAIND,EAAU,GAAI9+F,IAAK7H,KAAKmU,EAAGnU,KAAKmH,GAChCw/F,EAAU,GAAI9+F,IAAK7H,KAAKmH,EAAGnH,KAAK8jB,GAChC6iF,EAAU,GAAI9+F,IAAK7H,KAAK8jB,EAAG9jB,KAAKmU,EAEhC,KAAM,GAAInO,GAAI,EAAGA,EAAI2gG,EAASnmG,OAAQwF,IAAO,CAE5C2gG,EAAU3gG,GAAI88F,oBAAqB8D,GAAgB,EAAMlR,EAEzD,IAAItlE,GAAWw2E,EAAep1B,kBAAmBkkB,EAE5CtlE,GAAWy2E,IAEfA,EAAcz2E,EAEdlW,EAAO9I,KAAMskF,KAQhB,MAAOx7E,OAMTyrB,OAAQ,SAAW6gE,GAElB,MAAOA,GAASryF,EAAEwxB,OAAQ3lC,KAAKmU,IAAOqyF,EAASr/F,EAAEw+B,OAAQ3lC,KAAKmH,IAAOq/F,EAAS1iF,EAAE6hB,OAAQ3lC,KAAK8jB,MA4B/FmH,GAAKk2C,UAAYn/D,OAAO2rE,OAAQ3rE,OAAOo+E,OAAQ/9D,GAAS8+C,YAEvDnJ,YAAa/sC,GAEb5O,QAAQ,EAERyqF,YAAa,SAAW5kG,GAEvBlC,KAAKmrB,SAAWjpB,GAIjBkP,KAAM,SAAWy8D,GAkBhB,MAhBAxrD,IAAS8+C,UAAU/vD,KAAK1M,KAAM1E,KAAM6tE,GAEpC7tE,KAAKmrB,SAAW0iD,EAAO1iD,aAEejqB,KAAjC2sE,EAAO9/C,wBAEX/tB,KAAK+tB,sBAAwB8/C,EAAO9/C,sBAAsB85B,aAIrB3mD,KAAjC2sE,EAAOk5B,wBAEX/mG,KAAK+mG,sBAAwB/kG,OAAO2rE,UAAYE,EAAOk5B,wBAIjD/mG,MAIRqrB,mBAAoB,WAEnB,GACI0jD,GAAGi4B,EAAIzkG,EADP0X,EAAWja,KAAKia,QAGpB,IAAKA,EAASS,iBAAmB,CAEhC,GAAIC,GAAkBV,EAASU,gBAC3BkvC,EAAO7nD,OAAO6nD,KAAMlvC,EAExB,IAAKkvC,EAAKrpD,OAAS,EAAI,CAEtB,GAAImiG,GAAiBhoF,EAAiBkvC,EAAM,GAE5C,QAAwB3oD,KAAnByhG,EAKJ,IAHA3iG,KAAK+tB,yBACL/tB,KAAK+mG,yBAECh4B,EAAI,EAAGi4B,EAAKrE,EAAeniG,OAAQuuE,EAAIi4B,EAAIj4B,IAEhDxsE,EAAOogG,EAAgB5zB,GAAIxsE,MAAQ0kG,OAAQl4B,GAE3C/uE,KAAK+tB,sBAAsBxjB,KAAM,GACjCvK,KAAK+mG,sBAAuBxkG,GAASwsE,OAQlC,CAEN,GAAIl3D,GAAeoC,EAASpC,YAE5B,QAAsB3W,KAAjB2W,GAA8BA,EAAarX,OAAS,EAKxD,IAHAR,KAAK+tB,yBACL/tB,KAAK+mG,yBAECh4B,EAAI,EAAGi4B,EAAKnvF,EAAarX,OAAQuuE,EAAIi4B,EAAIj4B,IAE9CxsE,EAAOsV,EAAck3D,GAAIxsE,MAAQ0kG,OAAQl4B,GAEzC/uE,KAAK+tB,sBAAsBxjB,KAAM,GACjCvK,KAAK+mG,sBAAuBxkG,GAASwsE,IAUzCzJ,QAAW,WAuBV,QAAS4hC,GAAgBj0E,EAAOha,EAAIC,EAAIC,EAAIguF,EAAK18E,EAAK28E,GAUrD,MARAp8E,IAAS46E,mBAAoB3yE,EAAOha,EAAIC,EAAIC,EAAIkuF,GAEhDF,EAAI11E,eAAgB41E,EAAUlnG,GAC9BsqB,EAAIgH,eAAgB41E,EAAUjnG,GAC9BgnG,EAAI31E,eAAgB41E,EAAUzmG,GAE9BumG,EAAIpnF,IAAK0K,GAAM1K,IAAKqnF,GAEbD,EAAI1rF,QAIZ,QAAS6rF,GAAmB1tF,EAAQzE,EAAUgwD,EAAWN,EAAKo9B,EAAIC,EAAIC,EAAIlvE,GAczE,GAAmB,QAVd9d,EAASiB,OAAS0F,GAEV+oD,EAAIigC,kBAAmB3C,EAAID,EAAID,GAAI,EAAMhvE,GAIzC4xC,EAAIigC,kBAAmB7C,EAAIC,EAAIC,EAAIhtF,EAASiB,OAASwF,GAAYqX,IAIpD,MAAO,KAEjCs0E,GAAuBn2F,KAAM6hB,GAC7Bs0E,EAAuBt2F,aAAc2I,EAAO5I,YAE5C,IAAIof,GAAW+0C,EAAUN,IAAIj6C,OAAO2mD,WAAYg2B,EAEhD,OAAKn3E,GAAW+0C,EAAUtwD,MAAQub,EAAW+0C,EAAUrwD,IAAa,MAGnEsb,SAAUA,EACV6C,MAAOs0E,EAAuB9rF,QAC9B7B,OAAQA,GAKV,QAAS4tF,GAAiC5tF,EAAQurD,EAAWN,EAAK5xD,EAAUzE,EAAI2F,EAAGhN,EAAG2c,GAErFu4E,EAAGpyC,oBAAqBh3C,EAAUkB,GAClCmoF,EAAGryC,oBAAqBh3C,EAAU9L,GAClCo1F,EAAGtyC,oBAAqBh3C,EAAU6Q,EAElC,IAAI2jF,GAAeH,EAAmB1tF,EAAQA,EAAOzE,SAAUgwD,EAAWN,EAAKw3B,EAAIC,EAAIC,EAAImL,EAmB3F,OAjBKD,KAECj5F,IAEJu9C,EAAI9B,oBAAqBz7C,EAAI2F,GAC7B63C,EAAI/B,oBAAqBz7C,EAAIrH,GAC7B8kD,EAAIhC,oBAAqBz7C,EAAIsV,GAE7B2jF,EAAaj5F,GAAK04F,EAAgBQ,EAAmBrL,EAAIC,EAAIC,EAAIxwC,EAAKC,EAAKC,IAI5Ew7C,EAAa3nF,KAAO,GAAI+D,IAAO1P,EAAGhN,EAAG2c,EAAGkH,GAASnS,OAAQwjF,EAAIC,EAAIC,IACjEkL,EAAaE,UAAYxzF,GAInBszF,EA3FR,GAAIG,GAAgB,GAAIvnG,GACpBwkE,EAAM,GAAIl6C,IACVgrE,EAAS,GAAIj9E,IAEb2jF,EAAK,GAAIl7F,GACTm7F,EAAK,GAAIn7F,GACTo7F,EAAK,GAAIp7F,GAET0mG,EAAQ,GAAI1mG,GACZ2mG,EAAQ,GAAI3mG,GACZ4mG,EAAQ,GAAI5mG,GAEZ4qD,EAAM,GAAI7rD,GACV8rD,EAAM,GAAI9rD,GACV+rD,EAAM,GAAI/rD,GAEVmnG,EAAY,GAAIlmG,GAEhBumG,EAAoB,GAAIvmG,GACxBomG,EAAyB,GAAIpmG,EA4EjC,OAAO,UAAkBgkE,EAAWC,GAEnC,GAAInrD,GAAWja,KAAKia,SAChB9E,EAAWnV,KAAKmV,SAChBnE,EAAchR,KAAKgR,WAEvB,QAAkB9P,KAAbiU,IAI4B,OAA5B8E,EAAS0K,gBAA0B1K,EAAS4uD,wBAEjD8sB,EAAOvkF,KAAM6I,EAAS0K,gBACtBgxE,EAAO1kF,aAAcD,IAE6B,IAA7Cm0D,EAAUN,IAAI4wB,iBAAkBE,KAIrCiS,EAAc52D,WAAYhgC,GAC1B6zD,EAAIzzD,KAAM+zD,EAAUN,KAAM5zD,aAAc22F,GAIV,OAAzB3tF,EAASyK,cAEsC,IAA9CmgD,EAAImvB,cAAe/5E,EAASyK,eAFlC,CAMA,GAAI+iF,EAEJ,IAAKxtF,EAASS,iBAAmB,CAEhC,GAAIvG,GAAGhN,EAAG2c,EAIN9d,EAAG8K,EAHH2V,EAAQxM,EAASwM,MACjBxT,EAAWgH,EAAS5L,WAAW4E,SAC/BzE,EAAKyL,EAAS5L,WAAWG,EAG7B,IAAe,OAAViY,EAIJ,IAAMzgB,EAAI,EAAG8K,EAAI2V,EAAMjF,MAAOxb,EAAI8K,EAAG9K,GAAK,EAEzCmO,EAAIsS,EAAMujC,KAAMhkD,GAChBmB,EAAIsf,EAAMujC,KAAMhkD,EAAI,GACpB8d,EAAI2C,EAAMujC,KAAMhkD,EAAI,IAEpByhG,EAAeD,EAAiCxnG,KAAMmlE,EAAWN,EAAK5xD,EAAUzE,EAAI2F,EAAGhN,EAAG2c,MAIzF2jF,EAAaE,UAAYl/E,KAAKC,MAAO1iB,EAAI,GACzCo/D,EAAW76D,KAAMk9F,QAMb,QAAkBvmG,KAAb+R,EAIX,IAAMjN,EAAI,EAAG8K,EAAImC,EAASuO,MAAOxb,EAAI8K,EAAG9K,GAAK,EAE5CmO,EAAInO,EACJmB,EAAInB,EAAI,EACR8d,EAAI9d,EAAI,GAERyhG,EAAeD,EAAiCxnG,KAAMmlE,EAAWN,EAAK5xD,EAAUzE,EAAI2F,EAAGhN,EAAG2c,MAIzF2jF,EAAahhF,MAAQtS,EACrBixD,EAAW76D,KAAMk9F,QAQd,IAAKxtF,EAASW,WAAa,CAEjC,GAAIotF,GAAKC,EAAKC,EAKV9hF,EAJAglD,EAAkBvuD,MAAMC,QAAS3H,GAEjC9I,EAAW4N,EAAS5N,SACpBC,EAAQ2N,EAAS3N,MAGjB+X,EAAgBpK,EAASoK,cAAe,EACvCA,GAAc7jB,OAAS,IAAI4lB,EAAM/B,EAEtC,KAAM,GAAI+a,GAAI,EAAGg9D,EAAK9vF,EAAM9L,OAAQ4+B,EAAIg9D,EAAIh9D,IAAO,CAElD,GAAItf,GAAOxT,EAAO8yB,GACd+oE,EAAe/8B,EAAkBj2D,EAAU2K,EAAK1C,eAAkBjI,CAEtE,QAAsBjU,KAAjBinG,EAAL,CAMA,GAJAH,EAAM37F,EAAUyT,EAAK3L,GACrB8zF,EAAM57F,EAAUyT,EAAK3Y,GACrB+gG,EAAM77F,EAAUyT,EAAKgE,IAEc,IAA9BqkF,EAAatwF,aAAwB,CAEzC,GAAIA,GAAeoC,EAASpC,aACxBsW,EAAkBnuB,KAAK+tB,qBAE3BsuE,GAAGx0F,IAAK,EAAG,EAAG,GACdy0F,EAAGz0F,IAAK,EAAG,EAAG,GACd00F,EAAG10F,IAAK,EAAG,EAAG,EAEd,KAAM,GAAIolD,GAAI,EAAGm7C,EAAKvwF,EAAarX,OAAQysD,EAAIm7C,EAAIn7C,IAAO,CAEzD,GAAI/+B,GAAYC,EAAiB8+B,EAEjC,IAAmB,IAAd/+B,EAAL,CAEA,GAAIm6E,GAAUxwF,EAAco1C,GAAI5gD,QAEhCgwF,GAAG3rB,gBAAiBm3B,EAAMn9C,WAAY29C,EAASvoF,EAAK3L,GAAK6zF,GAAO95E,GAChEouE,EAAG5rB,gBAAiBo3B,EAAMp9C,WAAY29C,EAASvoF,EAAK3Y,GAAK8gG,GAAO/5E,GAChEquE,EAAG7rB,gBAAiBq3B,EAAMr9C,WAAY29C,EAASvoF,EAAKgE,GAAKokF,GAAOh6E,IAIjEmuE,EAAGt8E,IAAKioF,GACR1L,EAAGv8E,IAAKkoF,GACR1L,EAAGx8E,IAAKmoF,GAERF,EAAM3L,EACN4L,EAAM3L,EACN4L,EAAM3L,EAMP,GAFAkL,EAAeH,EAAmBtnG,KAAMmoG,EAAchjC,EAAWN,EAAKmjC,EAAKC,EAAKC,EAAKR,GAEjE,CAEnB,GAAKthF,GAAOA,EAAKgZ,GAAM,CAEtB,GAAIkpE,GAAQliF,EAAKgZ,EACjB2sB,GAAI36C,KAAMk3F,EAAO,IACjBt8C,EAAI56C,KAAMk3F,EAAO,IACjBr8C,EAAI76C,KAAMk3F,EAAO,IAEjBb,EAAaj5F,GAAK04F,EAAgBQ,EAAmBM,EAAKC,EAAKC,EAAKn8C,EAAKC,EAAKC,GAI/Ew7C,EAAa3nF,KAAOA,EACpB2nF,EAAaE,UAAYvoE,EACzBgmC,EAAW76D,KAAMk9F,YAYtBhsF,MAAO,WAEN,MAAO,IAAIzb,MAAKg4D,YAAah4D,KAAKia,SAAUja,KAAKmV,UAAW/D,KAAMpR,QAunCpE,IAAIo7B,IAAiB,CA20FrBmT,IAAkB4yB,UAAYn/D,OAAO2rE,OAAQ3rE,OAAOo+E,OAAQ/8D,GAAO89C,YAElEnJ,YAAazpB,GAEbg6D,qBAAqB,EAErBn3F,KAAM,SAAWy8D,EAAQxI,GAiBxB,MAfAhiD,IAAO89C,UAAU/vD,KAAK1M,KAAM1E,KAAM6tE,EAAQxI,GAE1CrlE,KAAKwuC,IAAMq/B,EAAOr/B,IAClBxuC,KAAK2jB,KAAOkqD,EAAOlqD,KAEnB3jB,KAAK6U,KAAOg5D,EAAOh5D,KACnB7U,KAAK8U,IAAM+4D,EAAO/4D,IAClB9U,KAAK0uC,MAAQm/B,EAAOn/B,MAEpB1uC,KAAKyuC,OAASo/B,EAAOp/B,OACrBzuC,KAAK4jB,KAAuB,OAAhBiqD,EAAOjqD,KAAgB,KAAO5hB,OAAO2rE,UAAYE,EAAOjqD,MAEpE5jB,KAAK2uC,UAAYk/B,EAAOl/B,UACxB3uC,KAAK4uC,WAAai/B,EAAOj/B,WAElB5uC,MAYRwoG,eAAgB,SAAWC,GAG1B,GAAIC,GAAe,GAAM1oG,KAAK2oG,gBAAkBF,CAEhDzoG,MAAKwuC,IAAsB,EAAhBnsC,GAAMssE,QAAclmD,KAAKmgF,KAAMF,GAC1C1oG,KAAKkf,0BAON2pF,eAAgB,WAEf,GAAIH,GAAejgF,KAAKsgE,IAAqB,GAAhB1mF,GAAMkxD,QAAgBvzD,KAAKwuC,IAExD,OAAO,GAAMxuC,KAAK2oG,gBAAkBD,GAIrCI,gBAAiB,WAEhB,MAAuB,GAAhBzmG,GAAMssE,QAAclmD,KAAKmgF,KAC/BngF,KAAKsgE,IAAqB,GAAhB1mF,GAAMkxD,QAAgBvzD,KAAKwuC,KAAQxuC,KAAK2jB,OAIpDolF,aAAc,WAGb,MAAO/oG,MAAK2uC,UAAYlmB,KAAK5c,IAAK7L,KAAKyuC,OAAQ,IAIhDk6D,cAAe,WAGd,MAAO3oG,MAAK2uC,UAAYlmB,KAAK3c,IAAK9L,KAAKyuC,OAAQ,IAuChDysD,cAAe,SAAWC,EAAWC,EAAYj7F,EAAGC,EAAG2D,EAAOC,GAE7DhE,KAAKyuC,OAAS0sD,EAAYC,EAEP,OAAdp7F,KAAK4jB,OAET5jB,KAAK4jB,MACJzF,SAAS,EACTg9E,UAAW,EACXC,WAAY,EACZC,QAAS,EACTC,QAAS,EACTv3F,MAAO,EACPC,OAAQ,IAKVhE,KAAK4jB,KAAKzF,SAAU,EACpBne,KAAK4jB,KAAKu3E,UAAYA,EACtBn7F,KAAK4jB,KAAKw3E,WAAaA,EACvBp7F,KAAK4jB,KAAKy3E,QAAUl7F,EACpBH,KAAK4jB,KAAK03E,QAAUl7F,EACpBJ,KAAK4jB,KAAK7f,MAAQA,EAClB/D,KAAK4jB,KAAK5f,OAASA,EAEnBhE,KAAKkf,0BAINq8E,gBAAiB,WAEG,OAAdv7F,KAAK4jB,OAET5jB,KAAK4jB,KAAKzF,SAAU,GAIrBne,KAAKkf,0BAINA,uBAAwB,WAEvB,GAAIrK,GAAO7U,KAAK6U,KACf4O,EAAM5O,EAAO4T,KAAKsgE,IACD,GAAhB1mF,GAAMkxD,QAAgBvzD,KAAKwuC,KAAQxuC,KAAK2jB,KACzC3f,EAAS,EAAIyf,EACb1f,EAAQ/D,KAAKyuC,OAASzqC,EACtBuf,GAAS,GAAMxf,EACf6f,EAAO5jB,KAAK4jB,IAEb,IAAmB,OAAd5jB,KAAK4jB,MAAiB5jB,KAAK4jB,KAAKzF,QAAU,CAE9C,GAAIg9E,GAAYv3E,EAAKu3E,UACpBC,EAAax3E,EAAKw3E,UAEnB73E,IAAQK,EAAKy3E,QAAUt3F,EAAQo3F,EAC/B13E,GAAOG,EAAK03E,QAAUt3F,EAASo3F,EAC/Br3F,GAAS6f,EAAK7f,MAAQo3F,EACtBn3F,GAAU4f,EAAK5f,OAASo3F,EAIzB,GAAI4N,GAAOhpG,KAAK4uC,UACF,KAATo6D,IAAazlF,GAAQ1O,EAAOm0F,EAAOhpG,KAAK+oG,gBAE7C/oG,KAAKmR,iBAAiBwoE,gBAAiBp2D,EAAMA,EAAOxf,EAAO0f,EAAKA,EAAMzf,EAAQ6Q,EAAM7U,KAAK8U,MAI1FuqE,OAAQ,SAAWC,GAElB,GAAIx6E,GAAOud,GAAS8+C,UAAUke,OAAO36E,KAAM1E,KAAMs/E,EAgBjD,OAdAx6E,GAAK8U,OAAO40B,IAAMxuC,KAAKwuC,IACvB1pC,EAAK8U,OAAO+J,KAAO3jB,KAAK2jB,KAExB7e,EAAK8U,OAAO/E,KAAO7U,KAAK6U,KACxB/P,EAAK8U,OAAO9E,IAAM9U,KAAK8U,IACvBhQ,EAAK8U,OAAO80B,MAAQ1uC,KAAK0uC,MAEzB5pC,EAAK8U,OAAO60B,OAASzuC,KAAKyuC,OAEP,OAAdzuC,KAAK4jB,OAAgB9e,EAAK8U,OAAOgK,KAAO5hB,OAAO2rE,UAAY3tE,KAAK4jB,OAErE9e,EAAK8U,OAAO+0B,UAAY3uC,KAAK2uC,UAC7B7pC,EAAK8U,OAAOg1B,WAAa5uC,KAAK4uC,WAEvB9pC,KAkBT+pC,GAAYsyB,UAAYn/D,OAAO2rE,OAAQ3rE,OAAOo+E,OAAQ7xC,GAAkB4yB,YAEvEnJ,YAAanpB,GAEb8M,eAAe,IA6iGhBwL,GAAQga,UAAUpsD,WAAY,EAE9BoyC,GAAQga,UAAU1lD,MAAQ,WAEzB,MAAO,IAAI0rC,IAASnnD,KAAK6O,MAAMw7E,SAAUrqF,KAAKgV,UAI/CmyC,GAAQga,UAAUke,OAAS,WAE1B,OACCx9E,KAAM,UACNgN,MAAO7O,KAAK6O,MAAMw7E,SAClBr1E,QAAShV,KAAKgV,UAqBhBoyC,GAAI+Z,UAAUvsD,OAAQ,EAEtBwyC,GAAI+Z,UAAU1lD,MAAQ,WAErB,MAAO,IAAI2rC,IAAKpnD,KAAK6O,MAAMw7E,SAAUrqF,KAAK6U,KAAM7U,KAAK8U,MAItDsyC,GAAI+Z,UAAUke,OAAS,WAEtB,OACCx9E,KAAM,MACNgN,MAAO7O,KAAK6O,MAAMw7E,SAClBx1E,KAAM7U,KAAK6U,KACXC,IAAK9U,KAAK8U,MAuBZuyC,GAAM8Z,UAAYn/D,OAAO2rE,OAAQ3rE,OAAOo+E,OAAQ/9D,GAAS8+C,YAExDnJ,YAAa3Q,GAEbj2C,KAAM,SAAWy8D,EAAQxI,GAWxB,MATAhjD,IAAS8+C,UAAU/vD,KAAK1M,KAAM1E,KAAM6tE,EAAQxI,GAEjB,OAAtBwI,EAAOniD,aAAsB1rB,KAAK0rB,WAAamiD,EAAOniD,WAAWjQ,SAClD,OAAfoyD,EAAOl5D,MAAe3U,KAAK2U,IAAMk5D,EAAOl5D,IAAI8G,SAChB,OAA5BoyD,EAAOnyB,mBAA4B17C,KAAK07C,iBAAmBmyB,EAAOnyB,iBAAiBjgC,SAExFzb,KAAKoe,WAAayvD,EAAOzvD,WACzBpe,KAAKoD,iBAAmByqE,EAAOzqE,iBAExBpD,MAIRq/E,OAAQ,SAAWC,GAElB,GAAIx6E,GAAOud,GAAS8+C,UAAUke,OAAO36E,KAAM1E,KAAMs/E,EAKjD,OAHyB,QAApBt/E,KAAK0rB,aAAsB5mB,EAAK8U,OAAO8R,WAAa1rB,KAAK0rB,WAAW2zD,OAAQC,IAC/D,OAAbt/E,KAAK2U,MAAe7P,EAAK8U,OAAOjF,IAAM3U,KAAK2U,IAAI0qE,UAE7Cv6E,KA4BTwiD,GAAU6Z,UAAYn/D,OAAO2rE,OAAQ3rE,OAAOo+E,OAAQ/9D,GAAS8+C,YAE5DnJ,YAAa1Q,GAEblM,aAAa,EAEbhqC,KAAM,SAAWy8D,GAEhBxrD,GAAS8+C,UAAU/vD,KAAK1M,KAAM1E,KAAM6tE,GAEpC7tE,KAAKgS,eAAeZ,KAAMy8D,EAAO77D,gBACjChS,KAAKiS,qBAAuB47D,EAAO57D,oBAEnC,KAAM,GAAIjM,GAAI,EAAG8K,EAAI+8D,EAAOx7D,WAAW7R,OAAQwF,EAAI8K,EAAG9K,IAErDhG,KAAKqS,WAAW9H,KAAMsjE,EAAOx7D,WAAYrM,GAI1C,OAAOhG,OAIR+f,IAAK,SAAW1b,EAAS+E,EAAMgnB,EAAU5d,EAAU3D,EAAOD,OAE3C1N,KAATkI,IAAqBA,GAAS,OACjBlI,KAAbkvB,IAAyBA,EAAW,OACxBlvB,KAAZ0N,IAAwBA,EAAU,OACxB1N,KAAV2N,IAAsBA,EAAQ,GAAInD,GAAO,eAC5BxK,KAAbsR,IAAyBA,EAAW2D,IAEzCia,EAAW3H,KAAK5c,IAAKukB,EAAU3H,KAAK3c,IAAK,EAAGskB,IAE5CpwB,KAAKqS,WAAW9H,MACflG,QAASA,EACT+E,KAAMA,EACNgnB,SAAUA,EACVjwB,EAAG,EAAGC,EAAG,EAAGQ,EAAG,EACfkO,MAAO,EACP3L,SAAU,EACVyL,QAASA,EACTC,MAAOA,EACP2D,SAAUA,KAUZN,iBAAkB,WAEjB,GAAIktB,GACAruB,EADGqrF,EAAKp8F,KAAKqS,WAAW7R,OAExByoG,EAAiC,GAAxBjpG,KAAKgS,eAAe7R,EAC7B+oG,EAAiC,GAAxBlpG,KAAKgS,eAAe5R,CAEjC,KAAMg/B,EAAI,EAAGA,EAAIg9D,EAAIh9D,IAEpBruB,EAAQ/Q,KAAKqS,WAAY+sB,GAEzBruB,EAAM5Q,EAAIH,KAAKgS,eAAe7R,EAAI8oG,EAAOl4F,EAAMqf,SAC/Crf,EAAM3Q,EAAIJ,KAAKgS,eAAe5R,EAAI8oG,EAAOn4F,EAAMqf,SAE/Crf,EAAMo4F,eAAiBp4F,EAAM5Q,EAAIsoB,KAAK6jC,GAAK,IAC3Cv7C,EAAM5N,UAAwD,KAA1C4N,EAAMo4F,eAAiBp4F,EAAM5N,aAuCpDokD,GAAe4Z,UAAYn/D,OAAOo+E,OAAQpqE,EAASmrD,WACnD5Z,GAAe4Z,UAAUnJ,YAAczQ,GACvCA,GAAe4Z,UAAUioC,kBAAmB,EAE5C7hD,GAAe4Z,UAAU/vD,KAAO,SAAWy8D,GAS1C,MAPA73D,GAASmrD,UAAU/vD,KAAK1M,KAAM1E,KAAM6tE,GAEpC7tE,KAAK6O,MAAMuC,KAAMy8D,EAAOh/D,OACxB7O,KAAKqF,IAAMwoE,EAAOxoE,IAElBrF,KAAKmD,SAAW0qE,EAAO1qE,SAEhBnD,MAmBRwnD,GAAO2Z,UAAYn/D,OAAO2rE,OAAQ3rE,OAAOo+E,OAAQ/9D,GAAS8+C,YAEzDnJ,YAAaxQ,GAEbvM,UAAU,EAEVqqB,QAAW,WAEV,GAAI+jC,GAAiB,GAAIloG,GACrBmoG,EAAgB,GAAInoG,GACpBooG,EAAa,GAAIpoG,EAErB,OAAO,UAAkBgkE,EAAWC,GAEnCkkC,EAAchqF,sBAAuBtf,KAAKgR,aAC1Cm0D,EAAUN,IAAIi+B,oBAAqBwG,EAAeD,GAElDE,EAAWvqB,mBAAoBh/E,KAAKgR,YACpC,IAAIw4F,GAAcD,EAAWppG,EAAIopG,EAAWnpG,EAAI,CAEhD,MAAKkpG,EAAc93B,kBAAmB63B,GAAmBG,GAAzD,CAEA,GAAIp5E,GAAW+0C,EAAUN,IAAIj6C,OAAO2mD,WAAY83B,EAE3Cj5E,GAAW+0C,EAAUtwD,MAAQub,EAAW+0C,EAAUrwD,KAEvDswD,EAAW76D,MAEV6lB,SAAUA,EACV6C,MAAOo2E,EAAe5tF,QACtBqE,KAAM,KACNlG,OAAQ5Z,YAQXyb,MAAO,WAEN,MAAO,IAAIzb,MAAKg4D,YAAah4D,KAAKmV,UAAW/D,KAAMpR,SA2BrDynD,GAAI0Z,UAAYn/D,OAAO2rE,OAAQ3rE,OAAOo+E,OAAQ/9D,GAAS8+C,YAEtDnJ,YAAavQ,GAEbr2C,KAAM,SAAWy8D,GAEhBxrD,GAAS8+C,UAAU/vD,KAAK1M,KAAM1E,KAAM6tE,GAAQ,EAI5C,KAAM,GAFFnmB,GAASmmB,EAAOnmB,OAEV1hD,EAAI,EAAG8K,EAAI42C,EAAOlnD,OAAQwF,EAAI8K,EAAG9K,IAAO,CAEjD,GAAIyjG,GAAQ/hD,EAAQ1hD,EAEpBhG,MAAK0pG,SAAUD,EAAM7vF,OAAO6B,QAASguF,EAAMr5E,UAI5C,MAAOpwB,OAIR0pG,SAAU,SAAW9vF,EAAQwW,OAEVlvB,KAAbkvB,IAAyBA,EAAW,GAEzCA,EAAW3H,KAAKmF,IAAKwC,EAIrB,KAAM,GAFFs3B,GAAS1nD,KAAK0nD,OAER52C,EAAI,EAAGA,EAAI42C,EAAOlnD,UAEtB4vB,EAAWs3B,EAAQ52C,GAAIsf,UAFOtf,KAUpC42C,EAAO0mB,OAAQt9D,EAAG,GAAKsf,SAAUA,EAAUxW,OAAQA,IAEnD5Z,KAAK+f,IAAKnG,IAIX+vF,qBAAsB,SAAWv5E,GAIhC,IAAM,GAFFs3B,GAAS1nD,KAAK0nD,OAER1hD,EAAI,EAAG8K,EAAI42C,EAAOlnD,OAAQwF,EAAI8K,KAElCsf,EAAWs3B,EAAQ1hD,GAAIoqB,UAFcpqB,KAU3C,MAAO0hD,GAAQ1hD,EAAI,GAAI4T,QAIxB0rD,QAAW,WAEV,GAAIskC,GAAiB,GAAIzoG,EAEzB,OAAO,UAAkBgkE,EAAWC,GAEnCwkC,EAAetqF,sBAAuBtf,KAAKgR,YAE3C,IAAIof,GAAW+0C,EAAUN,IAAIj6C,OAAO2mD,WAAYq4B,EAEhD5pG,MAAK2pG,qBAAsBv5E,GAAWk1C,QAASH,EAAWC,OAM5DxoD,OAAQ,WAEP,GAAIi+C,GAAK,GAAI15D,GACTw6D,EAAK,GAAIx6D,EAEb,OAAO,UAAiByO,GAEvB,GAAI83C,GAAS1nD,KAAK0nD,MAElB,IAAKA,EAAOlnD,OAAS,EAAI,CAExBq6D,EAAGv7C,sBAAuB1P,EAAOoB,aACjC2qD,EAAGr8C,sBAAuBtf,KAAKgR,YAE/B,IAAIof,GAAWyqC,EAAG0W,WAAY5V,EAE9BjU,GAAQ,GAAI9tC,OAAOxE,SAAU,CAE7B,KAAM,GAAIpP,GAAI,EAAG8K,EAAI42C,EAAOlnD,OAAQwF,EAAI8K,GAElCsf,GAAYs3B,EAAQ1hD,GAAIoqB,SAFapqB,IAIzC0hD,EAAQ1hD,EAAI,GAAI4T,OAAOxE,SAAU,EACjCsyC,EAAQ1hD,GAAI4T,OAAOxE,SAAU,CAU/B,MAAQpP,EAAI8K,EAAG9K,IAEd0hD,EAAQ1hD,GAAI4T,OAAOxE,SAAU,OAUjCiqE,OAAQ,SAAWC,GAElB,GAAIx6E,GAAOud,GAAS8+C,UAAUke,OAAO36E,KAAM1E,KAAMs/E,EAEjDx6E,GAAK8U,OAAO8tC,SAIZ,KAAM,GAFFA,GAAS1nD,KAAK0nD,OAER1hD,EAAI,EAAG8K,EAAI42C,EAAOlnD,OAAQwF,EAAI8K,EAAG9K,IAAO,CAEjD,GAAIyjG,GAAQ/hD,EAAQ1hD,EAEpBlB,GAAK8U,OAAO8tC,OAAOn9C,MAClBqP,OAAQ6vF,EAAM7vF,OAAOxX,KACrBguB,SAAUq5E,EAAMr5E,WAKlB,MAAOtrB,MAoDT9C,OAAO2rE,OAAQhmB,GAASwZ,WAEvBrZ,kBAAmB,WAElB9nD,KAAK4nD,eAEL,KAAM,GAAI5hD,GAAI,EAAG2Y,EAAK3e,KAAKy7B,MAAMj7B,OAAQwF,EAAI2Y,EAAI3Y,IAAO,CAEvD,GAAIo2E,GAAU,GAAI/7E,EAEbL,MAAKy7B,MAAOz1B,IAEhBo2E,EAAQprC,WAAYhxC,KAAKy7B,MAAOz1B,GAAIgL,aAIrChR,KAAK4nD,aAAar9C,KAAM6xE,KAM1BzrC,KAAM,WAEL,GAAIi2B,GAAM5gE,EAAG2Y,CAIb,KAAM3Y,EAAI,EAAG2Y,EAAK3e,KAAKy7B,MAAMj7B,OAAQwF,EAAI2Y,EAAI3Y,KAE5C4gE,EAAO5mE,KAAKy7B,MAAOz1B,KAIlB4gE,EAAK51D,YAAYggC,WAAYhxC,KAAK4nD,aAAc5hD,GAQlD,KAAMA,EAAI,EAAG2Y,EAAK3e,KAAKy7B,MAAMj7B,OAAQwF,EAAI2Y,EAAI3Y,KAE5C4gE,EAAO5mE,KAAKy7B,MAAOz1B,MAIb4gE,EAAKhkD,QAAUgkD,EAAKhkD,OAAO4jD,QAE/BI,EAAKvjE,OAAO2tC,WAAY41B,EAAKhkD,OAAO5R,aACpC41D,EAAKvjE,OAAOsc,SAAUinD,EAAK51D,cAI3B41D,EAAKvjE,OAAO+N,KAAMw1D,EAAK51D,aAIxB41D,EAAKvjE,OAAOiS,UAAWsxD,EAAK3zD,SAAU2zD,EAAKrkD,WAAYqkD,EAAK93D,SAQ/D8N,OAAQ,WAEP,GAAIitF,GAAe,GAAIxpG,GACnBypG,EAAiB,GAAIzpG,EAEzB,OAAO,YASN,IAAM,GAPFo7B,GAAQz7B,KAAKy7B,MACbmsB,EAAe5nD,KAAK4nD,aACpBnJ,EAAez+C,KAAKy+C,aACpBH,EAAct+C,KAAKs+C,YAIbt4C,EAAI,EAAG2Y,EAAK8c,EAAMj7B,OAAQwF,EAAI2Y,EAAI3Y,IAAO,CAIlD,GAAI3C,GAASo4B,EAAOz1B,GAAMy1B,EAAOz1B,GAAIgL,YAAc84F,CAEnDD,GAAa50F,iBAAkB5R,EAAQukD,EAAc5hD,IACrD6jG,EAAa9jG,QAAS04C,EAAkB,GAAJz4C,OAIhB9E,KAAhBo9C,IAEJA,EAAYvrC,aAAc,OAQ7B0I,MAAO,WAEN,MAAO,IAAIksC,IAAU3nD,KAAKy7B,MAAOz7B,KAAK4nD,iBAoBxCG,GAAKoZ,UAAYn/D,OAAO2rE,OAAQ3rE,OAAOo+E,OAAQ/9D,GAAS8+C,YAEvDnJ,YAAajQ,GAEbye,QAAQ,IA6BTxe,GAAYmZ,UAAYn/D,OAAO2rE,OAAQ3rE,OAAOo+E,OAAQn1D,GAAKk2C,YAE1DnJ,YAAahQ,GAEbntC,eAAe,EAEfutC,UAAW,WAEV,GAAgBwe,GAAMmjC,EAClB/jG,EAAG2Y,EADH8c,IAGJ,IAAKz7B,KAAKia,cAAoC/Y,KAAxBlB,KAAKia,SAASwhB,MAAsB,CAIzD,IAAMz1B,EAAI,EAAG2Y,EAAK3e,KAAKia,SAASwhB,MAAMj7B,OAAQwF,EAAI2Y,EAAI3Y,IAErD+jG,EAAQ/pG,KAAKia,SAASwhB,MAAOz1B,GAI7B4gE,EAAO,GAAI7e,IACXtsB,EAAMlxB,KAAMq8D,GAIZA,EAAKrkE,KAAOwnG,EAAMxnG,KAClBqkE,EAAK3zD,SAAS29B,UAAWm5D,EAAMC,KAC/BpjC,EAAKrkD,WAAWquB,UAAWm5D,EAAME,UACd/oG,KAAd6oG,EAAMG,KAAoBtjC,EAAK93D,MAAM8hC,UAAWm5D,EAAMG,IAM5D,KAAMlkG,EAAI,EAAG2Y,EAAK3e,KAAKia,SAASwhB,MAAMj7B,OAAQwF,EAAI2Y,EAAI3Y,IAErD+jG,EAAQ/pG,KAAKia,SAASwhB,MAAOz1B,IAEH,IAAnB+jG,EAAMnnF,QAAuC,OAAjBmnF,EAAMnnF,YAAiD1hB,KAA1Bu6B,EAAOsuE,EAAMnnF,QAI5E6Y,EAAOsuE,EAAMnnF,QAAS7C,IAAK0b,EAAOz1B,IAMlChG,KAAK+f,IAAK0b,EAAOz1B,IAapB,MAFAhG,MAAK0f,mBAAmB,GAEjB+b,GAIR4sB,KAAM,SAAW7sB,EAAU0sB,GAE1BloD,KAAKw7B,SAAWA,MAEIt6B,KAAfgnD,IAEJloD,KAAK0f,mBAAmB,GAExB1f,KAAKw7B,SAASssB,oBAEdI,EAAaloD,KAAKgR,aAInBhR,KAAKkoD,WAAW92C,KAAM82C,GACtBloD,KAAKmoD,kBAAkBnX,WAAYkX,IAIpCvX,KAAM,WAEL3wC,KAAKw7B,SAASmV,QAIf2X,qBAAsB,WAErB,GAAIx5C,GAAO9I,CAEX,IAAKhG,KAAKia,UAAYja,KAAKia,SAASW,WAEnC,IAAM5U,EAAI,EAAGA,EAAIhG,KAAKia,SAASsK,YAAY/jB,OAAQwF,IAAO,CAEzD,GAAImkG,GAAKnqG,KAAKia,SAASsK,YAAave,EAEpC8I,GAAQ,EAAMq7F,EAAG74B,kBAEZxiE,IAAU/C,EAAAA,EAEdo+F,EAAG14E,eAAgB3iB,GAInBq7F,EAAGtiG,IAAK,EAAG,EAAG,EAAG,OAMb,IAAK7H,KAAKia,UAAYja,KAAKia,SAASS,iBAAmB,CAE7D,GAAI0vF,GAAM,GAAIvmG,GAEVwmG,EAAarqG,KAAKia,SAAS5L,WAAWg8F,UAE1C,KAAMrkG,EAAI,EAAGA,EAAIqkG,EAAW7oF,MAAOxb,IAElCokG,EAAIjqG,EAAIkqG,EAAWrgD,KAAMhkD,GACzBokG,EAAIhqG,EAAIiqG,EAAWx4B,KAAM7rE,GACzBokG,EAAIxpG,EAAIypG,EAAW7yB,KAAMxxE,GACzBokG,EAAIvpG,EAAIwpG,EAAWlqB,KAAMn6E,GAEzB8I,EAAQ,EAAMs7F,EAAI94B,kBAEbxiE,IAAU/C,EAAAA,EAEdq+F,EAAI34E,eAAgB3iB,GAIpBs7F,EAAIviG,IAAK,EAAG,EAAG,EAAG,GAInBwiG,EAAWzJ,QAAS56F,EAAGokG,EAAIjqG,EAAGiqG,EAAIhqG,EAAGgqG,EAAIxpG,EAAGwpG,EAAIvpG,KAQnD6e,kBAAmB,SAAWk7E,GAE7B3vE,GAAKk2C,UAAUzhD,kBAAkBhb,KAAM1E,KAAM46F,GAEtB,aAAlB56F,KAAKioD,SAETjoD,KAAKmoD,kBAAkBnX,WAAYhxC,KAAKgR,aAEX,aAAlBhR,KAAKioD,SAEhBjoD,KAAKmoD,kBAAkBnX,WAAYhxC,KAAKkoD,YAIxCznD,QAAQqa,KAAM,6CAA+C9a,KAAKioD,WAMpExsC,MAAO,WAEN,MAAO,IAAIzb,MAAKg4D,YAAah4D,KAAKia,SAAUja,KAAKmV,UAAW/D,KAAMpR,SAsCpEy8B,GAAkB0kC,UAAYn/D,OAAOo+E,OAAQpqE,EAASmrD,WACtD1kC,GAAkB0kC,UAAUnJ,YAAcv7B,GAE1CA,GAAkB0kC,UAAUvhB,qBAAsB,EAElDnjB,GAAkB0kC,UAAU/vD,KAAO,SAAWy8D,GAU7C,MARA73D,GAASmrD,UAAU/vD,KAAK1M,KAAM1E,KAAM6tE,GAEpC7tE,KAAK6O,MAAMuC,KAAMy8D,EAAOh/D,OAExB7O,KAAK+b,UAAY8xD,EAAO9xD,UACxB/b,KAAKuoD,QAAUslB,EAAOtlB,QACtBvoD,KAAKwoD,SAAWqlB,EAAOrlB,SAEhBxoD,MA0BRyoD,GAAK0Y,UAAYn/D,OAAO2rE,OAAQ3rE,OAAOo+E,OAAQ/9D,GAAS8+C,YAEvDnJ,YAAavP,GAEbnsC,QAAQ,EAERgpD,QAAW,WAEV,GAAIsiC,GAAgB,GAAIvnG,GACpBwkE,EAAM,GAAIl6C,IACVgrE,EAAS,GAAIj9E,GAEjB,OAAO,UAAkBysD,EAAWC,GAEnC,GAAIh2D,GAAY+1D,EAAUmlC,cACtBC,EAAcn7F,EAAYA,EAE1B6K,EAAWja,KAAKia,SAChBjJ,EAAchR,KAAKgR,WASvB,IALiC,OAA5BiJ,EAAS0K,gBAA0B1K,EAAS4uD,wBAEjD8sB,EAAOvkF,KAAM6I,EAAS0K,gBACtBgxE,EAAO1kF,aAAcD,IAE6B,IAA7Cm0D,EAAUN,IAAI4wB,iBAAkBE,GAArC,CAIAiS,EAAc52D,WAAYhgC,GAC1B6zD,EAAIzzD,KAAM+zD,EAAUN,KAAM5zD,aAAc22F,EAExC,IAAI4C,GAAS,GAAIrpG,GACbspG,EAAO,GAAItpG,GACXupG,EAAe,GAAIvpG,GACnBwpG,EAAW,GAAIxpG,GACfomE,EAASvnE,MAAQA,KAAK2lD,eAAmB,EAAI,CAEjD,IAAK1rC,EAASS,iBAAmB,CAEhC,GAAI+L,GAAQxM,EAASwM,MACjBpY,EAAa4L,EAAS5L,WACtB83D,EAAY93D,EAAW4E,SAAS1N,KAEpC,IAAe,OAAVkhB,EAIJ,IAAM,GAFFP,GAAUO,EAAMlhB,MAEVS,EAAI,EAAG8K,EAAIoV,EAAQ1lB,OAAS,EAAGwF,EAAI8K,EAAG9K,GAAKuhE,EAAO,CAE3D,GAAIpzD,GAAI+R,EAASlgB,GACbmB,EAAI+e,EAASlgB,EAAI,EAErBwkG,GAAO55D,UAAWu1B,EAAe,EAAJhyD,GAC7Bs2F,EAAK75D,UAAWu1B,EAAe,EAAJh/D,EAE3B,IAAIyjG,GAAS/lC,EAAIo+B,oBAAqBuH,EAAQC,EAAME,EAAUD,EAE9D,MAAKE,EAASL,GAAd,CAEAI,EAAS15F,aAAcjR,KAAKgR,YAE5B,IAAIof,GAAW+0C,EAAUN,IAAIj6C,OAAO2mD,WAAYo5B,EAE3Cv6E,GAAW+0C,EAAUtwD,MAAQub,EAAW+0C,EAAUrwD,KAEvDswD,EAAW76D,MAEV6lB,SAAUA,EAGV6C,MAAOy3E,EAAajvF,QAAQxK,aAAcjR,KAAKgR,aAC/CyV,MAAOzgB,EACP8Z,KAAM,KACN6nF,UAAW,KACX/tF,OAAQ5Z,YAQV,KAAM,GAAIgG,GAAI,EAAG8K,EAAIq1D,EAAU3lE,OAAS,EAAI,EAAGwF,EAAI8K,EAAG9K,GAAKuhE,EAAO,CAEjEijC,EAAO55D,UAAWu1B,EAAW,EAAIngE,GACjCykG,EAAK75D,UAAWu1B,EAAW,EAAIngE,EAAI,EAEnC,IAAI4kG,GAAS/lC,EAAIo+B,oBAAqBuH,EAAQC,EAAME,EAAUD,EAE9D,MAAKE,EAASL,GAAd,CAEAI,EAAS15F,aAAcjR,KAAKgR,YAE5B,IAAIof,GAAW+0C,EAAUN,IAAIj6C,OAAO2mD,WAAYo5B,EAE3Cv6E,GAAW+0C,EAAUtwD,MAAQub,EAAW+0C,EAAUrwD,KAEvDswD,EAAW76D,MAEV6lB,SAAUA,EAGV6C,MAAOy3E,EAAajvF,QAAQxK,aAAcjR,KAAKgR,aAC/CyV,MAAOzgB,EACP8Z,KAAM,KACN6nF,UAAW,KACX/tF,OAAQ5Z,aAQL,IAAKia,EAASW,WAKpB,IAAM,GAHFvO,GAAW4N,EAAS5N,SACpBw+F,EAAax+F,EAAS7L,OAEhBwF,EAAI,EAAGA,EAAI6kG,EAAa,EAAG7kG,GAAKuhE,EAAO,CAEhD,GAAIqjC,GAAS/lC,EAAIo+B,oBAAqB52F,EAAUrG,GAAKqG,EAAUrG,EAAI,GAAK2kG,EAAUD,EAElF,MAAKE,EAASL,GAAd,CAEAI,EAAS15F,aAAcjR,KAAKgR,YAE5B,IAAIof,GAAW+0C,EAAUN,IAAIj6C,OAAO2mD,WAAYo5B,EAE3Cv6E,GAAW+0C,EAAUtwD,MAAQub,EAAW+0C,EAAUrwD,KAEvDswD,EAAW76D,MAEV6lB,SAAUA,EAGV6C,MAAOy3E,EAAajvF,QAAQxK,aAAcjR,KAAKgR,aAC/CyV,MAAOzgB,EACP8Z,KAAM,KACN6nF,UAAW,KACX/tF,OAAQ5Z,cAYbyb,MAAO,WAEN,MAAO,IAAIzb,MAAKg4D,YAAah4D,KAAKia,SAAUja,KAAKmV,UAAW/D,KAAMpR,SAkBpE0oD,GAAayY,UAAYn/D,OAAO2rE,OAAQ3rE,OAAOo+E,OAAQ33B,GAAK0Y,YAE3DnJ,YAAatP,GAEb/C,gBAAgB,IAgBjBgD,GAASwY,UAAYn/D,OAAO2rE,OAAQ3rE,OAAOo+E,OAAQ33B,GAAK0Y,YAEvDnJ,YAAarP,GAEb/C,YAAY,IAqCbjpB,GAAewkC,UAAYn/D,OAAOo+E,OAAQpqE,EAASmrD,WACnDxkC,GAAewkC,UAAUnJ,YAAcr7B,GAEvCA,GAAewkC,UAAUnhB,kBAAmB,EAE5CrjB,GAAewkC,UAAU/vD,KAAO,SAAWy8D,GAW1C,MATA73D,GAASmrD,UAAU/vD,KAAK1M,KAAM1E,KAAM6tE,GAEpC7tE,KAAK6O,MAAMuC,KAAMy8D,EAAOh/D,OAExB7O,KAAKqF,IAAMwoE,EAAOxoE,IAElBrF,KAAKoJ,KAAOykE,EAAOzkE,KACnBpJ,KAAKo5B,gBAAkBy0C,EAAOz0C,gBAEvBp5B,MAmBR4oD,GAAOuY,UAAYn/D,OAAO2rE,OAAQ3rE,OAAOo+E,OAAQ/9D,GAAS8+C,YAEzDnJ,YAAapP,GAEbrsC,UAAU,EAEV+oD,QAAW,WAEV,GAAIsiC,GAAgB,GAAIvnG,GACpBwkE,EAAM,GAAIl6C,IACVgrE,EAAS,GAAIj9E,GAEjB,OAAO,UAAkBysD,EAAWC,GA0BnC,QAAS0lC,GAAW73E,EAAOxM,GAE1B,GAAIskF,GAAqBlmC,EAAIm+B,kBAAmB/vE,EAEhD,IAAK83E,EAAqBC,EAAmB,CAE5C,GAAI3B,GAAiBxkC,EAAIi+B,oBAAqB7vE,EAC9Co2E,GAAep4F,aAAcD,EAE7B,IAAIof,GAAW+0C,EAAUN,IAAIj6C,OAAO2mD,WAAY83B,EAEhD,IAAKj5E,EAAW+0C,EAAUtwD,MAAQub,EAAW+0C,EAAUrwD,IAAM,MAE7DswD,GAAW76D,MAEV6lB,SAAUA,EACV66E,cAAexiF,KAAK81B,KAAMwsD,GAC1B93E,MAAOo2E,EAAe5tF,QACtBgL,MAAOA,EACP3G,KAAM,KACNlG,OAAQA,KA5CX,GAAIA,GAAS5Z,KACTia,EAAWja,KAAKia,SAChBjJ,EAAchR,KAAKgR,YACnB+zD,EAAYI,EAAUL,OAAOlc,OAAOmc,SAUxC,IANiC,OAA5B9qD,EAAS0K,gBAA0B1K,EAAS4uD,wBAEjD8sB,EAAOvkF,KAAM6I,EAAS0K,gBACtBgxE,EAAO1kF,aAAcD,GACrB2kF,EAAOh9E,QAAUosD,GAEiC,IAA7CI,EAAUN,IAAI4wB,iBAAkBE,GAArC,CAIAiS,EAAc52D,WAAYhgC,GAC1B6zD,EAAIzzD,KAAM+zD,EAAUN,KAAM5zD,aAAc22F,EAExC,IAAIsD,GAAiBnmC,IAAgB/kE,KAAK8O,MAAM3O,EAAIH,KAAK8O,MAAM1O,EAAIJ,KAAK8O,MAAMlO,GAAM,GAChFoqG,EAAmBE,EAAiBA,EACpCj4F,EAAW,GAAI9R,EA8BnB,IAAK8Y,EAASS,iBAAmB,CAEhC,GAAI+L,GAAQxM,EAASwM,MACjBpY,EAAa4L,EAAS5L,WACtB83D,EAAY93D,EAAW4E,SAAS1N,KAEpC,IAAe,OAAVkhB,EAIJ,IAAM,GAFFP,GAAUO,EAAMlhB,MAEVS,EAAI,EAAG2Y,EAAKuH,EAAQ1lB,OAAQwF,EAAI2Y,EAAI3Y,IAAO,CAEpD,GAAImO,GAAI+R,EAASlgB,EAEjBiN,GAAS29B,UAAWu1B,EAAe,EAAJhyD,GAE/B22F,EAAW73F,EAAUkB,OAMtB,KAAM,GAAInO,GAAI,EAAG8K,EAAIq1D,EAAU3lE,OAAS,EAAGwF,EAAI8K,EAAG9K,IAEjDiN,EAAS29B,UAAWu1B,EAAe,EAAJngE,GAE/B8kG,EAAW73F,EAAUjN,OAUvB,KAAM,GAFFqG,GAAW4N,EAAS5N,SAEdrG,EAAI,EAAG8K,EAAIzE,EAAS7L,OAAQwF,EAAI8K,EAAG9K,IAE5C8kG,EAAWz+F,EAAUrG,GAAKA,QAU9ByV,MAAO,WAEN,MAAO,IAAIzb,MAAKg4D,YAAah4D,KAAKia,SAAUja,KAAKmV,UAAW/D,KAAMpR,SAkBpE6oD,GAAMsY,UAAYn/D,OAAO2rE,OAAQ3rE,OAAOo+E,OAAQ/9D,GAAS8+C,YAExDnJ,YAAanP,KAkCdC,GAAaqY,UAAYn/D,OAAOo+E,OAAQ/+E,EAAQ8/D,WAChDrY,GAAaqY,UAAUnJ,YAAclP,GAyBrCI,GAAkBiY,UAAYn/D,OAAOo+E,OAAQ/+E,EAAQ8/D,WACrDjY,GAAkBiY,UAAUnJ,YAAc9O,GAE1CA,GAAkBiY,UAAUngC,qBAAsB,EAgClDmoB,GAAagY,UAAYn/D,OAAOo+E,OAAQ/+E,EAAQ8/D,WAChDhY,GAAagY,UAAUnJ,YAAc7O,GACrCA,GAAagY,UAAU1+B,gBAAiB,EA4KxC2mB,GAAkB+X,UAAYn/D,OAAOo+E,OAAQ75D,GAAe46C,WAC5D/X,GAAkB+X,UAAUnJ,YAAc5O,GA6B1Cc,GAAmBiX,UAAYn/D,OAAOo+E,OAAQl8D,GAASi9C,WACvDjX,GAAmBiX,UAAUnJ,YAAc9N,GAuH3CI,GAAyB6W,UAAYn/D,OAAOo+E,OAAQ75D,GAAe46C,WACnE7W,GAAyB6W,UAAUnJ,YAAc1N,GA6BjDM,GAAmBuW,UAAYn/D,OAAOo+E,OAAQl8D,GAASi9C,WACvDvW,GAAmBuW,UAAUnJ,YAAcpN,GA8S3CE,GAAyBqW,UAAYn/D,OAAOo+E,OAAQ75D,GAAe46C,WACnErW,GAAyBqW,UAAUnJ,YAAclN,GAyBjD6B,GAAoBwU,UAAYn/D,OAAOo+E,OAAQl8D,GAASi9C,WACxDxU,GAAoBwU,UAAUnJ,YAAcrL,GAyB5CC,GAA0BuU,UAAYn/D,OAAOo+E,OAAQt1B,GAAyBqW,WAC9EvU,GAA0BuU,UAAUnJ,YAAcpL,GAyBlDC,GAAmBsU,UAAYn/D,OAAOo+E,OAAQl8D,GAASi9C,WACvDtU,GAAmBsU,UAAUnJ,YAAcnL,GA4B3CC,GAAyBqU,UAAYn/D,OAAOo+E,OAAQt1B,GAAyBqW,WAC7ErU,GAAyBqU,UAAUnJ,YAAclL,GAyBjDC,GAAoBoU,UAAYn/D,OAAOo+E,OAAQl8D,GAASi9C,WACxDpU,GAAoBoU,UAAUnJ,YAAcjL,GAgC5CC,GAA0BmU,UAAYn/D,OAAOo+E,OAAQt1B,GAAyBqW,WAC9EnU,GAA0BmU,UAAUnJ,YAAchL,GAyBlDE,GAAqBiU,UAAYn/D,OAAOo+E,OAAQl8D,GAASi9C,WACzDjU,GAAqBiU,UAAUnJ,YAAc9K,GAwD7CC,GAA2BgU,UAAYn/D,OAAOo+E,OAAQt1B,GAAyBqW,WAC/EhU,GAA2BgU,UAAUnJ,YAAc7K,GA6CnDC,GAAa+T,UAAYn/D,OAAOo+E,OAAQl8D,GAASi9C,WACjD/T,GAAa+T,UAAUnJ,YAAc5K,GAwKrCM,GAAmByT,UAAYn/D,OAAOo+E,OAAQ75D,GAAe46C,WAC7DzT,GAAmByT,UAAUnJ,YAActK,GAiC3Ca,GAAkB4S,UAAYn/D,OAAOo+E,OAAQl8D,GAASi9C,WACtD5S,GAAkB4S,UAAUnJ,YAAczJ,GAwJ1CI,GAAwBwS,UAAYn/D,OAAOo+E,OAAQ75D,GAAe46C,WAClExS,GAAwBwS,UAAUnJ,YAAcrJ,GA6BhDY,GAAc4R,UAAYn/D,OAAOo+E,OAAQl8D,GAASi9C,WAClD5R,GAAc4R,UAAUnJ,YAAczI,GAwGtCE,GAAoB0R,UAAYn/D,OAAOo+E,OAAQ75D,GAAe46C,WAC9D1R,GAAoB0R,UAAUnJ,YAAcvI,EAM5C,IAAIqD,KAIH2zC,KAAM,SAAW0E,GAKhB,IAAM,GAHFxlG,GAAIwlG,EAAQ3qG,OACZ2T,EAAI,EAEE4pB,EAAIp4B,EAAI,EAAG8oD,EAAI,EAAGA,EAAI9oD,EAAGo4B,EAAI0wB,IAEtCt6C,GAAKg3F,EAASptE,GAAI59B,EAAIgrG,EAAS18C,GAAIruD,EAAI+qG,EAAS18C,GAAItuD,EAAIgrG,EAASptE,GAAI39B,CAItE,OAAW,GAAJ+T,GAIRi3F,YAAa,WAgBZ,QAASC,GAAMF,EAAS/jF,EAAG5gB,EAAG3F,EAAG8E,EAAG2lG,GAEnC,GAAIvtE,GACAigD,EAAIC,EAAIE,EAAIC,EACZ/uB,EAAIC,EAAIi8C,EAAIC,CAWhB,IATAxtB,EAAKmtB,EAASG,EAAOlkF,IAAMjnB,EAC3B89E,EAAKktB,EAASG,EAAOlkF,IAAMhnB,EAE3B+9E,EAAKgtB,EAASG,EAAO9kG,IAAMrG,EAC3Bi+E,EAAK+sB,EAASG,EAAO9kG,IAAMpG,EAE3BivD,EAAK87C,EAASG,EAAOzqG,IAAMV,EAC3BmvD,EAAK67C,EAASG,EAAOzqG,IAAMT,GAEpB+9E,EAAKH,IAAS1uB,EAAK2uB,IAASG,EAAKH,IAAS5uB,EAAK2uB,IAAQ,EAAI,OAAO,CAEzE,IAAIhiB,GAAIC,EAAIwvC,EAAIC,EAAIC,EAAIC,EACpBC,EAAKC,EAAKC,EAAKC,EAAKC,EAAKC,EACzBC,EAAUC,EAAUC,CAMxB,KAJArwC,EAAK3M,EAAK8uB,EAAIliB,EAAK3M,EAAK8uB,EACxBqtB,EAAKztB,EAAK3uB,EAAIq8C,EAAKztB,EAAK3uB,EACxBq8C,EAAKxtB,EAAKH,EAAI4tB,EAAKxtB,EAAKH,EAElBlgD,EAAI,EAAGA,EAAIp4B,EAAGo4B,IAKnB,GAHAwtE,EAAKJ,EAASG,EAAOvtE,IAAM59B,EAC3BqrG,EAAKL,EAASG,EAAOvtE,IAAM39B,IAElBmrG,IAAOvtB,GAAUwtB,IAAOvtB,GAC3BstB,IAAOptB,GAAUqtB,IAAOptB,GACxBmtB,IAAOl8C,GAAUm8C,IAAOl8C,KAE9Bu8C,EAAMN,EAAKvtB,EAAI8tB,EAAMN,EAAKvtB,EAC1B8tB,EAAMR,EAAKptB,EAAI6tB,EAAMR,EAAKptB,EAC1B6tB,EAAMV,EAAKl8C,EAAI68C,EAAMV,EAAKl8C,EAI1B+8C,EAAWrwC,EAAKgwC,EAAM/vC,EAAK8vC,EAC3BI,EAAWR,EAAKG,EAAMF,EAAKC,EAC3BO,EAAWX,EAAKS,EAAMR,EAAKO,EAEpBI,IAAc/+B,OAAOC,SAAe6+B,IAAc9+B,OAAOC,SAAe4+B,IAAc7+B,OAAOC,SAAY,OAAO,CAIxH,QAAO,EAMR,MAAO,UAAsB49B,EAASjlF,GAErC,GAAIvgB,GAAIwlG,EAAQ3qG,MAEhB,IAAKmF,EAAI,EAAI,MAAO,KAEpB,IAMIyhB,GAAG5gB,EAAG3F,EANNqZ,KACHoxF,KACAgB,IAMD,IAAKx5C,GAAW2zC,KAAM0E,GAAY,EAEjC,IAAM3kG,EAAI,EAAGA,EAAIb,EAAGa,IAAO8kG,EAAO9kG,GAAMA,MAIxC,KAAMA,EAAI,EAAGA,EAAIb,EAAGa,IAAO8kG,EAAO9kG,GAAQb,EAAI,EAAMa,CAIrD,IAAI+lG,GAAK5mG,EAIL6b,EAAQ,EAAI+qF,CAEhB,KAAM/lG,EAAI+lG,EAAK,EAAGA,EAAK,GAAK,CAI3B,GAAO/qF,KAAc,EASpB,MAFA/gB,SAAQqa,KAAM,qEAEToL,EAAiBomF,EACfpyF,CAUR,IAJAkN,EAAI5gB,EAAQ+lG,GAAMnlF,IAAIA,EAAI,GAC1B5gB,EAAI4gB,EAAI,EAAQmlF,GAAM/lG,IAAIA,EAAI,GAC9B3F,EAAI2F,EAAI,EAAQ+lG,GAAM1rG,IAAIA,EAAI,GAEzBwqG,EAAMF,EAAS/jF,EAAG5gB,EAAG3F,EAAG0rG,EAAIjB,GAAU,CAE1C,GAAIn3F,GAAGhN,EAAG2c,EAAGkxC,EAAG/H,CAmBhB,KAfA94C,EAAIm3F,EAAOlkF,GACXjgB,EAAImkG,EAAO9kG,GACXsd,EAAIwnF,EAAOzqG,GAIXqZ,EAAO3P,MAAQ4gG,EAASh3F,GACvBg3F,EAAShkG,GACTgkG,EAASrnF,KAGVwoF,EAAY/hG,MAAQ+gG,EAAOlkF,GAAKkkF,EAAO9kG,GAAK8kG,EAAOzqG,KAI7Cm0D,EAAIxuD,EAAGymD,EAAIzmD,EAAI,EAAGymD,EAAIs/C,EAAIv3C,IAAM/H,IAErCq+C,EAAOt2C,GAAMs2C,EAAOr+C,EAIrBs/C,KAIA/qF,EAAQ,EAAI+qF,GAMd,MAAKrmF,GAAiBomF,EACfpyF,MAMT+4C,iBAAkB,SAAWk4C,EAASt4C,GAErC,QAAS25C,GAAiB79E,GAEzB,GAAI7d,GAAI6d,EAAOnuB,MAEVsQ,GAAI,GAAK6d,EAAQ7d,EAAI,GAAI60B,OAAQhX,EAAQ,KAE7CA,EAAOyP,MAST,QAASquE,GAA2BC,EAAUC,EAAUC,GAGvD,MAAKF,GAASvsG,IAAMwsG,EAASxsG,EAEvBusG,EAASvsG,EAAIwsG,EAASxsG,EAEfusG,EAASvsG,GAAKysG,EAAUzsG,GAASysG,EAAUzsG,GAAKwsG,EAASxsG,EAIzDwsG,EAASxsG,GAAKysG,EAAUzsG,GAASysG,EAAUzsG,GAAKusG,EAASvsG,EAMhEusG,EAAStsG,EAAIusG,EAASvsG,EAEfssG,EAAStsG,GAAKwsG,EAAUxsG,GAASwsG,EAAUxsG,GAAKusG,EAASvsG,EAIzDusG,EAASvsG,GAAKwsG,EAAUxsG,GAASwsG,EAAUxsG,GAAKssG,EAAStsG,EAQvE,QAASysG,GAAuBC,EAAWC,EAAWC,EAAWC,EAAWC,GAE3E,GAAIC,GAASJ,EAAU5sG,EAAI2sG,EAAU3sG,EAAGitG,EAASL,EAAU3sG,EAAI0sG,EAAU1sG,EACrEitG,EAASJ,EAAU9sG,EAAI6sG,EAAU7sG,EAAGmtG,EAASL,EAAU7sG,EAAI4sG,EAAU5sG,EAErEmtG,EAAaT,EAAU3sG,EAAI6sG,EAAU7sG,EACrCqtG,EAAaV,EAAU1sG,EAAI4sG,EAAU5sG,EAErCqtG,EAASL,EAASC,EAASF,EAASG,EACpCI,EAAWN,EAASG,EAAaJ,EAASK,CAE9C,IAAK/kF,KAAKmF,IAAK6/E,GAAUngC,OAAOC,QAAU,CAIzC,GAAIogC,EACJ,IAAKF,EAAQ,EAAI,CAEhB,GAAOC,EAAW,GAASA,EAAWD,EAAY,QAElD,KADAE,EAAWL,EAASC,EAAaF,EAASG,GACxB,GAASG,EAAWF,EAAY,aAE5C,CAEN,GAAOC,EAAW,GAASA,EAAWD,EAAY,QAElD,KADAE,EAAWL,EAASC,EAAaF,EAASG,GACxB,GAASG,EAAWF,EAAY,SAMnD,GAAkB,IAAbE,EAEJ,OAAK,GACc,IAAbD,GAAsBA,IAAaD,GAChCX,KAGV,IAAKa,IAAaF,EAEjB,OAAK,GACc,IAAbC,GAAsBA,IAAaD,GAChCV,KAIV,IAAkB,IAAbW,EAAkB,OAASV,EAChC,IAAKU,IAAaD,EAAQ,OAASR,EAGnC,IAAIW,GAAaD,EAAWF,CAC5B,SAAWttG,EAAG2sG,EAAU3sG,EAAIytG,EAAaT,EAAQ/sG,EAAG0sG,EAAU1sG,EAAIwtG,EAAaR,IAK/E,GAAoB,IAAbM,GACHJ,EAASC,GAAeF,EAASG,EAAkB,QAGvD,IAAIK,GAAwB,IAAXV,GAA+B,IAAXC,EACjCU,EAAwB,IAAXT,GAA+B,IAAXC,CAErC,IAAKO,GAAUC,EAEd,MAAOhB,GAAU3sG,IAAM6sG,EAAU7sG,GAC7B2sG,EAAU1sG,IAAM4sG,EAAU5sG,MACrB0sG;2CAIV,IAAKe,EAEJ,MAAOpB,GAA2BO,EAAWC,EAAWH,IAC/CA,KAIV,IAAKgB,EAEJ,MAAOrB,GAA2BK,EAAWC,EAAWC,IAC/CA,KAKV,IAAIe,GAASC,EAASC,EAAYC,EAC9BC,EAASC,EAASC,EAAYC,CAsDlC,OArDgB,KAAXnB,GAGCL,EAAU3sG,EAAI4sG,EAAU5sG,GAE5B4tG,EAAUjB,EAAWmB,EAAanB,EAAU3sG,EAC5C6tG,EAAUjB,EAAWmB,EAAanB,EAAU5sG,IAI5C4tG,EAAUhB,EAAWkB,EAAalB,EAAU5sG,EAC5C6tG,EAAUlB,EAAWoB,EAAapB,EAAU3sG,GAGxC6sG,EAAU7sG,EAAI8sG,EAAU9sG,GAE5BguG,EAAUnB,EAAWqB,EAAarB,EAAU7sG,EAC5CiuG,EAAUnB,EAAWqB,EAAarB,EAAU9sG,IAI5CguG,EAAUlB,EAAWoB,EAAapB,EAAU9sG,EAC5CiuG,EAAUpB,EAAWsB,EAAatB,EAAU7sG,KAOxC2sG,EAAU1sG,EAAI2sG,EAAU3sG,GAE5B2tG,EAAUjB,EAAWmB,EAAanB,EAAU1sG,EAC5C4tG,EAAUjB,EAAWmB,EAAanB,EAAU3sG,IAI5C2tG,EAAUhB,EAAWkB,EAAalB,EAAU3sG,EAC5C4tG,EAAUlB,EAAWoB,EAAapB,EAAU1sG,GAGxC4sG,EAAU5sG,EAAI6sG,EAAU7sG,GAE5B+tG,EAAUnB,EAAWqB,EAAarB,EAAU5sG,EAC5CguG,EAAUnB,EAAWqB,EAAarB,EAAU7sG,IAI5C+tG,EAAUlB,EAAWoB,EAAapB,EAAU7sG,EAC5CguG,EAAUpB,EAAWsB,EAAatB,EAAU5sG,IAKzC6tG,GAAcI,EAEbH,EAAaG,KACbH,IAAeG,EAEdnB,MACIiB,GAGLD,GAAcI,GAAsBH,EAASH,IACzCG,EAASC,GAIbH,EAAaK,KACbL,IAAeK,EAEdpB,MACIa,GAGLG,GAAcI,GAAsBP,EAASC,IACzCD,EAASK,GAQrB,QAASG,GAAoBC,EAAUC,EAAaC,EAAW9B,GAK9D,GAAI+B,GAAaF,EAAYtuG,EAAIquG,EAASruG,EAAGyuG,EAAaH,EAAYruG,EAAIouG,EAASpuG,EAC/EyuG,EAAWH,EAAUvuG,EAAIquG,EAASruG,EAAG2uG,EAAWJ,EAAUtuG,EAAIouG,EAASpuG,EACvE2uG,EAAWnC,EAAUzsG,EAAIquG,EAASruG,EAAG6uG,EAAWpC,EAAUxsG,EAAIouG,EAASpuG,EAGvE6uG,EAAeN,EAAaG,EAAWF,EAAaC,EACpDK,EAAkBP,EAAaK,EAAWJ,EAAaG,CAE3D,IAAKtmF,KAAKmF,IAAKqhF,GAAiB3hC,OAAOC,QAAU,CAIhD,GAAI4hC,GAAiBJ,EAAWD,EAAWE,EAAWH,CAGtD,OAAKI,GAAe,EAGRC,GAAmB,GAASC,GAAiB,EAK7CD,GAAmB,GAASC,GAAiB,EAQzD,MAASD,GAAkB,EAlP7B1C,EAAiBrB,GACjBt4C,EAAMu8C,QAAS5C,EAsaf,KAAM,GARFxmG,GAAG2Y,EAAIygB,EAAGtf,EACb4pC,EAAKjjC,EACL4oF,KAIGC,EAAYnE,EAAQj4C,SAEd2mB,EAAI,EAAG01B,EAAK18C,EAAMryD,OAAQq5E,EAAI01B,EAAI11B,IAE3Ch9D,MAAMskD,UAAU52D,KAAKqiC,MAAO0iE,EAAWz8C,EAAOgnB,GAQ/C,KAAM7zE,EAAI,EAAG2Y,EAAK2wF,EAAU9uG,OAAQwF,EAAI2Y,EAAI3Y,IAE3C0jD,EAAM4lD,EAAWtpG,GAAI7F,EAAI,IAAMmvG,EAAWtpG,GAAI5F,MAEjBc,KAAxBmuG,EAAc3lD,IAElBjpD,QAAQqa,KAAM,oCAAqC4uC,EAAK1jD,GAIzDqpG,EAAc3lD,GAAQ1jD,CAKvB,IAAIwpG,GAvMJ,SAAsBrE,EAASt4C,GA0F9B,IAAM,GAvFF48C,GAiFAC,EAAWC,EACdC,EAASC,EACTC,EAASC,EACTC,EAAWC,EACXC,EAAUC,EAtFP59C,EAAQ44C,EAAQj4C,SA2DhBk9C,KAyBcC,KAIRx2B,EAAI,EAAG01B,EAAK18C,EAAMryD,OAAQq5E,EAAI01B,EAAI11B,IAE3Cu2B,EAAW7lG,KAAMsvE,EAMlB,KAFA,GAAIy2B,GAAgB,EAChBC,EAA8B,EAApBH,EAAW5vG,OACjB4vG,EAAW5vG,OAAS,GAAI,CAG/B,KADA+vG,EACe,EAAI,CAElB9vG,QAAQo6B,IAAK,sGACb,OAMD,IAAM80E,EAAaW,EAAeX,EAAap9C,EAAM/xD,OAAQmvG,IAAgB,CAE5EC,EAAUr9C,EAAOo9C,GACjBD,GAAc,CAGd,KAAM,GAAI71B,GAAI,EAAGA,EAAIu2B,EAAW5vG,OAAQq5E,IAMvC,GAJAi2B,EAAUM,EAAYv2B,GAGtBk2B,EAASH,EAAQzvG,EAAI,IAAMyvG,EAAQxvG,EAAI,IAAM0vG,MACf5uG,KAAzBmvG,EAAYN,GAAjB,CAEAN,EAAO58C,EAAOi9C,EACd,KAAM,GAAIU,GAAK,EAAGA,EAAKf,EAAKjvG,OAAQgwG,IAGnC,GADAX,EAASJ,EAAMe,GA1HnB,SAAgCC,EAAYC,GAG3C,GAAIC,GAAep+C,EAAM/xD,OAAS,EAE9BowG,EAAeH,EAAa,CAC3BG,GAAe,IAAMA,EAAeD,EAEzC,IAAIE,GAAeJ,EAAa,CAC3BI,GAAeF,IAAeE,EAAe,EAElD,IAAIC,GAAcvC,EAAoBh8C,EAAOk+C,GAAcl+C,EAAOq+C,GAAgBr+C,EAAOs+C,GAAgBpB,EAAMiB,GAC/G,KAAOI,EAGN,OAAO,CAKR,IAAIC,GAActB,EAAKjvG,OAAS,EAE5BwwG,EAAcN,EAAY,CACzBM,GAAc,IAAMA,EAAcD,EAEvC,IAAIE,GAAcP,EAAY,CAI9B,OAHKO,GAAcF,IAAcE,EAAc,MAE/CH,EAAcvC,EAAoBkB,EAAMiB,GAAajB,EAAMuB,GAAevB,EAAMwB,GAAe1+C,EAAOk+C,MA+FrEd,EAAYa,KAnF9C,SAA8BU,EAAWC,GAGxC,GAAIC,GAAMC,EAAS5J,CACnB,KAAM2J,EAAO,EAAGA,EAAO7+C,EAAM/xD,OAAQ4wG,IAIpC,GAFAC,EAAUD,EAAO,EAAGC,GAAW9+C,EAAM/xD,OACrCinG,EAAeoF,EAAuBqE,EAAWC,EAAU5+C,EAAO6+C,GAAQ7+C,EAAO8+C,IAAW,GACvF5J,EAAajnG,OAAS,EAAK,OAAO,CAIxC,QAAO,GAwEsBovG,EAASC,KAlEvC,SAA6BqB,EAAWC,GAGvC,GAAIG,GAAOC,EACVC,EAAMH,EAAS5J,CAChB,KAAM6J,EAAQ,EAAGA,EAAQlB,EAAW5vG,OAAQ8wG,IAG3C,IADAC,EAAU1+C,EAAOu9C,EAAYkB,IACvBE,EAAO,EAAGA,EAAOD,EAAQ/wG,OAAQgxG,IAItC,GAFAH,EAAUG,EAAO,EAAGH,GAAWE,EAAQ/wG,OACvCinG,EAAeoF,EAAuBqE,EAAWC,EAAUI,EAASC,GAAQD,EAASF,IAAW,GAC3F5J,EAAajnG,OAAS,EAAK,OAAO,CAKzC,QAAO,GAkDqBovG,EAASC,GAAlC,CAEAH,EAAYc,EACZJ,EAAWhiC,OAAQyL,EAAG,GAEtBm2B,EAAYz9C,EAAM1K,MAAO,EAAG8nD,EAAa,GACzCM,EAAY19C,EAAM1K,MAAO8nD,GACzBO,EAAWT,EAAK5nD,MAAO6nD,GACvBS,EAAWV,EAAK5nD,MAAO,EAAG6nD,EAAY,GAEtCn9C,EAAQy9C,EAAU98C,OAAQg9C,GAAWh9C,OAAQi9C,GAAWj9C,OAAQ+8C,GAEhEK,EAAgBX,CAKhB,OAGD,GAAKD,GAAa,EAAI,KAEtBW,GAAYN,IAAW,EAGxB,GAAKL,GAAa,EAAI,OAMxB,MAAOn9C,IAsC6B44C,EAASt4C,GAE1C4+C,EAAY3+C,GAAWs4C,YAAaoE,GAAmB,EAK3D,KAAMxpG,EAAI,EAAG2Y,EAAK8yF,EAAUjxG,OAAQwF,EAAI2Y,EAAI3Y,IAI3C,IAFA8Z,EAAO2xF,EAAWzrG,GAEZo5B,EAAI,EAAGA,EAAI,EAAGA,IAEnBsqB,EAAM5pC,EAAMsf,GAAIj/B,EAAI,IAAM2f,EAAMsf,GAAIh/B,MAIrBc,MAFfulB,EAAQ4oF,EAAc3lD,MAIrB5pC,EAAMsf,GAAM3Y,EAQf,OAAOgrF,GAAUv+C,UAIlBH,YAAa,SAAW2+C,GAEvB,MAAO5+C,IAAW2zC,KAAMiL,GAAQ,GAgDlChiD,IAAgByR,UAAYn/D,OAAOo+E,OAAQl8D,GAASi9C,WACpDzR,GAAgByR,UAAUnJ,YAActI,GAgCxCE,GAAsBuR,UAAYn/D,OAAOo+E,OAAQ75D,GAAe46C,WAChEvR,GAAsBuR,UAAUnJ,YAAcpI,GAE9CA,GAAsBuR,UAAUwwC,UAAY,WAE3C,GAAIC,GAAoB5xG,KAAKonE,aAAc,YACvCyqC,EAAgBD,EAAoB/0F,MAAMskD,UAAUtZ,MAAMnjD,KAAMktG,EAAkBrsG,UAElFusG,EAAc9xG,KAAKonE,aAAc,MACjCziB,EAAUmtD,EAAcj1F,MAAMskD,UAAUtZ,MAAMnjD,KAAMotG,EAAYvsG,UAEhEwsG,EAAiB/xG,KAAKymB,KAG1B,QACCxT,SAAU4+F,EACVrjG,GAAIm2C,EACJl+B,MALkBsrF,EAAiBl1F,MAAMskD,UAAUtZ,MAAMnjD,KAAMqtG,EAAexsG,YAUhFqqD,GAAsBuR,UAAUtR,aAAe,SAAWF,EAAQ1rD,GAEjE,GAAI+tG,GAAKriD,EAAOnvD,MAChByD,GAAQguG,OAASjyG,KAAK2xG,WAEtB,KAAM,GAAI38C,GAAI,EAAGA,EAAIg9C,EAAIh9C,IAAO,CAE/B,GAAIzC,GAAQ5C,EAAQqF,EACpBh1D,MAAKsyD,SAAUC,EAAOtuD,GAIvBjE,KAAK2oB,SAAU1kB,EAAQguG,OAAOxrF,OAC9BzmB,KAAK4oB,aAAc,WAAY,GAAI7C,IAAwB9hB,EAAQguG,OAAOh/F,SAAU,IACpFjT,KAAK4oB,aAAc,KAAM,GAAI7C,IAAwB9hB,EAAQguG,OAAOzjG,GAAI,KAIzEohD,GAAsBuR,UAAU7O,SAAW,SAAWC,EAAOtuD,GA4G5D,QAASiuG,GAAUC,EAAI/H,EAAKhhG,GAI3B,MAFOghG,IAAM3pG,QAAQC,MAAO,6CAErB0pG,EAAI3uF,QAAQgW,eAAgBroB,GAAO2W,IAAKoyF,GAYhD,QAASC,GAAaC,EAAMC,EAAQC,GASnC,GAAIC,GAAWC,EAAWC,EAKtBC,EAAWN,EAAKlyG,EAAImyG,EAAOnyG,EAC9ByyG,EAAWP,EAAKjyG,EAAIkyG,EAAOlyG,EACxByyG,EAAWN,EAAOpyG,EAAIkyG,EAAKlyG,EAC9B2yG,EAAWP,EAAOnyG,EAAIiyG,EAAKjyG,EAExB2yG,EAAiBJ,EAAWA,EAAWC,EAAWA,EAGlDI,EAAeL,EAAWG,EAAWF,EAAWC,CAEpD,IAAKpqF,KAAKmF,IAAKolF,GAAe1lC,OAAOC,QAAU,CAM9C,GAAI0lC,GAAaxqF,KAAK81B,KAAMw0D,GACxBG,EAAazqF,KAAK81B,KAAMs0D,EAAWA,EAAWC,EAAWA,GAIzDK,EAAkBb,EAAOnyG,EAAIyyG,EAAWK,EACxCG,EAAkBd,EAAOlyG,EAAIuyG,EAAWM,EAExCI,EAAkBd,EAAOpyG,EAAI2yG,EAAWI,EACxCI,EAAkBf,EAAOnyG,EAAIyyG,EAAWK,EAIxCK,IAASF,EAAgBF,GAAkBL,GAC3CQ,EAAgBF,GAAkBP,IACnCF,EAAWG,EAAWF,EAAWC,EAIpCL,GAAcW,EAAgBR,EAAWY,EAAKlB,EAAKlyG,EACnDsyG,EAAcW,EAAgBR,EAAWW,EAAKlB,EAAKjyG,CAInD,IAAIozG,GAAkBhB,EAAYA,EAAYC,EAAYA,CAC1D,IAAKe,GAAiB,EAErB,MAAO,IAAItzG,GAASsyG,EAAWC,EAI/BC,GAAYjqF,KAAK81B,KAAMi1D,EAAgB,OAIlC,CAIN,GAAIC,IAAe,CACdd,GAAWrlC,OAAOC,QAEjBslC,EAAWvlC,OAAOC,UAEtBkmC,GAAe,GAMXd,GAAarlC,OAAOC,QAEnBslC,GAAavlC,OAAOC,UAExBkmC,GAAe,GAMXhrF,KAAK4rC,KAAMu+C,KAAenqF,KAAK4rC,KAAMy+C,KAEzCW,GAAe,GAQbA,GAGJjB,GAAcI,EACdH,EAAYE,EACZD,EAAYjqF,KAAK81B,KAAMw0D,KAKvBP,EAAYG,EACZF,EAAYG,EACZF,EAAYjqF,KAAK81B,KAAMw0D,EAAe,IAMxC,MAAO,IAAI7yG,GAASsyG,EAAYE,EAAWD,EAAYC,GA0RxD,QAASgB,GAAWvI,EAASwI,GAE5B,GAAIxhG,GAAG6K,CAGP,KAFAhX,EAAImlG,EAAQ3qG,SAEDwF,GAAK,GAAI,CAEnBmM,EAAInM,EACJgX,EAAIhX,EAAI,EACHgX,EAAI,IAAIA,EAAImuF,EAAQ3qG,OAAS,EAIlC,IAAIw0D,GAAI,EACPg9C,EAAK4B,EAAwB,EAAhBC,CAEd,KAAM7+C,EAAI,EAAGA,EAAIg9C,EAAIh9C,IAAO,CAE3B,GAAI8+C,GAAQC,EAAO/+C,EACfg/C,EAAQD,GAAS/+C,EAAI,EAOzBi/C,GALQN,EAAcxhG,EAAI2hG,EACrBH,EAAc32F,EAAI82F,EAClBH,EAAc32F,EAAIg3F,EAClBL,EAAcxhG,EAAI6hG,KAU1B,QAASxtG,GAAGrG,EAAGC,EAAGQ,GAEjBszG,EAAY3pG,KAAMpK,GAClB+zG,EAAY3pG,KAAMnK,GAClB8zG,EAAY3pG,KAAM3J,GAKnB,QAASuzG,GAAIhgG,EAAGhN,EAAG2c,GAElBswF,EAAWjgG,GACXigG,EAAWjtG,GACXitG,EAAWtwF,EAEX,IAAIuwF,GAAYxC,EAAcrxG,OAAS,EACnC4lB,EAAMkuF,EAAMC,cAAe74F,EAAOm2F,EAAewC,EAAY,EAAGA,EAAY,EAAGA,EAAY,EAE/FG,GAAOpuF,EAAK,IACZouF,EAAOpuF,EAAK,IACZouF,EAAOpuF,EAAK,IAIb,QAAS6tF,GAAI9/F,EAAGhN,EAAG2c,EAAGwE,GAErB8rF,EAAWjgG,GACXigG,EAAWjtG,GACXitG,EAAW9rF,GAEX8rF,EAAWjtG,GACXitG,EAAWtwF,GACXswF,EAAW9rF,EAGX,IAAI+rF,GAAYxC,EAAcrxG,OAAS,EACnC4lB,EAAMkuF,EAAMG,mBAAoB/4F,EAAOm2F,EAAewC,EAAY,EAAGA,EAAY,EAAGA,EAAY,EAAGA,EAAY,EAEnHG,GAAOpuF,EAAK,IACZouF,EAAOpuF,EAAK,IACZouF,EAAOpuF,EAAK,IAEZouF,EAAOpuF,EAAK,IACZouF,EAAOpuF,EAAK,IACZouF,EAAOpuF,EAAK,IAIb,QAASguF,GAAW3tF,GAEnBiuF,EAAanqG,KAAMsnG,EAAcrxG,OAAS,GAC1CqxG,EAActnG,KAAM2pG,EAAqB,EAARztF,EAAY,IAC7CorF,EAActnG,KAAM2pG,EAAqB,EAARztF,EAAY,IAC7CorF,EAActnG,KAAM2pG,EAAqB,EAARztF,EAAY,IAK9C,QAAS+tF,GAAOG,GAEfhwD,EAAQp6C,KAAMoqG,EAAQx0G,GACtBwkD,EAAQp6C,KAAMoqG,EAAQv0G,GAzmBvB,GAqBIw0G,GAKAC,EAAYC,EAAUj8F,EAAQk8F,EA1B9B9C,EAAShuG,EAAQguG,OAAShuG,EAAQguG,OAASjyG,KAAK2xG,YAChDE,EAAgBI,EAAOh/F,SACvByhG,EAAezC,EAAOxrF,MACtBk+B,EAAUstD,EAAOzjG,GAEjB0lG,KAGA7jD,MAA4BnvD,KAAnB+C,EAAQosD,OAAuBpsD,EAAQosD,OAAS,IAEzDC,MAA4CpvD,KAA3B+C,EAAQqsD,eAA+BrsD,EAAQqsD,eAAiB,EACjFC,MAAkCrvD,KAAtB+C,EAAQssD,UAA0BtsD,EAAQssD,UAAYD,EAAiB,EACnFujD,MAA0C3yG,KAA1B+C,EAAQ4vG,cAA8B5vG,EAAQ4vG,cAAgB,EAE9ErjD,MAAwCtvD,KAAzB+C,EAAQusD,cAA6BvsD,EAAQusD,aAE5DJ,MAA0ClvD,KAA1B+C,EAAQmsD,cAA8BnsD,EAAQmsD,cAAgB,GAE9EwjD,MAA0B1yG,KAAlB+C,EAAQ2vG,MAAsB3vG,EAAQ2vG,MAAQ,EAEtDoB,EAAc/wG,EAAQ+wG,YACVC,GAAgB,EAG5BX,MAAgCpzG,KAAxB+C,EAAQixG,YAA4BjxG,EAAQixG,YAAcxlD,GAAgBylD,gBAGjFH,KAEJJ,EAAaI,EAAYI,gBAAiBxB,GAE1CqB,GAAgB,EAChBzkD,GAAe,EAMfqkD,MAAgC3zG,KAAnB+C,EAAQgqD,OAAuBhqD,EAAQgqD,OAAS+mD,EAAY1mD,oBAAqBslD,GAAO,GAIrGkB,EAAW,GAAI3zG,GACf0X,EAAS,GAAI1X,GACb4zG,EAAY,GAAI5zG,IAMVqvD,IAENqjD,EAAgB,EAChBvjD,EAAiB,EACjBC,EAAY,EAMb,IAAI8kD,GAAOx7B,EAAG01B,EACV7zF,EAAQ1b,KAERs1G,EAAc/iD,EAAMG,cAAetC,GAEnC/jD,EAAWipG,EAAY/iD,MACvBM,EAAQyiD,EAAYziD,KAIxB,KAFgBC,GAAWC,YAAa1mD,GAQvC,IAJAA,EAAWA,EAAS2mD,UAId6mB,EAAI,EAAG01B,EAAK18C,EAAMryD,OAAQq5E,EAAI01B,EAAI11B,IAEvCw7B,EAAQxiD,EAAOgnB,GAEV/mB,GAAWC,YAAasiD,KAE5BxiD,EAAOgnB,GAAMw7B,EAAMriD,UAStB,IAAI1mD,GAAQwmD,GAAWG,iBAAkB5mD,EAAUwmD,GAI/Cs4C,EAAU9+F,CAEd,KAAMwtE,EAAI,EAAG01B,EAAK18C,EAAMryD,OAAQq5E,EAAI01B,EAAI11B,IAEvCw7B,EAAQxiD,EAAOgnB,GAEfxtE,EAAWA,EAAS6mD,OAAQmiD,EAkJ7B,KAAM,GArIFluG,GAAGouG,EAAItoD,EAAGrsD,EACb40G,EACA11F,EADMi0F,EAAO1nG,EAAS7L,OAChBi1G,EAAOnpG,EAAM9L,OAiIhBk1G,KAEM1vG,EAAI,EAAG2Y,EAAKwsF,EAAQ3qG,OAAQ2R,EAAIwM,EAAK,EAAG3B,EAAIhX,EAAI,EAAGA,EAAI2Y,EAAI3Y,IAAMmM,IAAM6K,IAE3E7K,IAAMwM,IAAKxM,EAAI,GACf6K,IAAM2B,IAAK3B,EAAI,GAKpB04F,EAAkB1vG,GAAMosG,EAAajH,EAASnlG,GAAKmlG,EAASh5F,GAAKg5F,EAASnuF,GAI3E,IACC24F,IADGC,MACeC,GAAoBH,EAAiBxiD,QAExD,KAAM2mB,EAAI,EAAG01B,EAAK18C,EAAMryD,OAAQq5E,EAAI01B,EAAI11B,IAAO,CAM9C,IAJAw7B,EAAQxiD,EAAOgnB,GAEf87B,MAEM3vG,EAAI,EAAG2Y,EAAK02F,EAAM70G,OAAQ2R,EAAIwM,EAAK,EAAG3B,EAAIhX,EAAI,EAAGA,EAAI2Y,EAAI3Y,IAAMmM,IAAM6K,IAErE7K,IAAMwM,IAAKxM,EAAI,GACf6K,IAAM2B,IAAK3B,EAAI,GAGpB24F,GAAkB3vG,GAAMosG,EAAaiD,EAAOrvG,GAAKqvG,EAAOljG,GAAKkjG,EAAOr4F,GAIrE44F,IAAerrG,KAAMorG,IACrBE,GAAoBA,GAAkB3iD,OAAQyiD,IAO/C,IAAMxuG,EAAI,EAAGA,EAAI0sG,EAAe1sG,IAAO,CAUtC,IANA8lD,EAAI9lD,EAAI0sG,EACRjzG,EAAI0vD,EAAiB7nC,KAAKyJ,IAAK+6B,EAAIxkC,KAAK6jC,GAAK,GAC7CipD,EAAKhlD,EAAY9nC,KAAK0lC,IAAKlB,EAAIxkC,KAAK6jC,GAAK,GAInCtmD,EAAI,EAAG2Y,EAAKwsF,EAAQ3qG,OAAQwF,EAAI2Y,EAAI3Y,IAEzCwvG,EAAOtD,EAAU/G,EAASnlG,GAAK0vG,EAAkB1vG,GAAKuvG,GAEtD/uG,EAAGgvG,EAAKr1G,EAAGq1G,EAAKp1G,GAAKQ,EAMtB,KAAMi5E,EAAI,EAAG01B,EAAK18C,EAAMryD,OAAQq5E,EAAI01B,EAAI11B,IAKvC,IAHAw7B,EAAQxiD,EAAOgnB,GACf87B,GAAmBC,GAAgB/7B,GAE7B7zE,EAAI,EAAG2Y,EAAK02F,EAAM70G,OAAQwF,EAAI2Y,EAAI3Y,IAEvCwvG,EAAOtD,EAAUmD,EAAOrvG,GAAK2vG,GAAkB3vG,GAAKuvG,GAEpD/uG,EAAGgvG,EAAKr1G,EAAGq1G,EAAKp1G,GAAKQ,GAYxB,IAJA20G,EAAKhlD,EAICvqD,EAAI,EAAGA,EAAI+tG,EAAM/tG,IAEtBwvG,EAAOhlD,EAAe0hD,EAAU7lG,EAAUrG,GAAK6vG,GAAmB7vG,GAAKuvG,GAAOlpG,EAAUrG,GAEjFivG,GAQNp8F,EAAOzH,KAAMyjG,EAAW1uF,QAAS,IAAMsL,eAAgB+jF,EAAKr1G,GAC5D20G,EAAS1jG,KAAMyjG,EAAWjnD,UAAW,IAAMn8B,eAAgB+jF,EAAKp1G,GAEhE20G,EAAU3jG,KAAMwjG,EAAY,IAAM70F,IAAKlH,GAASkH,IAAK+0F,GAErDtuG,EAAGuuG,EAAU50G,EAAG40G,EAAU30G,EAAG20G,EAAUn0G,IAXvC4F,EAAGgvG,EAAKr1G,EAAGq1G,EAAKp1G,EAAG,EAoBrB,IAAI40D,GAEJ,KAAMA,GAAI,EAAGA,IAAK4+C,EAAO5+C,KAExB,IAAMhvD,EAAI,EAAGA,EAAI+tG,EAAM/tG,IAEtBwvG,EAAOhlD,EAAe0hD,EAAU7lG,EAAUrG,GAAK6vG,GAAmB7vG,GAAKuvG,GAAOlpG,EAAUrG,GAEjFivG,GAQNp8F,EAAOzH,KAAMyjG,EAAW1uF,QAAS6uC,KAAMvjC,eAAgB+jF,EAAKr1G,GAC5D20G,EAAS1jG,KAAMyjG,EAAWjnD,UAAWoH,KAAMvjC,eAAgB+jF,EAAKp1G,GAEhE20G,EAAU3jG,KAAMwjG,EAAY5/C,KAAMj1C,IAAKlH,GAASkH,IAAK+0F,GAErDtuG,EAAGuuG,EAAU50G,EAAG40G,EAAU30G,EAAG20G,EAAUn0G,IAXvC4F,EAAGgvG,EAAKr1G,EAAGq1G,EAAKp1G,EAAGiwD,EAASujD,EAAQ5+C,GAuBvC,KAAM7tD,EAAI0sG,EAAgB,EAAG1sG,GAAK,EAAGA,IAAO,CAQ3C,IANA8lD,EAAI9lD,EAAI0sG,EACRjzG,EAAI0vD,EAAiB7nC,KAAKyJ,IAAK+6B,EAAIxkC,KAAK6jC,GAAK,GAC7CipD,EAAKhlD,EAAY9nC,KAAK0lC,IAAKlB,EAAIxkC,KAAK6jC,GAAK,GAInCtmD,EAAI,EAAG2Y,EAAKwsF,EAAQ3qG,OAAQwF,EAAI2Y,EAAI3Y,IAEzCwvG,EAAOtD,EAAU/G,EAASnlG,GAAK0vG,EAAkB1vG,GAAKuvG,GACtD/uG,EAAGgvG,EAAKr1G,EAAGq1G,EAAKp1G,EAAGiwD,EAASzvD,EAM7B,KAAMi5E,EAAI,EAAG01B,EAAK18C,EAAMryD,OAAQq5E,EAAI01B,EAAI11B,IAKvC,IAHAw7B,EAAQxiD,EAAOgnB,GACf87B,GAAmBC,GAAgB/7B,GAE7B7zE,EAAI,EAAG2Y,EAAK02F,EAAM70G,OAAQwF,EAAI2Y,EAAI3Y,IAEvCwvG,EAAOtD,EAAUmD,EAAOrvG,GAAK2vG,GAAkB3vG,GAAKuvG,GAE7CN,EAMNzuG,EAAGgvG,EAAKr1G,EAAGq1G,EAAKp1G,EAAIw0G,EAAYhB,EAAQ,GAAIxzG,EAAGw0G,EAAYhB,EAAQ,GAAIzzG,EAAIS,GAJ3E4F,EAAGgvG,EAAKr1G,EAAGq1G,EAAKp1G,EAAGiwD,EAASzvD,IA2BhC,WAEC,GAAI+lB,GAAQkrF,EAAcrxG,OAAS,CAEnC,IAAKgwD,EAAe,CAEnB,GAAIlf,GAAQ,EACRtuC,EAAS+wG,EAAOziE,CAIpB,KAAMtrC,EAAI,EAAGA,EAAIyvG,EAAMzvG,IAEtB8Z,EAAOxT,EAAOtG,GACdmuG,EAAIr0F,EAAM,GAAM9c,EAAQ8c,EAAM,GAAM9c,EAAQ8c,EAAM,GAAM9c,EASzD,KALAsuC,EAAQsiE,EAAwB,EAAhBC,EAChB7wG,EAAS+wG,EAAOziE,EAIVtrC,EAAI,EAAGA,EAAIyvG,EAAMzvG,IAEtB8Z,EAAOxT,EAAOtG,GACdmuG,EAAIr0F,EAAM,GAAM9c,EAAQ8c,EAAM,GAAM9c,EAAQ8c,EAAM,GAAM9c,OAInD,CAIN,IAAMgD,EAAI,EAAGA,EAAIyvG,EAAMzvG,IAEtB8Z,EAAOxT,EAAOtG,GACdmuG,EAAIr0F,EAAM,GAAKA,EAAM,GAAKA,EAAM,GAMjC,KAAM9Z,EAAI,EAAGA,EAAIyvG,EAAMzvG,IAEtB8Z,EAAOxT,EAAOtG,GACdmuG,EAAIr0F,EAAM,GAAMi0F,EAAOH,EAAO9zF,EAAM,GAAMi0F,EAAOH,EAAO9zF,EAAM,GAAMi0F,EAAOH,GAM7El4F,EAAM6M,SAAU5B,EAAOkrF,EAAcrxG,OAAS,EAAImmB,MAA4BzlB,KAArB+C,EAAQkR,SAAyBlR,EAAQkR,SAAW,MAM9G,WAEC,GAAIwR,GAAQkrF,EAAcrxG,OAAS,EAC/BmzG,EAAc,CAIlB,KAHAD,EAAWvI,EAASwI,GACpBA,GAAexI,EAAQ3qG,OAEjBq5E,EAAI,EAAG01B,EAAK18C,EAAMryD,OAAQq5E,EAAI01B,EAAI11B,IAEvCw7B,EAAQxiD,EAAOgnB,GACf65B,EAAW2B,EAAO1B,GAGlBA,GAAe0B,EAAM70G,MAKtBkb,GAAM6M,SAAU5B,EAAOkrF,EAAcrxG,OAAS,EAAImmB,MAAmCzlB,KAA5B+C,EAAQ6xG,gBAAgC7xG,EAAQ6xG,gBAAkB,MAwGrH7xG,EAAQguG,SAEdjyG,KAAK2oB,SAAU+rF,GACf10G,KAAK4oB,aAAc,WAAY,GAAI7C,IAAwB8rF,EAAe,IAC1E7xG,KAAK4oB,aAAc,KAAM,GAAI7C,IAAwB9hB,EAAQguG,OAAOzjG,GAAI,MAM1EkhD,GAAgBylD,kBAEfZ,cAAe,SAAWt6F,EAAU5N,EAAU0pG,EAAQC,EAAQC,GAE7D,GAAIC,GAAM7pG,EAAmB,EAAT0pG,GAChBI,EAAM9pG,EAAmB,EAAT0pG,EAAa,GAC7BK,EAAM/pG,EAAmB,EAAT2pG,GAChBK,EAAMhqG,EAAmB,EAAT2pG,EAAa,GAC7BM,EAAMjqG,EAAmB,EAAT4pG,GAChBM,EAAMlqG,EAAmB,EAAT4pG,EAAa,EAEjC,QACC,GAAI/1G,GAASg2G,EAAKC,GAClB,GAAIj2G,GAASk2G,EAAKC,GAClB,GAAIn2G,GAASo2G,EAAKC,KAKpB9B,mBAAoB,SAAWx6F,EAAU5N,EAAU0pG,EAAQC,EAAQC,EAAQO,GAE1E,GAAIN,GAAM7pG,EAAmB,EAAT0pG,GAChBI,EAAM9pG,EAAmB,EAAT0pG,EAAa,GAC7BU,EAAMpqG,EAAmB,EAAT0pG,EAAa,GAC7BK,EAAM/pG,EAAmB,EAAT2pG,GAChBK,EAAMhqG,EAAmB,EAAT2pG,EAAa,GAC7BU,EAAMrqG,EAAmB,EAAT2pG,EAAa,GAC7BM,EAAMjqG,EAAmB,EAAT4pG,GAChBM,EAAMlqG,EAAmB,EAAT4pG,EAAa,GAC7BU,EAAMtqG,EAAmB,EAAT4pG,EAAa,GAC7BW,EAAMvqG,EAAmB,EAATmqG,GAChBK,EAAMxqG,EAAmB,EAATmqG,EAAa,GAC7BM,EAAMzqG,EAAmB,EAATmqG,EAAa,EAEjC,OAAK/tF,MAAKmF,IAAKuoF,EAAME,GAAQ,KAG3B,GAAIn2G,GAASg2G,EAAK,EAAIO,GACtB,GAAIv2G,GAASk2G,EAAK,EAAIM,GACtB,GAAIx2G,GAASo2G,EAAK,EAAIK,GACtB,GAAIz2G,GAAS02G,EAAK,EAAIE,KAMtB,GAAI52G,GAASi2G,EAAK,EAAIM,GACtB,GAAIv2G,GAASm2G,EAAK,EAAIK,GACtB,GAAIx2G,GAASq2G,EAAK,EAAII,GACtB,GAAIz2G,GAAS22G,EAAK,EAAIC,MA6C1BhnD,GAAaqR,UAAYn/D,OAAOo+E,OAAQl8D,GAASi9C,WACjDrR,GAAaqR,UAAUnJ,YAAclI,GAmCrCE,GAAmBmR,UAAYn/D,OAAOo+E,OAAQxwB,GAAsBuR,WACpEnR,GAAmBmR,UAAUnJ,YAAchI,GA+B3CS,GAAe0Q,UAAYn/D,OAAOo+E,OAAQl8D,GAASi9C,WACnD1Q,GAAe0Q,UAAUnJ,YAAcvH,GAgHvCK,GAAqBqQ,UAAYn/D,OAAOo+E,OAAQ75D,GAAe46C,WAC/DrQ,GAAqBqQ,UAAUnJ,YAAclH,GA6B7CI,GAAaiQ,UAAYn/D,OAAOo+E,OAAQl8D,GAASi9C,WACjDjQ,GAAaiQ,UAAUnJ,YAAc9G,GAiHrCK,GAAmB4P,UAAYn/D,OAAOo+E,OAAQ75D,GAAe46C,WAC7D5P,GAAmB4P,UAAUnJ,YAAczG,GA6B3CI,GAAcwP,UAAYn/D,OAAOo+E,OAAQl8D,GAASi9C,WAClDxP,GAAcwP,UAAUnJ,YAAcrG,GAmJtCE,GAAoBsP,UAAYn/D,OAAOo+E,OAAQ75D,GAAe46C,WAC9DtP,GAAoBsP,UAAUnJ,YAAcnG,GAiC5CO,GAAc+O,UAAYn/D,OAAOo+E,OAAQl8D,GAASi9C,WAClD/O,GAAc+O,UAAUnJ,YAAc5F,GAsItCC,GAAoB8O,UAAYn/D,OAAOo+E,OAAQ75D,GAAe46C,WAC9D9O,GAAoB8O,UAAUnJ,YAAc3F,GAyG5Cc,GAAcgO,UAAYn/D,OAAOo+E,OAAQ75D,GAAe46C,WACxDhO,GAAcgO,UAAUnJ,YAAc7E,GA+BtCU,GAAiBsN,UAAYn/D,OAAOo+E,OAAQl8D,GAASi9C,WACrDtN,GAAiBsN,UAAUnJ,YAAcnE,GAmRzCI,GAAuBkN,UAAYn/D,OAAOo+E,OAAQ75D,GAAe46C,WACjElN,GAAuBkN,UAAUnJ,YAAc/D,GA0B/CW,GAAauM,UAAYn/D,OAAOo+E,OAAQvsB,GAAiBsN,WACzDvM,GAAauM,UAAUnJ,YAAcpD,GAsBrCC,GAAmBsM,UAAYn/D,OAAOo+E,OAAQnsB,GAAuBkN,WACrEtM,GAAmBsM,UAAUnJ,YAAcnD,GA4B3CC,GAAeqM,UAAYn/D,OAAOo+E,OAAQl8D,GAASi9C,WACnDrM,GAAeqM,UAAUnJ,YAAclD,GAmFvCC,GAAqBoM,UAAYn/D,OAAOo+E,OAAQ75D,GAAe46C,WAC/DpM,GAAqBoM,UAAUnJ,YAAcjD,EAI7C,IAAIgiD,IAAa/0G,OAAOg1G,QACvB5tD,kBAAmBA,GACnBc,mBAAoBA,GACpBI,yBAA0BA,GAC1BqC,oBAAqBA,GACrBC,0BAA2BA,GAC3BC,mBAAoBA,GACpBC,yBAA0BA,GAC1BC,oBAAqBA,GACrBC,0BAA2BA,GAC3BE,qBAAsBA,GACtBC,2BAA4BA,GAC5BvC,mBAAoBA,GACpBE,yBAA0BA,GAC1BsC,aAAcA,GACdM,mBAAoBA,GACpBa,kBAAmBA,GACnBI,wBAAyBA,GACzBY,cAAeA,GACfE,oBAAqBA,GACrBK,aAAcA,GACdE,mBAAoBA,GACpBS,eAAgBA,GAChBK,qBAAsBA,GACtBI,aAAcA,GACdK,mBAAoBA,GACpB1oC,cAAeA,GACfC,oBAAqBA,GACrB6oC,cAAeA,GACfE,oBAAqBA,GACrBO,cAAeA,GACfC,oBAAqBA,GACrB3C,gBAAiBA,GACjBE,sBAAuBA,GACvBuD,cAAeA,GACfyB,aAAcA,GACdC,mBAAoBA,GACpBhB,iBAAkBA,GAClBI,uBAAwBA,GACxBa,eAAgBA,GAChBC,qBAAsBA,GACtBnuC,YAAaA,GACbK,kBAAmBA,IA4BpB2V,IAAeukC,UAAYn/D,OAAOo+E,OAAQpqE,EAASmrD,WACnDvkC,GAAeukC,UAAUnJ,YAAcp7B,GAEvCA,GAAeukC,UAAUjhB,kBAAmB,EAc5C+U,GAAkBkM,UAAYn/D,OAAOo+E,OAAQp2D,GAAem3C,WAC5DlM,GAAkBkM,UAAUnJ,YAAc/C,GAE1CA,GAAkBkM,UAAU5oC,qBAAsB,EA+GlDgE,GAAqB4kC,UAAYn/D,OAAOo+E,OAAQpqE,EAASmrD,WACzD5kC,GAAqB4kC,UAAUnJ,YAAcz7B,GAE7CA,GAAqB4kC,UAAUnjB,wBAAyB,EAExDzhB,GAAqB4kC,UAAU/vD,KAAO,SAAWy8D,GAoDhD,MAlDA73D,GAASmrD,UAAU/vD,KAAK1M,KAAM1E,KAAM6tE,GAEpC7tE,KAAKiqB,SAAYirC,SAAY,IAE7Bl1D,KAAK6O,MAAMuC,KAAMy8D,EAAOh/D,OACxB7O,KAAKuhD,UAAYssB,EAAOtsB,UACxBvhD,KAAKwhD,UAAYqsB,EAAOrsB,UAExBxhD,KAAKqF,IAAMwoE,EAAOxoE,IAElBrF,KAAKopB,SAAWykD,EAAOzkD,SACvBppB,KAAKqpB,kBAAoBwkD,EAAOxkD,kBAEhCrpB,KAAKspB,MAAQukD,EAAOvkD,MACpBtpB,KAAKupB,eAAiBskD,EAAOtkD,eAE7BvpB,KAAK0gD,SAAStvC,KAAMy8D,EAAOntB,UAC3B1gD,KAAK44B,YAAci1C,EAAOj1C,YAC1B54B,KAAK2gD,kBAAoBktB,EAAOltB,kBAEhC3gD,KAAKw1B,QAAUq4C,EAAOr4C,QACtBx1B,KAAKqhD,UAAYwsB,EAAOxsB,UAExBrhD,KAAKy1B,UAAYo4C,EAAOp4C,UACxBz1B,KAAKshD,YAAYlwC,KAAMy8D,EAAOvsB,aAE9BthD,KAAK+X,gBAAkB81D,EAAO91D,gBAC9B/X,KAAKgY,kBAAoB61D,EAAO71D,kBAChChY,KAAKiY,iBAAmB41D,EAAO51D,iBAE/BjY,KAAK64B,aAAeg1C,EAAOh1C,aAE3B74B,KAAK84B,aAAe+0C,EAAO/0C,aAE3B94B,KAAK8X,SAAW+1D,EAAO/1D,SAEvB9X,KAAKypB,OAASokD,EAAOpkD,OACrBzpB,KAAKyhD,gBAAkBosB,EAAOpsB,gBAE9BzhD,KAAK6pB,gBAAkBgkD,EAAOhkD,gBAE9B7pB,KAAKkY,UAAY21D,EAAO31D,UACxBlY,KAAKmY,mBAAqB01D,EAAO11D,mBACjCnY,KAAK8pB,iBAAmB+jD,EAAO/jD,iBAC/B9pB,KAAK+pB,kBAAoB8jD,EAAO9jD,kBAEhC/pB,KAAK4X,SAAWi2D,EAAOj2D,SACvB5X,KAAK6X,aAAeg2D,EAAOh2D,aAC3B7X,KAAKskB,aAAeupD,EAAOvpD,aAEpBtkB,MA6BRw8B,GAAqB2kC,UAAYn/D,OAAOo+E,OAAQ7jD,GAAqB4kC,WACrE3kC,GAAqB2kC,UAAUnJ,YAAcx7B,GAE7CA,GAAqB2kC,UAAU/hB,wBAAyB,EAExD5iB,GAAqB2kC,UAAU/vD,KAAO,SAAWy8D,GAWhD,MATAtxC,IAAqB4kC,UAAU/vD,KAAK1M,KAAM1E,KAAM6tE,GAEhD7tE,KAAKiqB,SAAYkrC,SAAY,IAE7Bn1D,KAAK4pB,aAAeikD,EAAOjkD,aAE3B5pB,KAAK0hD,UAAYmsB,EAAOnsB,UACxB1hD,KAAK2hD,mBAAqBksB,EAAOlsB,mBAE1B3hD,MA4GRq8B,GAAkB8kC,UAAYn/D,OAAOo+E,OAAQpqE,EAASmrD,WACtD9kC,GAAkB8kC,UAAUnJ,YAAc37B,GAE1CA,GAAkB8kC,UAAUpjB,qBAAsB,EAElD1hB,GAAkB8kC,UAAU/vD,KAAO,SAAWy8D,GAgD7C,MA9CA73D,GAASmrD,UAAU/vD,KAAK1M,KAAM1E,KAAM6tE,GAEpC7tE,KAAK6O,MAAMuC,KAAMy8D,EAAOh/D,OACxB7O,KAAKmhD,SAAS/vC,KAAMy8D,EAAO1sB,UAC3BnhD,KAAKohD,UAAYysB,EAAOzsB,UAExBphD,KAAKqF,IAAMwoE,EAAOxoE,IAElBrF,KAAKopB,SAAWykD,EAAOzkD,SACvBppB,KAAKqpB,kBAAoBwkD,EAAOxkD,kBAEhCrpB,KAAKspB,MAAQukD,EAAOvkD,MACpBtpB,KAAKupB,eAAiBskD,EAAOtkD,eAE7BvpB,KAAK0gD,SAAStvC,KAAMy8D,EAAOntB,UAC3B1gD,KAAK44B,YAAci1C,EAAOj1C,YAC1B54B,KAAK2gD,kBAAoBktB,EAAOltB,kBAEhC3gD,KAAKw1B,QAAUq4C,EAAOr4C,QACtBx1B,KAAKqhD,UAAYwsB,EAAOxsB,UAExBrhD,KAAKy1B,UAAYo4C,EAAOp4C,UACxBz1B,KAAKshD,YAAYlwC,KAAMy8D,EAAOvsB,aAE9BthD,KAAK+X,gBAAkB81D,EAAO91D,gBAC9B/X,KAAKgY,kBAAoB61D,EAAO71D,kBAChChY,KAAKiY,iBAAmB41D,EAAO51D,iBAE/BjY,KAAKwpB,YAAcqkD,EAAOrkD,YAE1BxpB,KAAK8X,SAAW+1D,EAAO/1D,SAEvB9X,KAAKypB,OAASokD,EAAOpkD,OACrBzpB,KAAK0pB,QAAUmkD,EAAOnkD,QACtB1pB,KAAK4pB,aAAeikD,EAAOjkD,aAC3B5pB,KAAK6pB,gBAAkBgkD,EAAOhkD,gBAE9B7pB,KAAKkY,UAAY21D,EAAO31D,UACxBlY,KAAKmY,mBAAqB01D,EAAO11D,mBACjCnY,KAAK8pB,iBAAmB+jD,EAAO/jD,iBAC/B9pB,KAAK+pB,kBAAoB8jD,EAAO9jD,kBAEhC/pB,KAAK4X,SAAWi2D,EAAOj2D,SACvB5X,KAAK6X,aAAeg2D,EAAOh2D,aAC3B7X,KAAKskB,aAAeupD,EAAOvpD,aAEpBtkB,MA0BRs8B,GAAiB6kC,UAAYn/D,OAAOo+E,OAAQ/jD,GAAkB8kC,WAC9D7kC,GAAiB6kC,UAAUnJ,YAAc17B,GAEzCA,GAAiB6kC,UAAUliB,oBAAqB,EAEhD3iB,GAAiB6kC,UAAU/vD,KAAO,SAAWy8D,GAM5C,MAJAxxC,IAAkB8kC,UAAU/vD,KAAK1M,KAAM1E,KAAM6tE,GAE7C7tE,KAAKq5B,YAAcw0C,EAAOx0C,YAEnBr5B,MA4DRm8B,GAAmBglC,UAAYn/D,OAAOo+E,OAAQpqE,EAASmrD,WACvDhlC,GAAmBglC,UAAUnJ,YAAc77B,GAE3CA,GAAmBglC,UAAUzhB,sBAAuB,EAEpDvjB,GAAmBglC,UAAU/vD,KAAO,SAAWy8D,GAqB9C,MAnBA73D,GAASmrD,UAAU/vD,KAAK1M,KAAM1E,KAAM6tE,GAEpC7tE,KAAKw1B,QAAUq4C,EAAOr4C,QACtBx1B,KAAKqhD,UAAYwsB,EAAOxsB,UAExBrhD,KAAKy1B,UAAYo4C,EAAOp4C,UACxBz1B,KAAKshD,YAAYlwC,KAAMy8D,EAAOvsB,aAE9BthD,KAAK+X,gBAAkB81D,EAAO91D,gBAC9B/X,KAAKgY,kBAAoB61D,EAAO71D,kBAChChY,KAAKiY,iBAAmB41D,EAAO51D,iBAE/BjY,KAAKkY,UAAY21D,EAAO31D,UACxBlY,KAAKmY,mBAAqB01D,EAAO11D,mBAEjCnY,KAAK4X,SAAWi2D,EAAOj2D,SACvB5X,KAAK6X,aAAeg2D,EAAOh2D,aAC3B7X,KAAKskB,aAAeupD,EAAOvpD,aAEpBtkB,MAoFRo8B,GAAoB+kC,UAAYn/D,OAAOo+E,OAAQpqE,EAASmrD,WACxD/kC,GAAoB+kC,UAAUnJ,YAAc57B,GAE5CA,GAAoB+kC,UAAUhjB,uBAAwB,EAEtD/hB,GAAoB+kC,UAAU/vD,KAAO,SAAWy8D,GAoC/C,MAlCA73D,GAASmrD,UAAU/vD,KAAK1M,KAAM1E,KAAM6tE,GAEpC7tE,KAAK6O,MAAMuC,KAAMy8D,EAAOh/D,OAExB7O,KAAKqF,IAAMwoE,EAAOxoE,IAElBrF,KAAKopB,SAAWykD,EAAOzkD,SACvBppB,KAAKqpB,kBAAoBwkD,EAAOxkD,kBAEhCrpB,KAAKspB,MAAQukD,EAAOvkD,MACpBtpB,KAAKupB,eAAiBskD,EAAOtkD,eAE7BvpB,KAAK0gD,SAAStvC,KAAMy8D,EAAOntB,UAC3B1gD,KAAK44B,YAAci1C,EAAOj1C,YAC1B54B,KAAK2gD,kBAAoBktB,EAAOltB,kBAEhC3gD,KAAKwpB,YAAcqkD,EAAOrkD,YAE1BxpB,KAAK8X,SAAW+1D,EAAO/1D,SAEvB9X,KAAKypB,OAASokD,EAAOpkD,OACrBzpB,KAAK0pB,QAAUmkD,EAAOnkD,QACtB1pB,KAAK4pB,aAAeikD,EAAOjkD,aAC3B5pB,KAAK6pB,gBAAkBgkD,EAAOhkD,gBAE9B7pB,KAAKkY,UAAY21D,EAAO31D,UACxBlY,KAAKmY,mBAAqB01D,EAAO11D,mBACjCnY,KAAK8pB,iBAAmB+jD,EAAO/jD,iBAC/B9pB,KAAK+pB,kBAAoB8jD,EAAO9jD,kBAEhC/pB,KAAK4X,SAAWi2D,EAAOj2D,SACvB5X,KAAK6X,aAAeg2D,EAAOh2D,aAC3B7X,KAAKskB,aAAeupD,EAAOvpD,aAEpBtkB,MAiCR08B,GAAmBykC,UAAYn/D,OAAOo+E,OAAQ3jD,GAAkB0kC,WAChEzkC,GAAmBykC,UAAUnJ,YAAct7B,GAE3CA,GAAmBykC,UAAUrhB,sBAAuB,EAEpDpjB,GAAmBykC,UAAU/vD,KAAO,SAAWy8D,GAQ9C,MANApxC,IAAkB0kC,UAAU/vD,KAAK1M,KAAM1E,KAAM6tE,GAE7C7tE,KAAK8O,MAAQ++D,EAAO/+D,MACpB9O,KAAKghD,SAAW6sB,EAAO7sB,SACvBhhD,KAAKkhD,QAAU2sB,EAAO3sB,QAEflhD,KAMR,IAAIi3G,IAAYj1G,OAAOg1G,QACtBp6E,eAAgBA,GAChB2qB,eAAgBA,GAChB0N,kBAAmBA,GACnBjrC,eAAgBA,GAChB2S,eAAgBA,GAChBH,qBAAsBA,GACtBD,qBAAsBA,GACtBF,kBAAmBA,GACnBC,iBAAkBA,GAClBH,mBAAoBA,GACpBC,oBAAqBA,GACrB5kB,kBAAmBA,EACnBa,qBAAsBA,GACtB8Q,kBAAmBA,GACnBuT,mBAAoBA,GACpBD,kBAAmBA,GACnBzmB,SAAUA,IAOPkhG,IAEH/4F,SAAS,EAETg5F,SAEAp3F,IAAK,SAAW2pC,EAAK0tD,IAEE,IAAjBp3G,KAAKme,UAIVne,KAAKm3G,MAAOztD,GAAQ0tD,IAIrBz1F,IAAK,SAAW+nC,GAEf,IAAsB,IAAjB1pD,KAAKme,QAIV,MAAOne,MAAKm3G,MAAOztD,IAIpB7nC,OAAQ,SAAW6nC,SAEX1pD,MAAKm3G,MAAOztD,IAIpB7pC,MAAO,WAEN7f,KAAKm3G,WAgGH5gD,GAAwB,GAAIlB,IAM5BgiD,KAQJr1G,QAAO2rE,OAAQtX,GAAW8K,WAEzBm2C,KAAM,SAAWvhD,EAAKT,EAAQC,EAAYC,OAE5Bt0D,KAAR60D,IAAoBA,EAAM,QAEZ70D,KAAdlB,KAAKyK,OAAqBsrD,EAAM/1D,KAAKyK,KAAOsrD,GAEjDA,EAAM/1D,KAAKs2D,QAAQJ,WAAYH,EAE/B,IAAIr6C,GAAQ1b,KAERu3G,EAASL,GAAMv1F,IAAKo0C,EAExB,QAAgB70D,KAAXq2G,EAYJ,MAVA77F,GAAM46C,QAAQR,UAAWC,GAEzByhD,WAAY,WAENliD,GAASA,EAAQiiD,GAEtB77F,EAAM46C,QAAQN,QAASD,IAErB,GAEIwhD,CAMR,QAAwBr2G,KAAnBm2G,GAASthD,GAUb,WARAshD,IAASthD,GAAMxrD,MAEd+qD,OAAQA,EACRC,WAAYA,EACZC,QAASA,GASX,IAAIiiD,GAAe,8BACfC,EAAqB3hD,EAAIlrD,MAAO4sG,EAGpC,IAAKC,EAAqB,CAEzB,GAAIC,GAAWD,EAAoB,GAC/BE,IAAcF,EAAoB,GAClC5yG,EAAO4yG,EAAoB,EAE/B5yG,GAAOmgC,OAAO4yE,mBAAoB/yG,GAE7B8yG,IAAW9yG,EAAOmgC,OAAO6yE,KAAMhzG,GAEpC,KAEC,GAAIizG,GACAC,GAAiBh4G,KAAKg4G,cAAgB,IAAKC,aAE/C,QAASD,GAER,IAAK,cACL,IAAK,OAIJ,IAAM,GAFFp0F,GAAO,GAAIzC,YAAYrc,EAAKtE,QAEtBwF,EAAI,EAAGA,EAAIlB,EAAKtE,OAAQwF,IAEjC4d,EAAM5d,GAAMlB,EAAKozG,WAAYlyG,EAM7B+xG,GAFqB,SAAjBC,EAEO,GAAIG,OAAQv0F,EAAKnD,SAAY5e,KAAM81G,IAInC/zF,EAAKnD,MAIjB,MAED,KAAK,WAEJ,GAAI23F,GAAS,GAAIC,UACjBN,GAAWK,EAAOE,gBAAiBxzG,EAAM6yG,EAEzC,MAED,KAAK,OAEJI,EAAWrjB,KAAKE,MAAO9vF,EAEvB,MAED,SAECizG,EAAWjzG,EAObmgC,OAAOuyE,WAAY,WAEbliD,GAASA,EAAQyiD,GAEtBr8F,EAAM46C,QAAQN,QAASD,IAErB,GAEF,MAAQr1D,GAGTukC,OAAOuyE,WAAY,WAEbhiD,GAAUA,EAAS90D,GAExBgb,EAAM46C,QAAQN,QAASD,GACvBr6C,EAAM46C,QAAQL,UAAWF,IAEvB,QAIE,CAINshD,GAASthD,MAETshD,GAASthD,GAAMxrD,MAEd+qD,OAAQA,EACRC,WAAYA,EACZC,QAASA,GAIV,IAAI+iD,GAAU,GAAIC,eAElBD,GAAQE,KAAM,MAAO1iD,GAAK,GAE1BwiD,EAAQ7oF,iBAAkB,OAAQ,SAAWJ,GAE5C,GAAIyoF,GAAWzoF,EAAM9P,OAAOu4F,QAE5Bb,IAAMn3F,IAAKg2C,EAAKgiD,EAEhB,IAAIW,GAAYrB,GAASthD,EAIzB,UAFOshD,IAASthD,GAEK,MAAhB/1D,KAAK24G,OAAiB,CAE1B,IAAM,GAAI3yG,GAAI,EAAG2Y,EAAK+5F,EAAUl4G,OAAQwF,EAAI2Y,EAAI3Y,IAAO,CAEtD,GAAIkgD,GAAWwyD,EAAW1yG,EACrBkgD,GAASoP,QAASpP,EAASoP,OAAQyiD,GAIzCr8F,EAAM46C,QAAQN,QAASD,OAEjB,IAAqB,IAAhB/1D,KAAK24G,OAAe,CAK/Bl4G,QAAQqa,KAAM,4CAEd,KAAM,GAAI9U,GAAI,EAAG2Y,EAAK+5F,EAAUl4G,OAAQwF,EAAI2Y,EAAI3Y,IAAO,CAEtD,GAAIkgD,GAAWwyD,EAAW1yG,EACrBkgD,GAASoP,QAASpP,EAASoP,OAAQyiD,GAIzCr8F,EAAM46C,QAAQN,QAASD,OAEjB,CAEN,IAAM,GAAI/vD,GAAI,EAAG2Y,EAAK+5F,EAAUl4G,OAAQwF,EAAI2Y,EAAI3Y,IAAO,CAEtD,GAAIkgD,GAAWwyD,EAAW1yG,EACrBkgD,GAASsP,SAAUtP,EAASsP,QAASlmC,GAI3C5T,EAAM46C,QAAQN,QAASD,GACvBr6C,EAAM46C,QAAQL,UAAWF,MAIxB,GAEHwiD,EAAQ7oF,iBAAkB,WAAY,SAAWJ,GAIhD,IAAM,GAFFopF,GAAYrB,GAASthD,GAEf/vD,EAAI,EAAG2Y,EAAK+5F,EAAUl4G,OAAQwF,EAAI2Y,EAAI3Y,IAAO,CAEtD,GAAIkgD,GAAWwyD,EAAW1yG,EACrBkgD,GAASqP,YAAarP,EAASqP,WAAYjmC,MAI/C,GAEHipF,EAAQ7oF,iBAAkB,QAAS,SAAWJ,GAE7C,GAAIopF,GAAYrB,GAASthD,SAElBshD,IAASthD,EAEhB,KAAM,GAAI/vD,GAAI,EAAG2Y,EAAK+5F,EAAUl4G,OAAQwF,EAAI2Y,EAAI3Y,IAAO,CAEtD,GAAIkgD,GAAWwyD,EAAW1yG,EACrBkgD,GAASsP,SAAUtP,EAASsP,QAASlmC,GAI3C5T,EAAM46C,QAAQN,QAASD,GACvBr6C,EAAM46C,QAAQL,UAAWF,KAEvB,OAEwB70D,KAAtBlB,KAAKg4G,eAA6BO,EAAQP,aAAeh4G,KAAKg4G,kBACrC92G,KAAzBlB,KAAKw6D,kBAAgC+9C,EAAQ/9C,gBAAkBx6D,KAAKw6D,iBAEpE+9C,EAAQK,kBAAmBL,EAAQK,qBAAoC13G,KAAlBlB,KAAK23G,SAAyB33G,KAAK23G,SAAW,aAExG,KAAM,GAAIkB,KAAU74G,MAAK84G,cAExBP,EAAQQ,iBAAkBF,EAAQ74G,KAAK84G,cAAeD,GAIvDN,GAAQS,KAAM,MAMf,MAFAt9F,GAAM46C,QAAQR,UAAWC,GAElBwiD,GAIRU,QAAS,SAAW/2G,GAGnB,MADAlC,MAAKyK,KAAOvI,EACLlC,MAIRk5G,gBAAiB,SAAWh3G,GAG3B,MADAlC,MAAKg4G,aAAe91G,EACblC,MAIRm5G,mBAAoB,SAAWj3G,GAG9B,MADAlC,MAAKw6D,gBAAkBt4D,EAChBlC,MAIRo5G,YAAa,SAAWl3G,GAGvB,MADAlC,MAAK23G,SAAWz1G,EACTlC,MAIR+4G,iBAAkB,SAAW72G,GAG5B,MADAlC,MAAK84G,cAAgB52G,EACdlC,QAqBTgC,OAAO2rE,OAAQnX,GAAwB2K,WAEtCm2C,KAAM,SAAWvhD,EAAKT,EAAQC,EAAYC,GAEzC,GAAI95C,GAAQ1b,KAERiF,KAEAZ,EAAU,GAAI6kD,GAClB7kD,GAAQ/C,MAAQ2D,CAEhB,IAAIo0G,GAAS,GAAIhjD,IAAYr2D,KAAKs2D,QAmClC,IAlCA+iD,EAAOJ,QAASj5G,KAAKyK,MACrB4uG,EAAOH,gBAAiB,eAiCnBr8F,MAAMC,QAASi5C,GAInB,IAAM,GAFFujD,GAAS,EAEHtzG,EAAI,EAAG2Y,EAAKo3C,EAAIv1D,OAAQwF,EAAI2Y,IAAO3Y,GAnC9C,SAAsBA,GAErBqzG,EAAO/B,KAAMvhD,EAAK/vD,GAAK,SAAWya,GAEjC,GAAI84F,GAAW79F,EAAM+6C,QAASh2C,GAAQ,EAEtCxb,GAAQe,IACPjC,MAAOw1G,EAASx1G,MAChBC,OAAQu1G,EAASv1G,OACjBpC,OAAQ23G,EAAS33G,OACjBa,QAAS82G,EAAS92G,SAKH,KAFhB62G,GAAU,KAIqB,IAAzBC,EAASC,cACbn1G,EAAQ1C,UAAYiB,IAErByB,EAAQzC,OAAS23G,EAAS33G,OAC1ByC,EAAQ0O,aAAc,EAEjBuiD,GAASA,EAAQjxD,KAIrBkxD,EAAYC,IAUDxvD,OAQdqzG,GAAO/B,KAAMvhD,EAAK,SAAWt1C,GAE5B,GAAI84F,GAAW79F,EAAM+6C,QAASh2C,GAAQ,EAEtC,IAAK84F,EAASE,UAIb,IAAM,GAFFntG,GAAQitG,EAAS92G,QAAQjC,OAAS+4G,EAASC,YAErCp6E,EAAI,EAAGA,EAAI9yB,EAAO8yB,IAAO,CAElCn6B,EAAQm6B,IAAQ38B,WAEhB,KAAM,GAAIuD,GAAI,EAAGA,EAAIuzG,EAASC,YAAaxzG,IAE1Cf,EAAQm6B,GAAI38B,QAAQ8H,KAAMgvG,EAAS92G,QAAS28B,EAAIm6E,EAASC,YAAcxzG,IACvEf,EAAQm6B,GAAIx9B,OAAS23G,EAAS33G,OAC9BqD,EAAQm6B,GAAIr7B,MAAQw1G,EAASx1G,MAC7BkB,EAAQm6B,GAAIp7B,OAASu1G,EAASv1G,WAQhCK,GAAQ/C,MAAMyC,MAAQw1G,EAASx1G,MAC/BM,EAAQ/C,MAAM0C,OAASu1G,EAASv1G,OAChCK,EAAQ5B,QAAU82G,EAAS92G,OAIE,KAAzB82G,EAASC,cAEbn1G,EAAQ1C,UAAYiB,IAIrByB,EAAQzC,OAAS23G,EAAS33G,OAC1ByC,EAAQ0O,aAAc,EAEjBuiD,GAASA,EAAQjxD,IAEpBkxD,EAAYC,EAIhB,OAAOnxD,IAIR40G,QAAS,SAAW/2G,GAGnB,MADAlC,MAAKyK,KAAOvI,EACLlC,QAqBTgC,OAAO2rE,OAAQjX,GAAkByK,WAEhCm2C,KAAM,SAAWvhD,EAAKT,EAAQC,EAAYC,GAEzC,GAAI95C,GAAQ1b,KAERqE,EAAU,GAAIQ,GAEdw0G,EAAS,GAAIhjD,IAAYr2D,KAAKs2D,QA2DlC,OA1DA+iD,GAAOH,gBAAiB,eAExBG,EAAO/B,KAAMvhD,EAAK,SAAWt1C,GAE5B,GAAIi5F,GAAUh+F,EAAM+6C,QAASh2C,EAEtBi5F,SAEFx4G,KAAcw4G,EAAQp4G,MAE1B+C,EAAQ/C,MAAQo4G,EAAQp4G,UAEbJ,KAAcw4G,EAAQ50G,OAEjCT,EAAQ/C,MAAMyC,MAAQ21G,EAAQ31G,MAC9BM,EAAQ/C,MAAM0C,OAAS01G,EAAQ11G,OAC/BK,EAAQ/C,MAAMwD,KAAO40G,EAAQ50G,MAI9BT,EAAQ7C,UAAQN,KAAcw4G,EAAQl4G,MAAQk4G,EAAQl4G,MAAQmB,GAC9D0B,EAAQ5C,UAAQP,KAAcw4G,EAAQj4G,MAAQi4G,EAAQj4G,MAAQkB,GAE9D0B,EAAQ3C,cAAYR,KAAcw4G,EAAQh4G,UAAYg4G,EAAQh4G,UAAYkB,GAC1EyB,EAAQ1C,cAAYT,KAAcw4G,EAAQ/3G,UAAY+3G,EAAQ/3G,UAAYkB,GAE1EwB,EAAQvC,eAAaZ,KAAcw4G,EAAQ53G,WAAa43G,EAAQ53G,WAAa,MAExEZ,KAAcw4G,EAAQ93G,SAE1ByC,EAAQzC,OAAS83G,EAAQ93G,YAGrBV,KAAcw4G,EAAQ73G,OAE1BwC,EAAQxC,KAAO63G,EAAQ73G,UAInBX,KAAcw4G,EAAQj3G,UAE1B4B,EAAQ5B,QAAUi3G,EAAQj3G,SAItB,IAAMi3G,EAAQF,cAElBn1G,EAAQ1C,UAAYiB,IAIrByB,EAAQ0O,aAAc,EAEjBuiD,GAASA,EAAQjxD,EAASq1G,KAE7BnkD,EAAYC,GAGRnxD,KAgBTrC,OAAO2rE,OAAQhX,GAAYwK,WAE1Bw4C,YAAa,YAEbrC,KAAM,SAAWvhD,EAAKT,EAAQC,EAAYC,OAE5Bt0D,KAAR60D,IAAoBA,EAAM,QAEZ70D,KAAdlB,KAAKyK,OAAqBsrD,EAAM/1D,KAAKyK,KAAOsrD,GAEjDA,EAAM/1D,KAAKs2D,QAAQJ,WAAYH,EAE/B,IAAIr6C,GAAQ1b,KAERu3G,EAASL,GAAMv1F,IAAKo0C,EAExB,QAAgB70D,KAAXq2G,EAYJ,MAVA77F,GAAM46C,QAAQR,UAAWC,GAEzByhD,WAAY,WAENliD,GAASA,EAAQiiD,GAEtB77F,EAAM46C,QAAQN,QAASD,IAErB,GAEIwhD,CAIR,IAAIj2G,GAAQsS,SAASC,gBAAiB,+BAAgC,MAuCtE,OArCAvS,GAAMouB,iBAAkB,OAAQ,WAE/BwnF,GAAMn3F,IAAKg2C,EAAK/1D,MAEXs1D,GAASA,EAAQt1D,MAEtB0b,EAAM46C,QAAQN,QAASD,KAErB,GAUHz0D,EAAMouB,iBAAkB,QAAS,SAAWJ,GAEtCkmC,GAAUA,EAASlmC,GAExB5T,EAAM46C,QAAQN,QAASD,GACvBr6C,EAAM46C,QAAQL,UAAWF,KAEvB,GAEyB,UAAvBA,EAAI6jD,OAAQ,EAAG,QAEO14G,KAArBlB,KAAK25G,cAA4Br4G,EAAMq4G,YAAc35G,KAAK25G,aAIhEj+F,EAAM46C,QAAQR,UAAWC,GAEzBz0D,EAAMu4G,IAAM9jD,EAELz0D,GAIRw4G,eAAgB,SAAW53G,GAG1B,MADAlC,MAAK25G,YAAcz3G,EACZlC,MAIRi5G,QAAS,SAAW/2G,GAGnB,MADAlC,MAAKyK,KAAOvI,EACLlC,QAgBTgC,OAAO2rE,OAAQ/W,GAAkBuK,WAEhCw4C,YAAa,YAEbrC,KAAM,SAAWyC,EAAMzkD,EAAQC,EAAYC,GAE1C,GAAInxD,GAAU,GAAIW,GAEdq0G,EAAS,GAAI1iD,IAAa32D,KAAKs2D,QACnC+iD,GAAOS,eAAgB95G,KAAK25G,aAC5BN,EAAOJ,QAASj5G,KAAKyK,KAwBrB,KAAM,GAtBF6uG,GAAS,EAsBHtzG,EAAI,EAAGA,EAAI+zG,EAAKv5G,SAAWwF,GApBrC,SAAsBA,GAErBqzG,EAAO/B,KAAMyC,EAAM/zG,GAAK,SAAW1E,GAElC+C,EAAQY,OAAQe,GAAM1E,EAIN,KAFhBg4G,IAICj1G,EAAQ0O,aAAc,EAEjBuiD,GAASA,EAAQjxD,SAIrBnD,GAAWs0D,IAMDxvD,EAId,OAAO3B,IAIRy1G,eAAgB,SAAW53G,GAG1B,MADAlC,MAAK25G,YAAcz3G,EACZlC,MAIRi5G,QAAS,SAAW/2G,GAGnB,MADAlC,MAAKyK,KAAOvI,EACLlC,QAgBTgC,OAAO2rE,OAAQ9W,GAAcsK,WAE5Bw4C,YAAa,YAEbrC,KAAM,SAAWvhD,EAAKT,EAAQC,EAAYC,GAEzC,GAAI6jD,GAAS,GAAI1iD,IAAa32D,KAAKs2D,QACnC+iD,GAAOS,eAAgB95G,KAAK25G,aAC5BN,EAAOJ,QAASj5G,KAAKyK,KAErB,IAAIpG,GAAU,GAAIhD,EAiBlB,OAhBAgD,GAAQ/C,MAAQ+3G,EAAO/B,KAAMvhD,EAAK,WAGjC,GAAIikD,GAASjkD,EAAIkkD,OAAQ,iBAAoB,GAA4C,IAAvClkD,EAAIkkD,OAAQ,qBAE9D51G,GAAQzC,OAASo4G,EAASt4E,GAAY5+B,GACtCuB,EAAQ0O,aAAc,MAEN7R,KAAXo0D,GAEJA,EAAQjxD,IAIPkxD,EAAYC,GAERnxD,GAIRy1G,eAAgB,SAAW53G,GAG1B,MADAlC,MAAK25G,YAAcz3G,EACZlC,MAIRi5G,QAAS,SAAW/2G,GAGnB,MADAlC,MAAKyK,KAAOvI,EACLlC,QAwBT82D,GAAMqK,UAAYn/D,OAAO2rE,OAAQ3rE,OAAOo+E,OAAQ/9D,GAAS8+C,YAExDnJ,YAAalB,GAEbhc,SAAS,EAET1pC,KAAM,SAAWy8D,GAOhB,MALAxrD,IAAS8+C,UAAU/vD,KAAK1M,KAAM1E,KAAM6tE,GAEpC7tE,KAAK6O,MAAMuC,KAAMy8D,EAAOh/D,OACxB7O,KAAKqxB,UAAYw8C,EAAOx8C,UAEjBrxB,MAIRq/E,OAAQ,SAAWC,GAElB,GAAIx6E,GAAOud,GAAS8+C,UAAUke,OAAO36E,KAAM1E,KAAMs/E,EAcjD,OAZAx6E,GAAK8U,OAAO/K,MAAQ7O,KAAK6O,MAAMw7E,SAC/BvlF,EAAK8U,OAAOyX,UAAYrxB,KAAKqxB,cAEHnwB,KAArBlB,KAAKywB,cAA4B3rB,EAAK8U,OAAO6W,YAAczwB,KAAKywB,YAAY45D,cAE1DnpF,KAAlBlB,KAAKowB,WAAyBtrB,EAAK8U,OAAOwW,SAAWpwB,KAAKowB,cAC3ClvB,KAAflB,KAAKmyB,QAAsBrtB,EAAK8U,OAAOuY,MAAQnyB,KAAKmyB,WACrCjxB,KAAflB,KAAKuwB,QAAsBzrB,EAAK8U,OAAO2W,MAAQvwB,KAAKuwB,WAClCrvB,KAAlBlB,KAAKoyB,WAAyBttB,EAAK8U,OAAOwY,SAAWpyB,KAAKoyB,cAE1ClxB,KAAhBlB,KAAK6e,SAAuB/Z,EAAK8U,OAAOiF,OAAS7e,KAAK6e,OAAOwgE,UAE3Dv6E,KAyBTiyD,GAAgBoK,UAAYn/D,OAAO2rE,OAAQ3rE,OAAOo+E,OAAQtpB,GAAMqK,YAE/DnJ,YAAajB,GAEb7jC,mBAAmB,EAEnB9hB,KAAM,SAAWy8D,GAMhB,MAJA/W,IAAMqK,UAAU/vD,KAAK1M,KAAM1E,KAAM6tE,GAEjC7tE,KAAKywB,YAAYrf,KAAMy8D,EAAOp9C,aAEvBzwB,QAwBTgC,OAAO2rE,OAAQ1W,GAAYkK,WAE1B/vD,KAAM,SAAWy8D,GAShB,MAPA7tE,MAAK4P,OAASi+D,EAAOj+D,OAAO6L,QAE5Bzb,KAAK6xB,KAAOg8C,EAAOh8C,KACnB7xB,KAAK2Y,OAASk1D,EAAOl1D,OAErB3Y,KAAK8e,QAAQ1N,KAAMy8D,EAAO/uD,SAEnB9e,MAIRyb,MAAO,WAEN,OAAO,GAAIzb,MAAKg4D,aAAc5mD,KAAMpR,OAIrCq/E,OAAQ,WAEP,GAAIzlE,KASJ,OAPmB,KAAd5Z,KAAK6xB,OAAajY,EAAOiY,KAAO7xB,KAAK6xB,MACrB,IAAhB7xB,KAAK2Y,SAAeiB,EAAOjB,OAAS3Y,KAAK2Y,QACtB,MAAnB3Y,KAAK8e,QAAQ3e,GAAgC,MAAnBH,KAAK8e,QAAQ1e,IAAYwZ,EAAOkF,QAAU9e,KAAK8e,QAAQ/Y,WAEtF6T,EAAOhK,OAAS5P,KAAK4P,OAAOyvE,QAAQ,GAAQzlE,aACrCA,GAAOhK,OAAOvM,OAEduW,KAgBTs9C,GAAgBiK,UAAYn/D,OAAO2rE,OAAQ3rE,OAAOo+E,OAAQnpB,GAAYkK,YAErEnJ,YAAad,GAEb/3C,mBAAmB,EAEnBvC,OAAQ,SAAWgC,GAElB,GAAIhP,GAAS5P,KAAK4P,OAEd4+B,EAAsB,EAAhBnsC,GAAMssE,QAAc/vD,EAAMuT,MAChCsc,EAASzuC,KAAK8e,QAAQ/a,MAAQ/D,KAAK8e,QAAQ9a,OAC3C8Q,EAAM8J,EAAMwR,UAAYxgB,EAAOkF,GAE9B05B,KAAQ5+B,EAAO4+B,KAAOC,IAAW7+B,EAAO6+B,QAAU35B,IAAQlF,EAAOkF,MAErElF,EAAO4+B,IAAMA,EACb5+B,EAAO6+B,OAASA,EAChB7+B,EAAOkF,IAAMA,EACblF,EAAOsP,6BAiDVi4C,GAAUgK,UAAYn/D,OAAO2rE,OAAQ3rE,OAAOo+E,OAAQtpB,GAAMqK,YAEzDnJ,YAAab,GAEbllC,aAAa,EAEb7gB,KAAM,SAAWy8D,GAahB,MAXA/W,IAAMqK,UAAU/vD,KAAK1M,KAAM1E,KAAM6tE,GAEjC7tE,KAAKowB,SAAWy9C,EAAOz9C,SACvBpwB,KAAKmyB,MAAQ07C,EAAO17C,MACpBnyB,KAAKoyB,SAAWy7C,EAAOz7C,SACvBpyB,KAAKuwB,MAAQs9C,EAAOt9C,MAEpBvwB,KAAKwf,OAASquD,EAAOruD,OAAO/D,QAE5Bzb,KAAK6e,OAASgvD,EAAOhvD,OAAOpD,QAErBzb,QAyCTq3D,GAAW8J,UAAYn/D,OAAO2rE,OAAQ3rE,OAAOo+E,OAAQtpB,GAAMqK,YAE1DnJ,YAAaX,GAEbx9C,cAAc,EAEdzI,KAAM,SAAWy8D,GAShB,MAPA/W,IAAMqK,UAAU/vD,KAAK1M,KAAM1E,KAAM6tE,GAEjC7tE,KAAKowB,SAAWy9C,EAAOz9C,SACvBpwB,KAAKuwB,MAAQs9C,EAAOt9C,MAEpBvwB,KAAK6e,OAASgvD,EAAOhvD,OAAOpD,QAErBzb,QAgBTs3D,GAAuB6J,UAAYn/D,OAAO2rE,OAAQ3rE,OAAOo+E,OAAQnpB,GAAYkK,YAE5EnJ,YAAaV,KAwBdC,GAAiB4J,UAAYn/D,OAAO2rE,OAAQ3rE,OAAOo+E,OAAQtpB,GAAMqK,YAEhEnJ,YAAaT,GAEbhmC,oBAAoB,EAEpBngB,KAAM,SAAWy8D,GAQhB,MANA/W,IAAMqK,UAAU/vD,KAAK1M,KAAM1E,KAAM6tE,GAEjC7tE,KAAKwf,OAASquD,EAAOruD,OAAO/D,QAE5Bzb,KAAK6e,OAASgvD,EAAOhvD,OAAOpD,QAErBzb,QAoBTw3D,GAAa2J,UAAYn/D,OAAO2rE,OAAQ3rE,OAAOo+E,OAAQtpB,GAAMqK,YAE5DnJ,YAAaR,GAEblmC,gBAAgB,IA6BjBmmC,GAAc0J,UAAYn/D,OAAO2rE,OAAQ3rE,OAAOo+E,OAAQtpB,GAAMqK,YAE7DnJ,YAAaP,GAEbjlC,iBAAiB,EAEjBphB,KAAM,SAAWy8D,GAOhB,MALA/W,IAAMqK,UAAU/vD,KAAK1M,KAAM1E,KAAM6tE,GAEjC7tE,KAAK+D,MAAQ8pE,EAAO9pE,MACpB/D,KAAKgE,OAAS6pE,EAAO7pE,OAEdhE,MAIRq/E,OAAQ,SAAWC,GAElB,GAAIx6E,GAAOgyD,GAAMqK,UAAUke,OAAO36E,KAAM1E,KAAMs/E,EAK9C,OAHAx6E,GAAK8U,OAAO7V,MAAQ/D,KAAK+D,MACzBe,EAAK8U,OAAO5V,OAAShE,KAAKgE,OAEnBc,IAYT,IAAI+zD,KAGHqhD,WAAY,SAAW30G,EAAO40G,EAAMC,GAEnC,MAAKvhD,IAAewhD,aAAc90G,GAI1B,GAAIA,GAAMyyD,YAAazyD,EAAMmc,SAAUy4F,MAAaj5G,KAAPk5G,EAAmBA,EAAK70G,EAAM/E,SAI5E+E,EAAMsiD,MAAOsyD,EAAMC,IAK3BthD,aAAc,SAAWvzD,EAAO1D,EAAMy4G,GAErC,OAAO/0G,IACH+0G,GAAc/0G,EAAMyyD,cAAgBn2D,EAAc0D,EAEf,gBAA3B1D,GAAKwf,kBAET,GAAIxf,GAAM0D,GAIXsX,MAAMskD,UAAUtZ,MAAMnjD,KAAMa,IAIpC80G,aAAc,SAAWzgG,GAExB,MAAO2gG,aAAYC,OAAQ5gG,MACrBA,YAAkB6gG,YAKzBC,iBAAkB,SAAWhiD,GAE5B,QAASiiD,GAAa30G,EAAGmM,GAExB,MAAOumD,GAAO1yD,GAAM0yD,EAAOvmD,GAM5B,IAAM,GAFFxM,GAAI+yD,EAAMl4D,OACV0Z,EAAS,GAAI2C,OAAOlX,GACdK,EAAI,EAAGA,IAAML,IAAMK,EAAIkU,EAAQlU,GAAMA,CAI/C,OAFAkU,GAAOhF,KAAMylG,GAENzgG,GAKR0gG,YAAa,SAAWjiD,EAAQ5e,EAAQ/3B,GAKvC,IAAM,GAHF64F,GAAUliD,EAAOn4D,OACjB0Z,EAAS,GAAIy+C,GAAOX,YAAa6iD,GAE3B70G,EAAI,EAAGqsC,EAAY,EAAGA,IAAcwoE,IAAY70G,EAIzD,IAAM,GAFF80G,GAAY94F,EAAOhc,GAAM+zC,EAEnB5nC,EAAI,EAAGA,IAAM4nC,IAAW5nC,EAEjC+H,EAAQm4B,KAAiBsmB,EAAQmiD,EAAY3oG,EAM/C,OAAO+H,IAKR6gG,YAAa,SAAWC,EAAUtiD,EAAOC,EAAQsiD,GAIhD,IAFA,GAAIj1G,GAAI,EAAG0jD,EAAMsxD,EAAU,OAEX95G,KAARwoD,OAAkDxoD,KAA7BwoD,EAAKuxD,IAEjCvxD,EAAMsxD,EAAUh1G,IAIjB,QAAa9E,KAARwoD,EAAL,CAEA,GAAIxnD,GAAQwnD,EAAKuxD,EACjB,QAAe/5G,KAAVgB,EAEL,GAAK2a,MAAMC,QAAS5a,GAEnB,GAECA,EAAQwnD,EAAKuxD,OAEE/5G,KAAVgB,IAEJw2D,EAAMnuD,KAAMm/C,EAAIhP,MAChBie,EAAOpuD,KAAKqiC,MAAO+rB,EAAQz2D,IAI5BwnD,EAAMsxD,EAAUh1G,eAEC9E,KAARwoD,OAEJ,QAAuBxoD,KAAlBgB,EAAM6D,QAIjB,GAEC7D,EAAQwnD,EAAKuxD,OAEE/5G,KAAVgB,IAEJw2D,EAAMnuD,KAAMm/C,EAAIhP,MAChBx4C,EAAM6D,QAAS4yD,EAAQA,EAAOn4D,SAI/BkpD,EAAMsxD,EAAUh1G,eAEC9E,KAARwoD,OAMV,IAECxnD,EAAQwnD,EAAKuxD,OAEE/5G,KAAVgB,IAEJw2D,EAAMnuD,KAAMm/C,EAAIhP,MAChBie,EAAOpuD,KAAMrI,IAIdwnD,EAAMsxD,EAAUh1G,eAEC9E,KAARwoD,KA0Cb1nD,QAAO2rE,OAAQjW,GAAYyJ,WAE1B+5C,SAAU,SAAWjuD,GAEpB,GAAIkuD,GAAKn7G,KAAK23D,mBACb2uC,EAAKtmG,KAAK+3D,aAEV6R,EAAKuxC,EAAI7U,GACT38B,EAAKwxC,EAAI7U,EAAK,EAEf8U,GAAmB,CAElBC,EAAM,CAEL,GAAI73F,EAEJ83F,GAAa,CAMZC,EAAc,KAAStuD,EAAI2c,GAAO,CAEjC,IAAM,GAAI4xC,GAAWlV,EAAK,IAAO,CAEhC,OAAYplG,KAAP0oE,EAAmB,CAEvB,GAAK3c,EAAI0c,EAAK,KAAM4xC,EAMpB,OAFAjV,GAAK6U,EAAG36G,OACRR,KAAK+3D,aAAeuuC,EACbtmG,KAAKy7G,UAAWnV,EAAK,EAAGr5C,EAAG0c,GAInC,GAAK28B,IAAOkV,EAAW,KAKvB,IAHA7xC,EAAKC,EACLA,EAAKuxC,IAAO7U,GAEPr5C,EAAI2c,EAGR,KAAMyxC,GAOR73F,EAAQ23F,EAAG36G,MACX,MAAM86G,GAMP,CAAA,GAASruD,GAAK0c,EAiDd,KAAMyxC,EA7CL,IAAIM,GAAWP,EAAI,EAEdluD,GAAIyuD,IAERpV,EAAK,EACL38B,EAAK+xC,EAMN,KAAM,GAAIF,GAAWlV,EAAK,IAAO,CAEhC,OAAYplG,KAAPyoE,EAKJ,MADA3pE,MAAK+3D,aAAe,EACb/3D,KAAK27G,aAAc,EAAG1uD,EAAG2c,EAIjC,IAAK08B,IAAOkV,EAAW,KAKvB,IAHA5xC,EAAKD,EACLA,EAAKwxC,IAAO7U,EAAK,GAEZr5C,GAAK0c,EAGT,KAAM0xC,GAOR73F,EAAQ8iF,EACRA,EAAK,GAaP,KAAQA,EAAK9iF,GAAQ,CAEpB,GAAIo4F,GAAQtV,EAAK9iF,IAAY,CAExBypC,GAAIkuD,EAAIS,GAEZp4F,EAAQo4F,EAIRtV,EAAKsV,EAAM,EAWb,GALAhyC,EAAKuxC,EAAI7U,OAKGplG,MAJZyoE,EAAKwxC,EAAI7U,EAAK,IAOb,MADAtmG,MAAK+3D,aAAe,EACb/3D,KAAK27G,aAAc,EAAG1uD,EAAG2c,EAIjC,QAAY1oE,KAAP0oE,EAIJ,MAFA08B,GAAK6U,EAAG36G,OACRR,KAAK+3D,aAAeuuC,EACbtmG,KAAKy7G,UAAWnV,EAAK,EAAG38B,EAAI1c,GAMrCjtD,KAAK+3D,aAAeuuC,EAEpBtmG,KAAK67G,iBAAkBvV,EAAI38B,EAAIC,GAIhC,MAAO5pE,MAAK87G,aAAcxV,EAAI38B,EAAI1c,EAAG2c,IAItChH,SAAU,KAKVm5C,oBAEAC,aAAc,WAEb,MAAOh8G,MAAK4iE,UAAY5iE,KAAK+7G,kBAI9BE,iBAAkB,SAAWx1F,GAS5B,IAAM,GALFvM,GAASla,KAAK83D,aACjBa,EAAS34D,KAAK43D,aACd7d,EAAS/5C,KAAKi4D,UACdj1D,EAASyjB,EAAQszB,EAER/zC,EAAI,EAAGA,IAAM+zC,IAAW/zC,EAEjCkU,EAAQlU,GAAM2yD,EAAQ31D,EAASgD,EAIhC,OAAOkU,IAMR4hG,aAAc,WAEb,KAAM,IAAIrnF,OAAO,4BAKlBonF,iBAAkB,eASnB75G,OAAO2rE,OAAQjW,GAAYyJ,WAG1Bw6C,aAAcjkD,GAAYyJ,UAAU86C,iBAGpCR,UAAW/jD,GAAYyJ,UAAU86C,mBAyBlC/jD,GAAiBiJ,UAAYn/D,OAAO2rE,OAAQ3rE,OAAOo+E,OAAQ1oB,GAAYyJ,YAEtEnJ,YAAaE,GAEb6jD,kBAECx5C,YAAaC,GACbC,UAAWD,IAIZq5C,iBAAkB,SAAWvV,EAAI38B,EAAIC,GAEpC,GAAIuxC,GAAKn7G,KAAK23D,mBACbukD,EAAQ5V,EAAK,EACb6V,EAAQ7V,EAAK,EAEb8V,EAAQjB,EAAIe,GACZG,EAAQlB,EAAIgB,EAEb,QAAej7G,KAAVk7G,EAEJ,OAASp8G,KAAKg8G,eAAez5C,aAE5B,IAp79BkB,MAu79BjB25C,EAAQ5V,EACR8V,EAAQ,EAAIzyC,EAAKC,CAEjB,MAED,KA379BmB,MA879BlBsyC,EAAQf,EAAG36G,OAAS,EACpB47G,EAAQzyC,EAAKwxC,EAAIe,GAAUf,EAAIe,EAAQ,EAEvC,MAED,SAGCA,EAAQ5V,EACR8V,EAAQxyC,EAMX,OAAe1oE,KAAVm7G,EAEJ,OAASr8G,KAAKg8G,eAAev5C,WAE5B,IAl99BkB,MAq99BjB05C,EAAQ7V,EACR+V,EAAQ,EAAIzyC,EAAKD,CAEjB,MAED,KAz99BmB,MA499BlBwyC,EAAQ,EACRE,EAAQzyC,EAAKuxC,EAAI,GAAMA,EAAI,EAE3B,MAED,SAGCgB,EAAQ7V,EAAK,EACb+V,EAAQ1yC,EAMX,GAAI2yC,GAAuB,IAAZ1yC,EAAKD,GACnB5vB,EAAS/5C,KAAKi4D,SAEfj4D,MAAKm4D,YAAcmkD,GAAW3yC,EAAKyyC,GACnCp8G,KAAKq4D,YAAcikD,GAAWD,EAAQzyC,GACtC5pE,KAAKo4D,YAAc8jD,EAAQniE,EAC3B/5C,KAAKs4D,YAAc6jD,EAAQpiE,GAI5B+hE,aAAc,SAAWxV,EAAI38B,EAAI1c,EAAG2c,GAuBnC,IAAM,GArBF1vD,GAASla,KAAK83D,aACjBa,EAAS34D,KAAK43D,aACd7d,EAAS/5C,KAAKi4D,UAEdskD,EAAKjW,EAAKvsD,EAASyiE,EAAKD,EAAKxiE,EAC7B0iE,EAAKz8G,KAAKo4D,YAAcskD,EAAK18G,KAAKs4D,YAClCqkD,EAAK38G,KAAKm4D,YAAaykD,EAAK58G,KAAKq4D,YAEjCt6B,GAAMkvB,EAAI0c,IAASC,EAAKD,GACxBwxC,EAAKp9E,EAAIA,EACT8+E,EAAM1B,EAAKp9E,EAIR++E,GAAOH,EAAKE,EAAM,EAAIF,EAAKxB,EAAKwB,EAAK5+E,EACrCulE,GAAO,EAAIqZ,GAAOE,IAAU,IAAM,EAAIF,GAAOxB,IAAS,GAAMwB,GAAO5+E,EAAI,EACvEm9C,IAAS,EAAI0hC,GAAOC,GAAQ,IAAMD,GAAOzB,EAAK,GAAMp9E,EACpDg/E,EAAKH,EAAKC,EAAMD,EAAKzB,EAIfn1G,EAAI,EAAGA,IAAM+zC,IAAW/zC,EAEjCkU,EAAQlU,GACN82G,EAAKnkD,EAAQ8jD,EAAKz2G,GAClBs9F,EAAK3qC,EAAQ6jD,EAAKx2G,GAClBk1E,EAAKviB,EAAQ4jD,EAAKv2G,GAClB+2G,EAAKpkD,EAAQ+jD,EAAK12G,EAIrB,OAAOkU,MAgBTq+C,GAAkB4I,UAAYn/D,OAAO2rE,OAAQ3rE,OAAOo+E,OAAQ1oB,GAAYyJ,YAEvEnJ,YAAaO,GAEbujD,aAAc,SAAWxV,EAAI38B,EAAI1c,EAAG2c,GAYnC,IAAM,GAVF1vD,GAASla,KAAK83D,aACjBa,EAAS34D,KAAK43D,aACd7d,EAAS/5C,KAAKi4D,UAEd+kD,EAAU1W,EAAKvsD,EACfkjE,EAAUD,EAAUjjE,EAEpBmjE,GAAYjwD,EAAI0c,IAASC,EAAKD,GAC9BwzC,EAAU,EAAID,EAELl3G,EAAI,EAAGA,IAAM+zC,IAAW/zC,EAEjCkU,EAAQlU,GACN2yD,EAAQskD,EAAUj3G,GAAMm3G,EACxBxkD,EAAQqkD,EAAUh3G,GAAMk3G,CAI3B,OAAOhjG,MAoBTs+C,GAAoB2I,UAAYn/D,OAAO2rE,OAAQ3rE,OAAOo+E,OAAQ1oB,GAAYyJ,YAEzEnJ,YAAaQ,GAEbsjD,aAAc,SAAWxV,GAExB,MAAOtmG,MAAKi8G,iBAAkB3V,EAAK,KAMrC,IAAI8W,GAEJA,KAECrkD,eAAgBjzD,aAChBkzD,gBAAiBlzD,aAEjBozD,qBAzm+BuB,KA2m+BvBmkD,iCAAkC,SAAWnjG,GAE5C,MAAO,IAAIs+C,IAAqBx4D,KAAK04D,MAAO14D,KAAK24D,OAAQ34D,KAAKs9G,eAAgBpjG,IAI/EqjG,+BAAgC,SAAWrjG,GAE1C,MAAO,IAAIq+C,IAAmBv4D,KAAK04D,MAAO14D,KAAK24D,OAAQ34D,KAAKs9G,eAAgBpjG,IAI7EsjG,+BAAgC,SAAWtjG,GAE1C,MAAO,IAAIg+C,IAAkBl4D,KAAK04D,MAAO14D,KAAK24D,OAAQ34D,KAAKs9G,eAAgBpjG,IAI5E++C,iBAAkB,SAAWL,GAE5B,GAAI6kD,EAEJ,QAAS7kD,GAER,IApo+BuB,MAso+BtB6kD,EAAgBz9G,KAAKq9G,gCAErB,MAED,KAzo+BqB,MA2o+BpBI,EAAgBz9G,KAAKu9G,8BAErB,MAED,KA9o+BqB,MAgp+BpBE,EAAgBz9G,KAAKw9G,+BAMvB,OAAuBt8G,KAAlBu8G,EAA8B,CAElC,GAAIC,GAAU,iCACZ19G,KAAK29G,cAAgB,yBAA2B39G,KAAKuC,IAEvD,QAAgCrB,KAA3BlB,KAAK2iE,kBAAkC,CAG3C,GAAK/J,IAAkB54D,KAAKk5D,qBAM3B,KAAM,IAAIzkC,OAAOipF,EAJjB19G,MAAKi5D,iBAAkBj5D,KAAKk5D,sBAW9B,WADAz4D,SAAQqa,KAAM,gCAAiC4iG,GAKhD19G,KAAK2iE,kBAAoB86C,GAI1BG,iBAAkB,WAEjB,OAAS59G,KAAK2iE,mBAEb,IAAK3iE,MAAKq9G,iCAET,MA3r+BsB,KA6r+BvB,KAAKr9G,MAAKu9G,+BAET,MA9r+BoB,KAgs+BrB,KAAKv9G,MAAKw9G,+BAET,MAjs+BoB,QAus+BvBF,aAAc,WAEb,MAAOt9G,MAAK24D,OAAOn4D,OAASR,KAAK04D,MAAMl4D,QAKxCq9G,MAAO,SAAWC,GAEjB,GAAoB,IAAfA,EAIJ,IAAM,GAFFplD,GAAQ14D,KAAK04D,MAEP1yD,EAAI,EAAGL,EAAI+yD,EAAMl4D,OAAQwF,IAAML,IAAMK,EAE9C0yD,EAAO1yD,IAAO83G,CAMhB,OAAO99G,OAKR8O,MAAO,SAAWy0D,GAEjB,GAAmB,IAAdA,EAIJ,IAAM,GAFF7K,GAAQ14D,KAAK04D,MAEP1yD,EAAI,EAAGL,EAAI+yD,EAAMl4D,OAAQwF,IAAML,IAAMK,EAE9C0yD,EAAO1yD,IAAOu9D,CAMhB,OAAOvjE,OAMR+9G,KAAM,SAAWr/C,EAAWs/C,GAO3B,IALA,GAAItlD,GAAQ14D,KAAK04D,MAChBulD,EAAQvlD,EAAMl4D,OACd25G,EAAO,EACPC,EAAK6D,EAAQ,EAEN9D,IAAS8D,GAASvlD,EAAOyhD,GAASz7C,KAAey7C,CACzD,OAAiB,IAATC,GAAc1hD,EAAO0hD,GAAO4D,KAAa5D,CAIjD,MAFGA,EAEW,IAATD,GAAcC,IAAO6D,EAAQ,CAG5B9D,GAAQC,IAAKA,EAAK3xF,KAAK3c,IAAKsuG,EAAI,GAAKD,EAAOC,EAAK,EAEtD,IAAIrgE,GAAS/5C,KAAKs9G,cAClBt9G,MAAK04D,MAAQG,GAAeqhD,WAAYxhD,EAAOyhD,EAAMC,GACrDp6G,KAAK24D,OAASE,GAAeqhD,WAAYl6G,KAAK24D,OAAQwhD,EAAOpgE,EAAQqgE,EAAKrgE,GAI3E,MAAO/5C,OAKRm5D,SAAU,WAET,GAAI+kD,IAAQ,EAERjmD,EAAYj4D,KAAKs9G,cAChBrlD,GAAYxvC,KAAKC,MAAOuvC,IAAgB,IAE5Cx3D,QAAQC,MAAO,6DAA8DV,MAC7Ek+G,GAAQ,EAIT,IAAIxlD,GAAQ14D,KAAK04D,MAChBC,EAAS34D,KAAK24D,OAEdslD,EAAQvlD,EAAMl4D,MAEA,KAAVy9G,IAEJx9G,QAAQC,MAAO,gDAAiDV,MAChEk+G,GAAQ,EAMT,KAAM,GAFFC,GAAW,KAELn4G,EAAI,EAAGA,IAAMi4G,EAAOj4G,IAAO,CAEpC,GAAIo4G,GAAW1lD,EAAO1yD,EAEtB,IAAyB,gBAAbo4G,IAAyBpc,MAAOoc,GAAa,CAExD39G,QAAQC,MAAO,4DAA6DV,KAAMgG,EAAGo4G,GACrFF,GAAQ,CACR,OAID,GAAkB,OAAbC,GAAqBA,EAAWC,EAAW,CAE/C39G,QAAQC,MAAO,mDAAoDV,KAAMgG,EAAGo4G,EAAUD,GACtFD,GAAQ,CACR,OAIDC,EAAWC,EAIZ,OAAgBl9G,KAAXy3D,GAECE,GAAewhD,aAAc1hD,GAEjC,IAAM,GAAI3yD,GAAI,EAAGL,EAAIgzD,EAAOn4D,OAAQwF,IAAML,IAAMK,EAAI,CAEnD,GAAI9D,GAAQy2D,EAAQ3yD,EAEpB,IAAKg8F,MAAO9/F,GAAU,CAErBzB,QAAQC,MAAO,6DAA8DV,KAAMgG,EAAG9D,GACtFg8G,GAAQ,CACR,QAUJ,MAAOA,IAMR9kD,SAAU,WAWT,IAAM,GATFV,GAAQ14D,KAAK04D,MAChBC,EAAS34D,KAAK24D,OACd5e,EAAS/5C,KAAKs9G,eAEde,EAr2+BqB,OAq2+BCr+G,KAAK49G,mBAE3BU,EAAa,EACb1zG,EAAY8tD,EAAMl4D,OAAS,EAElBwF,EAAI,EAAGA,EAAI4E,IAAc5E,EAAI,CAEtC,GAAIu4G,IAAO,EAEP7jE,EAAOge,EAAO1yD,EAKlB,IAAK00C,IAJUge,EAAO1yD,EAAI,KAIQ,IAANA,GAAW00C,IAASA,EAAM,IAErD,GAAO2jE,EAsBAE,GAAO,MAdb,KAAM,GAJFv7G,GAASgD,EAAI+zC,EAChBykE,EAAUx7G,EAAS+2C,EACnB0kE,EAAUz7G,EAAS+2C,EAEV5nC,EAAI,EAAGA,IAAM4nC,IAAW5nC,EAAI,CAErC,GAAIjQ,GAAQy2D,EAAQ31D,EAASmP,EAE7B,IAAKjQ,IAAUy2D,EAAQ6lD,EAAUrsG,IAC/BjQ,IAAUy2D,EAAQ8lD,EAAUtsG,GAAM,CAEnCosG,GAAO,CACP,QAYJ,GAAKA,EAAO,CAEX,GAAKv4G,IAAMs4G,EAAa,CAEvB5lD,EAAO4lD,GAAe5lD,EAAO1yD,EAK7B,KAAM,GAHF04G,GAAa14G,EAAI+zC,EACpB4kE,EAAcL,EAAavkE,EAElB5nC,EAAI,EAAGA,IAAM4nC,IAAW5nC,EAEjCwmD,EAAQgmD,EAAcxsG,GAAMwmD,EAAQ+lD,EAAavsG,KAIhDmsG,GAQL,GAAK1zG,EAAY,EAAI,CAEpB8tD,EAAO4lD,GAAe5lD,EAAO9tD,EAE7B,KAAM,GAAI8zG,GAAa9zG,EAAYmvC,EAAQ4kE,EAAcL,EAAavkE,EAAQ5nC,EAAI,EAAGA,IAAM4nC,IAAW5nC,EAErGwmD,EAAQgmD,EAAcxsG,GAAMwmD,EAAQ+lD,EAAavsG,KAE/CmsG,EAWJ,MAPKA,KAAe5lD,EAAMl4D,SAEzBR,KAAK04D,MAAQG,GAAeqhD,WAAYxhD,EAAO,EAAG4lD,GAClDt+G,KAAK24D,OAASE,GAAeqhD,WAAYvhD,EAAQ,EAAG2lD,EAAavkE,IAI3D/5C,OA4CTq5D,GAAoB8H,UAAYn/D,OAAO2rE,OAAQ3rE,OAAOo+E,OAAQg9B,KAE7DplD,YAAaqB,GAEbskD,cAAe,WAoBhBrkD,GAA4B6H,UAAYn/D,OAAO2rE,OAAQ3rE,OAAOo+E,OAAQ1oB,GAAYyJ,YAEjFnJ,YAAasB,GAEbwiD,aAAc,SAAWxV,EAAI38B,EAAI1c,EAAG2c,GAUnC,IAAM,GARF1vD,GAASla,KAAK83D,aACjBa,EAAS34D,KAAK43D,aACd7d,EAAS/5C,KAAKi4D,UAEdj1D,EAASsjG,EAAKvsD,EAEdptB,GAAUsgC,EAAI0c,IAASC,EAAKD,GAEnB5+C,EAAM/nB,EAAS+2C,EAAQ/2C,IAAW+nB,EAAK/nB,GAAU,EAE1DrC,EAAWu5E,UAAWhgE,EAAQ,EAAGy+C,EAAQ31D,EAAS+2C,EAAQ4e,EAAQ31D,EAAQ2pB,EAI3E,OAAOzS,MAqBTq/C,GAAwB4H,UAAYn/D,OAAO2rE,OAAQ3rE,OAAOo+E,OAAQg9B,KAEjEplD,YAAauB,GAEbokD,cAAe,aAIfzkD,qBAjj/BuB,KAmj/BvBqkD,+BAAgC,SAAWrjG,GAE1C,MAAO,IAAIo/C,IAA6Bt5D,KAAK04D,MAAO14D,KAAK24D,OAAQ34D,KAAKs9G,eAAgBpjG,IAIvFsjG,mCAAgCt8G,KAmBjCs4D,GAAoB2H,UAAYn/D,OAAO2rE,OAAQ3rE,OAAOo+E,OAAQg9B,KAE7DplD,YAAawB,GAEbmkD,cAAe,WAwBhBlkD,GAAoB0H,UAAYn/D,OAAO2rE,OAAQ3rE,OAAOo+E,OAAQg9B,KAE7DplD,YAAayB,GAEbkkD,cAAe,SACf3kD,gBAAiBn8C,MAEjBq8C,qBAhn/ByB,KAkn/BzBqkD,mCAAgCr8G,GAEhCs8G,mCAAgCt8G,KAoBjCw4D,GAAqByH,UAAYn/D,OAAO2rE,OAAQ3rE,OAAOo+E,OAAQg9B,KAE9DplD,YAAa0B,GAEbikD,cAAe,OACf3kD,gBAAiBn8C,MAEjBq8C,qBA/o/ByB,KAip/BzBqkD,mCAAgCr8G,GAChCs8G,mCAAgCt8G,KAwBjCy4D,GAAmBwH,UAAYn/D,OAAO2rE,OAAQ3rE,OAAOo+E,OAAQg9B,KAE5DplD,YAAa2B,GAEbgkD,cAAe,UA4BhB/jD,GAAcuH,UAAYi8C,GAC1BA,GAAuBplD,YAAc4B,GAIrC53D,OAAO2rE,OAAQ/T,IAKdg7B,MAAO,SAAWgqB,GAEjB,OAAmB19G,KAAd09G,EAAK/8G,KAET,KAAM,IAAI4yB,OAAO,sCAIlB,IAAIoqF,GAAYjlD,GAAcklD,8BAA+BF,EAAK/8G,KAElE,QAAoBX,KAAf09G,EAAKlmD,MAAsB,CAE/B,GAAIA,MAAYC,IAEhBE,IAAekiD,YAAa6D,EAAK/0D,KAAM6O,EAAOC,EAAQ,SAEtDimD,EAAKlmD,MAAQA,EACbkmD,EAAKjmD,OAASA,EAKf,WAAyBz3D,KAApB29G,EAAUjqB,MAEPiqB,EAAUjqB,MAAOgqB,GAKjB,GAAIC,GAAWD,EAAKr8G,KAAMq8G,EAAKlmD,MAAOkmD,EAAKjmD,OAAQimD,EAAKhmD,gBAMjEymB,OAAQ,SAAW0/B,GAElB,GAEIH,GAFAC,EAAYE,EAAM/mD,WAKtB,QAA0B92D,KAArB29G,EAAUx/B,OAEdu/B,EAAOC,EAAUx/B,OAAQ0/B,OAEnB,CAGNH,GAECr8G,KAAQw8G,EAAMx8G,KACdm2D,MAASG,GAAeC,aAAcimD,EAAMrmD,MAAO77C,OACnD87C,OAAUE,GAAeC,aAAcimD,EAAMpmD,OAAQ97C,OAItD,IAAI+7C,GAAgBmmD,EAAMnB,kBAErBhlD,KAAkBmmD,EAAM7lD,uBAE5B0lD,EAAKhmD,cAAgBA,GAQvB,MAFAgmD,GAAK/8G,KAAOk9G,EAAMpB,cAEXiB,GAIRE,8BAA+B,SAAWl/C,GAEzC,OAASA,EAASq4C,eAEjB,IAAK,SACL,IAAK,SACL,IAAK,QACL,IAAK,SACL,IAAK,UAEJ,MAAOz+C;SAER,KAAK,SACL,IAAK,UACL,IAAK,UACL,IAAK,UAEJ,MAAOH,GAER,KAAK,QAEJ,MAAOM,GAER,KAAK,aAEJ,MAAOJ,GAER,KAAK,OACL,IAAK,UAEJ,MAAOG,GAER,KAAK,SAEJ,MAAOD,IAIT,KAAM,IAAIhlC,OAAO,yBAA2BmrC,MAiC9C59D,OAAO2rE,OAAQ9T,IAEd+6B,MAAO,SAAWgqB,GAMjB,IAAM,GAJF7kD,MACHilD,EAAaJ,EAAK7kD,OAClBklD,EAAY,GAAQL,EAAKM,KAAO,GAEvBl5G,EAAI,EAAGL,EAAIq5G,EAAWx+G,OAAQwF,IAAML,IAAMK,EAEnD+zD,EAAOxvD,KAAMqvD,GAAcg7B,MAAOoqB,EAAYh5G,IAAM8I,MAAOmwG,GAI5D,OAAO,IAAIplD,IAAe+kD,EAAKr8G,KAAMq8G,EAAK9kD,SAAUC,IAIrDslB,OAAQ,SAAWtd,GAalB,IAAM,GAXFhI,MACHolD,EAAap9C,EAAKhI,OAEf6kD,GAEHr8G,KAAQw/D,EAAKx/D,KACbu3D,SAAYiI,EAAKjI,SACjBC,OAAUA,GAID/zD,EAAI,EAAGL,EAAIw5G,EAAW3+G,OAAQwF,IAAML,IAAMK,EAEnD+zD,EAAOxvD,KAAMqvD,GAAcylB,OAAQ8/B,EAAYn5G,IAIhD,OAAO44G,IAIRQ,8BAA+B,SAAW78G,EAAM88G,EAAqBH,EAAKI,GAKzE,IAAM,GAHFC,GAAkBF,EAAoB7+G,OACtCu5D,KAEM/zD,EAAI,EAAGA,EAAIu5G,EAAiBv5G,IAAO,CAE5C,GAAI0yD,MACAC,IAEJD,GAAMnuD,MACHvE,EAAIu5G,EAAkB,GAAMA,EAC9Bv5G,GACEA,EAAI,GAAMu5G,GAEb5mD,EAAOpuD,KAAM,EAAG,EAAG,EAEnB,IAAIyX,GAAQ62C,GAAe6hD,iBAAkBhiD,EAC7CA,GAAQG,GAAe+hD,YAAaliD,EAAO,EAAG12C,GAC9C22C,EAASE,GAAe+hD,YAAajiD,EAAQ,EAAG32C,GAIzCs9F,GAAyB,IAAf5mD,EAAO,KAEvBA,EAAMnuD,KAAMg1G,GACZ5mD,EAAOpuD,KAAMouD,EAAQ,KAItBoB,EAAOxvD,KACN,GAAIivD,IACH,0BAA4B6lD,EAAqBr5G,GAAIzD,KAAO,IAC5Dm2D,EAAOC,GACN7pD,MAAO,EAAMowG,IAIjB,MAAO,IAAIrlD,IAAet3D,GAAQ,EAAGw3D,IAItCylD,WAAY,SAAWC,EAAmBl9G,GAEzC,GAAIm9G,GAAYD,CAEhB,KAAO5iG,MAAMC,QAAS2iG,GAAsB,CAE3C,GAAIp2D,GAAIo2D,CACRC,GAAYr2D,EAAEpvC,UAAYovC,EAAEpvC,SAAS0lG,YAAct2D,EAAEs2D,WAItD,IAAM,GAAI35G,GAAI,EAAGA,EAAI05G,EAAUl/G,OAAQwF,IAEtC,GAAK05G,EAAW15G,GAAIzD,OAASA,EAE5B,MAAOm9G,GAAW15G,EAMpB,OAAO,OAIR45G,oCAAqC,SAAW/nG,EAAcqnG,EAAKI,GAUlE,IAAM,GARFO,MAIAjpF,EAAU,qBAIJ5wB,EAAI,EAAG2Y,EAAK9G,EAAarX,OAAQwF,EAAI2Y,EAAI3Y,IAAO,CAEzD,GAAI65F,GAAchoF,EAAc7R,GAC5B85G,EAAQjgB,EAAYt9F,KAAKsI,MAAO+rB,EAEpC,IAAKkpF,GAASA,EAAMt/G,OAAS,EAAI,CAEhC,GAAI+B,GAAOu9G,EAAO,GAEdC,EAAwBF,EAAyBt9G,EAC9Cw9G,KAENF,EAAyBt9G,GAASw9G,MAInCA,EAAsBx1G,KAAMs1F,IAM9B,GAAImgB,KAEJ,KAAM,GAAIz9G,KAAQs9G,GAEjBG,EAAMz1G,KAAMsvD,GAAculD,8BAA+B78G,EAAMs9G,EAAyBt9G,GAAQ28G,EAAKI,GAItG,OAAOU,IAKRC,eAAgB,SAAWC,EAAWzkF,GAErC,IAAOykF,EAGN,MADAz/G,SAAQC,MAAO,yDACR,IAkCR,KAAM,GA9BFy/G,GAAmB,SAAWtB,EAAWuB,EAAWC,EAAeC,EAAcC,GAGpF,GAA8B,IAAzBF,EAAc7/G,OAAe,CAEjC,GAAIk4D,MACAC,IAEJE,IAAekiD,YAAasF,EAAe3nD,EAAOC,EAAQ2nD,GAGpC,IAAjB5nD,EAAMl4D,QAEV+/G,EAAWh2G,KAAM,GAAIs0G,GAAWuB,EAAW1nD,EAAOC,MAQjDoB,KAEAymD,EAAWN,EAAU39G,MAAQ,UAE7Bu3D,EAAWomD,EAAU1/G,SAAY,EACjC0+G,EAAMgB,EAAUhB,KAAO,GAEvBuB,EAAkBP,EAAUQ,cAEtB7mC,EAAI,EAAGA,EAAI4mC,EAAgBjgH,OAAQq5E,IAAO,CAEnD,GAAIwmC,GAAgBI,EAAiB5mC,GAAIhwB,IAGzC,IAAOw2D,GAA0C,IAAzBA,EAAc7/G,OAGtC,GAAK6/G,EAAe,GAAIxoG,aAAe,CAKtC,IAAM,GAFF8oG,MAEM3jG,EAAI,EAAGA,EAAIqjG,EAAc7/G,OAAQwc,IAE1C,GAAKqjG,EAAerjG,GAAInF,aAEvB,IAAM,GAAIk3D,GAAI,EAAGA,EAAIsxC,EAAerjG,GAAInF,aAAarX,OAAQuuE,IAE5D4xC,EAAkBN,EAAerjG,GAAInF,aAAck3D,KAAU,CAWhE,KAAM,GAAI6xC,KAAmBD,GAAmB,CAK/C,IAAM,GAHFjoD,MACAC,KAEMoW,EAAI,EAAGA,IAAMsxC,EAAerjG,GAAInF,aAAarX,SAAWuuE,EAAI,CAErE,GAAI8xC,GAAeR,EAAerjG,EAElC07C,GAAMnuD,KAAMs2G,EAAanmE,MACzBie,EAAOpuD,KAAQs2G,EAAahhB,cAAgB+gB,EAAoB,EAAI,GAIrE7mD,EAAOxvD,KAAM,GAAIivD,IAAqB,yBAA2BonD,EAAkB,IAAKloD,EAAOC,IAIhGmB,EAAW6mD,EAAiBngH,QAAW0+G,GAAO,OAExC,CAIN,GAAI4B,GAAW,UAAYrlF,EAAOo+C,GAAIt3E,KAAO,GAE7C49G,GACC9mD,GAAqBynD,EAAW,YAChCT,EAAe,MAAOtmD,GAEvBomD,EACC5mD,GAAyBunD,EAAW,cACpCT,EAAe,MAAOtmD,GAEvBomD,EACC9mD,GAAqBynD,EAAW,SAChCT,EAAe,MAAOtmD,IAMzB,MAAuB,KAAlBA,EAAOv5D,OAEJ,KAIG,GAAIq5D,IAAe2mD,EAAU1mD,EAAUC,MAQpD/3D,OAAO2rE,OAAQ9T,GAAcsH,WAE5BnH,cAAe,WAId,IAAM,GAFFD,GAAS/5D,KAAK+5D,OAAQD,EAAW,EAE3B9zD,EAAI,EAAGL,EAAIo0D,EAAOv5D,OAAQwF,IAAML,IAAMK,EAAI,CAEnD,GAAI+4G,GAAQ/+G,KAAK+5D,OAAQ/zD,EAEzB8zD,GAAWrxC,KAAK3c,IAAKguD,EAAUilD,EAAMrmD,MAAOqmD,EAAMrmD,MAAMl4D,OAAS,IAIlER,KAAK85D,SAAWA,GAIjBikD,KAAM,WAEL,IAAM,GAAI/3G,GAAI,EAAGA,EAAIhG,KAAK+5D,OAAOv5D,OAAQwF,IAExChG,KAAK+5D,OAAQ/zD,GAAI+3G,KAAM,EAAG/9G,KAAK85D,SAIhC,OAAO95D,OAIRo5D,SAAU,WAET,IAAM,GAAIpzD,GAAI,EAAGA,EAAIhG,KAAK+5D,OAAOv5D,OAAQwF,IAExChG,KAAK+5D,OAAQ/zD,GAAIozD,UAIlB,OAAOp5D,SAiBTgC,OAAO2rE,OAAQ1T,GAAekH,WAE7Bm2C,KAAM,SAAWvhD,EAAKT,EAAQC,EAAYC,GAEzC,GAAI95C,GAAQ1b,IAEC,IAAIq2D,IAAY36C,EAAM46C,SAC5BghD,KAAMvhD,EAAK,SAAWhG,GAE5BuF,EAAQ55C,EAAMk5E,MAAOF,KAAKE,MAAO7kC,MAE/BwF,EAAYC,IAIhBurD,YAAa,SAAW7+G,GAEvBlC,KAAKkM,SAAWhK,GAIjB0yF,MAAO,SAAWgqB,GAIjB,QAASoC,GAAYz+G,GAQpB,WAN0BrB,KAArBgL,EAAU3J,IAEd9B,QAAQqa,KAAM,0CAA2CvY,GAInD2J,EAAU3J,GAVlB,GAAI2J,GAAWlM,KAAKkM,SAchBiJ,EAAW,GAAI8hG,IAAW2H,EAAK/8G,KAqEnC,QAnEmBX,KAAd09G,EAAKx8G,OAAqB+S,EAAS/S,KAAOw8G,EAAKx8G,UACjClB,KAAd09G,EAAKr8G,OAAqB4S,EAAS5S,KAAOq8G,EAAKr8G,UAChCrB,KAAf09G,EAAK/vG,OAAsBsG,EAAStG,MAAM66E,OAAQk1B,EAAK/vG,WACpC3N,KAAnB09G,EAAKr9D,YAA0BpsC,EAASosC,UAAYq9D,EAAKr9D,eACtCrgD,KAAnB09G,EAAKp9D,YAA0BrsC,EAASqsC,UAAYo9D,EAAKp9D,eACvCtgD,KAAlB09G,EAAKl+D,UAAyBvrC,EAASurC,SAASgpC,OAAQk1B,EAAKl+D,cAC3Cx/C,KAAlB09G,EAAKz9D,UAAyBhsC,EAASgsC,SAASuoC,OAAQk1B,EAAKz9D,cAC1CjgD,KAAnB09G,EAAKx9D,YAA0BjsC,EAASisC,UAAYw9D,EAAKx9D,eACtClgD,KAAnB09G,EAAKl9D,YAA0BvsC,EAASusC,UAAYk9D,EAAKl9D,eAC7BxgD,KAA5B09G,EAAKj9D,qBAAmCxsC,EAASwsC,mBAAqBi9D,EAAKj9D,wBACzDzgD,KAAlB09G,EAAKnwG,WAAyB0G,EAAS1G,SAAWmwG,EAAKnwG,cACjCvN,KAAtB09G,EAAK3wG,eAA6BkH,EAASlH,aAAe2wG,EAAK3wG,kBACvC/M,KAAxB09G,EAAKzwG,iBAA+BgH,EAAShH,eAAiBywG,EAAKzwG,oBAC7CjN,KAAtB09G,EAAKroG,eAA6BpB,EAASoB,aAAeqoG,EAAKroG,kBAClDrV,KAAb09G,EAAKjqG,MAAoBQ,EAASR,IAAMiqG,EAAKjqG,SACxBzT,KAArB09G,EAAKtoG,cAA4BnB,EAASmB,YAAcsoG,EAAKtoG,iBAC3CpV,KAAlB09G,EAAKpsG,WAAyB2C,EAAS3C,SAAWosG,EAAKpsG,cACzCtR,KAAd09G,EAAKxoG,OAAqBjB,EAASiB,KAAOwoG,EAAKxoG,UAC9BlV,KAAjB09G,EAAKhwG,UAAwBuG,EAASvG,QAAUgwG,EAAKhwG,aAChC1N,KAArB09G,EAAKnoG,cAA4BtB,EAASsB,YAAcmoG,EAAKnoG,iBAC1CvV,KAAnB09G,EAAKjrG,YAA0BwB,EAASxB,UAAYirG,EAAKjrG,eACtCzS,KAAnB09G,EAAKhpG,YAA0BT,EAASS,UAAYgpG,EAAKhpG,eACrC1U,KAApB09G,EAAK/oG,aAA2BV,EAASU,WAAa+oG,EAAK/oG,gBACvC3U,KAApB09G,EAAK9oG,aAA2BX,EAASW,WAAa8oG,EAAK9oG,gBACxC5U,KAAnB09G,EAAK1mG,YAA0B/C,EAAS+C,UAAY0mG,EAAK1mG,eAC7BhX,KAA5B09G,EAAKzmG,qBAAmChD,EAASgD,mBAAqBymG,EAAKzmG,wBACjDjX,KAA1B09G,EAAK90F,mBAAiC3U,EAAS2U,iBAAmB80F,EAAK90F,sBAC5C5oB,KAA3B09G,EAAK70F,oBAAkC5U,EAAS4U,kBAAoB60F,EAAK70F,uBAEvD7oB,KAAlB09G,EAAKz7G,WAAyBgS,EAAShS,SAAWy7G,EAAKz7G,UAEpC,IAAnBy7G,EAAK7iG,YAAkB5G,EAAS4G,UAAY6iG,EAAK7iG,eAC/B7a,KAAlB09G,EAAK59D,WAAyB7rC,EAAS6rC,SAAW49D,EAAK59D,cACtC9/C,KAAjB09G,EAAK19D,UAAwB/rC,EAAS+rC,QAAU09D,EAAK19D,aACtChgD,KAAf09G,EAAK9vG,QAAsBqG,EAASrG,MAAQ8vG,EAAK9vG,WAE/B5N,KAAlB09G,EAAKhnG,WAAyBzC,EAASyC,SAAWgnG,EAAKhnG,cACjC1W,KAAtB09G,EAAK/mG,eAA6B1C,EAAS0C,aAAe+mG,EAAK/mG,kBAC5C3W,KAAnB09G,EAAKvnG,YAA0BlC,EAASkC,UAAYunG,EAAKvnG,eAExCnW,KAAjB09G,EAAKxpG,UAAwBD,EAASC,QAAUwpG,EAAKxpG,aACnClU,KAAlB09G,EAAKrnG,WAAyBpC,EAASoC,SAAWqnG,EAAKrnG,cAItCrW,KAAjB09G,EAAKqC,UAAwB9rG,EAASmB,YAA+B,IAAjBsoG,EAAKqC,aAI3C//G,KAAd09G,EAAKx1G,OAAqB+L,EAAS/L,KAAOw1G,EAAKx1G,UACtBlI,KAAzB09G,EAAKxlF,kBAAgCjkB,EAASikB,gBAAkBwlF,EAAKxlF,qBAIxDl4B,KAAb09G,EAAKv5G,MAAoB8P,EAAS9P,IAAM27G,EAAYpC,EAAKv5G,UAEvCnE,KAAlB09G,EAAK9mG,WAET3C,EAAS2C,SAAWkpG,EAAYpC,EAAK9mG,UACrC3C,EAASsB,aAAc,OAIFvV,KAAjB09G,EAAKppF,UAAwBrgB,EAASqgB,QAAUwrF,EAAYpC,EAAKppF,cAC9Ct0B,KAAnB09G,EAAKv9D,YAA0BlsC,EAASksC,UAAYu9D,EAAKv9D,eAEtCngD,KAAnB09G,EAAKnpF,YAA0BtgB,EAASsgB,UAAYurF,EAAYpC,EAAKnpF,gBAChDv0B,KAArB09G,EAAKt9D,YAA4B,CAErC,GAAIA,GAAcs9D,EAAKt9D,aAEe,IAAjCzkC,MAAMC,QAASwkC,KAInBA,GAAgBA,EAAaA,IAI9BnsC,EAASmsC,aAAc,GAAIphD,IAAU0wC,UAAW0Q,GA4BjD,WAxB8BpgD,KAAzB09G,EAAK7mG,kBAAgC5C,EAAS4C,gBAAkBipG,EAAYpC,EAAK7mG,sBACtD7W,KAA3B09G,EAAK5mG,oBAAkC7C,EAAS6C,kBAAoB4mG,EAAK5mG,uBAC/C9W,KAA1B09G,EAAK3mG,mBAAiC9C,EAAS8C,iBAAmB2mG,EAAK3mG,sBAEjD/W,KAAtB09G,EAAK/lF,eAA6B1jB,EAAS0jB,aAAemoF,EAAYpC,EAAK/lF,mBACrD33B,KAAtB09G,EAAK9lF,eAA6B3jB,EAAS2jB,aAAekoF,EAAYpC,EAAK9lF,mBAEtD53B,KAArB09G,EAAKhmF,cAA4BzjB,EAASyjB,YAAcooF,EAAYpC,EAAKhmF,kBAC9C13B,KAA3B09G,EAAKj+D,oBAAkCxrC,EAASwrC,kBAAoBi+D,EAAKj+D,uBAEpDz/C,KAArB09G,EAAKp1F,cAA4BrU,EAASqU,YAAcw3F,EAAYpC,EAAKp1F,kBAEzDtoB,KAAhB09G,EAAKn1F,SAAuBtU,EAASsU,OAASu3F,EAAYpC,EAAKn1F,aAEzCvoB,KAAtB09G,EAAKh1F,eAA6BzU,EAASyU,aAAeg1F,EAAKh1F,kBAE7C1oB,KAAlB09G,EAAKx1F,WAAyBjU,EAASiU,SAAW43F,EAAYpC,EAAKx1F,eACxCloB,KAA3B09G,EAAKv1F,oBAAkClU,EAASkU,kBAAoBu1F,EAAKv1F,uBAE1DnoB,KAAf09G,EAAKt1F,QAAsBnU,EAASmU,MAAQ03F,EAAYpC,EAAKt1F,YACrCpoB,KAAxB09G,EAAKr1F,iBAA+BpU,EAASoU,eAAiBq1F,EAAKr1F,oBAE9CroB,KAArB09G,EAAKvlF,cAA4BlkB,EAASkkB,YAAc2nF,EAAYpC,EAAKvlF,cAEvElkB,KAgBTnT,OAAO2rE,OAAQzT,GAAqBiH,WAEnCm2C,KAAM,SAAWvhD,EAAKT,EAAQC,EAAYC,GAEzC,GAAI95C,GAAQ1b,IAEC,IAAIq2D,IAAY36C,EAAM46C,SAC5BghD,KAAMvhD,EAAK,SAAWhG,GAE5BuF,EAAQ55C,EAAMk5E,MAAOF,KAAKE,MAAO7kC,MAE/BwF,EAAYC,IAIhBo/B,MAAO,SAAWgqB,GAEjB,GAAI3kG,GAAW,GAAIsM,IAEfE,EAAQm4F,EAAK95G,KAAK2hB,KAEtB,QAAevlB,KAAVulB,EAAsB,CAE1B,GAAIy6F,GAAa,GAAIC,IAAc16F,EAAM5kB,MAAQ4kB,EAAMlhB,MACvD0U,GAAS0O,SAAU,GAAIxD,IAAiB+7F,EAAY,IAIrD,GAAI7yG,GAAauwG,EAAK95G,KAAKuJ,UAE3B,KAAM,GAAIq7C,KAAOr7C,GAAa,CAE7B,GAAI+R,GAAY/R,EAAYq7C,GACxBw3D,EAAa,GAAIC,IAAc/gG,EAAUve,MAAQue,EAAU7a,MAE/D0U,GAAS2O,aAAc8gC,EAAK,GAAIvkC,IAAiB+7F,EAAY9gG,EAAUgF,SAAUhF,EAAUiF,aAI5F,GAAItI,GAAS6hG,EAAK95G,KAAKiY,QAAU6hG,EAAK95G,KAAKs8G,WAAaxC,EAAK95G,KAAKu8G,OAElE,QAAgBngH,KAAX6b,EAEJ,IAAM,GAAI/W,GAAI,EAAGL,EAAIoX,EAAOvc,OAAQwF,IAAML,IAAMK,EAAI,CAEnD,GAAIkX,GAAQH,EAAQ/W,EAEpBiU,GAASsO,SAAUrL,EAAMyJ,MAAOzJ,EAAMsE,MAAOtE,EAAME,eAMrD,GAAIuH,GAAiBi6F,EAAK95G,KAAK6f,cAE/B,QAAwBzjB,KAAnByjB,EAA+B,CAEnC,GAAIzhB,GAAS,GAAI/B,OAEcD,KAA1ByjB,EAAezhB,QAEnBA,EAAO0tC,UAAWjsB,EAAezhB,QAIlC+W,EAAS0K,eAAiB,GAAIjM,IAAQxV,EAAQyhB,EAAehM,QAI9D,MAAOsB,KAMT,IAAIknG,KACHlgG,UAAWA,UACXE,WAAYA,WAEZuE,kBAAgD,mBAAtBA,mBAAoCA,kBAAoBvE,WAClFP,WAAYA,WACZrU,YAAaA,YACbnG,WAAYA,WACZ0a,YAAaA,YACbhb,aAAcA,aACd6a,aAAcA,aAefw5C,IAAOmnD,UAENC,YAEAxhG,IAAK,SAAWyhG,EAAOnI,GAEtBr5G,KAAKuhH,SAASh3G,KAAMi3G,EAAOnI,IAI5B13F,IAAK,SAAWy1F,GAIf,IAAM,GAFFmK,GAAWvhH,KAAKuhH,SAEVv7G,EAAI,EAAG8K,EAAIywG,EAAS/gH,OAAQwF,EAAI8K,EAAG9K,GAAK,EAAI,CAErD,GAAIw7G,GAAQD,EAAUv7G,GAClBqzG,EAASkI,EAAUv7G,EAAI,EAE3B,IAAKw7G,EAAMplG,KAAMg7F,GAEhB,MAAOiC,GAMT,MAAO,QAMTr3G,OAAO2rE,OAAQxT,GAAOgH,WAErBw4C,gBAAaz4G,GAEbugH,eAAgB,SAAW1rD,GAE1B,GAAI+pD,GAAQ/pD,EAAIliC,MAAO,IAEvB,OAAsB,KAAjBisF,EAAMt/G,OAAsB,MAEjCs/G,EAAM1hF,MAEC0hF,EAAM5xG,KAAM,KAAQ,MAI5BwzG,cAAe,SAAWx2C,EAAWxQ,EAAai/C,GAIjD,IAAM,GAFFp0G,MAEMS,EAAI,EAAGA,EAAIklE,EAAU1qE,SAAWwF,EAEzCT,EAAOS,GAAMhG,KAAK2hH,eAAgBz2C,EAAWllE,GAAK00D,EAAai/C,EAIhE,OAAOp0G,IAIRo8G,eAAgB,WAEf,GAAIC,IACHx4E,WAAYA,GACZjzB,eAAgBA,GAChBqzB,iBAAkBA,GAClBO,oBAAqBA,GACrBI,iBAAkBA,GAClBd,eAAgBA,IAGbx6B,EAAQ,GAAInD,GACZm2G,EAAgB,GAAIhrD,IACpBirD,EAAiB,GAAI7nD,GAEzB,OAAO,UAAyB8U,EAAGrU,EAAai/C,GAM/C,QAASoI,GAAat3G,EAAMxH,EAAQD,EAAQ08E,EAAM59E,GAEjD,GAGIuC,GAHA29G,EAAWtnD,EAAcjwD,EACzB4uG,EAASl/C,GAAOmnD,SAAS3/F,IAAKqgG,EAIlB,QAAX3I,EAEJh1G,EAAUg1G,EAAO/B,KAAM0K,IAIvBH,EAAc/H,eAAgBH,GAC9Bt1G,EAAUw9G,EAAcvK,KAAM0K,QAIf9gH,KAAX+B,IAEJoB,EAAQpB,OAAO2tC,UAAW3tC,GAEL,IAAhBA,EAAQ,KAAYoB,EAAQ7C,MAAQgyC,IACpB,IAAhBvwC,EAAQ,KAAYoB,EAAQ5C,MAAQ+xC,SAI1BtyC,KAAX8B,GAEJqB,EAAQrB,OAAO4tC,UAAW5tC,OAIb9B,KAATw+E,IAEe,WAAdA,EAAM,KAAmBr7E,EAAQ7C,MAAQgyC,IAC3B,WAAdksC,EAAM,KAAmBr7E,EAAQ7C,MAAQkyC,IAE3B,WAAdgsC,EAAM,KAAmBr7E,EAAQ5C,MAAQ+xC,IAC3B,WAAdksC,EAAM,KAAmBr7E,EAAQ5C,MAAQiyC,SAI3BxyC,KAAfY,IAEJuC,EAAQvC,WAAaA,EAItB,IAAIM,GAAOC,GAAMC,cAIjB,OAFA4J,GAAU9J,GAASiC,EAEZjC,EAvDR,GAAI8J,MA6DA0yG,GACHx8G,KAAMC,GAAMC,eACZT,KAAM,sBAGP,KAAM,GAAIU,KAAQwsE,GAAI,CAErB,GAAI7sE,GAAQ6sE,EAAGxsE,EAEf,QAASA,GAER,IAAK,WACL,IAAK,WACL,IAAK,iBACL,IAAK,eACJ,KACD,KAAK,UACJq8G,EAAKr8G,KAAOL,CACZ,MACD,KAAK,WACJ08G,EAAKpsG,SAAWovG,EAAc1/G,EAC9B,MACD,KAAK,eACL,IAAK,aACJzB,QAAQqa,KAAM,+BAAgCvY,EAAM,0BACpD,MACD,KAAK,eACJq8G,EAAK/vG,MAAQA,EAAM+hC,UAAW1uC,GAAQmoF,QACtC,MACD,KAAK,gBACJu0B,EAAKz9D,SAAWtyC,EAAM+hC,UAAW1uC,GAAQmoF,QACzC,MACD,KAAK,gBACJu0B,EAAKl+D,SAAW7xC,EAAM+hC,UAAW1uC,GAAQmoF,QACzC,MACD,KAAK,eACJu0B,EAAKx9D,UAAYl/C,CACjB,MACD,KAAK,UACyB,UAAxBA,EAAM+1G,gBAA4B2G,EAAK/8G,KAAO,qBACtB,UAAxBK,EAAM+1G,gBAA4B2G,EAAK/8G,KAAO,qBACtB,aAAxBK,EAAM+1G,gBAA+B2G,EAAK/8G,KAAO,uBACtD,MACD,KAAK,aACJ+8G,EAAKv5G,IAAM08G,EAAa7/G,EAAO6sE,EAAEkzC,iBAAkBlzC,EAAEmzC,iBAAkBnzC,EAAEozC,eAAgBpzC,EAAEqzC,qBAC3F,MACD,KAAK,mBACL,IAAK,mBACL,IAAK,iBACL,IAAK,uBACJ,KACD,KAAK,cACJxD,EAAKhmF,YAAcmpF,EAAa7/G,EAAO6sE,EAAEszC,kBAAmBtzC,EAAEuzC,kBAAmBvzC,EAAEwzC,gBAAiBxzC,EAAEyzC,sBACtG,MACD,KAAK,oBACL,IAAK,oBACL,IAAK,kBACL,IAAK,wBACJ,KACD,KAAK,WACJ5D,EAAKx1F,SAAW24F,EAAa7/G,EAAO6sE,EAAE0zC,eAAgB1zC,EAAE2zC,eAAgB3zC,EAAE4zC,aAAc5zC,EAAE6zC,mBAC1F,MACD,KAAK,iBACL,IAAK,iBACL,IAAK,eACL,IAAK,qBACJ,KACD,KAAK,QACJhE,EAAKt1F,MAAQy4F,EAAa7/G,EAAO6sE,EAAE8zC,YAAa9zC,EAAE+zC,YAAa/zC,EAAEg0C,UAAWh0C,EAAEi0C,gBAC9E,MACD,KAAK,cACL,IAAK,cACL,IAAK,YACL,IAAK,kBACJ,KACD,KAAK,UACJpE,EAAKppF,QAAUusF,EAAa7/G,EAAO6sE,EAAEk0C,cAAel0C,EAAEm0C,cAAen0C,EAAEo0C,YAAap0C,EAAEq0C,kBACtF,MACD,KAAK,eACJxE,EAAKv9D,UAAYn/C,CACjB,MACD,KAAK,gBACL,IAAK,gBACL,IAAK,cACL,IAAK,oBACJ,KACD,KAAK,YACJ08G,EAAKnpF,UAAYssF,EAAa7/G,EAAO6sE,EAAEs0C,gBAAiBt0C,EAAEu0C,gBAAiBv0C,EAAEw0C,cAAex0C,EAAEy0C,oBAC9F,MACD,KAAK,kBACJ5E,EAAKt9D,aAAgBp/C,EAAOA,EAC5B,MACD,KAAK,kBACL,IAAK,kBACL,IAAK,gBACL,IAAK,sBACJ,KACD,KAAK,cACJ08G,EAAKp1F,YAAcu4F,EAAa7/G,EAAO6sE,EAAE00C,kBAAmB10C,EAAE20C,kBAAmB30C,EAAE40C,gBAAiB50C,EAAE60C,sBACtG,MACD,KAAK,oBACL,IAAK,oBACL,IAAK,kBACL,IAAK,wBACJ,KACD,KAAK,eACJhF,EAAK9lF,aAAeipF,EAAa7/G,EAAO6sE,EAAE80C,mBAAoB90C,EAAE+0C,mBAAoB/0C,EAAEg1C,iBAAkBh1C,EAAEi1C,uBAC1G,MACD,KAAK,qBACL,IAAK,qBACL,IAAK,mBACL,IAAK,yBACJ,KACD,KAAK,eACJpF,EAAK/lF,aAAekpF,EAAa7/G,EAAO6sE,EAAEk1C,mBAAoBl1C,EAAEm1C,mBAAoBn1C,EAAEo1C,iBAAkBp1C,EAAEq1C,uBAC1G,MACD,KAAK,qBACL,IAAK,qBACL,IAAK,mBACL,IAAK,yBACJ,KACD,KAAK,WACJxF,EAAK9mG,SAAWiqG,EAAa7/G,EAAO6sE,EAAEs1C,eAAgBt1C,EAAEu1C,eAAgBv1C,EAAEw1C,aAAcx1C,EAAEy1C,mBAC1F,MACD,KAAK,iBACL,IAAK,iBACL,IAAK,eACL,IAAK,qBACJ,KACD,KAAK,YACJ5F,EAAKxoG,KAAO0F,EACZ,MACD,KAAK,cACJ8iG,EAAKxoG,KAAOwF,EACZ,MACD,KAAK,eACJnb,QAAQqa,KAAM,yEACd8jG,EAAKhwG,QAAU1M,CACf,MACD,KAAK,YACL,IAAK,aACL,IAAK,aACL,IAAK,UACL,IAAK,eACL,IAAK,cACL,IAAK,UACL,IAAK,YACJ08G,EAAMr8G,GAASL,CACf,MACD,KAAK,gBACW,IAAVA,IAAiB08G,EAAKroG,aAAeswD,IAC3B,SAAV3kE,IAAmB08G,EAAKroG,aAAe6xD,GAC5C,MACD,SACC3nE,QAAQC,MAAO,2CAA4C6B,EAAML,IAcpE,MAPmB,sBAAd08G,EAAK/8G,YAAsC+8G,GAAKl+D,SAClC,sBAAdk+D,EAAK/8G,YAAsC+8G,GAAKz9D,SAEhDy9D,EAAKhwG,QAAU,IAAIgwG,EAAKnoG,aAAc,GAE3CqrG,EAAef,YAAa70G,GAErB41G,EAAeltB,MAAOgqB,SA4BhC58G,OAAO2rE,OAAQpT,GAAW4G,WAEzBm2C,KAAM,SAAWvhD,EAAKT,EAAQC,EAAYC,GAEzC,GAAI95C,GAAQ1b,KAER06D,EAAc16D,KAAK06D,aAA6C,gBAArB16D,MAAK06D,YAA6B16D,KAAK06D,YAAcP,GAAOgH,UAAUsgD,eAAgB1rD,GAEjIsjD,EAAS,GAAIhjD,IAAYr2D,KAAKs2D,QAClC+iD,GAAOF,mBAAoBn5G,KAAKw6D,iBAChC6+C,EAAO/B,KAAMvhD,EAAK,SAAWhG,GAE5B,GAAI6uD,GAAOlqB,KAAKE,MAAO7kC,GACnByvB,EAAWo/B,EAAKp/B,QAEpB,QAAkBt+E,KAAbs+E,EAAyB,CAE7B,GAAI39E,GAAO29E,EAAS39E,IAEpB,QAAcX,KAATW,EAAqB,CAEzB,GAA4B,WAAvBA,EAAKo2G,cAGT,WADAx3G,SAAQC,MAAO,qBAAuBq1D,EAAM,qDAK7C,IAA4B,UAAvBl0D,EAAKo2G,cAGT,WADAx3G,SAAQC,MAAO,qBAAuBq1D,EAAM,sDAS/C,GAAIn8C,GAAS8B,EAAMk5E,MAAOgqB,EAAMlkD,EAChCpF,GAAQ17C,EAAOK,SAAUL,EAAOsxD,YAE9B3V,EAAYC,IAIhBivD,eAAgB,SAAWviH,GAE1BlC,KAAK06D,YAAcx4D,GAIpB0yF,MAAO,WAEN,QAAS8vB,GAAY9F,EAAM3kG,GAE1B,QAAS0qG,GAAUziH,EAAO+Q,GAEzB,MAAO/Q,GAAU,GAAK+Q,EAIvB,GAAIjN,GAAGmM,EAAGyyG,EAET5hH,EAAQ6hH,EAERC,EAAYC,EAAaC,EAAS5nG,EAElCvb,EACAojH,EACAC,EACA5lB,EACAC,EAAeC,EACfC,EAAcC,EAEdpxF,EAAQwR,EAAMqlG,EAAOC,EAAOp/C,EAAKntD,EAEjCwsG,EAAS72G,EAAI4Y,EAAG5gB,EAEhB8F,EAAQsyG,EAAKtyG,MACbD,EAAWuyG,EAAKvyG,SAChB8Z,EAAUy4F,EAAKz4F,QACf/B,EAASw6F,EAAKx6F,OAEdtV,EAAQ8vG,EAAK9vG,MAEbw2G,EAAY,CAGb,QAAkBpkH,KAAb09G,EAAKx4F,IAAoB,CAI7B,IAAMpgB,EAAI,EAAGA,EAAI44G,EAAKx4F,IAAI5lB,OAAQwF,IAE5B44G,EAAKx4F,IAAKpgB,GAAIxF,QAAS8kH,GAI7B,KAAMt/G,EAAI,EAAGA,EAAIs/G,EAAWt/G,IAE3BiU,EAASoK,cAAere,MAS1B,IAHAhD,EAAS,EACT6hH,EAAUx4G,EAAS7L,OAEXwC,EAAS6hH,GAEhBv2G,EAAS,GAAInN,GAEbmN,EAAOnO,EAAIkM,EAAUrJ,KAAc8L,EACnCR,EAAOlO,EAAIiM,EAAUrJ,KAAc8L,EACnCR,EAAO1N,EAAIyL,EAAUrJ,KAAc8L,EAEnCmL,EAAS5N,SAAS9B,KAAM+D,EAOzB,KAHAtL,EAAS,EACT6hH,EAAUv4G,EAAM9L,OAERwC,EAAS6hH,GAchB,GAZAhjH,EAAOyK,EAAOtJ,KAEdiiH,EAASN,EAAU9iH,EAAM,GACzBqjH,EAAcP,EAAU9iH,EAAM,GAC9By9F,EAAkBqlB,EAAU9iH,EAAM,GAClC09F,EAAgBolB,EAAU9iH,EAAM,GAChC29F,EAAsBmlB,EAAU9iH,EAAM,GACtC49F,EAAeklB,EAAU9iH,EAAM,GAC/B69F,EAAqBilB,EAAU9iH,EAAM,GAIhCojH,EAAS,CA0Bb,GAxBAE,EAAQ,GAAIthG,IACZshG,EAAMhxG,EAAI7H,EAAOtJ,GACjBmiH,EAAMh+G,EAAImF,EAAOtJ,EAAS,GAC1BmiH,EAAMrhG,EAAIxX,EAAOtJ,EAAS,GAE1BoiH,EAAQ,GAAIvhG,IACZuhG,EAAMjxG,EAAI7H,EAAOtJ,EAAS,GAC1BoiH,EAAMj+G,EAAImF,EAAOtJ,EAAS,GAC1BoiH,EAAMthG,EAAIxX,EAAOtJ,EAAS,GAE1BA,GAAU,EAELkiH,IAEJ9nG,EAAgB9Q,EAAOtJ,KACvBmiH,EAAM/nG,cAAgBA,EACtBgoG,EAAMhoG,cAAgBA,GAMvBwnG,EAAK3qG,EAAS3N,MAAM9L,OAEf8+F,EAEJ,IAAMt5F,EAAI,EAAGA,EAAIs/G,EAAWt/G,IAO3B,IALAq/G,EAAUzG,EAAKx4F,IAAKpgB,GAEpBiU,EAASoK,cAAere,GAAK4+G,MAC7B3qG,EAASoK,cAAere,GAAK4+G,EAAK,MAE5BzyG,EAAI,EAAGA,EAAI,EAAGA,IAEnB6yG,EAAU14G,EAAOtJ,KAEjBokB,EAAIi+F,EAAmB,EAAVL,GACbx+G,EAAI6+G,EAAmB,EAAVL,EAAc,GAE3Bx2G,EAAK,GAAItO,GAASknB,EAAG5gB,GAEV,IAAN2L,GAAU8H,EAASoK,cAAere,GAAK4+G,GAAKr6G,KAAMiE,GAC5C,IAAN2D,GAAU8H,EAASoK,cAAere,GAAK4+G,EAAK,GAAIr6G,KAAMiE,EAsB9D,IAdK+wF,IAEJwlB,EAAmC,EAArBz4G,EAAOtJ,KAErBmiH,EAAMtsG,OAAOhR,IACZse,EAAS4+F,KACT5+F,EAAS4+F,KACT5+F,EAAS4+F,IAGVK,EAAMvsG,OAAOzH,KAAM+zG,EAAMtsG,SAIrB2mF,EAEJ,IAAMx5F,EAAI,EAAGA,EAAI,EAAGA,IAEnB++G,EAAmC,EAArBz4G,EAAOtJ,KAErB6V,EAAS,GAAI1X,GACZglB,EAAS4+F,KACT5+F,EAAS4+F,KACT5+F,EAAS4+F,IAIC,IAAN/+G,GAAUm/G,EAAMnhG,cAAczZ,KAAMsO,GAC9B,IAAN7S,GAAUo/G,EAAMphG,cAAczZ,KAAMsO,EAkB3C,IAXK4mF,IAEJqlB,EAAax4G,EAAOtJ,KACpBgjE,EAAM5hD,EAAQ0gG,GAEdK,EAAMt2G,MAAM66E,OAAQ1jB,GACpBo/C,EAAMv2G,MAAM66E,OAAQ1jB,IAKhB05B,EAEJ,IAAM15F,EAAI,EAAGA,EAAI,EAAGA,IAEnB8+G,EAAax4G,EAAOtJ,KACpBgjE,EAAM5hD,EAAQ0gG,GAEH,IAAN9+G,GAAUm/G,EAAM5uG,aAAahM,KAAM,GAAImB,GAAOs6D,IACxC,IAANhgE,GAAUo/G,EAAM7uG,aAAahM,KAAM,GAAImB,GAAOs6D,GAMrD/rD,GAAS3N,MAAM/B,KAAM46G,GACrBlrG,EAAS3N,MAAM/B,KAAM66G,OAEf,CAkBN,GAhBAtlG,EAAO,GAAI+D,IACX/D,EAAK3L,EAAI7H,EAAOtJ,KAChB8c,EAAK3Y,EAAImF,EAAOtJ,KAChB8c,EAAKgE,EAAIxX,EAAOtJ,KAEXkiH,IAEJ9nG,EAAgB9Q,EAAOtJ,KACvB8c,EAAK1C,cAAgBA,GAMtBwnG,EAAK3qG,EAAS3N,MAAM9L,OAEf8+F,EAEJ,IAAMt5F,EAAI,EAAGA,EAAIs/G,EAAWt/G,IAM3B,IAJAq/G,EAAUzG,EAAKx4F,IAAKpgB,GAEpBiU,EAASoK,cAAere,GAAK4+G,MAEvBzyG,EAAI,EAAGA,EAAI,EAAGA,IAEnB6yG,EAAU14G,EAAOtJ,KAEjBokB,EAAIi+F,EAAmB,EAAVL,GACbx+G,EAAI6+G,EAAmB,EAAVL,EAAc,GAE3Bx2G,EAAK,GAAItO,GAASknB,EAAG5gB,GAErByT,EAASoK,cAAere,GAAK4+G,GAAKr6G,KAAMiE,EAoB3C,IAZK+wF,IAEJwlB,EAAmC,EAArBz4G,EAAOtJ,KAErB8c,EAAKjH,OAAOhR,IACXse,EAAS4+F,KACT5+F,EAAS4+F,KACT5+F,EAAS4+F,KAKNvlB,EAEJ,IAAMx5F,EAAI,EAAGA,EAAI,EAAGA,IAEnB++G,EAAmC,EAArBz4G,EAAOtJ,KAErB6V,EAAS,GAAI1X,GACZglB,EAAS4+F,KACT5+F,EAAS4+F,KACT5+F,EAAS4+F,IAGVjlG,EAAKkE,cAAczZ,KAAMsO,EAe3B,IARK4mF,IAEJqlB,EAAax4G,EAAOtJ,KACpB8c,EAAKjR,MAAM66E,OAAQtlE,EAAQ0gG,KAKvBplB,EAEJ,IAAM15F,EAAI,EAAGA,EAAI,EAAGA,IAEnB8+G,EAAax4G,EAAOtJ,KACpB8c,EAAKvJ,aAAahM,KAAM,GAAImB,GAAO0Y,EAAQ0gG,IAM7C7qG,GAAS3N,MAAM/B,KAAMuV,IAQxB,QAASylG,GAAW3G,EAAM3kG,GAEzB,GAAIurG,OAAqDtkH,KAA7B09G,EAAK4G,oBAAsC5G,EAAK4G,oBAAsB,CAElG,IAAK5G,EAAKr6F,YAET,IAAM,GAAIve,GAAI,EAAG8K,EAAI8tG,EAAKr6F,YAAY/jB,OAAQwF,EAAI8K,EAAG9K,GAAKw/G,EAAsB,CAE/E,GAAIrlH,GAAIy+G,EAAKr6F,YAAave,GACtB5F,EAAMolH,EAAsB,EAAM5G,EAAKr6F,YAAave,EAAI,GAAM,EAC9DpF,EAAM4kH,EAAsB,EAAM5G,EAAKr6F,YAAave,EAAI,GAAM,EAC9DnF,EAAM2kH,EAAsB,EAAM5G,EAAKr6F,YAAave,EAAI,GAAM,CAElEiU,GAASsK,YAAYha,KAAM,GAAI1G,GAAS1D,EAAGC,EAAGQ,EAAGC,IAMnD,GAAK+9G,EAAKp6F,YAET,IAAM,GAAIxe,GAAI,EAAG8K,EAAI8tG,EAAKp6F,YAAYhkB,OAAQwF,EAAI8K,EAAG9K,GAAKw/G,EAAsB,CAE/E,GAAIrxG,GAAIyqG,EAAKp6F,YAAaxe,GACtBmB,EAAMq+G,EAAsB,EAAM5G,EAAKp6F,YAAaxe,EAAI,GAAM,EAC9D8d,EAAM0hG,EAAsB,EAAM5G,EAAKp6F,YAAaxe,EAAI,GAAM,EAC9DsiB,EAAMk9F,EAAsB,EAAM5G,EAAKp6F,YAAaxe,EAAI,GAAM,CAElEiU,GAASuK,YAAYja,KAAM,GAAI1G,GAASsQ,EAAGhN,EAAG2c,EAAGwE,IAMnDrO,EAASwhB,MAAQmjF,EAAKnjF,MAEjBxhB,EAASwhB,OAASxhB,EAASwhB,MAAMj7B,OAAS,IAAOyZ,EAASsK,YAAY/jB,SAAWyZ,EAASuK,YAAYhkB,QAAUyZ,EAASuK,YAAYhkB,SAAWyZ,EAAS5N,SAAS7L,SAEtKC,QAAQqa,KAAM,sCAAwCb,EAAS5N,SAAS7L,OAAS,mBAChFyZ,EAASuK,YAAYhkB,OAAS,uBAAyByZ,EAASsK,YAAY/jB,OAAS,mBAMxF,QAASilH,GAAe7G,EAAM3kG,GAE7B,GAAInL,GAAQ8vG,EAAK9vG,KAEjB,QAA2B5N,KAAtB09G,EAAK/mG,aAET,IAAM,GAAI7R,GAAI,EAAG8K,EAAI8tG,EAAK/mG,aAAarX,OAAQwF,EAAI8K,EAAG9K,IAAO,CAE5DiU,EAASpC,aAAc7R,MACvBiU,EAASpC,aAAc7R,GAAIzD,KAAOq8G,EAAK/mG,aAAc7R,GAAIzD,KACzD0X,EAASpC,aAAc7R,GAAIqG,WAK3B,KAAM,GAHFq5G,GAAczrG,EAASpC,aAAc7R,GAAIqG,SACzCs5G,EAAc/G,EAAK/mG,aAAc7R,GAAIqG,SAE/B7F,EAAI,EAAGi2F,EAAKkpB,EAAYnlH,OAAQgG,EAAIi2F,EAAIj2F,GAAK,EAAI,CAE1D,GAAI8H,GAAS,GAAInN,EACjBmN,GAAOnO,EAAIwlH,EAAan/G,GAAMsI,EAC9BR,EAAOlO,EAAIulH,EAAan/G,EAAI,GAAMsI,EAClCR,EAAO1N,EAAI+kH,EAAan/G,EAAI,GAAMsI,EAElC42G,EAAYn7G,KAAM+D,IAQrB,OAA0BpN,KAArB09G,EAAKgH,aAA6BhH,EAAKgH,YAAYplH,OAAS,EAAI,CAEpEC,QAAQqa,KAAM,kFAKd,KAAM,GAHFxO,GAAQ2N,EAAS3N,MACjBs5G,EAAchH,EAAKgH,YAAa,GAAIxhG,OAE9Bpe,EAAI,EAAG8K,EAAIxE,EAAM9L,OAAQwF,EAAI8K,EAAG9K,IAEzCsG,EAAOtG,GAAI6I,MAAM+hC,UAAWg1E,EAAiB,EAAJ5/G,IAQ5C,QAAS6/G,GAAiBjH,EAAM3kG,GAE/B,GAAI6rG,MAGAnG,SAEoBz+G,KAAnB09G,EAAKsB,WAETP,EAAWp1G,KAAMq0G,EAAKsB,eAIEh/G,KAApB09G,EAAKe,aAEJf,EAAKe,WAAWn/G,OAEpBm/G,EAAaA,EAAWzsD,OAAQ0rD,EAAKe,YAIrCA,EAAWp1G,KAAMq0G,EAAKe,YAMxB,KAAM,GAAI35G,GAAI,EAAGA,EAAI25G,EAAWn/G,OAAQwF,IAAO,CAE9C,GAAI+7D,GAAOlI,GAAcomD,eAAgBN,EAAY35G,GAAKiU,EAASwhB,MAC9DsmC,IAAO+jD,EAAiBv7G,KAAMw3D,GAKpC,GAAK9nD,EAASpC,aAAe,CAG5B,GAAIkuG,GAAsBlsD,GAAc+lD,oCAAqC3lG,EAASpC,aAAc,GACpGiuG,GAAmBA,EAAiB5yD,OAAQ6yD,GAIxCD,EAAiBtlH,OAAS,IAAIyZ,EAAS0lG,WAAamG,GAI1D,MAAO,UAAWlH,EAAMlkD,OAEJx5D,KAAd09G,EAAK95G,OAGT85G,EAAOA,EAAK95G,UAIO5D,KAAf09G,EAAK9vG,MAET8vG,EAAK9vG,MAAQ,EAAM8vG,EAAK9vG,MAIxB8vG,EAAK9vG,MAAQ,CAId,IAAImL,GAAW,GAAIiK,GAUnB,OARAwgG,GAAY9F,EAAM3kG,GAClBsrG,EAAW3G,EAAM3kG,GACjBwrG,EAAe7G,EAAM3kG,GACrB4rG,EAAiBjH,EAAM3kG,GAEvBA,EAASu5C,qBACTv5C,EAAS4uD,4BAEe3nE,KAAnB09G,EAAK1zC,WAAqD,IAA1B0zC,EAAK1zC,UAAU1qE,QAE1CyZ,SAAUA,IAMVA,SAAUA,EAAUixD,UAFb/Q,GAAOgH,UAAUugD,cAAe9C,EAAK1zC,UAAWxQ,EAAa16D,KAAK25G,oBAuBtF33G,OAAO2rE,OAAQlT,GAAa0G,WAE3Bm2C,KAAM,SAAWvhD,EAAKT,EAAQC,EAAYC,GAEf,KAArBx1D,KAAK06D,cAET16D,KAAK06D,YAAc3E,EAAIiwD,UAAW,EAAGjwD,EAAIkwD,YAAa,KAAQ,GAI/D,IAAIvqG,GAAQ1b,IAEC,IAAIq2D,IAAY36C,EAAM46C,SAC5BghD,KAAMvhD,EAAK,SAAWhG,GAE5B,GAAI6uD,GAAO,IAEX,KAECA,EAAOlqB,KAAKE,MAAO7kC,GAElB,MAAQrvD,GAMT,WAJiBQ,KAAZs0D,GAAwBA,EAAS90D,OAEtCD,SAAQC,MAAO,mCAAsCq1D,EAAM,IAAKr1D,EAAMg9G,SAMvE,GAAIl+B,GAAWo/B,EAAKp/B,QAEpB,QAAkBt+E,KAAbs+E,OAA4Ct+E,KAAlBs+E,EAAS39E,MAAsD,aAAhC29E,EAAS39E,KAAKo2G,cAG3E,WADAx3G,SAAQC,MAAO,kCAAqCq1D,EAAM,kCAK3Dr6C,GAAMk5E,MAAOgqB,EAAMtpD,IAEjBC,EAAYC,IAIhBivD,eAAgB,SAAWviH,GAE1BlC,KAAK06D,YAAcx4D,GAIpB43G,eAAgB,SAAW53G,GAE1BlC,KAAK25G,YAAcz3G,GAIpB0yF,MAAO,SAAWgqB,EAAMtpD,GAEvB,GAAI/pC,GAAavrB,KAAKkmH,gBAAiBtH,EAAKrzF,YAExCtmB,EAASjF,KAAKmmH,YAAavH,EAAK35G,OAAQ,eAE3B/D,KAAXo0D,GAAuBA,EAAQ17C,KAIjC1N,EAAWlM,KAAKomH,cAAexH,EAAK1yG,SAAUjH,GAC9CimE,EAAYlrE,KAAKqmH,eAAgBzH,EAAK1zC,UAAWh/D,GAEjD0N,EAAS5Z,KAAKsmH,YAAa1H,EAAKhlG,OAAQ2R,EAAY2/C,EAcxD,OAZK0zC,GAAKe,aAET/lG,EAAO+lG,WAAa3/G,KAAK6lH,gBAAiBjH,EAAKe,iBAI3Bz+G,KAAhB09G,EAAK35G,QAA+C,IAAvB25G,EAAK35G,OAAOzE,YAE7BU,KAAXo0D,GAAuBA,EAAQ17C,GAI9BA,GAIRssG,gBAAiB,SAAWtH,GAE3B,GAAIrzF,KAEJ,QAAcrqB,KAAT09G,EAKJ,IAAM,GAHF2H,GAAiB,GAAIhsD,IACrBisD,EAAuB,GAAItsD,IAErBl0D,EAAI,EAAG8K,EAAI8tG,EAAKp+G,OAAQwF,EAAI8K,EAAG9K,IAAO,CAE/C,GAAIiU,GACAnV,EAAO85G,EAAM54G,EAEjB,QAASlB,EAAKjD,MAEb,IAAK,gBACL,IAAK,sBAEJoY,EAAW,GAAI88F,IAAYjyG,EAAKjD,MAC/BiD,EAAKf,MACLe,EAAKd,OACLc,EAAK+hB,cACL/hB,EAAKgiB,eAGN,MAED,KAAK,cACL,IAAK,oBACL,IAAK,eAEJ7M,EAAW,GAAI88F,IAAYjyG,EAAKjD,MAC/BiD,EAAKf,MACLe,EAAKd,OACLc,EAAK8L,MACL9L,EAAK+hB,cACL/hB,EAAKgiB,eACLhiB,EAAKiiB,cAGN,MAED,KAAK,iBACL,IAAK,uBAEJ9M,EAAW,GAAI88F,IAAYjyG,EAAKjD,MAC/BiD,EAAK6T,OACL7T,EAAK8sD,SACL9sD,EAAK8rD,WACL9rD,EAAK+rD,YAGN,MAED,KAAK,mBACL,IAAK,yBAEJ52C,EAAW,GAAI88F,IAAYjyG,EAAKjD,MAC/BiD,EAAKgvD,UACLhvD,EAAKivD,aACLjvD,EAAKd,OACLc,EAAKwoD,eACLxoD,EAAKgiB,eACLhiB,EAAKkvD,UACLlvD,EAAK8rD,WACL9rD,EAAK+rD,YAGN,MAED,KAAK,eACL,IAAK,qBAEJ52C,EAAW,GAAI88F,IAAYjyG,EAAKjD,MAC/BiD,EAAK6T,OACL7T,EAAKd,OACLc,EAAKwoD,eACLxoD,EAAKgiB,eACLhiB,EAAKkvD,UACLlvD,EAAK8rD,WACL9rD,EAAK+rD,YAGN,MAED,KAAK,iBACL,IAAK,uBAEJ52C,EAAW,GAAI88F,IAAYjyG,EAAKjD,MAC/BiD,EAAK6T,OACL7T,EAAK+hB,cACL/hB,EAAKgiB,eACLhiB,EAAK4rD,SACL5rD,EAAK6rD,UACL7rD,EAAK8rD,WACL9rD,EAAK+rD,YAGN,MAED,KAAK,uBACL,IAAK,6BACL,IAAK,sBACL,IAAK,4BACL,IAAK,qBACL,IAAK,2BACL,IAAK,sBACL,IAAK,4BAEJ52C,EAAW,GAAI88F,IAAYjyG,EAAKjD,MAC/BiD,EAAK6T,OACL7T,EAAK+lD,OAGN,MAED,KAAK,eACL,IAAK,qBAEJ5wC,EAAW,GAAI88F,IAAYjyG,EAAKjD,MAC/BiD,EAAKqsD,YACLrsD,EAAKssD,YACLtsD,EAAKusD,cACLvsD,EAAKwsD,YACLxsD,EAAK8rD,WACL9rD,EAAK+rD,YAGN,MAED,KAAK,gBACL,IAAK,sBAEJ52C,EAAW,GAAI88F,IAAYjyG,EAAKjD,MAC/BiD,EAAK6T,OACL7T,EAAK0pD,KACL1pD,EAAKwoD,eACLxoD,EAAKuoD,gBACLvoD,EAAK0qD,IAGN,MAED,KAAK,oBACL,IAAK,0BAEJv1C,EAAW,GAAI88F,IAAYjyG,EAAKjD,MAC/BiD,EAAK6T,OACL7T,EAAK0pD,KACL1pD,EAAKuoD,gBACLvoD,EAAKwoD,eACLxoD,EAAKi5B,EACLj5B,EAAK2pD,EAGN,MAED,KAAK,gBACL,IAAK,sBAEJx0C,EAAW,GAAI88F,IAAYjyG,EAAKjD,MAC/BiD,EAAK6pB,OACL7pB,EAAK8sD,SACL9sD,EAAK4rD,SACL5rD,EAAK6rD,UAGN,MAED,KAAK,qBACL,IAAK,2BAEJ12C,EAAW,GAAI88F,IAAYjyG,EAAKjD,MAC/BiD,EAAKuH,SACLvH,EAAKohB,QACLphB,EAAK6T,OACL7T,EAAK2hH,QAGN,MAED,KAAK,iBAEJxsG,EAAWusG,EAAqB5xB,MAAO9vF,EAEvC,MAED,KAAK,WAEJmV,EAAWssG,EAAe3xB,MAAO9vF,EAAM9E,KAAK06D,aAAczgD,QAE1D,MAED,SAECxZ,QAAQqa,KAAM,kDAAoDhW,EAAKjD,KAAO,IAE9E,UAIFoY,EAAS7X,KAAO0C,EAAK1C,SAEFlB,KAAd4D,EAAKvC,OAAqB0X,EAAS1X,KAAOuC,EAAKvC,MAEpDgpB,EAAYzmB,EAAK1C,MAAS6X,EAM5B,MAAOsR,IAIR86F,eAAgB,SAAWzH,EAAM1yG,GAEhC,GAAIg/D,KAEJ,QAAchqE,KAAT09G,EAAqB,CAEzB,GAAIvF,GAAS,GAAIp/C,GACjBo/C,GAAO0H,YAAa70G,EAEpB,KAAM,GAAIlG,GAAI,EAAG8K,EAAI8tG,EAAKp+G,OAAQwF,EAAI8K,EAAG9K,IAAO,CAE/C,GAAIlB,GAAO85G,EAAM54G,EAEjB,IAAmB,kBAAdlB,EAAKjD,KAA2B,CAMpC,IAAM,GAFF0D,MAEM4M,EAAI,EAAGA,EAAIrN,EAAKomE,UAAU1qE,OAAQ2R,IAE3C5M,EAAMgF,KAAM8uG,EAAOzkB,MAAO9vF,EAAKomE,UAAW/4D,IAI3C+4D,GAAWpmE,EAAK1C,MAASmD,MAIzB2lE,GAAWpmE,EAAK1C,MAASi3G,EAAOzkB,MAAO9vF,IAQ1C,MAAOomE,IAIR26C,gBAAiB,SAAWjH,GAI3B,IAAM,GAFFe,MAEM35G,EAAI,EAAGA,EAAI44G,EAAKp+G,OAAQwF,IAAO,CAExC,GAAI+7D,GAAOlI,GAAc+6B,MAAOgqB,EAAM54G,GAEtC25G,GAAWp1G,KAAMw3D,GAIlB,MAAO49C,IAIRwG,YAAa,SAAWvH,EAAMtpD,GAE7B,GAAI55C,GAAQ1b,KACRiF,IAmBJ,QAAc/D,KAAT09G,GAAsBA,EAAKp+G,OAAS,EAAI,CAE5C,GAAI81D,GAAU,GAAIjB,IAAgBC,GAE9B+jD,EAAS,GAAI1iD,IAAaL,EAC9B+iD,GAAOS,eAAgB95G,KAAK25G,YAE5B,KAAM,GAAI3zG,GAAI,EAAG8K,EAAI8tG,EAAKp+G,OAAQwF,EAAI8K,EAAG9K,IAAO,CAE/C,GAAI1E,GAAQs9G,EAAM54G,GACdyE,EAAO,4BAA4B2R,KAAM9a,EAAMy0D,KAAQz0D,EAAMy0D,IAAMr6C,EAAMg/C,YAAcp5D,EAAMy0D,GAEjG9wD,GAAQ3D,EAAMc,MA7BhB,SAAoB2zD,GAInB,MAFAr6C,GAAM46C,QAAQR,UAAWC,GAElBsjD,EAAO/B,KAAMvhD,EAAK,WAExBr6C,EAAM46C,QAAQN,QAASD,QAErB70D,GAAW,WAEbwa,EAAM46C,QAAQN,QAASD,GACvBr6C,EAAM46C,QAAQL,UAAWF,MAkBStrD,IAMpC,MAAOxF,IAIRmhH,cAAe,SAAWxH,EAAM35G,GAE/B,QAASyhH,GAAexkH,EAAOL,GAE9B,MAAsB,gBAAVK,GAA4BA,GAExCzB,QAAQqa,KAAM,uEAAwE5Y,GAE/EL,EAAMK,IAId,GAAIgK,KAEJ,QAAchL,KAAT09G,EAEJ,IAAM,GAAI54G,GAAI,EAAG8K,EAAI8tG,EAAKp+G,OAAQwF,EAAI8K,EAAG9K,IAAO,CAE/C,GAAIlB,GAAO85G,EAAM54G,OAEG9E,KAAf4D,EAAKxD,OAETb,QAAQqa,KAAM,+CAAgDhW,EAAK1C,UAItClB,KAAzB+D,EAAQH,EAAKxD,QAEjBb,QAAQqa,KAAM,sCAAuChW,EAAKxD,MAI3D,IAAI+C,GAAU,GAAIhD,GAAS4D,EAAQH,EAAKxD,OACxC+C,GAAQ0O,aAAc,EAEtB1O,EAAQjC,KAAO0C,EAAK1C,SAEDlB,KAAd4D,EAAKvC,OAAqB8B,EAAQ9B,KAAOuC,EAAKvC,UAE7BrB,KAAjB4D,EAAKvD,UAAwB8C,EAAQ9C,QAAUmlH,EAAe5hH,EAAKvD,QAASolH,SAE5DzlH,KAAhB4D,EAAK9B,QAAuBqB,EAAQrB,OAAO4tC,UAAW9rC,EAAK9B,YAC3C9B,KAAhB4D,EAAK7B,QAAuBoB,EAAQpB,OAAO2tC,UAAW9rC,EAAK7B,YAC3C/B,KAAhB4D,EAAK5B,QAAuBmB,EAAQnB,OAAO0tC,UAAW9rC,EAAK5B,YACzChC,KAAlB4D,EAAK3B,WAAyBkB,EAAQlB,SAAW2B,EAAK3B,cAExCjC,KAAd4D,EAAK46E,OAETr7E,EAAQ7C,MAAQklH,EAAe5hH,EAAK46E,KAAM,GAAKknC,IAC/CviH,EAAQ5C,MAAQilH,EAAe5hH,EAAK46E,KAAM,GAAKknC,SAIxB1lH,KAAnB4D,EAAKnD,YAA0B0C,EAAQ1C,UAAY+kH,EAAe5hH,EAAKnD,UAAWklH,SAC/D3lH,KAAnB4D,EAAKpD,YAA0B2C,EAAQ3C,UAAYglH,EAAe5hH,EAAKpD,UAAWmlH,SAC9D3lH,KAApB4D,EAAKhD,aAA2BuC,EAAQvC,WAAagD,EAAKhD,gBAE3CZ,KAAf4D,EAAKtB,QAAsBa,EAAQb,MAAQsB,EAAKtB,OAErD0I,EAAUpH,EAAK1C,MAASiC,EAM1B,MAAO6H,IAIRo6G,YAAa,WAEZ,GAAIjjH,GAAS,GAAIhD,EAEjB,OAAO,UAAsByE,EAAMymB,EAAY2/C,GAI9C,QAAS47C,GAAavkH,GAQrB,WAN4BrB,KAAvBqqB,EAAYhpB,IAEhB9B,QAAQqa,KAAM,yCAA0CvY,GAIlDgpB,EAAYhpB,GAIpB,QAASwkH,GAAaxkH,GAErB,OAAcrB,KAATqB,EAAL,CAEA,GAAKsa,MAAMC,QAASva,GAAS,CAI5B,IAAM,GAFFgD,MAEMS,EAAI,EAAG8K,EAAIvO,EAAK/B,OAAQwF,EAAI8K,EAAG9K,IAAO,CAE/C,GAAI5D,GAAOG,EAAMyD,OAEU9E,KAAtBgqE,EAAW9oE,IAEf3B,QAAQqa,KAAM,yCAA0C1Y,GAIzDmD,EAAMgF,KAAM2gE,EAAW9oE,IAIxB,MAAOmD,GAUR,WAN2BrE,KAAtBgqE,EAAW3oE,IAEf9B,QAAQqa,KAAM,yCAA0CvY,GAIlD2oE,EAAW3oE,IA9CnB,GAAIqX,EAkDJ,QAAS9U,EAAKjD,MAEb,IAAK,QAEJ+X,EAAS,GAAIytC,QAEYnmD,KAApB4D,EAAK4mB,YAEJ4hD,OAAOE,UAAW1oE,EAAK4mB,cAE3B9R,EAAO8R,WAAa,GAAIhgB,GAAO5G,EAAK4mB,iBAMpBxqB,KAAb4D,EAAK6P,MAEc,QAAlB7P,EAAK6P,IAAI9S,KAEb+X,EAAOjF,IAAM,GAAIyyC,IAAKtiD,EAAK6P,IAAI9F,MAAO/J,EAAK6P,IAAIE,KAAM/P,EAAK6P,IAAIG,KAEjC,YAAlBhQ,EAAK6P,IAAI9S,OAEpB+X,EAAOjF,IAAM,GAAIwyC,IAASriD,EAAK6P,IAAI9F,MAAO/J,EAAK6P,IAAIK,UAMrD,MAED,KAAK,oBAEJ4E,EAAS,GAAI20B,IAAmBzpC,EAAK0pC,IAAK1pC,EAAK2pC,OAAQ3pC,EAAK+P,KAAM/P,EAAKgQ,SAEnD5T,KAAf4D,EAAK4pC,QAAsB90B,EAAO80B,MAAQ5pC,EAAK4pC,WACjCxtC,KAAd4D,EAAK6e,OAAqB/J,EAAO+J,KAAO7e,EAAK6e,UAC1BziB,KAAnB4D,EAAK6pC,YAA0B/0B,EAAO+0B,UAAY7pC,EAAK6pC,eACnCztC,KAApB4D,EAAK8pC,aAA2Bh1B,EAAOg1B,WAAa9pC,EAAK8pC,gBAC3C1tC,KAAd4D,EAAK8e,OAAqBhK,EAAOgK,KAAO5hB,OAAO2rE,UAAY7oE,EAAK8e,MAErE,MAED,KAAK,qBAEJhK,EAAS,GAAI0J,IAAoBxe,EAAKye,KAAMze,EAAK0e,MAAO1e,EAAK2e,IAAK3e,EAAK4e,OAAQ5e,EAAK+P,KAAM/P,EAAKgQ,IAE/F,MAED,KAAK,eAEJ8E,EAAS,GAAI49C,IAAc1yD,EAAK+J,MAAO/J,EAAKusB,UAE5C,MAED,KAAK,mBAEJzX,EAAS,GAAI29C,IAAkBzyD,EAAK+J,MAAO/J,EAAKusB,UAEhD,MAED,KAAK,aAEJzX,EAAS,GAAIy9C,IAAYvyD,EAAK+J,MAAO/J,EAAKusB,UAAWvsB,EAAKsrB,SAAUtrB,EAAKyrB,MAEzE,MAED,KAAK,gBAEJ3W,EAAS,GAAI69C,IAAe3yD,EAAK+J,MAAO/J,EAAKusB,UAAWvsB,EAAKf,MAAOe,EAAKd,OAEzE,MAED,KAAK,YAEJ4V,EAAS,GAAIu9C,IAAWryD,EAAK+J,MAAO/J,EAAKusB,UAAWvsB,EAAKsrB,SAAUtrB,EAAKqtB,MAAOrtB,EAAKstB,SAAUttB,EAAKyrB,MAEnG,MAED,KAAK,kBAEJ3W,EAAS,GAAIm9C,IAAiBjyD,EAAK+J,MAAO/J,EAAK2rB,YAAa3rB,EAAKusB,UAEjE,MAED,KAAK,cAEJ5wB,QAAQqa,KAAM,qEAEf,KAAK,OAEJ,GAAIb,GAAW6sG,EAAahiH,EAAKmV,UAC7B9E,EAAW4xG,EAAajiH,EAAKqQ,SAIhCyE,GAFIK,EAASwhB,OAASxhB,EAASwhB,MAAMj7B,OAAS,EAErC,GAAIwnD,IAAa/tC,EAAU9E,GAI3B,GAAI8V,IAAMhR,EAAU9E,EAI9B,MAED,KAAK,MAEJyE,EAAS,GAAI6tC,GAEb,MAED,KAAK,OAEJ7tC,EAAS,GAAI6uC,IAAMq+D,EAAahiH,EAAKmV,UAAY8sG,EAAajiH,EAAKqQ,UAAYrQ,EAAK0pB,KAEpF,MAED,KAAK,WAEJ5U,EAAS,GAAI+uC,IAAUm+D,EAAahiH,EAAKmV,UAAY8sG,EAAajiH,EAAKqQ,UAEvE,MAED,KAAK,eAEJyE,EAAS,GAAI8uC,IAAco+D,EAAahiH,EAAKmV,UAAY8sG,EAAajiH,EAAKqQ,UAE3E,MAED,KAAK,aACL,IAAK,SAEJyE,EAAS,GAAIgvC,IAAQk+D,EAAahiH,EAAKmV,UAAY8sG,EAAajiH,EAAKqQ,UAErE,MAED,KAAK,SAEJyE,EAAS,GAAI4tC,IAAQu/D,EAAajiH,EAAKqQ,UAEvC,MAED,KAAK,QAEJyE,EAAS,GAAIivC,GAEb,MAED,SAECjvC,EAAS,GAAIyI,IAoCf,GAhCAzI,EAAOxX,KAAO0C,EAAK1C,SAEAlB,KAAd4D,EAAKvC,OAAqBqX,EAAOrX,KAAOuC,EAAKvC,UAC7BrB,KAAhB4D,EAAKzB,QAETA,EAAOutC,UAAW9rC,EAAKzB,QACvBA,EAAOiS,UAAWsE,EAAO3G,SAAU2G,EAAO2I,WAAY3I,EAAO9K,aAItC5N,KAAlB4D,EAAKmO,UAAyB2G,EAAO3G,SAAS29B,UAAW9rC,EAAKmO,cAC5C/R,KAAlB4D,EAAK3B,UAAyByW,EAAOzW,SAASytC,UAAW9rC,EAAK3B,cAC1CjC,KAApB4D,EAAKyd,YAA2B3I,EAAO2I,WAAWquB,UAAW9rC,EAAKyd,gBACnDrhB,KAAf4D,EAAKgK,OAAsB8K,EAAO9K,MAAM8hC,UAAW9rC,EAAKgK,YAIrC5N,KAApB4D,EAAK0X,aAA2B5C,EAAO4C,WAAa1X,EAAK0X,gBAClCtb,KAAvB4D,EAAKse,gBAA8BxJ,EAAOwJ,cAAgBte,EAAKse,eAE/Dte,EAAK+Z,aAEiB3d,KAArB4D,EAAK+Z,OAAOgT,OAAqBjY,EAAOiF,OAAOgT,KAAO/sB,EAAK+Z,OAAOgT,UAC3C3wB,KAAvB4D,EAAK+Z,OAAOlG,SAAuBiB,EAAOiF,OAAOlG,OAAS7T,EAAK+Z,OAAOlG,YAC9CzX,KAAxB4D,EAAK+Z,OAAOC,SAAwBlF,EAAOiF,OAAOC,QAAQ8xB,UAAW9rC,EAAK+Z,OAAOC,aAC1D5d,KAAvB4D,EAAK+Z,OAAOjP,SAAuBgK,EAAOiF,OAAOjP,OAAS5P,KAAKsmH,YAAaxhH,EAAK+Z,OAAOjP,cAIxE1O,KAAjB4D,EAAKsQ,UAAwBwE,EAAOxE,QAAUtQ,EAAKsQ,aACjClU,KAAlB4D,EAAKyS,WAAyBqC,EAAOrC,SAAWzS,EAAKyS,cAEnCrW,KAAlB4D,EAAK0Y,SAIT,IAAM,GAFFA,GAAW1Y,EAAK0Y,SAEVxX,EAAI,EAAGA,EAAIwX,EAAShd,OAAQwF,IAErC4T,EAAOmG,IAAK/f,KAAKsmH,YAAa9oG,EAAUxX,GAAKulB,EAAY2/C,GAM3D,IAAmB,QAAdpmE,EAAKjD,KAIT,IAAM,GAFF6lD,GAAS5iD,EAAK4iD,OAER52C,EAAI,EAAGA,EAAI42C,EAAOlnD,OAAQsQ,IAAO,CAE1C,GAAI24F,GAAQ/hD,EAAQ52C,GAChBspF,EAAQxgF,EAAOsgF,oBAAqB,OAAQuP,EAAM7vF,YAEvC1Y,KAAVk5F,GAEJxgF,EAAO8vF,SAAUtP,EAAOqP,EAAMr5E,UAQjC,MAAOxW,QAQV,IAAI+sG,KACHK,UA3lkCe,IA4lkCf9hH,sBAAuBA,GACvBuyB,sBAAuBA,GACvBG,iCAAkCA,GAClCC,iCAAkCA,GAClCC,2BAA4BA,GAC5BJ,wBAAyBA,GACzBC,wBAAyBA,IAGtBivF,IACHpzE,eAAgBA,GAChB7wC,oBAAqBA,GACrB+wC,uBAAwBA,IAGrBmzE,IACH9hH,cAAeA,GACfs6B,2BAA4BA,GAC5BC,0BAA2BA,GAC3B18B,aAAcA,GACdkxC,0BAA2BA,GAC3BjxC,yBAA0BA,GA8H3Bb,QAAO2rE,OAAQnS,GAAM2F,WAKpB8lD,SAAU,WAGT,MADAxmH,SAAQqa,KAAM,6CACP,MAORizC,WAAY,SAAW3mC,EAAGojE,GAEzB,GAAIv9B,GAAIjtD,KAAKknH,eAAgB9/F,EAC7B,OAAOpnB,MAAKinH,SAAUh6D,EAAGu9B,IAM1B28B,UAAW,SAAW7/C,OAEFpmE,KAAdomE,IAA0BA,EAAY,EAI3C,KAAM,GAFF34C,MAEMrG,EAAI,EAAGA,GAAKg/C,EAAWh/C,IAEhCqG,EAAOpkB,KAAMvK,KAAKinH,SAAU3+F,EAAIg/C,GAIjC,OAAO34C,IAMRymF,gBAAiB,SAAW9tC,OAERpmE,KAAdomE,IAA0BA,EAAY,EAI3C,KAAM,GAFF34C,MAEMrG,EAAI,EAAGA,GAAKg/C,EAAWh/C,IAEhCqG,EAAOpkB,KAAMvK,KAAK+tD,WAAYzlC,EAAIg/C,GAInC,OAAO34C,IAMRy4F,UAAW,WAEV,GAAIC,GAAUrnH,KAAKsnH,YACnB,OAAOD,GAASA,EAAQ7mH,OAAS,IAMlC8mH,WAAY,SAAWhgD,GAItB,OAFmBpmE,KAAdomE,IAA0BA,EAAYtnE,KAAKy7D,oBAE3Cz7D,KAAKunH,iBACPvnH,KAAKunH,gBAAgB/mH,SAAW8mE,EAAY,IAC5CtnE,KAAK+S,YAEP,MAAO/S,MAAKunH,eAIbvnH,MAAK+S,aAAc,CAEnB,IACIy0G,GACAzpF,EAFAvM,KACSi2F,EAAOznH,KAAKinH,SAAU,GAC5BS,EAAM,CAIb,KAFAl2F,EAAMjnB,KAAM,GAENwzB,EAAI,EAAGA,GAAKupC,EAAWvpC,IAE5BypF,EAAUxnH,KAAKinH,SAAUlpF,EAAIupC,GAC7BogD,GAAOF,EAAQj2C,WAAYk2C,GAC3Bj2F,EAAMjnB,KAAMm9G,GACZD,EAAOD,CAMR,OAFAxnH,MAAKunH,gBAAkB/1F,EAEhBA,GAIRm2F,iBAAkB,WAEjB3nH,KAAK+S,aAAc,EACnB/S,KAAKsnH,cAMNJ,eAAgB,SAAW9/F,EAAGgJ,GAE7B,GAIIw3F,GAJAC,EAAa7nH,KAAKsnH,aAElBthH,EAAI,EAAG2Y,EAAKkpG,EAAWrnH,MAM1BonH,GAFIx3F,GAMchJ,EAAIygG,EAAYlpG,EAAK,EAQxC,KAFA,GAA4BmpG,GAAxBt4C,EAAM,EAAGC,EAAO9wD,EAAK,EAEjB6wD,GAAOC,GAMd,GAJAzpE,EAAIyiB,KAAKC,MAAO8mD,GAAQC,EAAOD,GAAQ,IAEvCs4C,EAAaD,EAAY7hH,GAAM4hH,GAEb,EAEjBp4C,EAAMxpE,EAAI,MAEJ,CAAA,KAAK8hH,EAAa,GAIlB,CAENr4C,EAAOzpE,CACP,OALAypE,EAAOzpE,EAAI,EAeb,GAFAA,EAAIypE,EAECo4C,EAAY7hH,KAAQ4hH,EAExB,MAAO5hH,IAAM2Y,EAAK,EAMnB,IAAIopG,GAAeF,EAAY7hH,EAa/B,QAFUA,GAJc4hH,EAAkBG,IANxBF,EAAY7hH,EAAI,GAEA+hH,KAQEppG,EAAK,IAW1CqpG,WAAY,SAAW/6D,GAEtB,GACI2c,GAAK3c,EADG,KAER6N,EAAK7N,EAFG,IAMP2c,GAAK,IAAIA,EAAK,GACd9O,EAAK,IAAIA,EAAK,EAEnB,IAAImtD,GAAMjoH,KAAKinH,SAAUr9C,EAIzB,OAHU5pE,MAAKinH,SAAUnsD,GAEXr/C,QAAQkW,IAAKs2F,GAChB90F,aAIZ+0F,aAAc,SAAW9gG,GAExB,GAAI6lC,GAAIjtD,KAAKknH,eAAgB9/F,EAC7B,OAAOpnB,MAAKgoH,WAAY/6D,IAIzBqB,oBAAqB,SAAWsD,EAAUrE,GAIzC,GASIvnD,GAAGohB,EAAGktC,EATNz7C,EAAS,GAAI1X,GAEbwsD,KACAxnC,KACAynC,KAEAw8C,EAAM,GAAIjpG,GACVgnH,EAAM,GAAI9nH,EAMd,KAAM2F,EAAI,EAAGA,GAAK4rD,EAAU5rD,IAE3BohB,EAAIphB,EAAI4rD,EAERjE,EAAU3nD,GAAMhG,KAAKkoH,aAAc9gG,GACnCumC,EAAU3nD,GAAImtB,WAOfhN,GAAS,GAAM,GAAIhlB,GACnBysD,EAAW,GAAM,GAAIzsD,EACrB,IAAI0K,GAAMyhE,OAAO86C,UACbrvC,EAAKtwD,KAAKmF,IAAK+/B,EAAU,GAAIxtD,GAC7B64E,EAAKvwD,KAAKmF,IAAK+/B,EAAU,GAAIvtD,GAC7BioH,EAAK5/F,KAAKmF,IAAK+/B,EAAU,GAAI/sD,EA8BjC,KA5BKm4E,GAAMltE,IAEVA,EAAMktE,EACNlgE,EAAOhR,IAAK,EAAG,EAAG,IAIdmxE,GAAMntE,IAEVA,EAAMmtE,EACNngE,EAAOhR,IAAK,EAAG,EAAG,IAIdwgH,GAAMx8G,GAEVgN,EAAOhR,IAAK,EAAG,EAAG,GAInBuiG,EAAIz/C,aAAcgD,EAAU,GAAK90C,GAASsa,YAE1ChN,EAAS,GAAIwkC,aAAcgD,EAAU,GAAKy8C,GAC1Cx8C,EAAW,GAAIjD,aAAcgD,EAAU,GAAKxnC,EAAS,IAK/CngB,EAAI,EAAGA,GAAK4rD,EAAU5rD,IAE3BmgB,EAASngB,GAAMmgB,EAASngB,EAAI,GAAIyV,QAEhCmyC,EAAW5nD,GAAM4nD,EAAW5nD,EAAI,GAAIyV,QAEpC2uF,EAAIz/C,aAAcgD,EAAU3nD,EAAI,GAAK2nD,EAAU3nD,IAE1CokG,EAAI5pG,SAAW8sE,OAAOC,UAE1B68B,EAAIj3E,YAEJmhC,EAAQ7rC,KAAKk2D,KAAMt8E,GAAMyvD,MAAOnE,EAAU3nD,EAAI,GAAI4tD,IAAKjG,EAAU3nD,KAAS,EAAG,IAE7EmgB,EAASngB,GAAIiL,aAAck3G,EAAItvC,iBAAkBuxB,EAAK91C,KAIvD1G,EAAW5nD,GAAI2kD,aAAcgD,EAAU3nD,GAAKmgB,EAASngB,GAMtD,KAAgB,IAAXunD,EAWJ,IATA+G,EAAQ7rC,KAAKk2D,KAAMt8E,GAAMyvD,MAAO3rC,EAAS,GAAIytC,IAAKztC,EAASyrC,KAAgB,EAAG,IAC9E0C,GAAS1C,EAEJjE,EAAU,GAAIiG,IAAKw2C,EAAIz/C,aAAcxkC,EAAS,GAAKA,EAASyrC,KAAiB,IAEjF0C,GAAUA,GAILtuD,EAAI,EAAGA,GAAK4rD,EAAU5rD,IAG3BmgB,EAASngB,GAAIiL,aAAck3G,EAAItvC,iBAAkBlrB,EAAU3nD,GAAKsuD,EAAQtuD,IACxE4nD,EAAW5nD,GAAI2kD,aAAcgD,EAAU3nD,GAAKmgB,EAASngB,GAMvD,QACC2nD,SAAUA,EACVxnC,QAASA,EACTynC,UAAWA,IAKbnyC,MAAO,WAEN,OAAO,GAAIzb,MAAKg4D,aAAc5mD,KAAMpR,OAIrCoR,KAAM,SAAWy8D,GAIhB,MAFA7tE,MAAKy7D,mBAAqBoS,EAAOpS,mBAE1Bz7D,QAiBT07D,GAAUyF,UAAYn/D,OAAOo+E,OAAQ5kB,GAAM2F,WAC3CzF,GAAUyF,UAAUnJ,YAAc0D,GAElCA,GAAUyF,UAAUmnD,aAAc,EAElC5sD,GAAUyF,UAAU8lD,SAAW,SAAWh6D,EAAGu9B,GAE5C,GAAIv3D,GAAQu3D,GAAkB,GAAItqF,EAalC,OAXW,KAAN+sD,EAEJh6B,EAAM7hB,KAAMpR,KAAK27D,KAIjB1oC,EAAM7hB,KAAMpR,KAAK27D,IAAKhqC,IAAK3xB,KAAK66D,IAChC5nC,EAAMxB,eAAgBw7B,GAAIltC,IAAK/f,KAAK66D,KAI9B5nC,GAMRyoC,GAAUyF,UAAUpT,WAAa,SAAW3mC,EAAGojE,GAE9C,MAAOxqF,MAAKinH,SAAU7/F,EAAGojE,IAI1B9uB,GAAUyF,UAAU6mD,WAAa,WAIhC,MAFchoH,MAAK27D,GAAGlgD,QAAQkW,IAAK3xB,KAAK66D,IAEzB1nC,aAIhBuoC,GAAUyF,UAAU/vD,KAAO,SAAWy8D,GAOrC,MALArS,IAAM2F,UAAU/vD,KAAK1M,KAAM1E,KAAM6tE,GAEjC7tE,KAAK66D,GAAGzpD,KAAMy8D,EAAOhT,IACrB76D,KAAK27D,GAAGvqD,KAAMy8D,EAAOlS,IAEd37D,MAyBR47D,GAAUuF,UAAYn/D,OAAO2rE,OAAQ3rE,OAAOo+E,OAAQ5kB,GAAM2F,YAEzDnJ,YAAa4D,GAEb77C,IAAK,SAAWwoG,GAEfvoH,KAAK67D,OAAOtxD,KAAMg+G,IAInBC,UAAW,WAGV,GAAIC,GAAazoH,KAAK67D,OAAQ,GAAIorD,SAAU,GACxCyB,EAAW1oH,KAAK67D,OAAQ77D,KAAK67D,OAAOr7D,OAAS,GAAIymH,SAAU,EAExDwB,GAAW9iF,OAAQ+iF,IAEzB1oH,KAAK67D,OAAOtxD,KAAM,GAAImxD,IAAWgtD,EAAUD,KAe7CxB,SAAU,SAAWh6D,GAQpB,IANA,GAAI3kC,GAAI2kC,EAAIjtD,KAAKonH,YACbuB,EAAe3oH,KAAK4oH,kBACpB5iH,EAAI,EAIAA,EAAI2iH,EAAanoH,QAAS,CAEjC,GAAKmoH,EAAc3iH,IAAOsiB,EAAI,CAE7B,GAAIm2E,GAAOkqB,EAAc3iH,GAAMsiB,EAC3BigG,EAAQvoH,KAAK67D,OAAQ71D,GAErB6iH,EAAgBN,EAAMnB,YACtBhgG,EAAsB,IAAlByhG,EAAsB,EAAI,EAAIpqB,EAAOoqB,CAE7C,OAAON,GAAMx6D,WAAY3mC,GAI1BphB,IAID,MAAO,OAURohH,UAAW,WAEV,GAAI0B,GAAO9oH,KAAK4oH,iBAChB,OAAOE,GAAMA,EAAKtoH,OAAS,IAK5BmnH,iBAAkB,WAEjB3nH,KAAK+S,aAAc,EACnB/S,KAAK+oH,aAAe,KACpB/oH,KAAK4oH,mBAONA,gBAAiB,WAIhB,GAAK5oH,KAAK+oH,cAAgB/oH,KAAK+oH,aAAavoH,SAAWR,KAAK67D,OAAOr7D,OAElE,MAAOR,MAAK+oH,YASb,KAAM,GAFF1B,MAAc2B,EAAO,EAEfhjH,EAAI,EAAG8K,EAAI9Q,KAAK67D,OAAOr7D,OAAQwF,EAAI8K,EAAG9K,IAE/CgjH,GAAQhpH,KAAK67D,OAAQ71D,GAAIohH,YACzBC,EAAQ98G,KAAMy+G,EAMf,OAFAhpH,MAAK+oH,aAAe1B,EAEbA,GAIRjS,gBAAiB,SAAW9tC,OAERpmE,KAAdomE,IAA0BA,EAAY,GAI3C,KAAM,GAFF34C,MAEM3oB,EAAI,EAAGA,GAAKshE,EAAWthE,IAEhC2oB,EAAOpkB,KAAMvK,KAAKinH,SAAUjhH,EAAIshE,GAUjC,OANKtnE,MAAK87D,WAETntC,EAAOpkB,KAAMokB,EAAQ,IAIfA,GAIRw4F,UAAW,SAAW7/C,GAErBA,EAAYA,GAAa,EAIzB,KAAM,GAFWmgD,GAAb94F,KAEM3oB,EAAI,EAAG61D,EAAS77D,KAAK67D,OAAQ71D,EAAI61D,EAAOr7D,OAAQwF,IAUzD,IAAM,GARFuiH,GAAQ1sD,EAAQ71D,GAChBijH,EAAeV,GAASA,EAAMW,eAA+B,EAAZ5hD,EAChDihD,GAASA,EAAMD,YAAgB,EAC9BC,GAASA,EAAMY,cAAkB7hD,EAAYihD,EAAM55F,OAAOnuB,OAC3D8mE,EAEDoqC,EAAM6W,EAAMpB,UAAW8B,GAEjB92G,EAAI,EAAGA,EAAIu/F,EAAIlxG,OAAQ2R,IAAO,CAEvC,GAAI8gB,GAAQy+E,EAAKv/F,EAEZs1G,IAAQA,EAAK9hF,OAAQ1S,KAE1BtE,EAAOpkB,KAAM0oB,GACbw0F,EAAOx0F,GAYT,MANKjzB,MAAK87D,WAAantC,EAAOnuB,OAAS,IAAOmuB,EAAQA,EAAOnuB,OAAS,GAAImlC,OAAQhX,EAAQ,KAEzFA,EAAOpkB,KAAMokB,EAAQ,IAIfA,GAIRvd,KAAM,SAAWy8D,GAEhBrS,GAAM2F,UAAU/vD,KAAK1M,KAAM1E,KAAM6tE,GAEjC7tE,KAAK67D,SAEL,KAAM,GAAI71D,GAAI,EAAG8K,EAAI+8D,EAAOhS,OAAOr7D,OAAQwF,EAAI8K,EAAG9K,IAAO,CAExD,GAAIuiH,GAAQ16C,EAAOhS,OAAQ71D,EAE3BhG,MAAK67D,OAAOtxD,KAAMg+G,EAAM9sG,SAMzB,MAFAzb,MAAK87D,UAAY+R,EAAO/R,UAEjB97D,QA2BT+7D,GAAaoF,UAAYn/D,OAAOo+E,OAAQ5kB,GAAM2F,WAC9CpF,GAAaoF,UAAUnJ,YAAc+D,GAErCA,GAAaoF,UAAU+nD,gBAAiB,EAExCntD,GAAaoF,UAAU8lD,SAAW,SAAWh6D,EAAGu9B,GAS/C,IAPA,GAAIv3D,GAAQu3D,GAAkB,GAAItqF,GAE9BkpH,EAAkB,EAAV3gG,KAAK6jC,GACb+8D,EAAarpH,KAAKq8D,UAAYr8D,KAAKo8D,YACnCktD,EAAa7gG,KAAKmF,IAAKy7F,GAAe/7C,OAAOC,QAGzC87C,EAAa,GAAIA,GAAcD,CACvC,MAAQC,EAAaD,GAAQC,GAAcD,CAEtCC,GAAa/7C,OAAOC,UAIvB87C,EAFIC,EAES,EAIAF,IAMU,IAApBppH,KAAKs8D,YAAyBgtD,IAE7BD,IAAeD,EAEnBC,GAAeD,EAIfC,GAA0BD,EAM5B,IAAIj3F,GAAQnyB,KAAKo8D,YAAcnP,EAAIo8D,EAC/BlpH,EAAIH,KAAKg8D,GAAKh8D,KAAKk8D,QAAUzzC,KAAKyJ,IAAKC,GACvC/xB,EAAIJ,KAAKi8D,GAAKj8D,KAAKm8D,QAAU1zC,KAAK0lC,IAAKh8B,EAE3C,IAAwB,IAAnBnyB,KAAKu8D,UAAkB,CAE3B,GAAIrqC,GAAMzJ,KAAKyJ,IAAKlyB,KAAKu8D,WACrBpO,EAAM1lC,KAAK0lC,IAAKnuD,KAAKu8D,WAErBwc,EAAK54E,EAAIH,KAAKg8D,GACdgd,EAAK54E,EAAIJ,KAAKi8D,EAGlB97D,GAAI44E,EAAK7mD,EAAM8mD,EAAK7qB,EAAMnuD,KAAKg8D,GAC/B57D,EAAI24E,EAAK5qB,EAAM6qB,EAAK9mD,EAAMlyB,KAAKi8D,GAIhC,MAAOhpC,GAAMprB,IAAK1H,EAAGC,IAItB27D,GAAaoF,UAAU/vD,KAAO,SAAWy8D,GAiBxC,MAfArS,IAAM2F,UAAU/vD,KAAK1M,KAAM1E,KAAM6tE,GAEjC7tE,KAAKg8D,GAAK6R,EAAO7R,GACjBh8D,KAAKi8D,GAAK4R,EAAO5R,GAEjBj8D,KAAKk8D,QAAU2R,EAAO3R,QACtBl8D,KAAKm8D,QAAU0R,EAAO1R,QAEtBn8D,KAAKo8D,YAAcyR,EAAOzR,YAC1Bp8D,KAAKq8D,UAAYwR,EAAOxR,UAExBr8D,KAAKs8D,WAAauR,EAAOvR,WAEzBt8D,KAAKu8D,UAAYsR,EAAOtR,UAEjBv8D,MAcRw8D,GAAY2E,UAAYn/D,OAAOo+E,OAAQ5kB,GAAM2F,WAC7C3E,GAAY2E,UAAUnJ,YAAcwE,GAEpCA,GAAY2E,UAAUgoD,eAAgB,EAEtC3sD,GAAY2E,UAAU8lD,SAAW,SAAWh6D,EAAGu9B,GAE9C,GAAIv3D,GAAQu3D,GAAkB,GAAItqF,GAE9ByuB,EAAS3uB,KAAK2uB,OACdoP,GAAMpP,EAAOnuB,OAAS,GAAMysD,EAE5Bs8D,EAAW9gG,KAAKC,MAAOqV,GACvB0lC,EAAS1lC,EAAIwrF,EAEbvwG,EAAK2V,EAAqB,IAAb46F,EAAiBA,EAAWA,EAAW,GACpDtwG,EAAK0V,EAAQ46F,GACbrwG,EAAKyV,EAAQ46F,EAAW56F,EAAOnuB,OAAS,EAAImuB,EAAOnuB,OAAS,EAAI+oH,EAAW,GAC3EpwG,EAAKwV,EAAQ46F,EAAW56F,EAAOnuB,OAAS,EAAImuB,EAAOnuB,OAAS,EAAI+oH,EAAW,EAO/E,OALAt2F,GAAMprB,IACL8yD,GAAY8I,EAAQzqD,EAAG7Y,EAAG8Y,EAAG9Y,EAAG+Y,EAAG/Y,EAAGgZ,EAAGhZ,GACzCw6D,GAAY8I,EAAQzqD,EAAG5Y,EAAG6Y,EAAG7Y,EAAG8Y,EAAG9Y,EAAG+Y,EAAG/Y,IAGnC6yB,GAIRupC,GAAY2E,UAAU/vD,KAAO,SAAWy8D,GAEvCrS,GAAM2F,UAAU/vD,KAAK1M,KAAM1E,KAAM6tE,GAEjC7tE,KAAK2uB,SAEL,KAAM,GAAI3oB,GAAI,EAAG8K,EAAI+8D,EAAOl/C,OAAOnuB,OAAQwF,EAAI8K,EAAG9K,IAAO,CAExD,GAAIitB,GAAQ46C,EAAOl/C,OAAQ3oB,EAE3BhG,MAAK2uB,OAAOpkB,KAAM0oB,EAAMxX,SAIzB,MAAOzb,OAiBRy8D,GAAiB0E,UAAYn/D,OAAOo+E,OAAQ5kB,GAAM2F,WAClD1E,GAAiB0E,UAAUnJ,YAAcyE,GAEzCA,GAAiB0E,UAAUqoD,oBAAqB,EAEhD/sD,GAAiB0E,UAAU8lD,SAAW,SAAWh6D,EAAGu9B,GAEnD,GAAIv3D,GAAQu3D,GAAkB,GAAItqF,GAE9B06D,EAAK56D,KAAK46D,GAAIC,EAAK76D,KAAK66D,GAAIc,EAAK37D,KAAK27D,GAAIe,EAAK18D,KAAK08D,EAOxD,OALAzpC,GAAMprB,IACL0zD,GAAatO,EAAG2N,EAAGz6D,EAAG06D,EAAG16D,EAAGw7D,EAAGx7D,EAAGu8D,EAAGv8D,GACrCo7D,GAAatO,EAAG2N,EAAGx6D,EAAGy6D,EAAGz6D,EAAGu7D,EAAGv7D,EAAGs8D,EAAGt8D,IAG/B6yB,GAIRwpC,GAAiB0E,UAAU/vD,KAAO,SAAWy8D,GAS5C,MAPArS,IAAM2F,UAAU/vD,KAAK1M,KAAM1E,KAAM6tE,GAEjC7tE,KAAK46D,GAAGxpD,KAAMy8D,EAAOjT,IACrB56D,KAAK66D,GAAGzpD,KAAMy8D,EAAOhT,IACrB76D,KAAK27D,GAAGvqD,KAAMy8D,EAAOlS,IACrB37D,KAAK08D,GAAGtrD,KAAMy8D,EAAOnR,IAEd18D,MAgBR28D,GAAqBwE,UAAYn/D,OAAOo+E,OAAQ5kB,GAAM2F,WACtDxE,GAAqBwE,UAAUnJ,YAAc2E,GAE7CA,GAAqBwE,UAAUsoD,wBAAyB,EAExD9sD,GAAqBwE,UAAU8lD,SAAW,SAAWh6D,EAAGu9B,GAEvD,GAAIv3D,GAAQu3D,GAAkB,GAAItqF,GAE9B06D,EAAK56D,KAAK46D,GAAIC,EAAK76D,KAAK66D,GAAIc,EAAK37D,KAAK27D,EAO1C,OALA1oC,GAAMprB,IACLqzD,GAAiBjO,EAAG2N,EAAGz6D,EAAG06D,EAAG16D,EAAGw7D,EAAGx7D,GACnC+6D,GAAiBjO,EAAG2N,EAAGx6D,EAAGy6D,EAAGz6D,EAAGu7D,EAAGv7D,IAG7B6yB,GAIR0pC,GAAqBwE,UAAU/vD,KAAO,SAAWy8D,GAQhD,MANArS,IAAM2F,UAAU/vD,KAAK1M,KAAM1E,KAAM6tE,GAEjC7tE,KAAK46D,GAAGxpD,KAAMy8D,EAAOjT,IACrB56D,KAAK66D,GAAGzpD,KAAMy8D,EAAOhT,IACrB76D,KAAK27D,GAAGvqD,KAAMy8D,EAAOlS,IAEd37D,KAIR,IAAI0pH,IAAgB1nH,OAAO2rE,OAAQ3rE,OAAOo+E,OAAQxkB,GAAUuF,YAE3DrE,cAAe,SAAWnuC,GAEzB3uB,KAAK2pH,OAAQh7F,EAAQ,GAAIxuB,EAAGwuB,EAAQ,GAAIvuB,EAExC,KAAM,GAAI4F,GAAI,EAAG8K,EAAI6d,EAAOnuB,OAAQwF,EAAI8K,EAAG9K,IAE1ChG,KAAK4pH,OAAQj7F,EAAQ3oB,GAAI7F,EAAGwuB,EAAQ3oB,GAAI5F,IAM1CupH,OAAQ,SAAWxpH,EAAGC,GAErBJ,KAAK68D,aAAah1D,IAAK1H,EAAGC,IAI3BwpH,OAAQ,SAAWzpH,EAAGC,GAErB,GAAImoH,GAAQ,GAAI7sD,IAAW17D,KAAK68D,aAAaphD,QAAS,GAAIvb,GAASC,EAAGC,GACtEJ,MAAK67D,OAAOtxD,KAAMg+G,GAElBvoH,KAAK68D,aAAah1D,IAAK1H,EAAGC,IAI3BypH,iBAAkB,SAAWC,EAAMC,EAAM/tD,EAAIC,GAE5C,GAAIssD,GAAQ,GAAI5rD,IACf38D,KAAK68D,aAAaphD,QAClB,GAAIvb,GAAS4pH,EAAMC,GACnB,GAAI7pH,GAAS87D,EAAIC;6DAGlBj8D,MAAK67D,OAAOtxD,KAAMg+G,GAElBvoH,KAAK68D,aAAah1D,IAAKm0D,EAAIC,IAI5B+tD,cAAe,SAAWC,EAAOC,EAAOC,EAAOC,EAAOpuD,EAAIC,GAEzD,GAAIssD,GAAQ,GAAI9rD,IACfz8D,KAAK68D,aAAaphD,QAClB,GAAIvb,GAAS+pH,EAAOC,GACpB,GAAIhqH,GAASiqH,EAAOC,GACpB,GAAIlqH,GAAS87D,EAAIC,GAGlBj8D,MAAK67D,OAAOtxD,KAAMg+G,GAElBvoH,KAAK68D,aAAah1D,IAAKm0D,EAAIC,IAI5BouD,WAAY,SAAW3Y,GAEtB,GAAI4Y,IAAStqH,KAAK68D,aAAaphD,SAAUy3C,OAAQw+C,GAE7C6W,EAAQ,GAAI/rD,IAAa8tD,EAC7BtqH,MAAK67D,OAAOtxD,KAAMg+G,GAElBvoH,KAAK68D,aAAazrD,KAAMsgG,EAAKA,EAAIlxG,OAAS,KAI3CgvD,IAAK,SAAWwM,EAAIC,EAAI8O,EAAS3O,EAAaC,EAAWC,GAExD,GAAI7Q,GAAKzrD,KAAK68D,aAAa18D,EACvBq6E,EAAKx6E,KAAK68D,aAAaz8D,CAE3BJ,MAAKuqH,OAAQvuD,EAAKvQ,EAAIwQ,EAAKue,EAAIzP,EAC9B3O,EAAaC,EAAWC,IAI1BiuD,OAAQ,SAAWvuD,EAAIC,EAAI8O,EAAS3O,EAAaC,EAAWC,GAE3Dt8D,KAAKwqH,WAAYxuD,EAAIC,EAAI8O,EAASA,EAAS3O,EAAaC,EAAWC,IAIpEmuD,QAAS,SAAWzuD,EAAIC,EAAIC,EAASC,EAASC,EAAaC,EAAWC,EAAYC,GAEjF,GAAI9Q,GAAKzrD,KAAK68D,aAAa18D,EACvBq6E,EAAKx6E,KAAK68D,aAAaz8D,CAE3BJ,MAAKwqH,WAAYxuD,EAAKvQ,EAAIwQ,EAAKue,EAAIte,EAASC,EAASC,EAAaC,EAAWC,EAAYC,IAI1FiuD,WAAY,SAAWxuD,EAAIC,EAAIC,EAASC,EAASC,EAAaC,EAAWC,EAAYC,GAEpF,GAAIgsD,GAAQ,GAAIxsD,IAAcC,EAAIC,EAAIC,EAASC,EAASC,EAAaC,EAAWC,EAAYC,EAE5F,IAAKv8D,KAAK67D,OAAOr7D,OAAS,EAAI,CAG7B,GAAIkqH,GAAanC,EAAMtB,SAAU,EAE1ByD,GAAW/kF,OAAQ3lC,KAAK68D,eAE9B78D,KAAK4pH,OAAQc,EAAWvqH,EAAGuqH,EAAWtqH,GAMxCJ,KAAK67D,OAAOtxD,KAAMg+G,EAElB,IAAIoC,GAAYpC,EAAMtB,SAAU,EAChCjnH,MAAK68D,aAAazrD,KAAMu5G,IAIzBv5G,KAAM,SAAWy8D,GAMhB,MAJAjS,IAAUuF,UAAU/vD,KAAK1M,KAAM1E,KAAM6tE,GAErC7tE,KAAK68D,aAAazrD,KAAMy8D,EAAOhR,cAExB78D,OA2BT48D,IAAKuE,UAAYuoD,GACjBA,GAAc1xD,YAAc4E,GAuB5BG,GAAMoE,UAAYn/D,OAAO2rE,OAAQ3rE,OAAOo+E,OAAQspC,KAE/C1xD,YAAa+E,GAEb6tD,eAAgB,SAAWtjD,GAI1B,IAAM,GAFFujD,MAEM7kH,EAAI,EAAG8K,EAAI9Q,KAAK6yD,MAAMryD,OAAQwF,EAAI8K,EAAG9K,IAE9C6kH,EAAU7kH,GAAMhG,KAAK6yD,MAAO7sD,GAAImhH,UAAW7/C,EAI5C,OAAOujD,IAMRn4D,cAAe,SAAW4U,GAEzB,OAEC/U,MAAOvyD,KAAKmnH,UAAW7/C,GACvBzU,MAAO7yD,KAAK4qH,eAAgBtjD,KAM9Bl2D,KAAM,SAAWy8D,GAEhBjR,GAAKuE,UAAU/vD,KAAK1M,KAAM1E,KAAM6tE,GAEhC7tE,KAAK6yD,QAEL,KAAM,GAAI7sD,GAAI,EAAG8K,EAAI+8D,EAAOhb,MAAMryD,OAAQwF,EAAI8K,EAAG9K,IAAO,CAEvD,GAAIypG,GAAO5hC,EAAOhb,MAAO7sD,EAEzBhG,MAAK6yD,MAAMtoD,KAAMklG,EAAKh0F,SAIvB,MAAOzb,SAoBTgC,OAAO2rE,OAAQ3Q,GAAUmE,WAExBwoD,OAAQ,SAAWxpH,EAAGC,GAErBJ,KAAKk9D,YAAc,GAAIN,IACvB58D,KAAKi9D,SAAS1yD,KAAMvK,KAAKk9D,aACzBl9D,KAAKk9D,YAAYysD,OAAQxpH,EAAGC,IAI7BwpH,OAAQ,SAAWzpH,EAAGC,GAErBJ,KAAKk9D,YAAY0sD,OAAQzpH,EAAGC,IAI7BypH,iBAAkB,SAAWC,EAAMC,EAAM/tD,EAAIC,GAE5Cj8D,KAAKk9D,YAAY2sD,iBAAkBC,EAAMC,EAAM/tD,EAAIC,IAIpD+tD,cAAe,SAAWC,EAAOC,EAAOC,EAAOC,EAAOpuD,EAAIC,GAEzDj8D,KAAKk9D,YAAY8sD,cAAeC,EAAOC,EAAOC,EAAOC,EAAOpuD,EAAIC,IAIjEouD,WAAY,SAAW3Y,GAEtB1xG,KAAKk9D,YAAYmtD,WAAY3Y,IAI9BoZ,SAAU,SAAWC,EAAOC,GAE3B,QAASC,GAAiBC,GAIzB,IAAM,GAFFv7D,MAEM3pD,EAAI,EAAG8K,EAAIo6G,EAAW1qH,OAAQwF,EAAI8K,EAAG9K,IAAO,CAErD,GAAImlH,GAAUD,EAAYllH,GAEtBolH,EAAW,GAAIruD,GACnBquD,GAASvvD,OAASsvD,EAAQtvD,OAE1BlM,EAAOplD,KAAM6gH,GAId,MAAOz7D,GA+DR,GAAIoD,GAAcD,GAAWC,YAEzBkK,EAAWj9D,KAAKi9D,QACpB,IAAyB,IAApBA,EAASz8D,OAAe,QAE7B,KAAiB,IAAZwqH,EAAmB,MAAOC,GAAiBhuD,EAGhD,IAAIouD,GAAOF,EAASC,EAAUz7D,IAE9B,IAAyB,IAApBsN,EAASz8D,OAMb,MAJA2qH,GAAUluD,EAAU,GACpBmuD,EAAW,GAAIruD,IACfquD,EAASvvD,OAASsvD,EAAQtvD,OAC1BlM,EAAOplD,KAAM6gH,GACNz7D,CAIR,IAAI27D,IAAev4D,EAAakK,EAAU,GAAIkqD,YAC9CmE,GAAaP,GAAUO,EAAaA,CAIpC,IAIIC,GAJAC,KACAC,KACAC,KACAC,EAAU,CAGdF,GAAWE,OAAYzqH,GACvBwqH,EAAeC,KAEf,KAAM,GAAI3lH,GAAI,EAAG8K,EAAImsD,EAASz8D,OAAQwF,EAAI8K,EAAG9K,IAE5CmlH,EAAUluD,EAAUj3D,GACpBulH,EAAYJ,EAAQhE,YACpBkE,EAAQt4D,EAAaw4D,GACrBF,EAAQN,GAAUM,EAAQA,EAErBA,IAEKC,GAAkBG,EAAWE,IAAcA,IAEpDF,EAAWE,IAAc32D,EAAG,GAAI+H,IAASh/B,EAAGwtF,GAC5CE,EAAWE,GAAU32D,EAAE6G,OAASsvD,EAAQtvD,OAEnCyvD,GAAaK,IAClBD,EAAeC,OAMfD,EAAeC,GAAUphH,MAAQsvE,EAAGsxC,EAASptF,EAAGwtF,EAAW,IAS7D,KAAOE,EAAW,GAAM,MAAOR,GAAiBhuD,EAGhD,IAAKwuD,EAAUjrH,OAAS,EAAI,CAK3B,IAAM,GAHForH,IAAY,EACZC,KAEMza,EAAO,EAAG0a,EAAOL,EAAUjrH,OAAQ4wG,EAAO0a,EAAM1a,IAEzDoa,EAAkBpa,KAInB,KAAM,GAAIA,GAAO,EAAG0a,EAAOL,EAAUjrH,OAAQ4wG,EAAO0a,EAAM1a,IAIzD,IAAM,GAFF2a,GAAML,EAAeta,GAEfI,EAAO,EAAGA,EAAOua,EAAIvrH,OAAQgxG,IAAU,CAKhD,IAAM,GAHFwa,GAAKD,EAAKva,GACVya,GAAkB,EAEZC,EAAQ,EAAGA,EAAQT,EAAUjrH,OAAQ0rH,KAlJlD,SAA+B7Z,EAAM8Z,GASpC,IAAM,GAPFC,GAAUD,EAAU3rH,OAMpB6rH,GAAS,EACHtuF,EAAIquF,EAAU,EAAG39D,EAAI,EAAGA,EAAI29D,EAASruF,EAAI0wB,IAAO,CAEzD,GAAI69D,GAAYH,EAAWpuF,GACvBwuF,EAAaJ,EAAW19D,GAExB+9D,EAASD,EAAWpsH,EAAImsH,EAAUnsH,EAClCssH,EAASF,EAAWnsH,EAAIksH,EAAUlsH,CAEtC,IAAKqoB,KAAKmF,IAAK6+F,GAAWn/C,OAAOC,QAAU,CAS1C,GANKk/C,EAAS,IAEbH,EAAYH,EAAW19D,GAAK+9D,GAAWA,EACvCD,EAAaJ,EAAWpuF,GAAK0uF,GAAWA,GAGlCpa,EAAKjyG,EAAIksH,EAAUlsH,GAASiyG,EAAKjyG,EAAImsH,EAAWnsH,EAAQ,QAE/D,IAAKiyG,EAAKjyG,IAAMksH,EAAUlsH,GAEzB,GAAKiyG,EAAKlyG,IAAMmsH,EAAUnsH,EAAK,OAAO,MAGhC,CAEN,GAAIusH,GAAWD,GAAWpa,EAAKlyG,EAAImsH,EAAUnsH,GAAMqsH,GAAWna,EAAKjyG,EAAIksH,EAAUlsH,EACjF,IAAkB,IAAbssH,EAAoB,OAAO,CAChC,IAAKA,EAAW,EAAQ,QACxBL,IAAWA,OAIN,CAGN,GAAKha,EAAKjyG,IAAMksH,EAAUlsH,EAAM,QAEhC,IAASmsH,EAAWpsH,GAAKkyG,EAAKlyG,GAASkyG,EAAKlyG,GAAKmsH,EAAUnsH,GACrDmsH,EAAUnsH,GAAKkyG,EAAKlyG,GAASkyG,EAAKlyG,GAAKosH,EAAWpsH,EAAS,OAAO,GAO1E,MAAOksH,KA6FuBL,EAAGjuF,EAAG0tF,EAAWS,GAAQnuF,KAE9CqzE,IAAS8a,GAAQL,EAASthH,MAAQoiH,MAAOvb,EAAMwb,IAAKV,EAAOzc,KAAM+B,IACjEya,GAEJA,GAAkB,EAClBT,EAAkBU,GAAQ3hH,KAAMyhH,IAIhCJ,GAAY,EAOVK,IAEJT,EAAkBpa,GAAO7mG,KAAMyhH,GAQ7BH,EAASrrH,OAAS,IAGforH,IAAYF,EAAgBF,IAQrC,IAAM,GAFFqB,GAEM7mH,EAAI,EAAG2Y,EAAK8sG,EAAUjrH,OAAQwF,EAAI2Y,EAAI3Y,IAAO,CAEtDolH,EAAWK,EAAWzlH,GAAIgvD,EAC1BrF,EAAOplD,KAAM6gH,GACbyB,EAAWnB,EAAe1lH,EAE1B,KAAM,GAAImM,GAAI,EAAGC,EAAKy6G,EAASrsH,OAAQ2R,EAAIC,EAAID,IAE9Ci5G,EAASv4D,MAAMtoD,KAAMsiH,EAAU16G,GAAI0nE,GAQrC,MAAOlqB,MAmBT3tD,OAAO2rE,OAAQxQ,GAAKgE,WAEnBjR,QAAQ,EAERC,eAAgB,SAAWJ,EAAM3mD,EAAMk+D,GAmCtC,QAASwlD,GAAYhpG,EAAGhV,EAAOusF,EAASC,GAEvC,GAAIyxB,GAAQjoH,EAAKkoH,OAAQlpG,IAAOhf,EAAKkoH,OAAQ,IAE7C,IAAOD,EAAP,CAEA,GAGI5sH,GAAGC,EAAG6rG,EAAKC,EAAK+gB,EAAMC,EAAMC,EAAMC,EAAMC,EAAMC,EAAMC,EAHpD9iH,EAAO,GAAIuyD,IAEX00C,IAGJ,IAAKqb,EAAM1jE,EAIV,IAAM,GAFFmkE,GAAUT,EAAMU,iBAAoBV,EAAMU,eAAiBV,EAAM1jE,EAAEx1B,MAAO,MAEpE7tB,EAAI,EAAG8K,EAAI08G,EAAQhtH,OAAQwF,EAAI8K,GAAK,CAE7C,GAAI48G,GAASF,EAASxnH,IAEtB,QAAS0nH,GAER,IAAK,IAEJvtH,EAAIqtH,EAASxnH,KAAS8I,EAAQusF,EAC9Bj7F,EAAIotH,EAASxnH,KAAS8I,EAAQwsF,EAE9B7wF,EAAKk/G,OAAQxpH,EAAGC,EAEhB,MAED,KAAK,IAEJD,EAAIqtH,EAASxnH,KAAS8I,EAAQusF,EAC9Bj7F,EAAIotH,EAASxnH,KAAS8I,EAAQwsF,EAE9B7wF,EAAKm/G,OAAQzpH,EAAGC,EAEhB,MAED,KAAK,IAWJ,GATA6rG,EAAMuhB,EAASxnH,KAAS8I,EAAQusF,EAChC6Q,EAAMshB,EAASxnH,KAAS8I,EAAQwsF,EAChC6xB,EAAOK,EAASxnH,KAAS8I,EAAQusF,EACjC+xB,EAAOI,EAASxnH,KAAS8I,EAAQwsF,EAEjC7wF,EAAKo/G,iBAAkBsD,EAAMC,EAAMnhB,EAAKC,GAExCqhB,EAAQ7b,EAAKA,EAAIlxG,OAAS,GAEb,CAEZysH,EAAOM,EAAMptH,EACb+sH,EAAOK,EAAMntH,CAEb,KAAM,GAAImmG,GAAK,EAAGA,GAAMj/B,EAAWi/B,IAAQ,CAE1C,GAAIt5C,GAAIs5C,EAAKj/B,CACbpM,IAAiBjO,EAAGggE,EAAME,EAAMlhB,GAChC/wC,GAAiBjO,EAAGigE,EAAME,EAAMlhB,IAMlC,KAED,KAAK,IAaJ,GAXAD,EAAMuhB,EAASxnH,KAAS8I,EAAQusF,EAChC6Q,EAAMshB,EAASxnH,KAAS8I,EAAQwsF,EAChC6xB,EAAOK,EAASxnH,KAAS8I,EAAQusF,EACjC+xB,EAAOI,EAASxnH,KAAS8I,EAAQwsF,EACjC+xB,EAAOG,EAASxnH,KAAS8I,EAAQusF,EACjCiyB,EAAOE,EAASxnH,KAAS8I,EAAQwsF,EAEjC7wF,EAAKu/G,cAAemD,EAAMC,EAAMC,EAAMC,EAAMrhB,EAAKC,GAEjDqhB,EAAQ7b,EAAKA,EAAIlxG,OAAS,GAEb,CAEZysH,EAAOM,EAAMptH,EACb+sH,EAAOK,EAAMntH,CAEb,KAAM,GAAImmG,GAAK,EAAGA,GAAMj/B,EAAWi/B,IAAQ,CAE1C,GAAIt5C,GAAIs5C,EAAKj/B,CACb/L,IAAatO,EAAGggE,EAAME,EAAME,EAAMphB,GAClC1wC,GAAatO,EAAGigE,EAAME,EAAME,EAAMphB,MAcxC,OAAS7Q,QAAS0xB,EAAMY,GAAK7+G,EAAOrE,KAAMA,QAM7BvJ,KAATkI,IAAqBA,EAAO,SACdlI,KAAdomE,IAA0BA,EAAY,EAO3C,KAAM,GALFxiE,GAAO9E,KAAK8E,KAEZ8oH,EAnJJ,SAAsB79D,GAUrB,IAAM,GARF6e,GAAQq4B,OAAQl3C,GAAOl8B,MAAO,IAC9B/kB,EAAQ1F,EAAOtE,EAAKmkH,WACpB4E,GAAgB/oH,EAAK4f,YAAYopG,KAAOhpH,EAAK4f,YAAYqpG,KAAOjpH,EAAKkpH,oBAAuBl/G,EAE5FusF,EAAU,EAAGC,EAAU,EAEvBsyB,KAEM5nH,EAAI,EAAGA,EAAI4oE,EAAMpuE,OAAQwF,IAAO,CAEzC,GAAIioH,GAAOr/C,EAAO5oE,EAElB,IAAc,OAATioH,EAEJ5yB,EAAU,EACVC,GAAWuyB,MAEL,CAEN,GAAIK,GAAMpB,EAAYmB,EAAMn/G,EAAOusF,EAASC,EAC5CD,IAAW6yB,EAAI7yB,QACfuyB,EAAMrjH,KAAM2jH,EAAIzjH,OAMlB,MAAOmjH,IAsHiB79D,GACrBJ,KAEM5xB,EAAI,EAAGC,EAAK4vF,EAAMptH,OAAQu9B,EAAIC,EAAID,IAE3ClhB,MAAMskD,UAAU52D,KAAKqiC,MAAO+iB,EAAQi+D,EAAO7vF,GAAI+sF,WAIhD,OAAOn7D,MAgBT3tD,OAAO2rE,OAAQvQ,GAAW+D,WAEzBm2C,KAAM,SAAWvhD,EAAKT,EAAQC,EAAYC,GAEzC,GAAI95C,GAAQ1b,KAERq5G,EAAS,GAAIhjD,IAAYr2D,KAAKs2D,QAClC+iD,GAAOJ,QAASj5G,KAAKyK,MACrB4uG,EAAO/B,KAAMvhD,EAAK,SAAWhG,GAE5B,GAAI6uD,EAEJ,KAECA,EAAOlqB,KAAKE,MAAO7kC,GAElB,MAAQxG,GAET9oD,QAAQqa,KAAM,yFACd8jG,EAAOlqB,KAAKE,MAAO7kC,EAAKi2D,UAAW,GAAIj2D,EAAKvvD,OAAS,IAItD,GAAIyvD,GAAOv0C,EAAMk5E,MAAOgqB,EAEnBtpD,IAASA,EAAQrF,IAEpBsF,EAAYC,IAIhBo/B,MAAO,SAAWgqB,GAEjB,MAAO,IAAIzhD,IAAMyhD,IAIlB3F,QAAS,SAAW/2G,GAGnB,MADAlC,MAAKyK,KAAOvI,EACLlC,OAMT,IAAI8T,IAEAmqD,IAEHlqD,WAAY,WAQX,WANiB7S,KAAZ4S,KAEJA,GAAU,IAAMmxB,OAAOg5B,cAAgBh5B,OAAOkpF,qBAIxCr6G,IAIRs6G,WAAY,SAAWlsH,GAEtB4R,GAAU5R,GAgBZF,QAAO2rE,OAAQtQ,GAAY8D,WAE1Bm2C,KAAM,SAAWvhD,EAAKT,EAAQC,EAAYC,GAEzC,GAAI6jD,GAAS,GAAIhjD,IAAYr2D,KAAKs2D,QAClC+iD,GAAOH,gBAAiB,eACxBG,EAAO/B,KAAMvhD,EAAK,SAAWt1C,GAEdw9C,GAAalqD,aAEnBs6G,gBAAiB5tG,EAAQ,SAAW6tG,GAE3Ch5D,EAAQg5D,MAIP/4D,EAAYC,MA4BjBxzD,OAAO2rE,OAAQrQ,GAAa6D,WAE3BvkD,OAAQ,WAEP,GAAI2xG,GAAU7/E,EAAOF,EAAKC,EAAQ55B,EAAMC,EAAK6O,EAAM45C,EAE/CixD,EAAW,GAAInuH,GACfouH,EAAU,GAAIpuH,EAElB,OAAO,UAAiBuP,GAMvB,GAJkB2+G,IAAavuH,MAAQ0uC,IAAU9+B,EAAO8+B,OAASF,IAAQ5+B,EAAO4+B,KACvEC,IAAW7+B,EAAO6+B,OAASzuC,KAAKyuC,QAAU55B,IAASjF,EAAOiF,MAC1DC,IAAQlF,EAAOkF,KAAO6O,IAAS/T,EAAO+T,MAAQ45C,IAAWv9D,KAAKu9D,OAEpD,CAElBgxD,EAAWvuH,KACX0uC,EAAQ9+B,EAAO8+B,MACfF,EAAM5+B,EAAO4+B,IACbC,EAAS7+B,EAAO6+B,OAASzuC,KAAKyuC,OAC9B55B,EAAOjF,EAAOiF,KACdC,EAAMlF,EAAOkF,IACb6O,EAAO/T,EAAO+T,IAKd,IAAIxS,GAAmBvB,EAAOuB,iBAAiBsK,OAC/C8hD,GAASv9D,KAAKu9D,OAAS,CACvB,IAEImxD,GAAMC,EAFNC,EAAqBrxD,EAAS1oD,EAAO65B,EACrCmgF,EAASh6G,EAAO4T,KAAKsgE,IAAK1mF,GAAMkxD,QAAU/kB,EAAM,IAAU7qB,CAK9D8qG,GAAQnuH,SAAU,KAASi9D,EAC3BixD,EAASluH,SAAU,IAAOi9D,EAI1BmxD,GAASG,EAAOpgF,EAASmgF,EACzBD,EAAOE,EAAOpgF,EAASmgF,EAEvBz9G,EAAiB7Q,SAAU,GAAM,EAAIuU,GAAS85G,EAAOD,GACrDv9G,EAAiB7Q,SAAU,IAAQquH,EAAOD,IAAWC,EAAOD,GAE5D1uH,KAAKgwC,QAAQ7+B,iBAAiBC,KAAMD,GAIpCu9G,GAASG,EAAOpgF,EAASmgF,EACzBD,EAAOE,EAAOpgF,EAASmgF,EAEvBz9G,EAAiB7Q,SAAU,GAAM,EAAIuU,GAAS85G,EAAOD,GACrDv9G,EAAiB7Q,SAAU,IAAQquH,EAAOD,IAAWC,EAAOD,GAE5D1uH,KAAKkwC,QAAQ/+B,iBAAiBC,KAAMD,GAIrCnR,KAAKgwC,QAAQh/B,YAAYI,KAAMxB,EAAOoB,aAAc2O,SAAU8uG,GAC9DzuH,KAAKkwC,QAAQl/B,YAAYI,KAAMxB,EAAOoB,aAAc2O,SAAU6uG,SA8GjEhxD,GAAW2D,UAAYn/D,OAAOo+E,OAAQ/9D,GAAS8+C,WAC/C3D,GAAW2D,UAAUnJ,YAAcwF,GAqBnCQ,GAAcmD,UAAYn/D,OAAO2rE,OAAQ3rE,OAAOo+E,OAAQ/9D,GAAS8+C,YAEhEnJ,YAAagG,GAEbQ,SAAU,WAET,MAAOx+D,MAAKk+D,MAIb4wD,aAAc,WAEQ,OAAhB9uH,KAAK21B,SAET31B,KAAKk+D,KAAK6wD,WAAY/uH,KAAK21B,QAC3B31B,KAAK21B,OAAOo5F,WAAY/uH,KAAK8T,QAAQuqD,aACrCr+D,KAAKk+D,KAAKE,QAASp+D,KAAK8T,QAAQuqD,aAChCr+D,KAAK21B,OAAS,OAMhBq5F,UAAW,WAEV,MAAOhvH,MAAK21B,QAIbs5F,UAAW,SAAW/sH,GAEA,OAAhBlC,KAAK21B,QAET31B,KAAKk+D,KAAK6wD,WAAY/uH,KAAK21B,QAC3B31B,KAAK21B,OAAOo5F,WAAY/uH,KAAK8T,QAAQuqD,cAIrCr+D,KAAKk+D,KAAK6wD,WAAY/uH,KAAK8T,QAAQuqD,aAIpCr+D,KAAK21B,OAASzzB,EACdlC,KAAKk+D,KAAKE,QAASp+D,KAAK21B,QACxB31B,KAAK21B,OAAOyoC,QAASp+D,KAAK8T,QAAQuqD,cAInC6wD,gBAAiB,WAEhB,MAAOlvH,MAAKk+D,KAAKA,KAAKh8D,OAIvBitH,gBAAiB,SAAWjtH,GAE3BlC,KAAKk+D,KAAKA,KAAKh8D,MAAQA,GAIxBwd,kBAAmB,WAElB,GAAIzM,GAAW,GAAI9R,GACfohB,EAAa,GAAI5hB,GACjBmO,EAAQ,GAAI3N,GAEZ0vC,EAAc,GAAI1vC,EAEtB,OAAO,UAA4By5F,GAElCv4E,GAAS8+C,UAAUzhD,kBAAkBhb,KAAM1E,KAAM46F,EAEjD,IAAIr8B,GAAWv+D,KAAK8T,QAAQyqD,SACxBv+C,EAAKhgB,KAAKggB,EAEdhgB,MAAKgR,YAAYsE,UAAWrC,EAAUsP,EAAYzT,GAElD+hC,EAAYhpC,IAAK,EAAG,GAAK,GAAI01E,gBAAiBh7D,GAEzCg8C,EAAS6wD,WAEb7wD,EAAS6wD,UAAUC,eAAgBp8G,EAAS9S,EAAGH,KAAK8T,QAAQw7G,aAC5D/wD,EAASgxD,UAAUF,eAAgBp8G,EAAS7S,EAAGJ,KAAK8T,QAAQw7G,aAC5D/wD,EAASixD,UAAUH,eAAgBp8G,EAASrS,EAAGZ,KAAK8T,QAAQw7G,aAC5D/wD,EAASkxD,SAASJ,eAAgBx+E,EAAY1wC,EAAGH,KAAK8T,QAAQw7G,aAC9D/wD,EAASmxD,SAASL,eAAgBx+E,EAAYzwC,EAAGJ,KAAK8T,QAAQw7G,aAC9D/wD,EAASoxD,SAASN,eAAgBx+E,EAAYjwC,EAAGZ,KAAK8T,QAAQw7G,aAC9D/wD,EAASqxD,IAAIP,eAAgBrvG,EAAG7f,EAAGH,KAAK8T,QAAQw7G,aAChD/wD,EAASsxD,IAAIR,eAAgBrvG,EAAG5f,EAAGJ,KAAK8T,QAAQw7G,aAChD/wD,EAASuxD,IAAIT,eAAgBrvG,EAAGpf,EAAGZ,KAAK8T,QAAQw7G,eAIhD/wD,EAASsZ,YAAa5kE,EAAS9S,EAAG8S,EAAS7S,EAAG6S,EAASrS,GACvD29D,EAASwxD,eAAgBl/E,EAAY1wC,EAAG0wC,EAAYzwC,EAAGywC,EAAYjwC,EAAGof,EAAG7f,EAAG6f,EAAG5f,EAAG4f,EAAGpf,UAyCzF09D,GAAM6C,UAAYn/D,OAAO2rE,OAAQ3rE,OAAOo+E,OAAQ/9D,GAAS8+C,YAExDnJ,YAAasG,GAEbmB,UAAW,WAEV,MAAOz/D,MAAKk+D,MAIb8xD,cAAe,SAAWC,GAOzB,MALAjwH,MAAK6+D,oBAAqB,EAC1B7+D,KAAK8+D,WAAa,YAClB9+D,KAAK6tE,OAASoiD,EACdjwH,KAAKo+D,UAEEp+D,MAIRkwH,UAAW,SAAW5B,GAOrB,MALAtuH,MAAKygB,OAAS6tG,EACdtuH,KAAK8+D,WAAa,SAEb9+D,KAAKy+D,UAAWz+D,KAAKmwH,OAEnBnwH,MAIRmwH,KAAM,WAEL,IAAwB,IAAnBnwH,KAAK4+D,UAGT,WADAn+D,SAAQqa,KAAM,yCAKf,KAAiC,IAA5B9a,KAAK6+D,mBAGT,WADAp+D,SAAQqa,KAAM,mDAKf,IAAI+yD,GAAS7tE,KAAK8T,QAAQs8G,oBAa1B,OAXAviD,GAAOptD,OAASzgB,KAAKygB,OACrBotD,EAAOpzB,KAAOz6C,KAAKy6C,KACnBozB,EAAOwiD,QAAUrwH,KAAKswH,QAAQjoE,KAAMroD,MACpC6tE,EAAOlP,aAAa0wD,eAAgBrvH,KAAK2+D,aAAc3+D,KAAK0+D,WAC5D1+D,KAAK0+D,UAAY1+D,KAAK8T,QAAQw7G,YAC9BzhD,EAAOlnD,MAAO3mB,KAAK0+D,UAAW1+D,KAAKgD,QAEnChD,KAAK4+D,WAAY,EAEjB5+D,KAAK6tE,OAASA,EAEP7tE,KAAKo+D,WAIbmyD,MAAO,WAEN,OAAiC,IAA5BvwH,KAAK6+D,uBAETp+D,SAAQqa,KAAM,sDAKS,IAAnB9a,KAAK4+D,YAET5+D,KAAK6tE,OAAO2iD,OACZxwH,KAAKgD,SAAYhD,KAAK8T,QAAQw7G,YAActvH,KAAK0+D,WAAc1+D,KAAK2+D,aACpE3+D,KAAK4+D,WAAY,GAIX5+D,OAIRwwH,KAAM,WAEL,OAAiC,IAA5BxwH,KAAK6+D,uBAETp+D,SAAQqa,KAAM,qDAKf9a,KAAK6tE,OAAO2iD,OACZxwH,KAAKgD,OAAS,EACdhD,KAAK4+D,WAAY,EAEV5+D,OAIRo+D,QAAS,WAER,GAAKp+D,KAAK++D,QAAQv+D,OAAS,EAAI,CAE9BR,KAAK6tE,OAAOzP,QAASp+D,KAAK++D,QAAS,GAEnC,KAAM,GAAI/4D,GAAI,EAAG8K,EAAI9Q,KAAK++D,QAAQv+D,OAAQwF,EAAI8K,EAAG9K,IAEhDhG,KAAK++D,QAAS/4D,EAAI,GAAIo4D,QAASp+D,KAAK++D,QAAS/4D,GAI9ChG,MAAK++D,QAAS/+D,KAAK++D,QAAQv+D,OAAS,GAAI49D,QAASp+D,KAAKy/D,iBAItDz/D,MAAK6tE,OAAOzP,QAASp+D,KAAKy/D,YAI3B,OAAOz/D,OAIR+uH,WAAY,WAEX,GAAK/uH,KAAK++D,QAAQv+D,OAAS,EAAI,CAE9BR,KAAK6tE,OAAOkhD,WAAY/uH,KAAK++D,QAAS,GAEtC,KAAM,GAAI/4D,GAAI,EAAG8K,EAAI9Q,KAAK++D,QAAQv+D,OAAQwF,EAAI8K,EAAG9K,IAEhDhG,KAAK++D,QAAS/4D,EAAI,GAAI+oH,WAAY/uH,KAAK++D,QAAS/4D,GAIjDhG,MAAK++D,QAAS/+D,KAAK++D,QAAQv+D,OAAS,GAAIuuH,WAAY/uH,KAAKy/D,iBAIzDz/D,MAAK6tE,OAAOkhD,WAAY/uH,KAAKy/D,YAI9B,OAAOz/D,OAIRywH,WAAY,WAEX,MAAOzwH,MAAK++D,SAIb2xD,WAAY,SAAWxuH,GAgBtB,MAdOA,KAAQA,OAES,IAAnBlC,KAAK4+D,WAET5+D,KAAK+uH,aACL/uH,KAAK++D,QAAU78D,EACflC,KAAKo+D,WAILp+D,KAAK++D,QAAU78D,EAITlC,MAIRgvH,UAAW,WAEV,MAAOhvH,MAAKywH,aAAc,IAI3BxB,UAAW,SAAWt5F,GAErB,MAAO31B,MAAK0wH,WAAY/6F,GAAWA,QAIpCg7F,gBAAiB,SAAWzuH,GAE3B,OAAiC,IAA5BlC,KAAK6+D,uBAETp+D,SAAQqa,KAAM,qDAKf9a,KAAK2+D,aAAez8D,GAEI,IAAnBlC,KAAK4+D,WAET5+D,KAAK6tE,OAAOlP,aAAa0wD,eAAgBrvH,KAAK2+D,aAAc3+D,KAAK8T,QAAQw7G,aAInEtvH,OAIR4wH,gBAAiB,WAEhB,MAAO5wH,MAAK2+D,cAIb2xD,QAAS,WAERtwH,KAAK4+D,WAAY,GAIlBiyD,QAAS,WAER,OAAiC,IAA5B7wH,KAAK6+D,oBAETp+D,QAAQqa,KAAM,qDACP,GAID9a,KAAKy6C,MAIbq2E,QAAS,SAAW5uH,GAEnB,OAAiC,IAA5BlC,KAAK6+D,uBAETp+D,SAAQqa,KAAM,qDAKf9a,KAAKy6C,KAAOv4C,GAEY,IAAnBlC,KAAK4+D,YAET5+D,KAAK6tE,OAAOpzB,KAAOz6C,KAAKy6C,MAIlBz6C,OAIR+wH,UAAW,WAEV,MAAO/wH,MAAKk+D,KAAKA,KAAKh8D,OAIvB8uH,UAAW,SAAW9uH,GAIrB,MAFAlC,MAAKk+D,KAAKA,KAAKh8D,MAAQA,EAEhBlC,QAmBTg/D,GAAgBmC,UAAYn/D,OAAO2rE,OAAQ3rE,OAAOo+E,OAAQ9hB,GAAM6C,YAE/DnJ,YAAagH,GAEbS,UAAW,WAEV,MAAOz/D,MAAKi/D,QAIbgyD,eAAgB,WAEf,MAAOjxH,MAAKi/D,OAAOiyD,aAIpBC,eAAgB,SAAWjvH,GAE1BlC,KAAKi/D,OAAOiyD,YAAchvH,GAI3BkvH,iBAAkB,WAEjB,MAAOpxH,MAAKi/D,OAAOoyD,eAIpBC,iBAAkB,SAAWpvH,GAE5BlC,KAAKi/D,OAAOoyD,cAAgBnvH,GAI7BqvH,iBAAkB,WAEjB,MAAOvxH,MAAKi/D,OAAOuyD,eAIpBC,iBAAkB,SAAWvvH,GAE5BlC,KAAKi/D,OAAOuyD,cAAgBtvH,GAI7BwvH,eAAgB,WAEf,MAAO1xH,MAAKi/D,OAAO0yD,aAIpBC,eAAgB,SAAW1vH,GAE1BlC,KAAKi/D,OAAO0yD,YAAczvH,GAI3Bwd,kBAAmB,WAElB,GAAIzM,GAAW,GAAI9R,EAEnB,OAAO,UAA4By5F,GAElCv4E,GAAS8+C,UAAUzhD,kBAAkBhb,KAAM1E,KAAM46F,GAEjD3nF,EAASqM,sBAAuBtf,KAAKgR,aAErChR,KAAKi/D,OAAO4Y,YAAa5kE,EAAS9S,EAAG8S,EAAS7S,EAAG6S,EAASrS,SAwB7DoB,OAAO2rE,OAAQxO,GAAcgC,WAE5B0wD,iBAAkB,WAIjB,MAFA7xH,MAAKs/D,SAASwyD,qBAAsB9xH,KAAK8E,MAElC9E,KAAK8E,MAIbitH,oBAAqB,WAIpB,IAAM,GAFF7vH,GAAQ,EAAG4C,EAAO9E,KAAK6xH,mBAEjB7rH,EAAI,EAAGA,EAAIlB,EAAKtE,OAAQwF,IAEjC9D,GAAS4C,EAAMkB,EAIhB,OAAO9D,GAAQ4C,EAAKtE,UA8DtBwB,OAAO2rE,OAAQjO,GAAcyB,WAG5B6wD,WAAY,SAAWC,EAAWxuD,GAKjC,GAAIhjD,GAASzgB,KAAKygB,OACjBs5B,EAAS/5C,KAAKi4D,UACdj1D,EAASivH,EAAYl4E,EAASA,EAE9Bm4E,EAAgBlyH,KAAKkgE,gBAEtB,IAAuB,IAAlBgyD,EAAsB,CAI1B,IAAM,GAAIlsH,GAAI,EAAGA,IAAM+zC,IAAW/zC,EAEjCya,EAAQzd,EAASgD,GAAMya,EAAQza,EAIhCksH,GAAgBzuD,MAEV,CAINyuD,GAAiBzuD,CACjB,IAAI0uD,GAAM1uD,EAASyuD,CACnBlyH,MAAKigE,iBAAkBx/C,EAAQzd,EAAQ,EAAGmvH,EAAKp4E,GAIhD/5C,KAAKkgE,iBAAmBgyD,GAKzBtlF,MAAO,SAAWqlF,GAEjB,GAAIl4E,GAAS/5C,KAAKi4D,UACjBx3C,EAASzgB,KAAKygB,OACdzd,EAASivH,EAAYl4E,EAASA,EAE9B0pB,EAASzjE,KAAKkgE,iBAEdP,EAAU3/D,KAAK2/D,OAIhB,IAFA3/D,KAAKkgE,iBAAmB,EAEnBuD,EAAS,EAAI,CAIjB,GAAI2uD,GAA+B,EAATr4E,CAE1B/5C,MAAKigE,iBACJx/C,EAAQzd,EAAQovH,EAAqB,EAAI3uD,EAAQ1pB,GAInD,IAAM,GAAI/zC,GAAI+zC,EAAQwP,EAAIxP,EAASA,EAAQ/zC,IAAMujD,IAAMvjD,EAEtD,GAAKya,EAAQza,KAAQya,EAAQza,EAAI+zC,GAAW,CAI3C4lB,EAAQ11D,SAAUwW,EAAQzd,EAC1B,SASHqvH,kBAAmB,WAElB,GAAI1yD,GAAU3/D,KAAK2/D,QAEfl/C,EAASzgB,KAAKygB,OACjBs5B,EAAS/5C,KAAKi4D,UAEdm6D,EAA+B,EAATr4E,CAEvB4lB,GAAQ2yD,SAAU7xG,EAAQ2xG,EAG1B,KAAM,GAAIpsH,GAAI+zC,EAAQwP,EAAI6oE,EAAqBpsH,IAAMujD,IAAMvjD,EAE1Dya,EAAQza,GAAMya,EAAQ2xG,EAAwBpsH,EAAI+zC,EAInD/5C,MAAKkgE,iBAAmB,GAKzBqyD,qBAAsB,WAErB,GAAIH,GAAuC,EAAjBpyH,KAAKi4D,SAC/Bj4D,MAAK2/D,QAAQ11D,SAAUjK,KAAKygB,OAAQ2xG,IAOrCryD,QAAS,SAAWt/C,EAAQ4xB,EAAWyoE,EAAW7tD,EAAGlT,GAEpD,GAAKkT,GAAK,GAET,IAAM,GAAIjnD,GAAI,EAAGA,IAAM+zC,IAAW/zC,EAEjCya,EAAQ4xB,EAAYrsC,GAAMya,EAAQq6F,EAAY90G,IAQjD85D,OAAQ,SAAWr/C,EAAQ4xB,EAAWyoE,EAAW7tD,GAEhDtsD,EAAWu5E,UAAWz5D,EAAQ4xB,EAAW5xB,EAAQ4xB,EAAW5xB,EAAQq6F,EAAW7tD,IAIhF+S,MAAO,SAAWv/C,EAAQ4xB,EAAWyoE,EAAW7tD,EAAGlT,GAIlD,IAAM,GAFFib,GAAI,EAAI/H,EAEFjnD,EAAI,EAAGA,IAAM+zC,IAAW/zC,EAAI,CAErC,GAAImM,GAAIkgC,EAAYrsC,CAEpBya,GAAQtO,GAAMsO,EAAQtO,GAAM6iD,EAAIv0C,EAAQq6F,EAAY90G,GAAMinD,MA2B7DjrD,OAAO2rE,OAAQtN,GAAUc,WAExBmxD,SAAU,SAAW/sH,EAAOvC,GAE3BhD,KAAKqoD,MAEL,IAAImqE,GAAkBxyH,KAAK2gE,aAAaS,gBACvCzB,EAAU3/D,KAAK4gE,UAAW4xD,OAGVtxH,KAAZy+D,GAAwBA,EAAQ2yD,SAAU/sH,EAAOvC,IAIvDiH,SAAU,SAAW1E,EAAOvC,GAI3B,IAAM,GAFFyvH,GAAWzyH,KAAK4gE,UAEV56D,EAAIhG,KAAK2gE,aAAaS,gBAC5Bz7D,EAAI8sH,EAASjyH,OAAQwF,IAAML,IAAMK,EAEpCysH,EAAUzsH,GAAIiE,SAAU1E,EAAOvC,IAMjCqlD,KAAM,WAIL,IAAM,GAFFoqE,GAAWzyH,KAAK4gE,UAEV56D,EAAIhG,KAAK2gE,aAAaS,gBAC5Bz7D,EAAI8sH,EAASjyH,OAAQwF,IAAML,IAAMK,EAEpCysH,EAAUzsH,GAAIqiD,QAMhBqqE,OAAQ,WAIP,IAAM,GAFFD,GAAWzyH,KAAK4gE,UAEV56D,EAAIhG,KAAK2gE,aAAaS,gBAC5Bz7D,EAAI8sH,EAASjyH,OAAQwF,IAAML,IAAMK,EAEpCysH,EAAUzsH,GAAI0sH,YAoBjB1wH,OAAO2rE,OAAQlN,IAEdJ,UAAWA,GAEX+f,OAAQ,SAAWnc,EAAMx5D,EAAM+1D,GAE9B,MAASyD,IAAQA,EAAK0uD,uBAMd,GAAIlyD,IAAgBJ,UAAW4D,EAAMx5D,EAAM+1D,GAJ3C,GAAIC,IAAiBwD,EAAMx5D,EAAM+1D,IAiB1CoyD,iBAAkB,SAAWrwH,GAE5B,MAAOA,GAAK4zB,QAAS,MAAO,KAAMA,QAAS,UAAW,KAIvDuqC,eAAgB,WAIf,GAAImyD,GAAc,qBAGdC,EAAS,cAITC,EAAW,+BAIXC,EAAa,0BAEbC,EAAU,GAAIC,QACf,IACAL,EAAYhlD,OACZilD,EAAOjlD,OACPklD,EAASllD,OACTmlD,EAAWnlD,OACX,KAGCslD,GAAyB,WAAY,YAAa,QAEtD,OAAO,UAAW/S,GAEjB,GAAIgT,GAAUH,EAAQnoH,KAAMs1G,EAE5B,KAAOgT,EAEN,KAAM,IAAI3+F,OAAO,4CAA8C2rF,EAIhE,IAAIiT,IAEHpyD,SAAUmyD,EAAS,GACnBE,WAAYF,EAAS,GACrBG,YAAaH,EAAS,GACtB9S,aAAc8S,EAAS,GACvBI,cAAeJ,EAAS,IAGrBK,EAAUJ,EAAQpyD,UAAYoyD,EAAQpyD,SAASglD,YAAa,IAEhE,QAAiB/kH,KAAZuyH,IAAuC,IAAdA,EAAkB,CAE/C,GAAIH,GAAaD,EAAQpyD,SAAS+kD,UAAWyN,EAAU,IAMD,IAAjDN,EAAqBh1F,QAASm1F,KAElCD,EAAQpyD,SAAWoyD,EAAQpyD,SAAS+kD,UAAW,EAAGyN,GAClDJ,EAAQC,WAAaA,GAMvB,GAA8B,OAAzBD,EAAQ/S,cAAyD,IAAhC+S,EAAQ/S,aAAa9/G,OAE1D,KAAM,IAAIi0B,OAAO,+DAAiE2rF,EAInF,OAAOiT,OAMTryD,SAAU,SAAWiD,EAAMhD,GAE1B,IAAOA,GAAyB,KAAbA,GAAgC,SAAbA,GAAoC,MAAbA,IAAmC,IAAfA,GAAoBA,IAAagD,EAAK1hE,MAAQ0+D,IAAagD,EAAK7hE,KAEhJ,MAAO6hE,EAKR,IAAKA,EAAKzoC,SAAW,CAEpB,GAkBIorC,GAlBiB,SAAWprC,GAE/B,IAAM,GAAIx1B,GAAI,EAAGA,EAAIw1B,EAASC,MAAMj7B,OAAQwF,IAAO,CAElD,GAAI4gE,GAAOprC,EAASC,MAAOz1B,EAE3B,IAAK4gE,EAAKrkE,OAAS0+D,EAElB,MAAO2F,GAMT,MAAO,OAImB3C,EAAKzoC,SAEhC,IAAKorC,EAEJ,MAAOA,GAOT,GAAK3C,EAAKzmD,SAAW,CAEpB,GAAIk2G,GAAoB,SAAWl2G,GAElC,IAAM,GAAIxX,GAAI,EAAGA,EAAIwX,EAAShd,OAAQwF,IAAO,CAE5C,GAAI2tH,GAAYn2G,EAAUxX,EAE1B,IAAK2tH,EAAUpxH,OAAS0+D,GAAY0yD,EAAUvxH,OAAS6+D,EAEtD,MAAO0yD,EAIR,IAAIz5G,GAASw5G,EAAmBC,EAAUn2G,SAE1C,IAAKtD,EAAS,MAAOA,GAItB,MAAO,OAIJ05G,EAAcF,EAAmBzvD,EAAKzmD,SAE1C,IAAKo2G,EAEJ,MAAOA,GAMT,MAAO,SAMT5xH,OAAO2rE,OAAQlN,GAAgBU,WAG9B0yD,sBAAuB,aACvBC,sBAAuB,aAEvBC,aACCC,OAAQ,EACRC,YAAa,EACbC,aAAc,EACdC,eAAgB,GAGjBC,YACCC,KAAM,EACNC,YAAa,EACbC,uBAAwB,GAGzBC,qBAEC,SAA0B/zG,EAAQzd,GAEjCyd,EAAQzd,GAAWhD,KAAK+gE,KAAM/gE,KAAKsgH,eAIpC,SAAyB7/F,EAAQzd,GAIhC,IAAM,GAFF6qE,GAAS7tE,KAAKy0H,iBAERzuH,EAAI,EAAGL,EAAIkoE,EAAOrtE,OAAQwF,IAAML,IAAMK,EAE/Cya,EAAQzd,KAAc6qE,EAAQ7nE,IAMhC,SAAgCya,EAAQzd,GAEvCyd,EAAQzd,GAAWhD,KAAKy0H,iBAAkBz0H,KAAKwzH,gBAIhD,SAA2B/yG,EAAQzd,GAElChD,KAAKy0H,iBAAiB1uH,QAAS0a,EAAQzd,KAMzC0xH,mCAKE,SAA0Bj0G,EAAQzd,GAEjChD,KAAK20H,aAAc30H,KAAKsgH,cAAiB7/F,EAAQzd,IAIlD,SAAyCyd,EAAQzd,GAEhDhD,KAAK20H,aAAc30H,KAAKsgH,cAAiB7/F,EAAQzd,GACjDhD,KAAK20H,aAAa5hH,aAAc,GAIjC,SAAoD0N,EAAQzd,GAE3DhD,KAAK20H,aAAc30H,KAAKsgH,cAAiB7/F,EAAQzd,GACjDhD,KAAK20H,aAAaxxG,wBAAyB,KAQ5C,SAAyB1C,EAAQzd,GAIhC,IAAM,GAFF4xH,GAAO50H,KAAKy0H,iBAENzuH,EAAI,EAAGL,EAAIivH,EAAKp0H,OAAQwF,IAAML,IAAMK,EAE7C4uH,EAAM5uH,GAAMya,EAAQzd,MAMtB,SAAwCyd,EAAQzd,GAI/C,IAAM,GAFF4xH,GAAO50H,KAAKy0H,iBAENzuH,EAAI,EAAGL,EAAIivH,EAAKp0H,OAAQwF,IAAML,IAAMK,EAE7C4uH,EAAM5uH,GAAMya,EAAQzd,IAIrBhD,MAAK20H,aAAa5hH,aAAc,GAIjC,SAAmD0N,EAAQzd,GAI1D,IAAM,GAFF4xH,GAAO50H,KAAKy0H,iBAENzuH,EAAI,EAAGL,EAAIivH,EAAKp0H,OAAQwF,IAAML,IAAMK,EAE7C4uH,EAAM5uH,GAAMya,EAAQzd,IAIrBhD,MAAK20H,aAAaxxG,wBAAyB,KAQ5C,SAAgC1C,EAAQzd,GAEvChD,KAAKy0H,iBAAkBz0H,KAAKwzH,eAAkB/yG,EAAQzd,IAIvD,SAA+Cyd,EAAQzd,GAEtDhD,KAAKy0H,iBAAkBz0H,KAAKwzH,eAAkB/yG,EAAQzd,GACtDhD,KAAK20H,aAAa5hH,aAAc,GAIjC,SAA0D0N,EAAQzd,GAEjEhD,KAAKy0H,iBAAkBz0H,KAAKwzH,eAAkB/yG,EAAQzd,GACtDhD,KAAK20H,aAAaxxG,wBAAyB,KAQ5C,SAA6B1C,EAAQzd,GAEpChD,KAAKy0H,iBAAiB7jF,UAAWnwB,EAAQzd,IAI1C,SAA4Cyd,EAAQzd,GAEnDhD,KAAKy0H,iBAAiB7jF,UAAWnwB,EAAQzd,GACzChD,KAAK20H,aAAa5hH,aAAc,GAIjC,SAAuD0N,EAAQzd,GAE9DhD,KAAKy0H,iBAAiB7jF,UAAWnwB,EAAQzd,GACzChD,KAAK20H,aAAaxxG,wBAAyB,KAQ9CmvG,SAAU,SAA2BuC,EAAa7xH,GAEjDhD,KAAKqoD,OACLroD,KAAKsyH,SAAUuC,EAAa7xH,IAU7BiH,SAAU,SAA2B6qH,EAAa9xH,GAEjDhD,KAAKqoD,OACLroD,KAAKiK,SAAU6qH,EAAa9xH,IAK7BqlD,KAAM,WAEL,GAAIssE,GAAe30H,KAAK+gE,KACvBP,EAAaxgE,KAAKwgE,WAElB8yD,EAAa9yD,EAAW8yD,WACxBhT,EAAe9/C,EAAW8/C,aAC1BkT,EAAgBhzD,EAAWgzD,aAe5B,IAbOmB,IAENA,EAAel0D,GAAgBO,SAAUhhE,KAAK8gE,SAAUN,EAAWS,WAAcjhE,KAAK8gE,SAEtF9gE,KAAK+gE,KAAO4zD,GAKb30H,KAAKsyH,SAAWtyH,KAAK6zH,sBACrB7zH,KAAKiK,SAAWjK,KAAK8zH,uBAGda,EAGN,WADAl0H,SAAQC,MAAO,2DAA6DV,KAAKyK,KAAO,wBAKzF,IAAK6oH,EAAa,CAEjB,GAAIC,GAAc/yD,EAAW+yD,WAG7B,QAASD,GAER,IAAK,YAEJ,IAAOqB,EAAax/G,SAGnB,WADA1U,SAAQC,MAAO,oFAAqFV,KAKrG,KAAO20H,EAAax/G,SAAS+1D,UAG5B,WADAzqE,SAAQC,MAAO,8GAA+GV,KAK/H20H,GAAeA,EAAax/G,SAAS+1D,SAErC,MAED,KAAK,QAEJ,IAAOypD,EAAan5F,SAGnB,WADA/6B,SAAQC,MAAO,iFAAkFV,KAQlG20H,GAAeA,EAAan5F,SAASC,KAGrC,KAAM,GAAIz1B,GAAI,EAAGA,EAAI2uH,EAAan0H,OAAQwF,IAEzC,GAAK2uH,EAAc3uH,GAAIzD,OAASgxH,EAAc,CAE7CA,EAAcvtH,CACd,OAMF,KAED,SAEC,OAAoC9E,KAA/ByzH,EAAcrB,GAGlB,WADA7yH,SAAQC,MAAO,uEAAwEV,KAKxF20H,GAAeA,EAAcrB,GAK/B,OAAqBpyH,KAAhBqyH,EAA4B,CAEhC,OAAqCryH,KAAhCyzH,EAAcpB,GAGlB,WADA9yH,SAAQC,MAAO,wFAAyFV,KAAM20H,EAK/GA,GAAeA,EAAcpB,IAO/B,GAAIwB,GAAeJ,EAAcrU,EAEjC,QAAsBp/G,KAAjB6zH,EAA6B,CAEjC,GAAI9zD,GAAWT,EAAWS,QAI1B,YAFAxgE,SAAQC,MAAO,+DAAiEugE,EAC/E,IAAMq/C,EAAe,wBAA0BqU,GAMjD,GAAIK,GAAah1H,KAAKo0H,WAAWC,SAECnzH,KAA7ByzH,EAAa5hH,aAEjBiiH,EAAah1H,KAAKo0H,WAAWE,YAC7Bt0H,KAAK20H,aAAeA,OAE+BzzH,KAAxCyzH,EAAaxxG,yBAExB6xG,EAAah1H,KAAKo0H,WAAWG,uBAC7Bv0H,KAAK20H,aAAeA,EAKrB,IAAIM,GAAcj1H,KAAK+zH,YAAYC,MAEnC,QAAuB9yH,KAAlBsyH,EAA8B,CAIlC,GAAsB,0BAAjBlT,EAA2C,CAK/C,IAAOqU,EAAa16G,SAGnB,WADAxZ,SAAQC,MAAO,sGAAuGV,KAKvH,IAAK20H,EAAa16G,SAASS,iBAAmB,CAE7C,IAAOi6G,EAAa16G,SAASU,gBAG5B,WADAla,SAAQC,MAAO,sHAAuHV,KAKvI,KAAM,GAAIgG,GAAI,EAAGA,EAAIhG,KAAK+gE,KAAK9mD,SAASU,gBAAgB1H,SAASzS,OAAQwF,IAExE,GAAK2uH,EAAa16G,SAASU,gBAAgB1H,SAAUjN,GAAIzD,OAASixH,EAAgB,CAEjFA,EAAgBxtH,CAChB,YAOI,CAEN,IAAO2uH,EAAa16G,SAASpC,aAG5B,WADApX,SAAQC,MAAO,mHAAoHV,KAKpI,KAAM,GAAIgG,GAAI,EAAGA,EAAIhG,KAAK+gE,KAAK9mD,SAASpC,aAAarX,OAAQwF,IAE5D,GAAK2uH,EAAa16G,SAASpC,aAAc7R,GAAIzD,OAASixH,EAAgB,CAErEA,EAAgBxtH,CAChB,SAUJivH,EAAcj1H,KAAK+zH,YAAYG,aAE/Bl0H,KAAKy0H,iBAAmBM,EACxB/0H,KAAKwzH,cAAgBA,WAEiBtyH,KAA3B6zH,EAAankF,eAAoD1vC,KAAzB6zH,EAAahvH,SAIhEkvH,EAAcj1H,KAAK+zH,YAAYI,eAE/Bn0H,KAAKy0H,iBAAmBM,GAEbl4G,MAAMC,QAASi4G,IAE1BE,EAAcj1H,KAAK+zH,YAAYE,YAE/Bj0H,KAAKy0H,iBAAmBM,GAIxB/0H,KAAKsgH,aAAeA,CAKrBtgH,MAAKsyH,SAAWtyH,KAAKw0H,oBAAqBS,GAC1Cj1H,KAAKiK,SAAWjK,KAAK00H,iCAAkCO,GAAeD,IAIvEtC,OAAQ,WAEP1yH,KAAK+gE,KAAO,KAIZ/gE,KAAKsyH,SAAWtyH,KAAKk1H,kBACrBl1H,KAAKiK,SAAWjK,KAAKm1H,qBAOvBnzH,OAAO2rE,OAAQlN,GAAgBU,WAG9B+zD,kBAAmBz0D,GAAgBU,UAAUmxD,SAC7C6C,kBAAmB10D,GAAgBU,UAAUl3D,WAqF9CjI,OAAO2rE,OAAQzM,GAAqBC,WAEnCwxD,wBAAwB,EAExB5yG,IAAK,WAWJ,IAAM,GATFq4B,GAAUp4C,KAAKyZ,SAClB27G,EAAWh9E,EAAQ53C,OACnB60H,EAAiBr1H,KAAKohE,gBACtBk0D,EAAgBt1H,KAAKqhE,eACrBusD,EAAQ5tH,KAAKshE,OACbi0D,EAAcv1H,KAAKuhE,aACnBkxD,EAAWzyH,KAAK4gE,UAChB40D,EAAY/C,EAASjyH,OAEZwF,EAAI,EAAGL,EAAIpF,UAAUC,OAAQwF,IAAML,IAAMK,EAAI,CAEtD,GAAI4T,GAASrZ,UAAWyF,GACvB5D,EAAOwX,EAAOxX,KACdqkB,EAAQ6uG,EAAelzH,GACvBqzH,MAAcv0H,EAEf,QAAeA,KAAVulB,EAAsB,CAI1BA,EAAQ2uG,IACRE,EAAelzH,GAASqkB,EACxB2xB,EAAQ7tC,KAAMqP,EAId,KAAM,GAAIzH,GAAI,EAAG48D,EAAIymD,EAAWrjH,IAAM48D,IAAM58D,EAE3CsgH,EAAUtgH,GAAI5H,KAAM,GAAIk2D,IAAiB7mD,EAAQg0G,EAAOz7G,GAAKojH,EAAapjH,SAIrE,IAAKsU,EAAQ4uG,EAAiB,CAEpCI,EAAcr9E,EAAS3xB,EAIvB,IAAIivG,KAAsBL,EACzBM,EAAmBv9E,EAASs9E,EAE7BJ,GAAeK,EAAiBvzH,MAASqkB,EACzC2xB,EAAS3xB,GAAUkvG,EAEnBL,EAAelzH,GAASszH,EACxBt9E,EAASs9E,GAAqB97G,CAI9B,KAAM,GAAIzH,GAAI,EAAG48D,EAAIymD,EAAWrjH,IAAM48D,IAAM58D,EAAI,CAE/C,GAAIyjH,GAAkBnD,EAAUtgH,GAC/B0jH,EAAaD,EAAiBF,GAC9B/1D,EAAUi2D,EAAiBnvG,EAE5BmvG,GAAiBnvG,GAAUovG,MAEV30H,KAAZy+D,IAMJA,EAAU,GAAIc,IAAiB7mD,EAAQg0G,EAAOz7G,GAAKojH,EAAapjH,KAIjEyjH,EAAiBF,GAAqB/1D,OAI5BvnB,GAAS3xB,KAAYgvG,GAEhCh1H,QAAQC,MAAO,sJAOjBV,KAAKohE,gBAAkBi0D,GAIxBxzG,OAAQ,WAQP,IAAM,GANFu2B,GAAUp4C,KAAKyZ,SAClB47G,EAAiBr1H,KAAKohE,gBACtBk0D,EAAgBt1H,KAAKqhE,eACrBoxD,EAAWzyH,KAAK4gE,UAChB40D,EAAY/C,EAASjyH,OAEZwF,EAAI,EAAGL,EAAIpF,UAAUC,OAAQwF,IAAML,IAAMK,EAAI,CAEtD,GAAI4T,GAASrZ,UAAWyF,GACvB5D,EAAOwX,EAAOxX,KACdqkB,EAAQ6uG,EAAelzH,EAExB,QAAelB,KAAVulB,GAAuBA,GAAS4uG,EAAiB,CAIrD,GAAIS,GAAkBT,IACrBU,EAAoB39E,EAAS09E,EAE9BR,GAAeS,EAAkB3zH,MAASqkB,EAC1C2xB,EAAS3xB,GAAUsvG,EAEnBT,EAAelzH,GAAS0zH,EACxB19E,EAAS09E,GAAoBl8G,CAI7B,KAAM,GAAIzH,GAAI,EAAG48D,EAAIymD,EAAWrjH,IAAM48D,IAAM58D,EAAI,CAE/C,GAAIyjH,GAAkBnD,EAAUtgH,GAC/B6jH,EAAcJ,EAAiBE,GAC/Bn2D,EAAUi2D,EAAiBnvG,EAE5BmvG,GAAiBnvG,GAAUuvG,EAC3BJ,EAAiBE,GAAoBn2D,IAQxC3/D,KAAKohE,gBAAkBi0D,GAKxBY,QAAS,WASR,IAAM,GAPF79E,GAAUp4C,KAAKyZ,SAClB27G,EAAWh9E,EAAQ53C,OACnB60H,EAAiBr1H,KAAKohE,gBACtBk0D,EAAgBt1H,KAAKqhE,eACrBoxD,EAAWzyH,KAAK4gE,UAChB40D,EAAY/C,EAASjyH,OAEZwF,EAAI,EAAGL,EAAIpF,UAAUC,OAAQwF,IAAML,IAAMK,EAAI,CAEtD,GAAI4T,GAASrZ,UAAWyF,GACvB5D,EAAOwX,EAAOxX,KACdqkB,EAAQ6uG,EAAelzH,EAExB,QAAelB,KAAVulB,EAIJ,SAFO6uG,GAAelzH,GAEjBqkB,EAAQ4uG,EAAiB,CAI7B,GAAIK,KAAsBL,EACzBM,EAAmBv9E,EAASs9E,GAC5B9qH,IAAewqH,EACfc,EAAa99E,EAASxtC,EAGvB0qH,GAAeK,EAAiBvzH,MAASqkB,EACzC2xB,EAAS3xB,GAAUkvG,EAGnBL,EAAeY,EAAW9zH,MAASszH,EACnCt9E,EAASs9E,GAAqBQ,EAC9B99E,EAAQha,KAIR,KAAM,GAAIjsB,GAAI,EAAG48D,EAAIymD,EAAWrjH,IAAM48D,IAAM58D,EAAI,CAE/C,GAAIyjH,GAAkBnD,EAAUtgH,GAC/B0jH,EAAaD,EAAiBF,GAC9BjO,EAAOmO,EAAiBhrH,EAEzBgrH,GAAiBnvG,GAAUovG,EAC3BD,EAAiBF,GAAqBjO,EACtCmO,EAAgBx3F,WAIX,CAIN,GAAIxzB,KAAewqH,EAClBc,EAAa99E,EAASxtC,EAEvB0qH,GAAeY,EAAW9zH,MAASqkB,EACnC2xB,EAAS3xB,GAAUyvG,EACnB99E,EAAQha,KAIR,KAAM,GAAIjsB,GAAI,EAAG48D,EAAIymD,EAAWrjH,IAAM48D,IAAM58D,EAAI,CAE/C,GAAIyjH,GAAkBnD,EAAUtgH,EAEhCyjH,GAAiBnvG,GAAUmvG,EAAiBhrH,GAC5CgrH,EAAgBx3F,QAUpBp+B,KAAKohE,gBAAkBi0D,GAMxBx0D,WAAY,SAAWp2D,EAAM+1D,GAK5B,GAAI21D,GAAgBn2H,KAAKwhE,uBACxB/6C,EAAQ0vG,EAAe1rH,GACvBgoH,EAAWzyH,KAAK4gE,SAEjB,QAAe1/D,KAAVulB,EAAsB,MAAOgsG,GAAUhsG,EAE5C,IAAImnG,GAAQ5tH,KAAKshE,OAChBi0D,EAAcv1H,KAAKuhE,aACnBnpB,EAAUp4C,KAAKyZ,SACf27G,EAAWh9E,EAAQ53C,OACnB60H,EAAiBr1H,KAAKohE,gBACtBw0D,EAAkB,GAAI/4G,OAAOu4G,EAE9B3uG,GAAQgsG,EAASjyH,OAEjB21H,EAAe1rH,GAASgc,EAExBmnG,EAAMrjH,KAAME,GACZ8qH,EAAYhrH,KAAMi2D,GAClBiyD,EAASloH,KAAMqrH,EAEf,KAAM,GAAI5vH,GAAIqvH,EAAgB1vH,EAAIyyC,EAAQ53C,OAAQwF,IAAML,IAAMK,EAAI,CAEjE,GAAI4T,GAASw+B,EAASpyC,EACtB4vH,GAAiB5vH,GAAM,GAAIy6D,IAAiB7mD,EAAQnP,EAAM+1D,GAI3D,MAAOo1D,IAIRQ,aAAc,SAAW3rH,GAKxB,GAAI0rH,GAAgBn2H,KAAKwhE,uBACxB/6C,EAAQ0vG,EAAe1rH,EAExB,QAAevJ,KAAVulB,EAAsB,CAE1B,GAAImnG,GAAQ5tH,KAAKshE,OAChBi0D,EAAcv1H,KAAKuhE,aACnBkxD,EAAWzyH,KAAK4gE,UAChBy1D,EAAoB5D,EAASjyH,OAAS,EACtC81H,EAAe7D,EAAU4D,EAG1BF,GAFoB1rH,EAAM4rH,IAEU5vG,EAEpCgsG,EAAUhsG,GAAU6vG,EACpB7D,EAASr0F,MAETm3F,EAAa9uG,GAAU8uG,EAAac,GACpCd,EAAYn3F,MAEZwvF,EAAOnnG,GAAUmnG,EAAOyI,GACxBzI,EAAMxvF,UAoFTp8B,OAAO2rE,OAAQ9L,GAAgBV,WAI9BgvD,KAAM,WAIL,MAFAnwH,MAAKiiE,OAAOs0D,gBAAiBv2H,MAEtBA,MAIRwwH,KAAM,WAIL,MAFAxwH,MAAKiiE,OAAOu0D,kBAAmBx2H,MAExBA,KAAK4S,SAIbA,MAAO,WASN,MAPA5S,MAAK4jE,QAAS,EACd5jE,KAAKme,SAAU,EAEfne,KAAK06C,KAAO,EACZ16C,KAAKqjE,YAAe,EACpBrjE,KAAKsjE,WAAa,KAEXtjE,KAAKy2H,aAAaC,eAI1BC,UAAW,WAEV,MAAO32H,MAAKme,UAAane,KAAK4jE,QAA6B,IAAnB5jE,KAAKujE,WACvB,OAApBvjE,KAAKsjE,YAAuBtjE,KAAKiiE,OAAO20D,gBAAiB52H,OAK5D62H,YAAa,WAEZ,MAAO72H,MAAKiiE,OAAO20D,gBAAiB52H,OAIrC82H,QAAS,SAAWp8E,GAInB,MAFA16C,MAAKsjE,WAAa5oB,EAEX16C,MAIR8wH,QAAS,SAAWtiG,EAAMm1C,GAKzB,MAHA3jE,MAAKy6C,KAAOjsB,EACZxuB,KAAK2jE,YAAcA,EAEZ3jE,MASR+2H,mBAAoB,SAAWtzD,GAO9B,MALAzjE,MAAKyjE,OAASA,EAGdzjE,KAAK0jE,iBAAmB1jE,KAAKme,QAAUslD,EAAS,EAEzCzjE,KAAKy2H,cAKbO,mBAAoB,WAEnB,MAAOh3H,MAAK0jE,kBAIbuzD,OAAQ,SAAWn9D,GAElB,MAAO95D,MAAKk3H,gBAAiBp9D,EAAU,EAAG,IAI3Cq9D,QAAS,SAAWr9D,GAEnB,MAAO95D,MAAKk3H,gBAAiBp9D,EAAU,EAAG,IAI3Cs9D,cAAe,SAAWC,EAAev9D,EAAUw9D,GAKlD,GAHAD,EAAcF,QAASr9D,GACvB95D,KAAKi3H,OAAQn9D,GAERw9D,EAAO,CAEX,GAAIC,GAAiBv3H,KAAKkiE,MAAMpI,SAC/B09D,EAAkBH,EAAcn1D,MAAMpI,SAEtC29D,EAAgBD,EAAkBD,EAClCG,EAAgBH,EAAiBC,CAElCH,GAAcC,KAAM,EAAKG,EAAe39D,GACxC95D,KAAKs3H,KAAMI,EAAe,EAAK59D,GAIhC,MAAO95D,OAIR23H,YAAa,SAAWC,EAAc99D,EAAUw9D,GAE/C,MAAOM,GAAaR,cAAep3H,KAAM85D,EAAUw9D,IAIpDb,WAAY,WAEX,GAAIoB,GAAoB73H,KAAKmjE,kBAS7B,OAP2B,QAAtB00D,IAEJ73H,KAAKmjE,mBAAqB,KAC1BnjE,KAAKiiE,OAAO61D,4BAA6BD,IAInC73H,MASR+3H,sBAAuB,SAAWx0D,GAKjC,MAHAvjE,MAAKujE,UAAYA,EACjBvjE,KAAKwjE,oBAAsBxjE,KAAK4jE,OAAS,EAAIL,EAEtCvjE,KAAK02H,eAKbsB,sBAAuB,WAEtB,MAAOh4H,MAAKwjE,qBAIby0D,YAAa,SAAWn+D,GAIvB,MAFA95D,MAAKujE,UAAYvjE,KAAKkiE,MAAMpI,SAAWA,EAEhC95D,KAAK02H,eAIbwB,SAAU,SAAWxK,GAKpB,MAHA1tH,MAAK06C,KAAOgzE,EAAOhzE,KACnB16C,KAAKujE,UAAYmqD,EAAOnqD,UAEjBvjE,KAAK02H,eAIbyB,KAAM,SAAWr+D,GAEhB,MAAO95D,MAAKs3H,KAAMt3H,KAAKwjE,oBAAqB,EAAG1J,IAIhDw9D,KAAM,SAAWc,EAAgBC,EAAcv+D,GAE9C,GAAIgI,GAAQ9hE,KAAKiiE,OAAQq2D,EAAMx2D,EAAMpnB,KACpCgoB,EAAc1iE,KAAKkjE,sBAEnBK,EAAYvjE,KAAKujE,SAEG,QAAhBb,IAEJA,EAAcZ,EAAMy2D,0BACpBv4H,KAAKkjE,sBAAwBR,EAI9B,IAAIhK,GAAQgK,EAAY/K,mBACvBgB,EAAS+J,EAAY9K,YAQtB,OANAc,GAAO,GAAM4/D,EACb5/D,EAAO,GAAM4/D,EAAMx+D,EAEnBnB,EAAQ,GAAMy/D,EAAiB70D,EAC/B5K,EAAQ,GAAM0/D,EAAe90D,EAEtBvjE,MAIR02H,YAAa,WAEZ,GAAI8B,GAAuBx4H,KAAKkjE,qBAShC,OAP8B,QAAzBs1D,IAEJx4H,KAAKkjE,sBAAwB,KAC7BljE,KAAKiiE,OAAO61D,4BAA6BU,IAInCx4H,MAMRy4H,SAAU,WAET,MAAOz4H,MAAKiiE,QAIby2D,QAAS,WAER,MAAO14H,MAAKkiE,OAIby2D,QAAS,WAER,MAAO34H,MAAKmiE,YAAcniE,KAAKiiE,OAAOiC,OAMvC00D,QAAS,SAAWl+E,EAAMm+E,EAAWC,EAAe7G,GAInD,IAAOjyH,KAAKme,QAKX,WADAne,MAAK+4H,cAAer+E,EAKrB,IAAIgkB,GAAY1+D,KAAKsjE,UAErB,IAAmB,OAAd5E,EAAqB,CAIzB,GAAIs6D,IAAgBt+E,EAAOgkB,GAAco6D,CACzC,IAAKE,EAAc,GAAuB,IAAlBF,EAEvB,MAMD94H,MAAKsjE,WAAa,KAClBu1D,EAAYC,EAAgBE,EAM7BH,GAAa74H,KAAKi5H,iBAAkBv+E,EACpC,IAAIw+E,GAAWl5H,KAAKm5H,YAAaN,GAK7Bp1D,EAASzjE,KAAK+4H,cAAer+E,EAEjC,IAAK+oB,EAAS,EAKb,IAAM,GAHFpB,GAAeriE,KAAK8iE,cACpBs2D,EAAiBp5H,KAAK+iE,kBAEhB5wD,EAAI,EAAG48D,EAAI1M,EAAa7hE,OAAQ2R,IAAM48D,IAAM58D,EAErDkwD,EAAclwD,GAAI+oG,SAAUge,GAC5BE,EAAgBjnH,GAAI6/G,WAAYC,EAAWxuD,IAQ9Cs1D,cAAe,SAAWr+E,GAEzB,GAAI+oB,GAAS,CAEb,IAAKzjE,KAAKme,QAAU,CAEnBslD,EAASzjE,KAAKyjE,MACd,IAAIf,GAAc1iE,KAAKmjE,kBAEvB,IAAqB,OAAhBT,EAAuB,CAE3B,GAAI22D,GAAmB32D,EAAYw4C,SAAUxgE,GAAQ,EAErD+oB,IAAU41D,EAEL3+E,EAAOgoB,EAAY/K,mBAAoB,KAE3C33D,KAAKy2H,aAEqB,IAArB4C,IAGJr5H,KAAKme,SAAU,KAWnB,MADAne,MAAK0jE,iBAAmBD,EACjBA,GAIRw1D,iBAAkB,SAAWv+E,GAE5B,GAAI6oB,GAAY,CAEhB,KAAOvjE,KAAK4jE,OAAS,CAEpBL,EAAYvjE,KAAKujE,SAEjB,IAAIb,GAAc1iE,KAAKkjE,qBAEvB,IAAqB,OAAhBR,EAAuB,CAI3Ba,GAFuBb,EAAYw4C,SAAUxgE,GAAQ,GAIhDA,EAAOgoB,EAAY/K,mBAAoB,KAE3C33D,KAAK02H,cAEc,IAAdnzD,EAGJvjE,KAAK4jE,QAAS,EAKd5jE,KAAKujE,UAAYA,IAWrB,MADAvjE,MAAKwjE,oBAAsBD,EACpBA,GAIR41D,YAAa,SAAWN,GAEvB,GAAIn+E,GAAO16C,KAAK06C,KAAOm+E,CAEvB,IAAmB,IAAdA,EAAkB,MAAOn+E,EAE9B,IAAIof,GAAW95D,KAAKkiE,MAAMpI,SAEzBrf,EAAOz6C,KAAKy6C,KACZ6+E,EAAYt5H,KAAKqjE,UAElB,IAj0sCa,OAi0sCR5oB,EAAoB,EAEH,IAAhB6+E,IAIJt5H,KAAKqjE,WAAa,EAClBrjE,KAAKu5H,aAAa,GAAM,GAAM,GAI/BC,GAAa,CAEZ,GAAK9+E,GAAQof,EAEZpf,EAAOof,MAED,CAAA,KAAKpf,EAAO,GAIZ,KAAM8+E,EAFZ9+E,GAAO,EAIH16C,KAAK6jE,kBAAoB7jE,KAAK4jE,QAAS,EACvC5jE,KAAKme,SAAU,EAEpBne,KAAKiiE,OAAOoM,eACXxsE,KAAM,WAAY6rH,OAAQ1tH,KAC1B6qB,UAAWguG,EAAY,GAAM,EAAI,SAK7B,CAEN,GAAIY,GAl2sCY,OAk2sCCh/E,CAwBjB,KAtBqB,IAAhB6+E,IAICT,GAAa,GAEjBS,EAAY,EAEZt5H,KAAKu5H,aAAa,EAA2B,IAArBv5H,KAAK2jE,YAAmB81D,IAQhDz5H,KAAKu5H,YAAkC,IAArBv5H,KAAK2jE,aAAmB,EAAM81D,IAM7C/+E,GAAQof,GAAYpf,EAAO,EAAI,CAInC,GAAIg/E,GAAYjxG,KAAKC,MAAOgyB,EAAOof,EACnCpf,IAAQof,EAAW4/D,EAEnBJ,GAAa7wG,KAAKmF,IAAK8rG,EAEvB,IAAIC,GAAU35H,KAAK2jE,YAAc21D,CAEjC,IAAKK,EAAU,EAIT35H,KAAK6jE,kBAAoB7jE,KAAK4jE,QAAS,EACvC5jE,KAAKme,SAAU,EAEpBu8B,EAAOm+E,EAAY,EAAI/+D,EAAW,EAElC95D,KAAKiiE,OAAOoM,eACXxsE,KAAM,WAAY6rH,OAAQ1tH,KAC1B6qB,UAAWguG,EAAY,EAAI,GAAM,QAG5B,CAIN,GAAiB,IAAZc,EAAgB,CAIpB,GAAIC,GAAUf,EAAY,CAC1B74H,MAAKu5H,YAAaK,GAAWA,EAASH,OAItCz5H,MAAKu5H,aAAa,GAAO,EAAOE,EAIjCz5H,MAAKqjE,WAAai2D,EAElBt5H,KAAKiiE,OAAOoM,eACXxsE,KAAM,OAAQ6rH,OAAQ1tH,KAAM05H,UAAWA,KAO1C,GAAKD,GAAkC,IAAR,EAAZH,GAKlB,MADAt5H,MAAK06C,KAAOA,EACLof,EAAWpf,EAOpB,MADA16C,MAAK06C,KAAOA,EACLA,GAIR6+E,YAAa,SAAWK,EAASC,EAAOJ,GAEvC,GAAI72D,GAAW5iE,KAAK6iE,oBAEf42D,IAEJ72D,EAASL,YA/7sCU,KAg8sCnBK,EAASH,UAh8sCU,OAw8sClBG,EAASL,YAFLq3D,EAEmB55H,KAAK8jE,iBAx8sCV,KAw8sC+CtB,GAv8sC9C,KAi9sCnBI,EAASH,UAFLo3D,EAEiB75H,KAAK+jE,eAl9sCR,KAk9sC2CvB,GAj9sC1C,OA69sCtB00D,gBAAiB,SAAWp9D,EAAUggE,EAAWC,GAEhD,GAAIj4D,GAAQ9hE,KAAKiiE,OAAQq2D,EAAMx2D,EAAMpnB,KACpCgoB,EAAc1iE,KAAKmjE,kBAEC,QAAhBT,IAEJA,EAAcZ,EAAMy2D,0BACpBv4H,KAAKmjE,mBAAqBT,EAI3B,IAAIhK,GAAQgK,EAAY/K,mBACvBgB,EAAS+J,EAAY9K,YAKtB,OAHAc,GAAO,GAAM4/D,EAAS3/D,EAAQ,GAAMmhE,EACpCphE,EAAO,GAAM4/D,EAAMx+D,EAAUnB,EAAQ,GAAMohE,EAEpC/5H,QA4BTgC,OAAO2rE,OAAQ3J,GAAe7C,UAAWlhE,EAAgBkhE,WAExD64D,YAAa,SAAWtM,EAAQuM,GAE/B,GAAIh2D,GAAOypD,EAAOvrD,YAAcniE,KAAKkkE,MACpCnK,EAAS2zD,EAAOxrD,MAAMnI,OACtBqI,EAAUrI,EAAOv5D,OACjBiyH,EAAW/E,EAAO3qD,kBAClBV,EAAeqrD,EAAO5qD,cACtBo3D,EAAWj2D,EAAK7hE,KAChB+3H,EAAiBn6H,KAAKo6H,uBACtBC,EAAiBF,EAAgBD,OAEVh5H,KAAnBm5H,IAEJA,KACAF,EAAgBD,GAAaG,EAI9B,KAAM,GAAIr0H,GAAI,EAAGA,IAAMo8D,IAAYp8D,EAAI,CAEtC,GAAI+4G,GAAQhlD,EAAQ/zD,GACnBo6G,EAAYrB,EAAMx8G,KAClBo9D,EAAU06D,EAAgBja,EAE3B,QAAiBl/G,KAAZy+D,EAEJ8yD,EAAUzsH,GAAM25D,MAEV,CAIN,OAAiBz+D,MAFjBy+D,EAAU8yD,EAAUzsH,IAES,CAIC,OAAxB25D,EAAQqD,gBAETrD,EAAQS,eACXpgE,KAAKs6H,oBAAqB36D,EAASu6D,EAAU9Z,GAI9C,UAID,GAAI31G,GAAOwvH,GAAmBA,EAC7Bl3D,kBAAmB/8D,GAAI25D,QAAQa,UAEhCb,GAAU,GAAID,IACbe,GAAgB2f,OAAQnc,EAAMm8C,EAAW31G,GACzCs0G,EAAMpB,cAAeoB,EAAMzB,kBAEzB39C,EAAQS,eACXpgE,KAAKs6H,oBAAqB36D,EAASu6D,EAAU9Z,GAE7CqS,EAAUzsH,GAAM25D,EAIjB0C,EAAcr8D,GAAI8xD,aAAe6H,EAAQl/C,SAM3C81G,gBAAiB,SAAW7I,GAE3B,IAAO1tH,KAAK42H,gBAAiBlJ,GAAW,CAEvC,GAA4B,OAAvBA,EAAO1qD,YAAuB,CAKlC,GAAIk3D,IAAaxM,EAAOvrD,YAAcniE,KAAKkkE,OAAQ9hE,KAClDm4H,EAAW7M,EAAOxrD,MAAM9/D,KACxBo4H,EAAiBx6H,KAAKy6H,eAAgBF,EAEvCv6H,MAAKg6H,YAAatM,EACjB8M,GAAkBA,EAAeE,aAAc,IAEhD16H,KAAK26H,mBAAoBjN,EAAQ6M,EAAUL,GAO5C,IAAM,GAHFzH,GAAW/E,EAAO3qD,kBAGZ/8D,EAAI,EAAGL,EAAI8sH,EAASjyH,OAAQwF,IAAML,IAAMK,EAAI,CAErD,GAAI25D,GAAU8yD,EAAUzsH,EAEK,IAAxB25D,EAAQQ,aAEZngE,KAAK46H,aAAcj7D,GACnBA,EAAQ0yD,qBAMVryH,KAAK66H,YAAanN,KAMpB8I,kBAAmB,SAAW9I,GAE7B,GAAK1tH,KAAK42H,gBAAiBlJ,GAAW,CAKrC,IAAM,GAHF+E,GAAW/E,EAAO3qD,kBAGZ/8D,EAAI,EAAGL,EAAI8sH,EAASjyH,OAAQwF,IAAML,IAAMK,EAAI,CAErD,GAAI25D,GAAU8yD,EAAUzsH,EAEK,MAArB25D,EAAQQ,WAEfR,EAAQ4yD,uBACRvyH,KAAK86H,iBAAkBn7D,IAMzB3/D,KAAK+6H,gBAAiBrN,KAQxBvpD,mBAAoB,WAEnBnkE,KAAKg7H,YACLh7H,KAAKi7H,gBAAkB,EAEvBj7H,KAAKy6H,kBAQLz6H,KAAK4gE,aACL5gE,KAAKk7H,iBAAmB,EAExBl7H,KAAKo6H,0BAGLp6H,KAAKm7H,wBACLn7H,KAAKo7H,4BAA8B,CAEnC,IAAI1/G,GAAQ1b,IAEZA,MAAKyhE,OAEJ45D,SACC35D,YAEC,MAAOhmD,GAAMs/G,SAASx6H,QAGvBmhE,YAEC,MAAOjmD,GAAMu/G,kBAIfxI,UACC/wD,YAEC,MAAOhmD,GAAMklD,UAAUpgE,QAGxBmhE,YAEC,MAAOjmD,GAAMw/G,mBAIfI,qBACC55D,YAEC,MAAOhmD,GAAMy/G,qBAAqB36H,QAGnCmhE,YAEC,MAAOjmD,GAAM0/G,gCAWjBxE,gBAAiB,SAAWlJ,GAE3B,GAAIjnG,GAAQinG,EAAO1qD,WACnB,OAAiB,QAAVv8C,GAAkBA,EAAQzmB,KAAKi7H,iBAIvCN,mBAAoB,SAAWjN,EAAQ6M,EAAUL,GAEhD,GAAImB,GAAUr7H,KAAKg7H,SAClBO,EAAgBv7H,KAAKy6H,eACrBD,EAAiBe,EAAehB,EAEjC,QAAwBr5H,KAAnBs5H,EAEJA,GAECE,cAAgBhN,GAChB8N,iBAID9N,EAAOzqD,kBAAoB,EAE3Bs4D,EAAehB,GAAaC,MAEtB,CAEN,GAAIE,GAAeF,EAAeE,YAElChN,GAAOzqD,kBAAoBy3D,EAAal6H,OACxCk6H,EAAanwH,KAAMmjH,GAIpBA,EAAO1qD,YAAcq4D,EAAQ76H,OAC7B66H,EAAQ9wH,KAAMmjH,GAEd8M,EAAegB,aAActB,GAAaxM,GAI3C+N,sBAAuB,SAAW/N,GAEjC,GAAI2N,GAAUr7H,KAAKg7H,SAClBU,EAAqBL,EAASA,EAAQ76H,OAAS,GAC/Cm7H,EAAajO,EAAO1qD,WAErB04D,GAAmB14D,YAAc24D,EACjCN,EAASM,GAAeD,EACxBL,EAAQj9F,MAERsvF,EAAO1qD,YAAc,IAGrB,IAAIu3D,GAAW7M,EAAOxrD,MAAM9/D,KAC3Bm5H,EAAgBv7H,KAAKy6H,eACrBD,EAAiBe,EAAehB,GAChCqB,EAAsBpB,EAAeE,aAErCmB,EACCD,EAAqBA,EAAoBp7H,OAAS,GAEnDs7H,EAAmBpO,EAAOzqD,iBAE3B44D,GAAgB54D,kBAAoB64D,EACpCF,EAAqBE,GAAqBD,EAC1CD,EAAoBx9F,MAEpBsvF,EAAOzqD,kBAAoB,WAGRu3D,GAAegB,cACpB9N,EAAOvrD,YAAcniE,KAAKkkE,OAAQ9hE,MAIZ,IAA/Bw5H,EAAoBp7H,cAEjB+6H,GAAehB,GAIvBv6H,KAAK+7H,iCAAkCrO,IAIxCqO,iCAAkC,SAAWrO,GAG5C,IAAM,GADF+E,GAAW/E,EAAO3qD,kBACZ/8D,EAAI,EAAGL,EAAI8sH,EAASjyH,OAAQwF,IAAML,IAAMK,EAAI,CAErD,GAAI25D,GAAU8yD,EAAUzsH,EAEW,MAA3B25D,EAAQS,gBAEfpgE,KAAKg8H,uBAAwBr8D,KAQhCk7D,YAAa,SAAWnN,GAQvB,GAAI2N,GAAUr7H,KAAKg7H,SAClBiB,EAAYvO,EAAO1qD,YAEnBk5D,EAAkBl8H,KAAKi7H,kBAEvBkB,EAAsBd,EAASa,EAEhCxO,GAAO1qD,YAAck5D,EACrBb,EAASa,GAAoBxO,EAE7ByO,EAAoBn5D,YAAci5D,EAClCZ,EAASY,GAAcE,GAIxBpB,gBAAiB,SAAWrN,GAQ3B,GAAI2N,GAAUr7H,KAAKg7H,SAClBiB,EAAYvO,EAAO1qD,YAEnBo5D,IAAwBp8H,KAAKi7H,gBAE7BoB,EAAmBhB,EAASe,EAE7B1O,GAAO1qD,YAAco5D,EACrBf,EAASe,GAAuB1O,EAEhC2O,EAAiBr5D,YAAci5D,EAC/BZ,EAASY,GAAcI,GAMxB/B,oBAAqB,SAAW36D,EAASu6D,EAAU9Z,GAElD,GAAI+Z,GAAiBn6H,KAAKo6H,uBACzBkC,EAAgBnC,EAAgBD,GAEhCzH,EAAWzyH,KAAK4gE,cAEM1/D,KAAlBo7H,IAEJA,KACAnC,EAAgBD,GAAaoC,GAI9BA,EAAelc,GAAczgD,EAE7BA,EAAQqD,YAAcyvD,EAASjyH,OAC/BiyH,EAASloH,KAAMo1D,IAIhBq8D,uBAAwB,SAAWr8D,GAElC,GAAI8yD,GAAWzyH,KAAK4gE,UACnB27D,EAAc58D,EAAQA,QACtBu6D,EAAWqC,EAAYz7D,SAAS1+D,KAChCg+G,EAAYmc,EAAY9xH,KACxB0vH,EAAiBn6H,KAAKo6H,uBACtBkC,EAAgBnC,EAAgBD,GAEhCsC,EAAsB/J,EAAUA,EAASjyH,OAAS,GAClDm7H,EAAah8D,EAAQqD,WAEtBw5D,GAAoBx5D,YAAc24D,EAClClJ,EAAUkJ,GAAea,EACzB/J,EAASr0F,YAEFk+F,GAAelc,EAEtBqc,GAAkB,CAEjB,IAAM,GAAIC,KAAKJ,GAAgB,KAAMG,SAE9BtC,GAAgBD,KAMzBU,aAAc,SAAWj7D,GAExB,GAAI8yD,GAAWzyH,KAAK4gE,UACnBq7D,EAAYt8D,EAAQqD,YAEpBk5D,EAAkBl8H,KAAKk7H,mBAEvByB,EAAuBlK,EAAUyJ,EAElCv8D,GAAQqD,YAAck5D,EACtBzJ,EAAUyJ,GAAoBv8D,EAE9Bg9D,EAAqB35D,YAAci5D,EACnCxJ,EAAUwJ,GAAcU,GAIzB7B,iBAAkB,SAAWn7D,GAE5B,GAAI8yD,GAAWzyH,KAAK4gE,UACnBq7D,EAAYt8D,EAAQqD,YAEpBo5D,IAAwBp8H,KAAKk7H,iBAE7B0B,EAAoBnK,EAAU2J,EAE/Bz8D,GAAQqD,YAAco5D,EACtB3J,EAAU2J,GAAuBz8D,EAEjCi9D,EAAkB55D,YAAci5D,EAChCxJ,EAAUwJ,GAAcW,GAOzBrE,wBAAyB,WAExB,GAAIl2D,GAAeriE,KAAKm7H,qBACvBe,EAAkBl8H,KAAKo7H,8BACvB14D,EAAcL,EAAc65D,EAa7B,YAXqBh7H,KAAhBwhE,IAEJA,EAAc,GAAInK,IACjB,GAAIzyD,cAAc,GAAK,GAAIA,cAAc,GACzC,EAAG9F,KAAK68H,kCAETn6D,EAAYo6D,aAAeZ,EAC3B75D,EAAc65D,GAAoBx5D,GAI5BA,GAIRo1D,4BAA6B,SAAWp1D,GAEvC,GAAIL,GAAeriE,KAAKm7H,qBACvBc,EAAYv5D,EAAYo6D,aAExBV,IAAwBp8H,KAAKo7H,4BAE7B2B,EAAwB16D,EAAc+5D,EAEvC15D,GAAYo6D,aAAeV,EAC3B/5D,EAAc+5D,GAAuB15D,EAErCq6D,EAAsBD,aAAeb,EACrC55D,EAAc45D,GAAcc,GAI7BF,iCAAkC,GAAI/2H,cAAc,GAKpDk3H,WAAY,SAAWj7D,EAAMk7D,GAE5B,GAAIh5D,GAAOg5D,GAAgBj9H,KAAKkkE,MAC/Bg2D,EAAWj2D,EAAK7hE,KAEhB86H,EAA6B,gBAATn7D,GACnBlI,GAAc2lD,WAAYv7C,EAAMlC,GAASA,EAE1Cw4D,EAA0B,OAAf2C,EAAsBA,EAAW96H,KAAO2/D,EAEnDy4D,EAAiBx6H,KAAKy6H,eAAgBF,GACtCN,EAAkB,IAEnB,QAAwB/4H,KAAnBs5H,EAA+B,CAEnC,GAAI2C,GACF3C,EAAegB,aAActB,EAE/B,QAAwBh5H,KAAnBi8H,EAEJ,MAAOA,EAMRlD,GAAkBO,EAAeE,aAAc,GAG3B,OAAfwC,IACJA,EAAajD,EAAgB/3D,OAK/B,GAAoB,OAAfg7D,EAAsB,MAAO,KAGlC,IAAIE,GAAY,GAAIv7D,IAAiB7hE,KAAMk9H,EAAYD,EAOvD,OALAj9H,MAAKg6H,YAAaoD,EAAWnD,GAG7Bj6H,KAAK26H,mBAAoByC,EAAW7C,EAAUL,GAEvCkD,GAKRD,eAAgB,SAAWp7D,EAAMk7D,GAEhC,GAAIh5D,GAAOg5D,GAAgBj9H,KAAKkkE,MAC/Bg2D,EAAWj2D,EAAK7hE,KAEhB86H,EAA6B,gBAATn7D,GACnBlI,GAAc2lD,WAAYv7C,EAAMlC,GAASA,EAE1Cw4D,EAAW2C,EAAaA,EAAW96H,KAAO2/D,EAE1Cy4D,EAAiBx6H,KAAKy6H,eAAgBF,EAEvC,YAAwBr5H,KAAnBs5H,EAEGA,EAAegB,aAActB,IAAc,KAI5C,MAKRmD,cAAe,WAEd,GAAIhC,GAAUr7H,KAAKg7H,SAClBsC,EAAWt9H,KAAKi7H,gBAChBxI,EAAWzyH,KAAK4gE,UAChB40D,EAAYx1H,KAAKk7H,gBAElBl7H,MAAKi7H,gBAAkB,EACvBj7H,KAAKk7H,iBAAmB,CAExB,KAAM,GAAIl1H,GAAI,EAAGA,IAAMs3H,IAAat3H,EAEnCq1H,EAASr1H,GAAI4M,OAId,KAAM,GAAI5M,GAAI,EAAGA,IAAMwvH,IAAcxvH,EAEpCysH,EAAUzsH,GAAIm6D,SAAW,CAI1B,OAAOngE,OAKR4c,OAAQ,SAAWi8G,GAElBA,GAAa74H,KAAKujE,SAYlB,KAAM,GAVF83D,GAAUr7H,KAAKg7H,SAClBsC,EAAWt9H,KAAKi7H,gBAEhBvgF,EAAO16C,KAAK06C,MAAQm+E,EACpBC,EAAgBrwG,KAAK4rC,KAAMwkE,GAE3B5G,EAAYjyH,KAAKokE,YAAc,EAItBp+D,EAAI,EAAGA,IAAMs3H,IAAat3H,EAAI,CAE1Bq1H,EAASr1H,GAEf4yH,QAASl+E,EAAMm+E,EAAWC,EAAe7G,GASjD,IAAM,GAHFQ,GAAWzyH,KAAK4gE,UACnB40D,EAAYx1H,KAAKk7H,iBAERl1H,EAAI,EAAGA,IAAMwvH,IAAcxvH,EAEpCysH,EAAUzsH,GAAI4mC,MAAOqlF,EAItB,OAAOjyH,OAKR24H,QAAS,WAER,MAAO34H,MAAKkkE,OAKbq5D,YAAa,SAAWx7D,GAEvB,GAAIs5D,GAAUr7H,KAAKg7H,SAClBT,EAAWx4D,EAAK3/D,KAChBm5H,EAAgBv7H,KAAKy6H,eACrBD,EAAiBe,EAAehB,EAEjC,QAAwBr5H,KAAnBs5H,EAA+B,CAQnC,IAAM,GAFFgD,GAAkBhD,EAAeE,aAE3B10H,EAAI,EAAGL,EAAI63H,EAAgBh9H,OAAQwF,IAAML,IAAMK,EAAI,CAE5D,GAAI0nH,GAAS8P,EAAiBx3H,EAE9BhG,MAAKw2H,kBAAmB9I,EAExB,IAAIiO,GAAajO,EAAO1qD,YACvB04D,EAAqBL,EAASA,EAAQ76H,OAAS,EAEhDktH,GAAO1qD,YAAc,KACrB0qD,EAAOzqD,kBAAoB,KAE3By4D,EAAmB14D,YAAc24D,EACjCN,EAASM,GAAeD,EACxBL,EAAQj9F,MAERp+B,KAAK+7H,iCAAkCrO,SAIjC6N,GAAehB,KAOxBkD,YAAa,SAAWx5D,GAEvB,GAAIi2D,GAAWj2D,EAAK7hE,KACnBm5H,EAAgBv7H,KAAKy6H,cAEtB,KAAM,GAAIF,KAAYgB,GAAgB,CAErC,GAAIC,GAAeD,EAAehB,GAAWiB,aAC5C9N,EAAS8N,EAActB,OAERh5H,KAAXwsH,IAEJ1tH,KAAKw2H,kBAAmB9I,GACxB1tH,KAAKy7H,sBAAuB/N,IAM9B,GAAIyM,GAAiBn6H,KAAKo6H,uBACzBkC,EAAgBnC,EAAgBD,EAEjC,QAAuBh5H,KAAlBo7H,EAEJ,IAAM,GAAIlc,KAAakc,GAAgB,CAEtC,GAAI38D,GAAU28D,EAAelc,EAC7BzgD,GAAQ4yD,uBACRvyH,KAAKg8H,uBAAwBr8D,KAShC+9D,cAAe,SAAW37D,EAAMk7D,GAE/B,GAAIvP,GAAS1tH,KAAKm9H,eAAgBp7D,EAAMk7D,EAExB,QAAXvP,IAEJ1tH,KAAKw2H,kBAAmB9I,GACxB1tH,KAAKy7H,sBAAuB/N;kCAyB/BrpD,GAAQlD,UAAU1lD,MAAQ,WAEzB,MAAO,IAAI4oD,QAA8BnjE,KAArBlB,KAAKkC,MAAMuZ,MAAsBzb,KAAKkC,MAAQlC,KAAKkC,MAAMuZ,UAiB9E6oD,GAAwBnD,UAAYn/D,OAAO2rE,OAAQ3rE,OAAOo+E,OAAQ75D,GAAe46C,YAEhFnJ,YAAasM,GAEb5qB,2BAA2B,EAE3BtoC,KAAM,SAAWy8D,GAMhB,MAJAtnD,IAAe46C,UAAU/vD,KAAK1M,KAAM1E,KAAM6tE,GAE1C7tE,KAAK+uB,kBAAoB8+C,EAAO9+C,kBAEzB/uB,MAIRyb,MAAO,WAEN,OAAO,GAAIzb,MAAKg4D,aAAc5mD,KAAMpR,SAsBtCgC,OAAO+gB,iBAAkBwhD,GAA2BpD,WAEnD3/C,OAECG,IAAK,WAEJ,MAAO3hB,MAAK8E,KAAK0c,QAMnBjc,OAECoc,IAAK,WAEJ,MAAO3hB,MAAK8E,KAAKS,UAQpBvD,OAAO2rE,OAAQpJ,GAA2BpD,WAEzCv/C,8BAA8B,EAE9ByuD,KAAM,SAAW5pD,EAAOtmB,GAIvB,MAFAH,MAAK8E,KAAKS,MAAOkhB,EAAQzmB,KAAK8E,KAAKi1C,OAAS/5C,KAAKgD,QAAW7C,EAErDH,MAIRswE,KAAM,SAAW7pD,EAAOrmB,GAIvB,MAFAJ,MAAK8E,KAAKS,MAAOkhB,EAAQzmB,KAAK8E,KAAKi1C,OAAS/5C,KAAKgD,OAAS,GAAM5C,EAEzDJ,MAIRo9E,KAAM,SAAW32D,EAAO7lB,GAIvB,MAFAZ,MAAK8E,KAAKS,MAAOkhB,EAAQzmB,KAAK8E,KAAKi1C,OAAS/5C,KAAKgD,OAAS,GAAMpC,EAEzDZ,MAIRggF,KAAM,SAAWv5D,EAAO5lB,GAIvB,MAFAb,MAAK8E,KAAKS,MAAOkhB,EAAQzmB,KAAK8E,KAAKi1C,OAAS/5C,KAAKgD,OAAS,GAAMnC,EAEzDb,MAIRgqD,KAAM,SAAWvjC,GAEhB,MAAOzmB,MAAK8E,KAAKS,MAAOkhB,EAAQzmB,KAAK8E,KAAKi1C,OAAS/5C,KAAKgD,SAIzD6uE,KAAM,SAAWprD,GAEhB,MAAOzmB,MAAK8E,KAAKS,MAAOkhB,EAAQzmB,KAAK8E,KAAKi1C,OAAS/5C,KAAKgD,OAAS,IAIlEw0E,KAAM,SAAW/wD,GAEhB,MAAOzmB,MAAK8E,KAAKS,MAAOkhB,EAAQzmB,KAAK8E,KAAKi1C,OAAS/5C,KAAKgD,OAAS,IAIlEm9E,KAAM,SAAW15D,GAEhB,MAAOzmB,MAAK8E,KAAKS,MAAOkhB,EAAQzmB,KAAK8E,KAAKi1C,OAAS/5C,KAAKgD,OAAS,IAIlE29F,MAAO,SAAWl6E,EAAOtmB,EAAGC,GAO3B,MALAqmB,GAAQA,EAAQzmB,KAAK8E,KAAKi1C,OAAS/5C,KAAKgD,OAExChD,KAAK8E,KAAKS,MAAOkhB,EAAQ,GAAMtmB,EAC/BH,KAAK8E,KAAKS,MAAOkhB,EAAQ,GAAMrmB,EAExBJ,MAIRy3E,OAAQ,SAAWhxD,EAAOtmB,EAAGC,EAAGQ,GAQ/B,MANA6lB,GAAQA,EAAQzmB,KAAK8E,KAAKi1C,OAAS/5C,KAAKgD,OAExChD,KAAK8E,KAAKS,MAAOkhB,EAAQ,GAAMtmB,EAC/BH,KAAK8E,KAAKS,MAAOkhB,EAAQ,GAAMrmB,EAC/BJ,KAAK8E,KAAKS,MAAOkhB,EAAQ,GAAM7lB,EAExBZ,MAIR4gG,QAAS,SAAWn6E,EAAOtmB,EAAGC,EAAGQ,EAAGC,GASnC,MAPA4lB,GAAQA,EAAQzmB,KAAK8E,KAAKi1C,OAAS/5C,KAAKgD,OAExChD,KAAK8E,KAAKS,MAAOkhB,EAAQ,GAAMtmB,EAC/BH,KAAK8E,KAAKS,MAAOkhB,EAAQ,GAAMrmB,EAC/BJ,KAAK8E,KAAKS,MAAOkhB,EAAQ,GAAM7lB,EAC/BZ,KAAK8E,KAAKS,MAAOkhB,EAAQ,GAAM5lB,EAExBb,QA2BTgC,OAAOC,eAAgBwiE,GAAkBtD,UAAW,eAEnDt5D,IAAK,SAAW3F,IAEA,IAAVA,GAAiBlC,KAAK2D,aAM7B3B,OAAO2rE,OAAQlJ,GAAkBtD,WAEhCw8D,qBAAqB,EAErBz9B,SAAU,SAAW36F,GAEpB,GAAKsX,MAAMC,QAASvX,GAEnB,KAAM,IAAI+f,WAAW,wDAItBtlB,MAAKwhB,UAAkBtgB,KAAVqE,EAAsBA,EAAM/E,OAASR,KAAK+5C,OAAS,EAChE/5C,KAAKuF,MAAQA,GAIdqmE,WAAY,SAAW1pE,GAItB,MAFAlC,MAAKugB,QAAUre,EAERlC,MAIRoR,KAAM,SAAWy8D,GAOhB,MALA7tE,MAAKuF,MAAQ,GAAIsoE,GAAOtoE,MAAMyyD,YAAa6V,EAAOtoE,OAClDvF,KAAKwhB,MAAQqsD,EAAOrsD,MACpBxhB,KAAK+5C,OAAS8zB,EAAO9zB,OACrB/5C,KAAKugB,QAAUstD,EAAOttD,QAEfvgB,MAIRmgG,OAAQ,SAAWr2C,EAAQ1pC,EAAW2pC,GAErCD,GAAU9pD,KAAK+5C,OACfgQ,GAAU3pC,EAAU25B,MAEpB,KAAM,GAAI/zC,GAAI,EAAG8K,EAAI9Q,KAAK+5C,OAAQ/zC,EAAI8K,EAAG9K,IAExChG,KAAKuF,MAAOukD,EAAS9jD,GAAMoa,EAAU7a,MAAOwkD,EAAS/jD,EAItD,OAAOhG,OAIR6H,IAAK,SAAW3F,EAAOc,GAMtB,WAJgB9B,KAAX8B,IAAuBA,EAAS,GAErChD,KAAKuF,MAAMsC,IAAK3F,EAAOc,GAEhBhD,MAIRyb,MAAO,WAEN,OAAO,GAAIzb,MAAKg4D,aAAc5mD,KAAMpR,OAIrC6gG,SAAU,SAAW36C,GAIpB,MAFAlmD,MAAK0gB,iBAAmBwlC,EAEjBlmD,QAkBT0kE,GAA2BvD,UAAYn/D,OAAO2rE,OAAQ3rE,OAAOo+E,OAAQ3b,GAAkBtD,YAEtFnJ,YAAa0M,GAEb1qB,8BAA8B,EAE9B5oC,KAAM,SAAWy8D,GAMhB,MAJApJ,IAAkBtD,UAAU/vD,KAAK1M,KAAM1E,KAAM6tE,GAE7C7tE,KAAK6oC,iBAAmBglC,EAAOhlC,iBAExB7oC,QAkBT2kE,GAAyBxD,UAAYn/D,OAAO2rE,OAAQ3rE,OAAOo+E,OAAQj7D,GAAgBg8C,YAElFnJ,YAAa2M,GAEb1qB,4BAA4B,EAE5B7oC,KAAM,SAAWy8D,GAMhB,MAJA1oD,IAAgBg8C,UAAU/vD,KAAK1M,KAAM1E,KAAM6tE,GAE3C7tE,KAAK6oC,iBAAmBglC,EAAOhlC,iBAExB7oC,QAmETgC,OAAO2rE,OAAQ/I,GAAUzD,WAExBmpC,cAAe,EAEfziG,IAAK,SAAW+iB,EAAQC,GAIvB7qB,KAAK6kE,IAAIh9D,IAAK+iB,EAAQC,IAIvB+yG,cAAe,SAAWC,EAAQjuH,GAE1BA,GAAUA,EAAO24F,qBAEvBvoG,KAAK6kE,IAAIj6C,OAAOtL,sBAAuB1P,EAAOoB,aAC9ChR,KAAK6kE,IAAIh6C,UAAUhjB,IAAKg2H,EAAO19H,EAAG09H,EAAOz9H,EAAG,IAAM+sE,UAAWv9D,GAAS+hB,IAAK3xB,KAAK6kE,IAAIj6C,QAASuI,aAEhFvjB,GAAUA,EAAOqrF,sBAE9Bj7F,KAAK6kE,IAAIj6C,OAAO/iB,IAAKg2H,EAAO19H,EAAG09H,EAAOz9H,GAAKwP,EAAOiF,KAAOjF,EAAOkF,MAAUlF,EAAOiF,KAAOjF,EAAOkF,MAAQq4D,UAAWv9D,GAClH5P,KAAK6kE,IAAIh6C,UAAUhjB,IAAK,EAAG,GAAK,GAAI+pB,mBAAoBhiB,EAAOoB,cAI/DvQ,QAAQC,MAAO,8CAMjBwkE,gBAAiB,SAAWtrD,EAAQyrD,GAEnC,GAAID,KAMJ,OAJAF,IAAiBtrD,EAAQ5Z,KAAMolE,EAAYC,GAE3CD,EAAWlwD,KAAM+vD,IAEVG,GAIR04D,iBAAkB,SAAW1lF,EAASitB,GAErC,GAAID,KAEJ,KAAkC,IAA7BvoD,MAAMC,QAASs7B,GAGnB,MADA33C,SAAQqa,KAAM,8DACPsqD,CAIR,KAAM,GAAIp/D,GAAI,EAAG8K,EAAIsnC,EAAQ53C,OAAQwF,EAAI8K,EAAG9K,IAE3Ck/D,GAAiB9sB,EAASpyC,GAAKhG,KAAMolE,EAAYC,EAMlD,OAFAD,GAAWlwD,KAAM+vD,IAEVG,KAsBTpjE,OAAO2rE,OAAQpI,GAAMpE,WAEpBx6C,MAAO,WAEN3mB,KAAK0+D,WAAqC,mBAAhBq/D,aAA8BC,KAAOD,aAAczF,MAE7Et4H,KAAKylE,QAAUzlE,KAAK0+D,UACpB1+D,KAAK0lE,YAAc,EACnB1lE,KAAK2lE,SAAU,GAIhB6qD,KAAM,WAELxwH,KAAKi+H,iBACLj+H,KAAK2lE,SAAU,EACf3lE,KAAKwlE,WAAY,GAIlBy4D,eAAgB,WAGf,MADAj+H,MAAKk+H,WACEl+H,KAAK0lE,aAIbw4D,SAAU,WAET,GAAIz/B,GAAO,CAEX,IAAKz+F,KAAKwlE,YAAexlE,KAAK2lE,QAG7B,MADA3lE,MAAK2mB,QACE,CAIR,IAAK3mB,KAAK2lE,QAAU,CAEnB,GAAIw4D,IAAmC,mBAAhBJ,aAA8BC,KAAOD,aAAczF,KAE1E75B,IAAS0/B,EAAUn+H,KAAKylE,SAAY,IACpCzlE,KAAKylE,QAAU04D,EAEfn+H,KAAK0lE,aAAe+4B,EAIrB,MAAOA,MA0BTz8F,OAAO2rE,OAAQ/H,GAAUzE,WAExBt5D,IAAK,SAAW8Q,EAAQs5C,EAAKqC,GAM5B,MAJAt0D,MAAK2Y,OAASA,EACd3Y,KAAKiyD,IAAMA,EACXjyD,KAAKs0D,MAAQA,EAENt0D,MAIRyb,MAAO,WAEN,OAAO,GAAIzb,MAAKg4D,aAAc5mD,KAAMpR,OAIrCoR,KAAM,SAAWgtH,GAMhB,MAJAp+H,MAAK2Y,OAASylH,EAAMzlH,OACpB3Y,KAAKiyD,IAAMmsE,EAAMnsE,IACjBjyD,KAAKs0D,MAAQ8pE,EAAM9pE,MAEZt0D,MAKRq+H,SAAU,WAKT,MAFAr+H,MAAKiyD,IAAMxpC,KAAK3c,IADN,KACgB2c,KAAK5c,IAAK4c,KAAK6jC,GAD/B,KACyCtsD,KAAKiyD,MAEjDjyD,MAIRy4F,eAAgB,SAAW6lC,GAgB1B,MAdAt+H,MAAK2Y,OAAS2lH,EAAK99H,SAEE,IAAhBR,KAAK2Y,QAET3Y,KAAKs0D,MAAQ,EACbt0D,KAAKiyD,IAAM,IAIXjyD,KAAKs0D,MAAQ7rC,KAAK8jC,MAAO+xE,EAAKn+H,EAAGm+H,EAAK19H,GACtCZ,KAAKiyD,IAAMxpC,KAAKk2D,KAAMt8E,GAAMyvD,MAAOwsE,EAAKl+H,EAAIJ,KAAK2Y,QAAU,EAAG,KAIxD3Y,QAuBTgC,OAAO2rE,OAAQ9H,GAAY1E,WAE1Bt5D,IAAK,SAAW8Q,EAAQ27C,EAAOl0D,GAM9B,MAJAJ,MAAK2Y,OAASA,EACd3Y,KAAKs0D,MAAQA,EACbt0D,KAAKI,EAAIA,EAEFJ,MAIRyb,MAAO,WAEN,OAAO,GAAIzb,MAAKg4D,aAAc5mD,KAAMpR,OAIrCoR,KAAM,SAAWgtH,GAMhB,MAJAp+H,MAAK2Y,OAASylH,EAAMzlH,OACpB3Y,KAAKs0D,MAAQ8pE,EAAM9pE,MACnBt0D,KAAKI,EAAIg+H,EAAMh+H,EAERJ,MAIRy4F,eAAgB,SAAW6lC,GAM1B,MAJAt+H,MAAK2Y,OAAS8P,KAAK81B,KAAM+/E,EAAKn+H,EAAIm+H,EAAKn+H,EAAIm+H,EAAK19H,EAAI09H,EAAK19H,GACzDZ,KAAKs0D,MAAQ7rC,KAAK8jC,MAAO+xE,EAAKn+H,EAAGm+H,EAAK19H,GACtCZ,KAAKI,EAAIk+H,EAAKl+H,EAEPJ,QAmBT8lE,GAAsB3E,UAAYn/D,OAAOo+E,OAAQ/9D,GAAS8+C,WAC1D2E,GAAsB3E,UAAUnJ,YAAc8N,GAE9CA,GAAsB3E,UAAU7lB,yBAA0B,EAmD1DyqB,GAAoB5E,UAAYn/D,OAAOo+E,OAAQ13B,GAAayY,WAC5D4E,GAAoB5E,UAAUnJ,YAAc+N,GAE5CA,GAAoB5E,UAAUvkD,OAAW,WAExC,GAAIi+C,GAAK,GAAI15D,GACTw6D,EAAK,GAAIx6D,GACT8hB,EAAe,GAAI7hB,EAEvB,OAAO,YAEN,GAAIyoD,IAAS,IAAK,IAAK,IAEvB7pD,MAAK4Z,OAAO8F,mBAAmB,GAE/BuD,EAAa0vB,gBAAiB3yC,KAAK4Z,OAAO5I,YAE1C,IAAIA,GAAchR,KAAK4Z,OAAO5I,YAE1BiC,EAAWjT,KAAKia,SAAS5L,WAAW4E,SAIpCizD,EAAclmE,KAAK4Z,OAAOK,QAE9B,IAAKisD,GAAeA,EAAYtrD,WAQ/B,IAAM,GANFvO,GAAW65D,EAAY75D,SAEvBC,EAAQ45D,EAAY55D,MAEpBkyF,EAAM,EAEAx4F,EAAI,EAAG8K,EAAIxE,EAAM9L,OAAQwF,EAAI8K,EAAG9K,IAIzC,IAAM,GAFF8Z,GAAOxT,EAAOtG,GAERmM,EAAI,EAAGC,EAAK0N,EAAKkE,cAAcxjB,OAAQ2R,EAAIC,EAAID,IAAO,CAE/D,GAAI7D,GAASjC,EAAUyT,EAAM+pC,EAAM13C,KAE/B0G,EAASiH,EAAKkE,cAAe7R,EAEjC0oD,GAAGzpD,KAAM9C,GAAS2C,aAAcD,GAEhC2qD,EAAGvqD,KAAMyH,GAASg4D,aAAc5tD,GAAekQ,YAAY1B,eAAgBzxB,KAAKoJ,MAAO2W,IAAK86C,GAE5F5nD,EAASwkE,OAAQ+mB,EAAK3jC,EAAG16D,EAAG06D,EAAGz6D,EAAGy6D,EAAGj6D,GAErC49F,GAAY,EAEZvrF,EAASwkE,OAAQ+mB,EAAK7iC,EAAGx7D,EAAGw7D,EAAGv7D,EAAGu7D,EAAG/6D,GAErC49F,GAAY,MAMR,IAAKt4B,GAAeA,EAAYxrD,iBAUtC,IAAM,GARF6jH,GAASr4D,EAAY73D,WAAW4E,SAEhCurH,EAAUt4D,EAAY73D,WAAWwK,OAEjC2lF,EAAM,EAIArsF,EAAI,EAAGC,EAAKmsH,EAAO/8G,MAAOrP,EAAIC,EAAID,IAE3C0oD,EAAGhzD,IAAK02H,EAAOv0E,KAAM73C,GAAKosH,EAAO1sD,KAAM1/D,GAAKosH,EAAO/mD,KAAMrlE,IAAMlB,aAAcD,GAE7E2qD,EAAG9zD,IAAK22H,EAAQx0E,KAAM73C,GAAKqsH,EAAQ3sD,KAAM1/D,GAAKqsH,EAAQhnD,KAAMrlE,IAE5DwpD,EAAGkV,aAAc5tD,GAAekQ,YAAY1B,eAAgBzxB,KAAKoJ,MAAO2W,IAAK86C,GAE7E5nD,EAASwkE,OAAQ+mB,EAAK3jC,EAAG16D,EAAG06D,EAAGz6D,EAAGy6D,EAAGj6D,GAErC49F,GAAY,EAEZvrF,EAASwkE,OAAQ+mB,EAAK7iC,EAAGx7D,EAAGw7D,EAAGv7D,EAAGu7D,EAAG/6D,GAErC49F,GAAY,CAMdvrF,GAASF,aAAc,MAyDzBqzD,GAAgBjF,UAAYn/D,OAAOo+E,OAAQ/9D,GAAS8+C,WACpDiF,GAAgBjF,UAAUnJ,YAAcoO,GAExCA,GAAgBjF,UAAUzzC,QAAU,WAEnC1tB,KAAKqmE,KAAKpsD,SAASyT,UACnB1tB,KAAKqmE,KAAKlxD,SAASuY,WAIpB04C,GAAgBjF,UAAUvkD,OAAS,WAElC,GAAIwL,GAAS,GAAIjnB,GACbwzG,EAAU,GAAIxzG,EAElB,OAAO,YAENnB,KAAK4e,MAAMc,mBAEX,IAAI++G,GAAaz+H,KAAK4e,MAAMwR,SAAWpwB,KAAK4e,MAAMwR,SAAW,IACzDsuG,EAAYD,EAAah2G,KAAKsgE,IAAK/oF,KAAK4e,MAAMuT,MAElDnyB,MAAKqmE,KAAKv3D,MAAMjH,IAAK62H,EAAWA,EAAWD,GAE3Cr2G,EAAO9I,sBAAuBtf,KAAK4e,MAAM5N,aACzC2jG,EAAQr1F,sBAAuBtf,KAAK4e,MAAMY,OAAOxO,aAEjDhR,KAAKqmE,KAAK5mD,OAAQk1F,EAAQhjF,IAAKvJ,QAEXlnB,KAAflB,KAAK6O,MAET7O,KAAKqmE,KAAKlxD,SAAStG,MAAMhH,IAAK7H,KAAK6O,OAInC7O,KAAKqmE,KAAKlxD,SAAStG,MAAMuC,KAAMpR,KAAK4e,MAAM/P,WA8E7C43D,GAAetF,UAAYn/D,OAAOo+E,OAAQ13B,GAAayY,WACvDsF,GAAetF,UAAUnJ,YAAcyO,GAEvCA,GAAetF,UAAUzhD,kBAAoB,WAE5C,GAAI0I,GAAS,GAAIjnB,GAEbw9H,EAAa,GAAIt+H,GACjBu+H,EAAiB,GAAIv+H,EAEzB,OAAO,UAA4Bu6F,GAElC,GAAIn/D,GAAQz7B,KAAKy7B,MAEbxhB,EAAWja,KAAKia,SAChBhH,EAAWgH,EAASmtD,aAAc,WAEtCw3D,GAAe5tF,WAAYhxC,KAAKikE,KAAKjzD,YAErC,KAAM,GAAIhL,GAAI,EAAGmM,EAAI,EAAGnM,EAAIy1B,EAAMj7B,OAAQwF,IAAO,CAEhD,GAAI4gE,GAAOnrC,EAAOz1B,EAEb4gE,GAAKhkD,QAAUgkD,EAAKhkD,OAAO4jD,SAE/Bm4D,EAAW1pH,iBAAkB2pH,EAAgBh4D,EAAK51D,aAClDoX,EAAO9I,sBAAuBq/G,GAC9B1rH,EAASwkE,OAAQtlE,EAAGiW,EAAOjoB,EAAGioB,EAAOhoB,EAAGgoB,EAAOxnB,GAE/C+9H,EAAW1pH,iBAAkB2pH,EAAgBh4D,EAAKhkD,OAAO5R,aACzDoX,EAAO9I,sBAAuBq/G,GAC9B1rH,EAASwkE,OAAQtlE,EAAI,EAAGiW,EAAOjoB,EAAGioB,EAAOhoB,EAAGgoB,EAAOxnB,GAEnDuR,GAAK,GAMP8H,EAASmtD,aAAc,YAAar0D,aAAc,EAElDsP,GAAS8+C,UAAUzhD,kBAAkBhb,KAAM1E,KAAM46F,OAqDnD9zB,GAAiB3F,UAAYn/D,OAAOo+E,OAAQn1D,GAAKk2C,WACjD2F,GAAiB3F,UAAUnJ,YAAc8O,GAEzCA,GAAiB3F,UAAUzzC,QAAU,WAEpC1tB,KAAKia,SAASyT,UACd1tB,KAAKmV,SAASuY,WAIfo5C,GAAiB3F,UAAUvkD,OAAS,eAEf1b,KAAflB,KAAK6O,MAET7O,KAAKmV,SAAStG,MAAMhH,IAAK7H,KAAK6O,OAI9B7O,KAAKmV,SAAStG,MAAMuC,KAAMpR,KAAK4e,MAAM/P,QAqDvCm4D,GAAoB7F,UAAYn/D,OAAOo+E,OAAQ/9D,GAAS8+C,WACxD6F,GAAoB7F,UAAUnJ,YAAcgP,GAE5CA,GAAoB7F,UAAUzzC,QAAU,WAEvC1tB,KAAKwd,SAAU,GAAIvD,SAASyT,UAC5B1tB,KAAKwd,SAAU,GAAIrI,SAASuY,WAI7Bs5C,GAAoB7F,UAAUvkD,OAAS,WAItC,GAAIiiH,GAAwB,GAAnB7+H,KAAK4e,MAAM7a,MAChB+6H,EAAyB,GAApB9+H,KAAK4e,MAAM5a,OAEhBiP,EAAWjT,KAAKinE,KAAKhtD,SAAS5L,WAAW4E,SACzC1N,EAAQ0N,EAAS1N,KAIrBA,GAAO,GAAMs5H,EAAIt5H,EAAO,IAAQu5H,EAAIv5H,EAAO,GAAM,EACjDA,EAAO,GAAMs5H,EAAIt5H,EAAO,GAAMu5H,EAAIv5H,EAAO,GAAM,EAC/CA,EAAO,IAAQs5H,EAAIt5H,EAAO,GAAMu5H,EAAIv5H,EAAO,GAAM,EACjDA,EAAO,IAAQs5H,EAAIt5H,EAAO,KAASu5H,EAAIv5H,EAAO,IAAO,EACrDA,EAAO,IAAOs5H,EAAIt5H,EAAO,KAASu5H,EAAIv5H,EAAO,IAAO,EAEpD0N,EAASF,aAAc,MAEH7R,KAAflB,KAAK6O,MAET7O,KAAKinE,KAAK9xD,SAAStG,MAAMhH,IAAK7H,KAAK6O,OAInC7O,KAAKinE,KAAK9xD,SAAStG,MAAMuC,KAAMpR,KAAK4e,MAAM/P,QAyC5Cq4D,GAAsB/F,UAAYn/D,OAAOo+E,OAAQ/9D,GAAS8+C,WAC1D+F,GAAsB/F,UAAUnJ,YAAckP,GAE9CA,GAAsB/F,UAAUzzC,QAAU,WAEzC1tB,KAAKwd,SAAU,GAAIvD,SAASyT,UAC5B1tB,KAAKwd,SAAU,GAAIrI,SAASuY,WAI7Bw5C,GAAsB/F,UAAUvkD,OAAS,WAExC,GAAIwL,GAAS,GAAIjnB,GAEbulE,EAAS,GAAIh7D,GACbi7D,EAAS,GAAIj7D,EAEjB,OAAO,YAEN,GAAIyyF,GAAOn+F,KAAKwd,SAAU,EAE1B,QAAoBtc,KAAflB,KAAK6O,MAET7O,KAAKmV,SAAStG,MAAMhH,IAAK7H,KAAK6O,WAExB,CAEN,GAAIuV,GAAS+5E,EAAKlkF,SAASmtD,aAAc,QAEzCV,GAAOt1D,KAAMpR,KAAK4e,MAAM/P,OACxB83D,EAAOv1D,KAAMpR,KAAK4e,MAAM6R,YAExB,KAAM,GAAIzqB,GAAI,EAAG8K,EAAIsT,EAAO5C,MAAOxb,EAAI8K,EAAG9K,IAAO,CAEhD,GAAI6I,GAAU7I,EAAM8K,EAAI,EAAQ41D,EAASC,CAEzCviD,GAAOqzD,OAAQzxE,EAAG6I,EAAMjJ,EAAGiJ,EAAM3H,EAAG2H,EAAM1H,GAI3Cid,EAAOrR,aAAc,EAItBorF,EAAK1+E,OAAQ2I,EAAO9I,sBAAuBtf,KAAK4e,MAAM5N,aAAcogE,cA+CtE/J,GAAWlG,UAAYn/D,OAAOo+E,OAAQ13B,GAAayY,WACnDkG,GAAWlG,UAAUnJ,YAAcqP,GAsFnCI,GAAgBtG,UAAYn/D,OAAOo+E,OAAQ13B,GAAayY,WACxDsG,GAAgBtG,UAAUnJ,YAAcyP,GAoDxCG,GAAkBzG,UAAYn/D,OAAOo+E,OAAQ13B,GAAayY,WAC1DyG,GAAkBzG,UAAUnJ,YAAc4P,GAE1CA,GAAkBzG,UAAUvkD,OAAW,WAEtC,GAAIi+C,GAAK,GAAI15D,GACTw6D,EAAK,GAAIx6D,GACT8hB,EAAe,GAAI7hB,EAEvB,OAAO,YAENpB,KAAK4Z,OAAO8F,mBAAmB,GAE/BuD,EAAa0vB,gBAAiB3yC,KAAK4Z,OAAO5I,YAgB1C,KAAM,GAdFA,GAAchR,KAAK4Z,OAAO5I,YAE1BiC,EAAWjT,KAAKia,SAAS5L,WAAW4E,SAIpCizD,EAAclmE,KAAK4Z,OAAOK,SAE1B5N,EAAW65D,EAAY75D,SAEvBC,EAAQ45D,EAAY55D,MAEpBkyF,EAAM,EAEAx4F,EAAI,EAAG8K,EAAIxE,EAAM9L,OAAQwF,EAAI8K,EAAG9K,IAAO,CAEhD,GAAI8Z,GAAOxT,EAAOtG,GAEd6S,EAASiH,EAAKjH,MAElBgiD,GAAGzpD,KAAM/E,EAAUyT,EAAK3L,IACtB4L,IAAK1T,EAAUyT,EAAK3Y,IACpB4Y,IAAK1T,EAAUyT,EAAKgE,IACpBooC,aAAc,GACdj7C,aAAcD,GAEhB2qD,EAAGvqD,KAAMyH,GAASg4D,aAAc5tD,GAAekQ,YAAY1B,eAAgBzxB,KAAKoJ,MAAO2W,IAAK86C,GAE5F5nD,EAASwkE,OAAQ+mB,EAAK3jC,EAAG16D,EAAG06D,EAAGz6D,EAAGy6D,EAAGj6D,GAErC49F,GAAY,EAEZvrF,EAASwkE,OAAQ+mB,EAAK7iC,EAAGx7D,EAAGw7D,EAAGv7D,EAAGu7D,EAAG/6D,GAErC49F,GAAY,EAIbvrF,EAASF,aAAc,MAkDzB80D,GAAuB1G,UAAYn/D,OAAOo+E,OAAQ/9D,GAAS8+C,WAC3D0G,GAAuB1G,UAAUnJ,YAAc6P,GAE/CA,GAAuB1G,UAAUzzC,QAAU,WAE1C1tB,KAAK8nE,WAAW7tD,SAASyT,UACzB1tB,KAAK8nE,WAAW3yD,SAASuY,UACzB1tB,KAAK+nE,WAAW9tD,SAASyT,UACzB1tB,KAAK+nE,WAAW5yD,SAASuY,WAI1Bm6C,GAAuB1G,UAAUvkD,OAAS,WAEzC,GAAIi+C,GAAK,GAAI15D,GACTw6D,EAAK,GAAIx6D,GACTu7D,EAAK,GAAIv7D,EAEb,OAAO,YAEN05D,EAAGv7C,sBAAuBtf,KAAK4e,MAAM5N,aACrC2qD,EAAGr8C,sBAAuBtf,KAAK4e,MAAMY,OAAOxO,aAC5C0rD,EAAGhS,WAAYiR,EAAId,GAEnB76D,KAAK8nE,WAAWroD,OAAQi9C,OAEJx7D,KAAflB,KAAK6O,OAET7O,KAAK8nE,WAAW3yD,SAAStG,MAAMhH,IAAK7H,KAAK6O,OACzC7O,KAAK+nE,WAAW5yD,SAAStG,MAAMhH,IAAK7H,KAAK6O,SAIzC7O,KAAK8nE,WAAW3yD,SAAStG,MAAMuC,KAAMpR,KAAK4e,MAAM/P,OAChD7O,KAAK+nE,WAAW5yD,SAAStG,MAAMuC,KAAMpR,KAAK4e,MAAM/P,QAIjD7O,KAAK+nE,WAAWtoD,OAAQi9C,GACxB18D,KAAK+nE,WAAWj5D,MAAMlO,EAAI87D,EAAGl8D,aAwH/BwnE,GAAa7G,UAAYn/D,OAAOo+E,OAAQ13B,GAAayY,WACrD6G,GAAa7G,UAAUnJ,YAAcgQ,GAErCA,GAAa7G,UAAUvkD,OAAS,WAO/B,QAASmiH,GAAU9rG,EAAO9yB,EAAGC,EAAGQ,GAE/BwnB,EAAOvgB,IAAK1H,EAAGC,EAAGQ,GAAIusE,UAAWv9D,EAEjC,IAAI+e,GAASw5C,EAAUl1C,EAEvB,QAAgB/xB,KAAXytB,EAIJ,IAAM,GAFF1b,GAAWgH,EAASmtD,aAAc,YAE5BphE,EAAI,EAAG8K,EAAI6d,EAAOnuB,OAAQwF,EAAI8K,EAAG9K,IAE1CiN,EAASwkE,OAAQ9oD,EAAQ3oB,GAAKoiB,EAAOjoB,EAAGioB,EAAOhoB,EAAGgoB,EAAOxnB,GAjB5D,GAAIqZ,GAAUkuD,EAEV//C,EAAS,GAAIjnB,GACbyO,EAAS,GAAIyT,GAsBjB,OAAO,YAENpJ,EAAWja,KAAKia,SAChBkuD,EAAWnoE,KAAKmoE,QAOhBv4D,GAAOuB,iBAAiBC,KAAMpR,KAAK4P,OAAOuB,kBAI1C4tH,EAAU,IAAK,EAAG,GAAK,GACvBA,EAAU,IAAK,EAAG,EAAG,GAIrBA,EAAU,MAdF,GAAO,GAca,GAC5BA,EAAU,KAfF,GAAO,GAeW,GAC1BA,EAAU,MAhBF,EAAO,GAgBW,GAC1BA,EAAU,KAjBF,EAAO,GAiBS,GAIxBA,EAAU,MArBF,GAAO,EAqBW,GAC1BA,EAAU,KAtBF,GAAO,EAsBS,GACxBA,EAAU,MAvBF,EAAO,EAuBS,GACxBA,EAAU,KAxBF,EAAO,EAwBO,GAItBA,EAAU,KAAMl+H,GAASg5E,KAAW,GACpCklD,EAAU,MAAM,GAAWllD,KAAW,GACtCklD,EAAU,KAAM,EAAGllD,GAAS,GAI5BklD,EAAU,OAlCF,EAkCc,EAAG,GACzBA,EAAU,MAnCF,EAmCY,EAAG,GACvBA,EAAU,MAAO,GApCF,EAoCU,GACzBA,EAAU,MAAO,EArCF,EAqCQ,GAEvBA,EAAU,OAvCF,EAuCc,GAAK,GAC3BA,EAAU,MAxCF,EAwCY,GAAK,GACzBA,EAAU,MAAO,GAzCF,GAyCY,GAC3BA,EAAU,MAAO,EA1CF,GA0CU,GAEzB9kH,EAASmtD,aAAc,YAAar0D,aAAc,MAgCpD21D,GAAUvH,UAAYn/D,OAAOo+E,OAAQ13B,GAAayY,WAClDuH,GAAUvH,UAAUnJ,YAAc0Q,GAElCA,GAAUvH,UAAUvkD,OAAS,WAE5B,GAAIgsD,GAAM,GAAInwD,GAEd,OAAO,UAAiBmB,GAcvB,OAZgB1Y,KAAX0Y,GAEJnZ,QAAQqa,KAAM,2DAIM5Z,KAAhBlB,KAAK4Z,QAETgvD,EAAIh5C,cAAe5vB,KAAK4Z,SAIpBgvD,EAAI+qB,UAAT,CAEA,GAAI9nF,GAAM+8D,EAAI/8D,IACVC,EAAM88D,EAAI98D,IAkBVmH,EAAWjT,KAAKia,SAAS5L,WAAW4E,SACpC1N,EAAQ0N,EAAS1N,KAErBA,GAAO,GAAMuG,EAAI3L,EAAGoF,EAAO,GAAMuG,EAAI1L,EAAGmF,EAAO,GAAMuG,EAAIlL,EACzD2E,EAAO,GAAMsG,EAAI1L,EAAGoF,EAAO,GAAMuG,EAAI1L,EAAGmF,EAAO,GAAMuG,EAAIlL,EACzD2E,EAAO,GAAMsG,EAAI1L,EAAGoF,EAAO,GAAMsG,EAAIzL,EAAGmF,EAAO,GAAMuG,EAAIlL,EACzD2E,EAAO,GAAMuG,EAAI3L,EAAGoF,EAAO,IAAOsG,EAAIzL,EAAGmF,EAAO,IAAOuG,EAAIlL,EAC3D2E,EAAO,IAAOuG,EAAI3L,EAAGoF,EAAO,IAAOuG,EAAI1L,EAAGmF,EAAO,IAAOsG,EAAIjL,EAC5D2E,EAAO,IAAOsG,EAAI1L,EAAGoF,EAAO,IAAOuG,EAAI1L,EAAGmF,EAAO,IAAOsG,EAAIjL,EAC5D2E,EAAO,IAAOsG,EAAI1L,EAAGoF,EAAO,IAAOsG,EAAIzL,EAAGmF,EAAO,IAAOsG,EAAIjL,EAC5D2E,EAAO,IAAOuG,EAAI3L,EAAGoF,EAAO,IAAOsG,EAAIzL,EAAGmF,EAAO,IAAOsG,EAAIjL,EAE5DqS,EAASF,aAAc,EAEvB/S,KAAKia,SAAS4uD,6BAMhBH,GAAUvH,UAAUvxC,cAAgB,SAAWhW,GAK9C,MAHA5Z,MAAK4Z,OAASA,EACd5Z,KAAK4c,SAEE5c,MAgCR2oE,GAAWxH,UAAYn/D,OAAOo+E,OAAQ13B,GAAayY,WACnDwH,GAAWxH,UAAUnJ,YAAc2Q,GAEnCA,GAAWxH,UAAUzhD,kBAAoB,SAAWk7E,GAEnD,GAAIhyB,GAAM5oE,KAAK4oE,GAEVA,GAAI+qB,YAET/qB,EAAIgrB,UAAW5zF,KAAKiT,UAEpB21D,EAAIl5B,QAAS1vC,KAAK8O,OAElB9O,KAAK8O,MAAM2iB,eAAgB,IAE3BpP,GAAS8+C,UAAUzhD,kBAAkBhb,KAAM1E,KAAM46F,KAsClD9xB,GAAY3H,UAAYn/D,OAAOo+E,OAAQ33B,GAAK0Y,WAC5C2H,GAAY3H,UAAUnJ,YAAc8Q,GAEpCA,GAAY3H,UAAUzhD,kBAAoB,SAAWk7E,GAEpD,GAAI9rF,IAAU9O,KAAK6yC,MAAM/5B,QAEpB2P,MAAKmF,IAAK9e,GAAU,OAAOA,EAAQ,MAExC9O,KAAK8O,MAAMjH,IAAK,GAAM7H,KAAKoJ,KAAM,GAAMpJ,KAAKoJ,KAAM0F,GAElD9O,KAAKyf,OAAQzf,KAAK6yC,MAAMh6B,QAExBwJ,GAAS8+C,UAAUzhD,kBAAkBhb,KAAM1E,KAAM46F,GAoBlD,IAAIxxB,IACAC,EAsCJL,IAAY7H,UAAYn/D,OAAOo+E,OAAQ/9D,GAAS8+C,WAChD6H,GAAY7H,UAAUnJ,YAAcgR,GAEpCA,GAAY7H,UAAUoI,aAAiB,WAEtC,GACIyG,GADA8I,EAAO,GAAI33E,EAGf,OAAO,UAAuB8nE,GAIxBA,EAAI7oE,EAAI,OAEZJ,KAAKuiB,WAAW1a,IAAK,EAAG,EAAG,EAAG,GAEnBohE,EAAI7oE,GAAM,OAErBJ,KAAKuiB,WAAW1a,IAAK,EAAG,EAAG,EAAG,IAI9BixE,EAAKjxE,IAAKohE,EAAIroE,EAAG,GAAKqoE,EAAI9oE,GAAIgzB,YAE9B68C,EAAUvnD,KAAKk2D,KAAM1V,EAAI7oE,GAEzBJ,KAAKuiB,WAAW84D,iBAAkBvC,EAAM9I,QAQ3ChH,GAAY7H,UAAUqI,UAAY,SAAWhpE,EAAQ0oE,EAAYC,OAE5CjoE,KAAfgoE,IAA2BA,EAAa,GAAM1oE,OAChCU,KAAdioE,IAA0BA,EAAY,GAAMD,GAEjDlpE,KAAKinE,KAAKn4D,MAAMjH,IAAK,EAAG4gB,KAAK3c,IAAK,EAAGtL,EAAS0oE,GAAc,GAC5DlpE,KAAKinE,KAAKjQ,eAEVh3D,KAAKqmE,KAAKv3D,MAAMjH,IAAKshE,EAAWD,EAAYC,GAC5CnpE,KAAKqmE,KAAKpzD,SAAS7S,EAAII,EACvBR,KAAKqmE,KAAKrP,gBAIXgS,GAAY7H,UAAU69D,SAAW,SAAWnwH,GAE3C7O,KAAKinE,KAAK9xD,SAAStG,MAAMuC,KAAMvC,GAC/B7O,KAAKqmE,KAAKlxD,SAAStG,MAAMuC,KAAMvC,IAmChC46D,GAAWtI,UAAYn/D,OAAOo+E,OAAQ13B,GAAayY,WACnDsI,GAAWtI,UAAUnJ,YAAcyR,EAiFnC,IAAImO,IAAM,GAAIz2E,GACVoqG,GAAK,GAAI7hC,IACT8hC,GAAK,GAAI9hC,IACTu1D,GAAK,GAAIv1D,GAebe,IAAiBtJ,UAAYn/D,OAAOo+E,OAAQ5kB,GAAM2F,WAClDsJ,GAAiBtJ,UAAUnJ,YAAcyS,GAEzCA,GAAiBtJ,UAAU+9D,oBAAqB,EAEhDz0D,GAAiBtJ,UAAU8lD,SAAW,SAAWh6D,EAAGu9B,GAEnD,GAAIv3D,GAAQu3D,GAAkB,GAAIrpF,GAE9BwtB,EAAS3uB,KAAK2uB,OACd7d,EAAI6d,EAAOnuB,OAEXu9B,GAAMjtB,GAAM9Q,KAAKutD,OAAS,EAAI,IAAQN,EACtCs8D,EAAW9gG,KAAKC,MAAOqV,GACvB0lC,EAAS1lC,EAAIwrF,CAEZvpH,MAAKutD,OAETg8D,GAAYA,EAAW,EAAI,GAAM9gG,KAAKC,MAAOD,KAAKmF,IAAK27F,GAAa56F,EAAOnuB,QAAW,GAAMmuB,EAAOnuB,OAE7E,IAAXijE,GAAgB8lD,IAAaz4G,EAAI,IAE5Cy4G,EAAWz4G,EAAI,EACf2yD,EAAS,EAIV,IAAIzqD,GAAIC,EAAIC,EAAIC,CA6BhB,IA3BKnZ,KAAKutD,QAAUg8D,EAAW,EAE9BvwG,EAAK2V,GAAU46F,EAAW,GAAMz4G,IAKhC8mE,GAAIltB,WAAY/7B,EAAQ,GAAKA,EAAQ,IAAM5O,IAAK4O,EAAQ,IACxD3V,EAAK4+D,IAIN3+D,EAAK0V,EAAQ46F,EAAWz4G,GACxBoI,EAAKyV,GAAU46F,EAAW,GAAMz4G,GAE3B9Q,KAAKutD,QAAUg8D,EAAW,EAAIz4G,EAElCqI,EAAKwV,GAAU46F,EAAW,GAAMz4G,IAKhC8mE,GAAIltB,WAAY/7B,EAAQ7d,EAAI,GAAK6d,EAAQ7d,EAAI,IAAMiP,IAAK4O,EAAQ7d,EAAI,IACpEqI,EAAKy+D,IAIkB,gBAAnB53E,KAAK0qE,WAAkD,YAAnB1qE,KAAK0qE,UAA0B,CAGvE,GAAIzf,GAAyB,YAAnBjrD,KAAK0qE,UAA0B,GAAM,IAC3CL,EAAM5hD,KAAKwiC,IAAKjyC,EAAGw4D,kBAAmBv4D,GAAMgyC,GAC5Cqf,EAAM7hD,KAAKwiC,IAAKhyC,EAAGu4D,kBAAmBt4D,GAAM+xC,GAC5Csf,EAAM9hD,KAAKwiC,IAAK/xC,EAAGs4D,kBAAmBr4D,GAAM8xC,EAG3Cqf,GAAM,OAAOA,EAAM,GACnBD,EAAM,OAAOA,EAAMC,GACnBC,EAAM,OAAOA,EAAMD,GAExBihC,GAAGnhC,yBAA0BpxD,EAAG7Y,EAAG8Y,EAAG9Y,EAAG+Y,EAAG/Y,EAAGgZ,EAAGhZ,EAAGkqE,EAAKC,EAAKC,GAC/DihC,GAAGphC,yBAA0BpxD,EAAG5Y,EAAG6Y,EAAG7Y,EAAG8Y,EAAG9Y,EAAG+Y,EAAG/Y,EAAGiqE,EAAKC,EAAKC,GAC/D00D,GAAG70D,yBAA0BpxD,EAAGpY,EAAGqY,EAAGrY,EAAGsY,EAAGtY,EAAGuY,EAAGvY,EAAGypE,EAAKC,EAAKC,OAEjC,eAAnBvqE,KAAK0qE,YAEhB6gC,GAAGthC,eAAgBjxD,EAAG7Y,EAAG8Y,EAAG9Y,EAAG+Y,EAAG/Y,EAAGgZ,EAAGhZ,EAAGH,KAAKmqE,SAChDqhC,GAAGvhC,eAAgBjxD,EAAG5Y,EAAG6Y,EAAG7Y,EAAG8Y,EAAG9Y,EAAG+Y,EAAG/Y,EAAGJ,KAAKmqE,SAChD80D,GAAGh1D,eAAgBjxD,EAAGpY,EAAGqY,EAAGrY,EAAGsY,EAAGtY,EAAGuY,EAAGvY,EAAGZ,KAAKmqE,SAUjD,OANAl3C,GAAMprB,IACL0jG,GAAG/gC,KAAM/G,GACT+nC,GAAGhhC,KAAM/G,GACTw7D,GAAGz0D,KAAM/G,IAGHxwC,GAIRw3C,GAAiBtJ,UAAU/vD,KAAO,SAAWy8D,GAE5CrS,GAAM2F,UAAU/vD,KAAK1M,KAAM1E,KAAM6tE,GAEjC7tE,KAAK2uB,SAEL,KAAM,GAAI3oB,GAAI,EAAG8K,EAAI+8D,EAAOl/C,OAAOnuB,OAAQwF,EAAI8K,EAAG9K,IAAO,CAExD,GAAIitB,GAAQ46C,EAAOl/C,OAAQ3oB,EAE3BhG,MAAK2uB,OAAOpkB,KAAM0oB,EAAMxX,SAQzB,MAJAzb,MAAKutD,OAASsgB,EAAOtgB,OACrBvtD,KAAK0qE,UAAYmD,EAAOnD,UACxB1qE,KAAKmqE,QAAU0D,EAAO1D,QAEfnqE,MAiBR2qE,GAAkBxJ,UAAYn/D,OAAOo+E,OAAQ5kB,GAAM2F,WACnDwJ,GAAkBxJ,UAAUnJ,YAAc2S,GAE1CA,GAAkBxJ,UAAUg+D,qBAAsB,EAElDx0D,GAAkBxJ,UAAU8lD,SAAW,SAAWh6D,EAAGu9B,GAEpD,GAAIv3D,GAAQu3D,GAAkB,GAAIrpF,GAE9By5D,EAAK56D,KAAK46D,GAAIC,EAAK76D,KAAK66D,GAAIc,EAAK37D,KAAK27D,GAAIe,EAAK18D,KAAK08D,EAQxD,OANAzpC,GAAMprB,IACL0zD,GAAatO,EAAG2N,EAAGz6D,EAAG06D,EAAG16D,EAAGw7D,EAAGx7D,EAAGu8D,EAAGv8D,GACrCo7D,GAAatO,EAAG2N,EAAGx6D,EAAGy6D,EAAGz6D,EAAGu7D,EAAGv7D,EAAGs8D,EAAGt8D,GACrCm7D,GAAatO,EAAG2N,EAAGh6D,EAAGi6D,EAAGj6D,EAAG+6D,EAAG/6D,EAAG87D,EAAG97D,IAG/BqyB,GAIR03C,GAAkBxJ,UAAU/vD,KAAO,SAAWy8D,GAS7C,MAPArS,IAAM2F,UAAU/vD,KAAK1M,KAAM1E,KAAM6tE,GAEjC7tE,KAAK46D,GAAGxpD,KAAMy8D,EAAOjT,IACrB56D,KAAK66D,GAAGzpD,KAAMy8D,EAAOhT,IACrB76D,KAAK27D,GAAGvqD,KAAMy8D,EAAOlS,IACrB37D,KAAK08D,GAAGtrD,KAAMy8D,EAAOnR,IAEd18D,MAgBR4qE,GAAsBzJ,UAAYn/D,OAAOo+E,OAAQ5kB,GAAM2F,WACvDyJ,GAAsBzJ,UAAUnJ,YAAc4S,GAE9CA,GAAsBzJ,UAAUi+D,yBAA0B,EAE1Dx0D,GAAsBzJ,UAAU8lD,SAAW,SAAWh6D,EAAGu9B,GAExD,GAAIv3D,GAAQu3D,GAAkB,GAAIrpF,GAE9By5D,EAAK56D,KAAK46D,GAAIC,EAAK76D,KAAK66D,GAAIc,EAAK37D,KAAK27D,EAQ1C,OANA1oC,GAAMprB,IACLqzD,GAAiBjO,EAAG2N,EAAGz6D,EAAG06D,EAAG16D,EAAGw7D,EAAGx7D,GACnC+6D,GAAiBjO,EAAG2N,EAAGx6D,EAAGy6D,EAAGz6D,EAAGu7D,EAAGv7D,GACnC86D,GAAiBjO,EAAG2N,EAAGh6D,EAAGi6D,EAAGj6D,EAAG+6D,EAAG/6D,IAG7BqyB,GAIR23C,GAAsBzJ,UAAU/vD,KAAO,SAAWy8D,GAQjD,MANArS,IAAM2F,UAAU/vD,KAAK1M,KAAM1E,KAAM6tE,GAEjC7tE,KAAK46D,GAAGxpD,KAAMy8D,EAAOjT,IACrB56D,KAAK66D,GAAGzpD,KAAMy8D,EAAOhT,IACrB76D,KAAK27D,GAAGvqD,KAAMy8D,EAAOlS,IAEd37D,MAeR6qE,GAAW1J,UAAYn/D,OAAOo+E,OAAQ5kB,GAAM2F,WAC5C0J,GAAW1J,UAAUnJ,YAAc6S,GAEnCA,GAAW1J,UAAUk+D,cAAe,EAEpCx0D,GAAW1J,UAAU8lD,SAAW,SAAWh6D,EAAGu9B,GAE7C,GAAIv3D,GAAQu3D,GAAkB,GAAIrpF,EAalC,OAXW,KAAN8rD,EAEJh6B,EAAM7hB,KAAMpR,KAAK27D,KAIjB1oC,EAAM7hB,KAAMpR,KAAK27D,IAAKhqC,IAAK3xB,KAAK66D,IAChC5nC,EAAMxB,eAAgBw7B,GAAIltC,IAAK/f,KAAK66D,KAI9B5nC,GAMR43C,GAAW1J,UAAUpT,WAAa,SAAW3mC,EAAGojE,GAE/C,MAAOxqF,MAAKinH,SAAU7/F,EAAGojE,IAI1B3f,GAAW1J,UAAU/vD,KAAO,SAAWy8D,GAOtC,MALArS,IAAM2F,UAAU/vD,KAAK1M,KAAM1E,KAAM6tE,GAEjC7tE,KAAK66D,GAAGzpD,KAAMy8D,EAAOhT,IACrB76D,KAAK27D,GAAGvqD,KAAMy8D,EAAOlS,IAEd37D,MAYR8qE,GAAS3J,UAAYn/D,OAAOo+E,OAAQrkB,GAAaoF,WACjD2J,GAAS3J,UAAUnJ,YAAc8S,GAEjCA,GAAS3J,UAAUm+D,YAAa,CAMhC,IAAIC,KAEHC,0BAA2B,SAAWvlH,EAAUixD,GAI/C,IAAM,GAFFhuD,GAAQ,GAAI2rC,IAEN7iD,EAAI,EAAG8K,EAAIo6D,EAAU1qE,OAAQwF,EAAI8K,EAAG9K,IAE7CkX,EAAM6C,IAAK,GAAIkL,IAAMhR,EAAUixD,EAAWllE,IAI3C,OAAOkX,IAIRuiH,OAAQ,SAAWrlC,EAAOx3E,EAAQjT,GAEjCyqF,EAAMnB,YAAar2E,EAAO5R,aAC1B4R,EAAOf,OAAQu4E,GACfzqF,EAAMoQ,IAAKq6E,IAIZslC,OAAQ,SAAWtlC,EAAOzqF,EAAOiT,GAEhCw3E,EAAMnB,aAAa,GAAI54F,IAAU2wC,WAAYpuB,EAAO5R,cAEpDrB,EAAMkS,OAAQu4E,GACdx3E,EAAO7C,IAAKq6E,IAuKd5+B,IAAM4kB,OAAS,SAAWu/C,EAAW1Y,GAQpC,MANAxmH,SAAQo6B,IAAK,4CAEb8kG,EAAUx+D,UAAYn/D,OAAOo+E,OAAQ5kB,GAAM2F,WAC3Cw+D,EAAUx+D,UAAUnJ,YAAc2nE,EAClCA,EAAUx+D,UAAU8lD,SAAWA,EAExB0Y,GAMR39H,OAAO2rE,OAAQ/R,GAAUuF,WAExBy+D,qBAAsB,SAAWt4D,GAEhC7mE,QAAQqa,KAAM,uHAId,IAAI42F,GAAM1xG,KAAKmnH,UAAW7/C,EAC1B,OAAOtnE,MAAK6/H,eAAgBnuB,IAI7BouB,2BAA4B,SAAWx4D,GAEtC7mE,QAAQqa,KAAM,6HAId,IAAI42F,GAAM1xG,KAAKo1G,gBAAiB9tC,EAChC,OAAOtnE,MAAK6/H,eAAgBnuB,IAI7BmuB,eAAgB,SAAWlxG,GAE1BluB,QAAQqa,KAAM,iHAId,KAAM,GAFFb,GAAW,GAAIiK,IAETle,EAAI,EAAG8K,EAAI6d,EAAOnuB,OAAQwF,EAAI8K,EAAG9K,IAAO,CAEjD,GAAIitB,GAAQtE,EAAQ3oB,EACpBiU,GAAS5N,SAAS9B,KAAM,GAAIpJ,GAAS8xB,EAAM9yB,EAAG8yB,EAAM7yB,EAAG6yB,EAAMryB,GAAK,IAInE,MAAOqZ,MAQTjY,OAAO2rE,OAAQ/Q,GAAKuE,WAEnB4+D,WAAY,SAAWpxG,GAEtBluB,QAAQqa,KAAM,mEACd9a,KAAK88D,cAAenuC,MAkBtB29C,GAAmBnL,UAAYn/D,OAAOo+E,OAAQ3V,GAAiBtJ,WAa/DoL,GAAapL,UAAYn/D,OAAOo+E,OAAQ3V,GAAiBtJ,WAazDqL,GAAOrL,UAAYn/D,OAAOo+E,OAAQ3V,GAAiBtJ,WAEnDn/D,OAAO2rE,OAAQnB,GAAOrL,WAErB6+D,cAAe,WAEdv/H,QAAQC,MAAO,qDAGhBu/H,sBAAuB,WAEtBx/H,QAAQC,MAAO,6DAGhBw/H,yBAA0B,WAEzBz/H,QAAQC,MAAO,kEA6BjB2mE,GAAWlG,UAAUg/D,UAAY,WAEhC1/H,QAAQC,MAAO,6FAIhB+lE,GAAetF,UAAUvkD,OAAS,WAEjCnc,QAAQC,MAAO,iEA6BhBsB,OAAO2rE,OAAQ/hE,EAAKu1D,WAEnBj+D,OAAQ,SAAWsnF,GAGlB,MADA/pF,SAAQqa,KAAM,2DACP9a,KAAK4zF,UAAWpJ,IAGxBwL,MAAO,WAGN,MADAv1F,SAAQqa,KAAM,wDACP9a,KAAK2zF,WAGbysC,kBAAmB,SAAWx3D,GAG7B,MADAnoE,SAAQqa,KAAM,0EACP9a,KAAKg0F,cAAeprB,IAG5Bx/D,KAAM,SAAWohF,GAGhB,MADA/pF,SAAQqa,KAAM,uDACP9a,KAAK0vC,QAAS86C,MAKvBxoF,OAAO2rE,OAAQl1D,GAAK0oD,WAEnBj+D,OAAQ,SAAWsnF,GAGlB,MADA/pF,SAAQqa,KAAM,2DACP9a,KAAK4zF,UAAWpJ,IAGxBwL,MAAO,WAGN,MADAv1F,SAAQqa,KAAM,wDACP9a,KAAK2zF,WAGbysC,kBAAmB,SAAWx3D,GAG7B,MADAnoE,SAAQqa,KAAM,0EACP9a,KAAKg0F,cAAeprB,IAG5By3D,qBAAsB,SAAW1qC,GAGhC,MADAl1F,SAAQqa,KAAM,gFACP9a,KAAKy1F,iBAAkBE,IAG/BvsF,KAAM,SAAWohF,GAGhB,MADA/pF,SAAQqa,KAAM,uDACP9a,KAAK0vC,QAAS86C,MAKvB1/D,GAAMq2C,UAAUj+D,OAAS,SAAWsnF,GAGnC,MADA/pF,SAAQqa,KAAM,4DACP9a,KAAK4zF,UAAWpJ,IAIxBxoF,OAAO2rE,OAAQtrE,IAEdi+H,SAAU,WAGT,MADA7/H,SAAQqa,KAAM,2EACP2N,KAAKyC,UAIbq1G,kBAAmB,SAAWr+H,GAG7B,MADAzB,SAAQqa,KAAM,4EACPzY,GAAM28B,gBAAiB98B,IAI/Bs+H,eAAgB,SAAWt+H,GAG1B,MADAzB,SAAQqa,KAAM,wEACPzY,GAAMm8C,eAAgBt8C,MAM/BF,OAAO2rE,OAAQvsE,EAAQ+/D,WAEtBs/D,qBAAsB,SAAWl7H,EAAOvC,GAGvC,MADAvC,SAAQqa,KAAM,uFACP9a,KAAK+F,QAASR,EAAOvC,IAG7B09H,gBAAiB,SAAWt4G,GAG3B,MADA3nB,SAAQqa,KAAM,kGACPsN,EAAOyoD,aAAc7wE,OAG7B2gI,qBAAsB,WAErBlgI,QAAQC,MAAO,6DAGhBkgI,cAAe,SAAWngH,GAGzB,MADAhgB,SAAQqa,KAAM,6GACP9a,KAAKu3E,uBAAwB92D,IAGrCogH,oBAAqB,WAEpBpgI,QAAQC,MAAO,8DAMjBsB,OAAO2rE,OAAQttE,EAAQ8gE,WAEtB2/D,gBAAiB,SAAW/xD,GAG3B,MADAtuE,SAAQqa,KAAM,0EACP9a,KAAKssB,aAAcyiD,IAG3B0xD,qBAAsB,SAAWl7H,EAAOvC,GAGvC,MADAvC,SAAQqa,KAAM,uFACP9a,KAAK+F,QAASR,EAAOvC,IAG7B+9H,YAAa,WAEZ,GAAIlmE,EAEJ,OAAO,YAIN,WAFY35D,KAAP25D,IAAmBA,EAAK,GAAI15D,IACjCV,QAAQqa,KAAM,wGACP+/C,EAAGyY,oBAAqBtzE,KAAM,OAKvCq5F,0BAA2B,SAAW5qC,GAGrC,MADAhuD,SAAQqa,KAAM,kGACP9a,KAAK00E,2BAA4BjmB,IAGzCuyE,gBAAiB,WAEhBvgI,QAAQqa,KAAM,wDAGf4lH,gBAAiB,SAAWt4G,GAG3B,MADA3nB,SAAQqa,KAAM,kGACPsN,EAAOnX,aAAcjR,OAG7BihI,gBAAiB,SAAW74G,GAG3B,MADA3nB,SAAQqa,KAAM,kGACPsN,EAAOnX,aAAcjR,OAG7B2gI,qBAAsB,WAErBlgI,QAAQC,MAAO,6DAGhBwgI,WAAY,SAAW16H,GAEtB/F,QAAQqa,KAAM,oGACdtU,EAAEorB,mBAAoB5xB,OAGvBmhI,YAAa,SAAW/4G,GAGvB,MADA3nB,SAAQqa,KAAM,8FACPsN,EAAOnX,aAAcjR,OAG7BspE,UAAW,WAEV7oE,QAAQC,MAAO,kDAGhB+4F,QAAS,WAERh5F,QAAQC,MAAO,gDAGhBymE,QAAS,WAER1mE,QAAQC,MAAO,gDAGhBg5F,QAAS,WAERj5F,QAAQC,MAAO,gDAGhB0gI,aAAc,WAEb3gI,QAAQC,MAAO,qDAGhBkgI,cAAe,SAAWngH,GAGzB,MADAhgB,SAAQqa,KAAM,6GACP9a,KAAKu3E,uBAAwB92D,IAGrCogH,oBAAqB,WAEpBpgI,QAAQC,MAAO,4DAGhB2gI,YAAa,SAAW99G,EAAMC,EAAOE,EAAQD,EAAK5O,EAAMC,GAGvD,MADArU,SAAQqa,KAAM,wHACP9a,KAAK25E,gBAAiBp2D,EAAMC,EAAOC,EAAKC,EAAQ7O,EAAMC,MAM/D8D,GAAMuoD,UAAUmgE,mBAAqB,SAAWr6D,GAG/C,MADAxmE,SAAQqa,KAAM,6EACP9a,KAAK42F,eAAgB3vB,IAI7BtmE,EAAWwgE,UAAUu/D,gBAAkB,SAAWt4G,GAGjD,MADA3nB,SAAQqa,KAAM,mHACPsN,EAAOm1D,gBAAiBv9E,OAIhCgC,OAAO2rE,OAAQhjD,GAAIw2C,WAElBi/D,kBAAmB,SAAWx3D,GAG7B,MADAnoE,SAAQqa,KAAM,yEACP9a,KAAKg0F,cAAeprB,IAG5B24D,oBAAqB,SAAW1uF,GAG/B,MADApyC,SAAQqa,KAAM,6EACP9a,KAAK41F,gBAAiB/iD,IAG9BwtF,qBAAsB,SAAW1qC,GAGhC,MADAl1F,SAAQqa,KAAM,+EACP9a,KAAKy1F,iBAAkBE,MAMhC3zF,OAAO2rE,OAAQ5Q,GAAMoE,WAEpBqgE,iBAAkB,SAAWl6D,GAG5B,MADA7mE,SAAQqa,KAAM,oFACP9a,KAAK0yD,cAAe4U,IAG5Bm6D,QAAS,SAAWx9H,GAGnB,MADAxD,SAAQqa,KAAM,4EACP,GAAI40C,IAAiB1vD,KAAMiE,IAGnCy9H,aAAc,SAAWz9H,GAGxB,MADAxD,SAAQqa,KAAM,+EACP,GAAIs3C,IAAepyD,KAAMiE,MAMlCjC,OAAO2rE,OAAQztE,EAAQihE,WAEtBwgE,cAAe,SAAWvhH,EAAWqG,EAAOzjB,GAG3C,MADAvC,SAAQqa,KAAM,+EACP9a,KAAKiqD,oBAAqB7pC,EAAWqG,EAAOzjB,IAGpD4+H,oBAAqB,SAAWp7H,GAG/B,MADA/F,SAAQqa,KAAM,qFACP9a,KAAK2xE,oBAAqBnrE,IAGlCq7H,gBAAiB,WAGhB,MADAphI,SAAQqa,KAAM,6EACP9a,KAAKsxE,qBAMdtvE,OAAO2rE,OAAQxsE,EAAQggE,WAEtB2gE,2BAA4B,WAE3BrhI,QAAQC,MAAO,8GAGhBqhI,uBAAwB,WAEvBthI,QAAQC,MAAO,sGAGhBshI,sBAAuB,SAAWjzD,GAGjC,MADAtuE,SAAQqa,KAAM,yFACP9a,KAAKsf,sBAAuByvD,IAGpCkzD,mBAAoB,SAAWlzD,GAG9B,MADAtuE,SAAQqa,KAAM,mFACP9a,KAAKg/E,mBAAoBjQ,IAGjCmzD,oBAAqB,SAAWz7G,EAAOpjB,GAGtC,MADA5C,SAAQqa,KAAM,qFACP9a,KAAKszE,oBAAqBjwE,EAAQojB,IAG1C07G,gBAAiB,SAAWpzD,GAG3B,MADAtuE,SAAQqa,KAAM,uFACP9a,KAAKiR,aAAc89D,IAG3B4yD,cAAe,SAAWvhH,EAAWqG,EAAOzjB,GAG3C,MADAvC,SAAQqa,KAAM,+EACP9a,KAAKiqD,oBAAqB7pC,EAAWqG,EAAOzjB,IAGpD4+H,oBAAqB,SAAWp7H,GAG/B,MADA/F,SAAQqa,KAAM,qFACP9a,KAAK2xE,oBAAqBnrE,IAGlCq7H,gBAAiB,WAGhB,MADAphI,SAAQqa,KAAM,6EACP9a,KAAKsxE,qBAMdtvE,OAAO2rE,OAAQ9pE,EAAQs9D,WAEtBwgE,cAAe,SAAWvhH,EAAWqG,EAAOzjB,GAG3C,MADAvC,SAAQqa,KAAM,+EACP9a,KAAKiqD,oBAAqB7pC,EAAWqG,EAAOzjB,IAGpD6+H,gBAAiB,WAGhB,MADAphI,SAAQqa,KAAM,6EACP9a,KAAKsxE,qBAQdptD,GAASi9C,UAAUihE,gBAAkB,WAEpC3hI,QAAQqa,KAAM,yDAIf9Y,OAAO2rE,OAAQtrD,GAAS8+C,WAEvBkhE,eAAgB,SAAW9/H,GAG1B,MADA9B,SAAQqa,KAAM,6EACP9a,KAAKm6F,gBAAiB53F,IAG9B+/H,YAAa,WAEZ7hI,QAAQqa,KAAM,8EAGfwuD,UAAW,SAAWl5C,EAAU0oD,GAG/B,MADAr4E,SAAQqa,KAAM,kGACP9a,KAAK25F,gBAAiB7gB,EAAM1oD,MAMrCpuB,OAAO+gB,iBAAkBV,GAAS8+C,WAEjCohE,YACC5gH,IAAK,WAGJ,MADAlhB,SAAQqa,KAAM,uDACP9a,KAAKmD,SAAS6e,OAGtBna,IAAK,SAAW3F,GAEfzB,QAAQqa,KAAM,uDACd9a,KAAKmD,SAAS6e,MAAQ9f,IAIxBsgI,eACC7gH,IAAK,WAEJlhB,QAAQqa,KAAM,kGAGfjT,IAAK,WAEJpH,QAAQqa,KAAM,qGAOjB9Y,OAAO+gB,iBAAkB0kC,GAAI0Z,WAE5B/oB,SACCz2B,IAAK,WAGJ,MADAlhB,SAAQqa,KAAM,oDACP9a,KAAK0nD,WAOf1lD,OAAOC,eAAgB0lD,GAASwZ,UAAW,oBAE1Cx/C,IAAK,WAEJlhB,QAAQqa,KAAM,uDAGfjT,IAAK,WAEJpH,QAAQqa,KAAM,yDAMhB9Y,OAAOC,eAAgBu5D,GAAM2F,UAAW,wBAEvCx/C,IAAK,WAGJ,MADAlhB,SAAQqa,KAAM,kEACP9a,KAAKy7D,oBAGb5zD,IAAK,SAAW3F,GAEfzB,QAAQqa,KAAM,kEACd9a,KAAKy7D,mBAAqBv5D,KAQ5BqsC,GAAkB4yB,UAAUshE,QAAU,SAAWh6B,EAAa95D,GAE7DluC,QAAQqa,KAAM,mHAGK5Z,KAAdytC,IAA0B3uC,KAAK2uC,UAAYA,GAChD3uC,KAAKwoG,eAAgBC,IAMtBzmG,OAAO+gB,iBAAkB+zC,GAAMqK,WAC9BuhE,YACC76H,IAAK,WAEJpH,QAAQqa,KAAM,gDAIhB6nH,iBACC96H,IAAK,SAAW3F,GAEfzB,QAAQqa,KAAM,4DACd9a,KAAK6e,OAAOjP,OAAO4+B,IAAMtsC,IAI3B0gI,kBACC/6H,IAAK,SAAW3F,GAEfzB,QAAQqa,KAAM,8DACd9a,KAAK6e,OAAOjP,OAAO2T,KAAOrhB,IAI5B2gI,mBACCh7H,IAAK,SAAW3F,GAEfzB,QAAQqa,KAAM,gEACd9a,KAAK6e,OAAOjP,OAAO4T,MAAQthB,IAI7B4gI,iBACCj7H,IAAK,SAAW3F,GAEfzB,QAAQqa,KAAM,4DACd9a,KAAK6e,OAAOjP,OAAO6T,IAAMvhB,IAI3B6gI,oBACCl7H,IAAK,SAAW3F,GAEfzB,QAAQqa,KAAM,kEACd9a,KAAK6e,OAAOjP,OAAO8T,OAASxhB,IAI9B6X,kBACClS,IAAK,SAAW3F,GAEfzB,QAAQqa,KAAM,8DACd9a,KAAK6e,OAAOjP,OAAOiF,KAAO3S,IAI5B8X,iBACCnS,IAAK,SAAW3F,GAEfzB,QAAQqa,KAAM,4DACd9a,KAAK6e,OAAOjP,OAAOkF,IAAM5S,IAI3B8gI,qBACCn7H,IAAK,WAEJpH,QAAQqa,KAAM,oHAIhBmV,YACCpoB,IAAK,SAAW3F,GAEfzB,QAAQqa,KAAM,iDACd9a,KAAK6e,OAAOgT,KAAO3vB,IAIrB+gI,gBACCp7H,IAAK,WAEJpH,QAAQqa,KAAM,oDAIhBooH,gBACCr7H,IAAK,SAAW3F,GAEfzB,QAAQqa,KAAM,8DACd9a,KAAK6e,OAAOC,QAAQ/a,MAAQ7B,IAI9BihI,iBACCt7H,IAAK,SAAW3F,GAEfzB,QAAQqa,KAAM,gEACd9a,KAAK6e,OAAOC,QAAQ9a,OAAS9B,MAQhCF,OAAO+gB,iBAAkBoC,GAAgBg8C,WAExC3gE,QACCmhB,IAAK,WAGJ,MADAlhB,SAAQqa,KAAM,2EACP9a,KAAKuF,MAAM/E,WAOrBwB,OAAO2rE,OAAQpnD,GAAe46C,WAE7BiiE,SAAU,SAAW38G,GAEpBhmB,QAAQqa,KAAM,sEACd9a,KAAK2oB,SAAUlC,IAGhB48G,YAAa,SAAW18G,EAAOnF,EAAOixC,OAEhBvxD,KAAhBuxD,GAEJhyD,QAAQqa,KAAM,wEAGfra,QAAQqa,KAAM,4DACd9a,KAAKuoB,SAAU5B,EAAOnF,IAGvB8hH,eAAgB,WAEf7iI,QAAQqa,KAAM,kEACd9a,KAAKyhG,eAGN2gC,gBAAiB,WAEhB3hI,QAAQqa,KAAM,+DAGfyoH,eAAgB,WAEf9iI,QAAQqa,KAAM,gEAMhB9Y,OAAO+gB,iBAAkBwD,GAAe46C,WAEvCigD,WACCz/F,IAAK,WAGJ,MADAlhB,SAAQC,MAAO,iEACRV,KAAK+c,SAIdskG,SACC1/F,IAAK,WAGJ,MADAlhB,SAAQqa,KAAM,+DACP9a,KAAK+c,WASf/a,OAAO+gB,iBAAkBshD,GAAQlD,WAEhC5gD,SACC1Y,IAAK,WAEJpH,QAAQqa,KAAM,oFAIhBlX,UACC1B,MAAO,WAGN,MADAzB,SAAQqa,KAAM,qFACP9a,SASVgC,OAAO+gB,iBAAkB/M,EAASmrD,WAEjCqiE,YACC7hH,IAAK,WAEJlhB,QAAQqa,KAAM,kDAGfjT,IAAK,WAEJpH,QAAQqa,KAAM;gEAIhB2oH,SACC9hH,IAAK,WAGJ,MADAlhB,SAAQqa,KAAM,8CACP,GAAIpP,KAKbu1G,SACCt/F,IAAK,WAEJlhB,QAAQC,MAAO,SAAWV,KAAK6B,KAAO,uEAGvCgG,IAAK,SAAW3F,GAEfzB,QAAQqa,KAAM,SAAW9a,KAAK6B,KAAO,sEACrC7B,KAAKsW,YAt71CU,IAs71CMpU,MAOxBF,OAAO+gB,iBAAkBsZ,GAAkB8kC,WAE1CuiE,OACC/hH,IAAK,WAGJ,MADAlhB,SAAQqa,KAAM,8FACP,GAGRjT,IAAK,WAEJpH,QAAQqa,KAAM,gGAOjB9Y,OAAO+gB,iBAAkBiH,GAAem3C,WAEvC/2C,aACCzI,IAAK,WAGJ,MADAlhB,SAAQqa,KAAM,iFACP9a,KAAKmqB,WAAWC,aAGxBviB,IAAK,SAAW3F,GAEfzB,QAAQqa,KAAM,kFACd9a,KAAKmqB,WAAWC,YAAcloB,MASjCF,OAAO2rE,OAAQj2B,GAAcypB,WAE5BwiE,uBAAwB,WAGvB,MADAljI,SAAQqa,KAAM,6EACP9a,KAAKo9B,mBAIbkF,iBAAkB,WAGjB,MADA7hC,SAAQqa,KAAM,qFACP9a,KAAKmM,aAAam2B,oBAI1BshG,aAAc,WAGb,MADAnjI,SAAQqa,KAAM,wEACP9a,KAAKmM,aAAaiD,WAI1By0H,aAAc,WAGb,MADApjI,SAAQqa,KAAM,+DACP9a,KAAKiM,MAAM2G,SAInBkxH,sBAAuB,WAGtB,MADArjI,SAAQqa,KAAM,gGACP9a,KAAKmqB,WAAWxI,IAAK,sBAG7BoiH,0BAA2B,WAG1B,MADAtjI,SAAQqa,KAAM,yGACP9a,KAAKmqB,WAAWxI,IAAK,2BAG7BqiH,4BAA6B,WAG5B,MADAvjI,SAAQqa,KAAM,6GACP9a,KAAKmqB,WAAWxI,IAAK,6BAG7BsiH,8BAA+B,WAG9B,MADAxjI,SAAQqa,KAAM,oHACP9a,KAAKmqB,WAAWxI,IAAK,kCAG7BuiH,+BAAgC,WAG/B,MADAzjI,SAAQqa,KAAM,sHACP9a,KAAKmqB,WAAWxI,IAAK,mCAG7BwiH,oBAAqB,WAGpB,MADA1jI,SAAQqa,KAAM,6FACP9a,KAAKmqB,WAAWxI,IAAK,qBAG7B6W,uBAAwB,WAGvB,MADA/3B,SAAQqa,KAAM,uFACP9a,KAAKmM,aAAakxB,gBAG1B+mG,wBAAyB,WAGxB,MADA3jI,SAAQqa,KAAM,uGACP9a,KAAKmqB,WAAWxI,IAAK,2BAG7B0iH,kBAAmB,SAAWzgF,GAE7BnjD,QAAQqa,KAAM,uEACd9a,KAAKye,eAAgBmlC,IAGtB1H,aAAc,WAEbz7C,QAAQqa,KAAM,2DAGfwpH,aAAc,WAEb7jI,QAAQqa,KAAM,2DAGfypH,cAAe,WAEd9jI,QAAQqa,KAAM,4DAGf0pH,gBAAiB,WAEhB/jI,QAAQqa,KAAM,gEAMhB9Y,OAAO+gB,iBAAkB20B,GAAcypB,WAEtChoC,kBACCxX,IAAK,WAEJ,MAAO3hB,MAAKof,UAAUjB,SAGvBtW,IAAK,SAAW3F,GAEfzB,QAAQqa,KAAM,qEACd9a,KAAKof,UAAUjB,QAAUjc,IAI3Bk1B,eACCzV,IAAK,WAEJ,MAAO3hB,MAAKof,UAAUvd,MAGvBgG,IAAK,SAAW3F,GAEfzB,QAAQqa,KAAM,+DACd9a,KAAKof,UAAUvd,KAAOK,IAIxBuiI,mBACC9iH,IAAK,WAEJ,MAAO3hB,MAAKof,UAAUgsB,UAGvBvjC,IAAK,SAAW3F,GAEfzB,QAAQqa,KAAM,uEACd9a,KAAKof,UAAUgsB,SAAWlpC,MAM7BF,OAAO+gB,iBAAkBxJ,GAAe4nD,WAEvC/1B,UACCzpB,IAAK,WAEJ,MAAO3hB,MAAK6b,mBAAqB4vB,GAAgBF,IAGlD1jC,IAAK,SAAWujC,GAEf,GAAIlpC,GAAUkpC,IAAaG,EAC3B9qC,SAAQqa,KAAM,0FAA4F5Y,EAAQ,KAClHlC,KAAK6b,mBAAqB3Z,MAS7BF,OAAO+gB,iBAAkBjf,EAAkBq9D,WAE1C3/D,OACCmgB,IAAK,WAGJ,MADAlhB,SAAQqa,KAAM,0DACP9a,KAAKqE,QAAQ7C,OAGrBqG,IAAK,SAAW3F,GAEfzB,QAAQqa,KAAM,0DACd9a,KAAKqE,QAAQ7C,MAAQU,IAIvBT,OACCkgB,IAAK,WAGJ,MADAlhB,SAAQqa,KAAM,0DACP9a,KAAKqE,QAAQ5C,OAGrBoG,IAAK,SAAW3F,GAEfzB,QAAQqa,KAAM,0DACd9a,KAAKqE,QAAQ5C,MAAQS,IAIvBR,WACCigB,IAAK,WAGJ,MADAlhB,SAAQqa,KAAM,kEACP9a,KAAKqE,QAAQ3C,WAGrBmG,IAAK,SAAW3F,GAEfzB,QAAQqa,KAAM,kEACd9a,KAAKqE,QAAQ3C,UAAYQ,IAI3BP,WACCggB,IAAK,WAGJ,MADAlhB,SAAQqa,KAAM,kEACP9a,KAAKqE,QAAQ1C,WAGrBkG,IAAK,SAAW3F,GAEfzB,QAAQqa,KAAM,kEACd9a,KAAKqE,QAAQ1C,UAAYO,IAI3BJ,YACC6f,IAAK,WAGJ,MADAlhB,SAAQqa,KAAM,oEACP9a,KAAKqE,QAAQvC,YAGrB+F,IAAK,SAAW3F,GAEfzB,QAAQqa,KAAM,oEACd9a,KAAKqE,QAAQvC,WAAaI,IAI5Bc,QACC2e,IAAK,WAGJ,MADAlhB,SAAQqa,KAAM,4DACP9a,KAAKqE,QAAQrB,QAGrB6E,IAAK,SAAW3F,GAEfzB,QAAQqa,KAAM,4DACd9a,KAAKqE,QAAQrB,OAASd,IAIxBe,QACC0e,IAAK,WAGJ,MADAlhB,SAAQqa,KAAM,4DACP9a,KAAKqE,QAAQpB,QAGrB4E,IAAK,SAAW3F,GAEfzB,QAAQqa,KAAM,4DACd9a,KAAKqE,QAAQpB,OAASf,IAIxBN,QACC+f,IAAK,WAGJ,MADAlhB,SAAQqa,KAAM,4DACP9a,KAAKqE,QAAQzC,QAGrBiG,IAAK,SAAW3F,GAEfzB,QAAQqa,KAAM,4DACd9a,KAAKqE,QAAQzC,OAASM,IAIxBL,MACC8f,IAAK,WAGJ,MADAlhB,SAAQqa,KAAM,wDACP9a,KAAKqE,QAAQxC,MAGrBgG,IAAK,SAAW3F,GAEfzB,QAAQqa,KAAM,wDACd9a,KAAKqE,QAAQxC,KAAOK,IAItBoB,iBACCqe,IAAK,WAGJ,MADAlhB,SAAQqa,KAAM,8EACP9a,KAAKqE,QAAQf,iBAGrBuE,IAAK,SAAW3F,GAEfzB,QAAQqa,KAAM,8EACd9a,KAAKqE,QAAQf,gBAAkBpB,MASlCo8D,GAAM6C,UAAUm2C,KAAO,SAAWF,GAEjC32G,QAAQqa,KAAM,yEACd,IAAIY,GAAQ1b,IAOZ,QANkB,GAAIq9D,KACVi6C,KAAMF,EAAM,SAAW32F,GAElC/E,EAAMw0G,UAAWzvG,KAGXzgB,MAIRm/D,GAAcgC,UAAUujE,QAAU,WAGjC,MADAjkI,SAAQqa,KAAM,+DACP9a,KAAK6xH,oBAMbr0D,GAAW2D,UAAUwjE,cAAgB,SAAWz+H,EAAUyJ,GAGzD,MADAlP,SAAQqa,KAAM,wDACP9a,KAAK4c,OAAQ1W,EAAUyJ,GAM/B,IAAIi1H,KAEH/4C,MAAO,SAAWg5C,EAAWxxE,EAAW+pC,GAEvC38F,QAAQqa,KAAM,kIACd,IAAIzX,EAECgwD,GAAUh3C,SAEdg3C,EAAUjwD,kBAAoBiwD,EAAU2D,eAExC3zD,EAASgwD,EAAUhwD,OACnBgwD,EAAYA,EAAUp5C,UAIvB4qH,EAAUh5C,MAAOx4B,EAAWhwD,EAAQ+5F,IAIrCl6F,OAAQ,SAAW+W,GAGlB,MADAxZ,SAAQqa,KAAM,6FACPb,EAAS/W,WAMd4hI,IAEHnrB,gBAAaz4G,GAEb6gH,YAAa,SAAWhsD,EAAKx0D,EAAS+zD,EAAQE,GAE7C/0D,QAAQqa,KAAM,uFAEd,IAAIu+F,GAAS,GAAIxiD,GACjBwiD,GAAOS,eAAgB95G,KAAK25G,YAE5B,IAAIt1G,GAAUg1G,EAAO/B,KAAMvhD,EAAKT,MAAQp0D,GAAWs0D,EAInD,OAFKj0D,KAAU8C,EAAQ9C,QAAUA,GAE1B8C,GAIR0gI,gBAAiB,SAAWhrB,EAAMx4G,EAAS+zD,EAAQE,GAElD/0D,QAAQqa,KAAM,+FAEd,IAAIu+F,GAAS,GAAIziD,GACjByiD,GAAOS,eAAgB95G,KAAK25G,YAE5B,IAAIt1G,GAAUg1G,EAAO/B,KAAMyC,EAAMzkD,MAAQp0D,GAAWs0D,EAIpD,OAFKj0D,KAAU8C,EAAQ9C,QAAUA,GAE1B8C,GAIR2gI,sBAAuB,WAEtBvkI,QAAQC,MAAO,0FAIhBukI,0BAA2B,WAE1BxkI,QAAQC,MAAO,8FAgDjBf,GAAQ8E,sBAAwBA,EAChC9E,EAAQmE,kBAAoBA,EAC5BnE,EAAQ+3C,cAAgBA,GACxB/3C,EAAQwsB,UAAYA,GACpBxsB,EAAQygD,YAAcA,GACtBzgD,EAAQ28C,cAAgBA,GACxB38C,EAAQg3B,YAAcA,GACtBh3B,EAAQwnD,QAAUA,GAClBxnD,EAAQynD,IAAMA,GACdznD,EAAQ0nD,MAAQA,GAChB1nD,EAAQ2nD,UAAYA,GACpB3nD,EAAQ6nD,OAASA,GACjB7nD,EAAQ8nD,IAAMA,GACd9nD,EAAQqoD,YAAcA,GACtBroD,EAAQgoD,SAAWA,GACnBhoD,EAAQooD,KAAOA,GACfpoD,EAAQsrB,KAAOA,GACftrB,EAAQ+oD,aAAeA,GACvB/oD,EAAQgpD,SAAWA,GACnBhpD,EAAQ8oD,KAAOA,GACf9oD,EAAQipD,OAASA,GACjBjpD,EAAQkpD,MAAQA,GAChBlpD,EAAQmpD,aAAeA,GACvBnpD,EAAQkF,YAAcA,EACtBlF,EAAQupD,kBAAoBA,GAC5BvpD,EAAQqF,YAAcA,EACtBrF,EAAQkT,cAAgBA,EACxBlT,EAAQwpD,aAAeA,GACvBxpD,EAAQ0B,QAAUA,EAClB1B,EAAQ62D,wBAA0BA,GAClC72D,EAAQ+2D,kBAAoBA,GAC5B/2D,EAAQi3D,kBAAoBA,GAC5Bj3D,EAAQk3D,cAAgBA,GACxBl3D,EAAQ86D,aAAeA,GACvB96D,EAAQs6D,eAAiBA,GACzBt6D,EAAQu6D,qBAAuBA,GAC/Bv6D,EAAQ42D,sBAAwBA,GAChC52D,EAAQ01D,eAAiBA,GACzB11D,EAAQ46D,WAAaA,GACrB56D,EAAQg3D,YAAcA,GACtBh3D,EAAQy9D,WAAaA,GACrBz9D,EAAQ02D,WAAaA,GACrB12D,EAAQw6D,OAASA,GACjBx6D,EAAQu3G,MAAQA,GAChBv3G,EAAQ09D,YAAcA,GACtB19D,EAAQu3D,gBAAkBA,GAC1Bv3D,EAAQw3D,UAAYA,GACpBx3D,EAAQ03D,WAAaA,GACrB13D,EAAQ83D,cAAgBA,GACxB93D,EAAQo3D,gBAAkBA,GAC1Bp3D,EAAQ23D,uBAAyBA,GACjC33D,EAAQ43D,iBAAmBA,GAC3B53D,EAAQ63D,aAAeA,GACvB73D,EAAQs3D,YAAcA,GACtBt3D,EAAQm3D,MAAQA,GAChBn3D,EAAQ29D,aAAeA,GACvB39D,EAAQ4uC,kBAAoBA,GAC5B5uC,EAAQ2jB,mBAAqBA,GAC7B3jB,EAAQ69D,WAAaA,GACrB79D,EAAQkvC,YAAcA,GACtBlvC,EAAQ0jB,OAASA,GACjB1jB,EAAQq+D,cAAgBA,GACxBr+D,EAAQq/D,gBAAkBA,GAC1Br/D,EAAQs+D,aAAeA,GACvBt+D,EAAQw/D,cAAgBA,GACxBx/D,EAAQ2+D,MAAQA,GAChB3+D,EAAQ05D,oBAAsBA,GAC9B15D,EAAQ85D,oBAAsBA,GAC9B95D,EAAQ45D,wBAA0BA,GAClC55D,EAAQ65D,oBAAsBA,GAC9B75D,EAAQg6D,mBAAqBA,GAC7Bh6D,EAAQ+5D,qBAAuBA,GAC/B/5D,EAAQ+/D,cAAgBA,GACxB//D,EAAQ8gE,gBAAkBA,GAC1B9gE,EAAQi6D,cAAgBA,GACxBj6D,EAAQk5D,eAAiBA,GACzBl5D,EAAQuhE,qBAAuBA,GAC/BvhE,EAAQqkE,eAAiBA,GACzBrkE,EAAQk6D,cAAgBA,GACxBl6D,EAAQ0kE,QAAUA,GAClB1kE,EAAQ2kE,wBAA0BA,GAClC3kE,EAAQ4mB,eAAiBA,GACzB5mB,EAAQukB,SAAWA,GACnBvkB,EAAQ4kE,2BAA6BA,GACrC5kE,EAAQ+kE,2BAA6BA,GACrC/kE,EAAQ8kE,kBAAoBA,GAC5B9kE,EAAQglE,yBAA2BA,GACnChlE,EAAQkkB,MAAQA,GAChBlkB,EAAQ0iB,SAAWA,GACnB1iB,EAAQilE,UAAYA,GACpBjlE,EAAQwiB,OAASA,GACjBxiB,EAAQM,gBAAkBA,EAC1BN,EAAQ4lE,MAAQA,GAChB5lE,EAAQ25D,4BAA8BA,GACtC35D,EAAQ44D,kBAAoBA,GAC5B54D,EAAQ64D,oBAAsBA,GAC9B74D,EAAQu4D,iBAAmBA,GAC3Bv4D,EAAQ+3D,YAAcA,GACtB/3D,EAAQqrB,SAAWA,GACnBrrB,EAAQ8oB,KAAOpmB,GACf1C,EAAQimE,UAAYA,GACpBjmE,EAAQkmE,YAAcA,GACtBlmE,EAAQiZ,MAAQA,GAChBjZ,EAAQoZ,QAAUA,GAClBpZ,EAAQ+Y,OAASA,GACjB/Y,EAAQgrB,IAAMA,GACdhrB,EAAQU,QAAUA,EAClBV,EAAQyB,QAAUA,EAClBzB,EAAQ8Y,KAAOA,GACf9Y,EAAQiM,KAAOA,EACfjM,EAAQmrB,MAAQA,GAChBnrB,EAAQoiB,MAAQA,GAChBpiB,EAAQkE,QAAUA,EAClBlE,EAAQwB,QAAUA,EAClBxB,EAAQO,QAAUA,EAClBP,EAAQgB,WAAaA,EACrBhB,EAAQ+L,MAAQA,EAChB/L,EAAQmmE,sBAAwBA,GAChCnmE,EAAQomE,oBAAsBA,GAC9BpmE,EAAQymE,gBAAkBA,GAC1BzmE,EAAQ8mE,eAAiBA,GACzB9mE,EAAQmnE,iBAAmBA,GAC3BnnE,EAAQqnE,oBAAsBA,GAC9BrnE,EAAQunE,sBAAwBA,GAChCvnE,EAAQ0nE,WAAaA,GACrB1nE,EAAQ8nE,gBAAkBA,GAC1B9nE,EAAQioE,kBAAoBA,GAC5BjoE,EAAQkoE,uBAAyBA,GACjCloE,EAAQqoE,aAAeA,GACvBroE,EAAQ+oE,UAAYA,GACpB/oE,EAAQgpE,WAAaA,GACrBhpE,EAAQmpE,YAAcA,GACtBnpE,EAAQqpE,YAAcA,GACtBrpE,EAAQ8pE,WAAaA,GACrB9pE,EAAQ8qE,iBAAmBA,GAC3B9qE,EAAQgrE,kBAAoBA,GAC5BhrE,EAAQirE,sBAAwBA,GAChCjrE,EAAQkrE,WAAaA,GACrBlrE,EAAQmrE,SAAWA,GACnBnrE,EAAQo8D,aAAeA,GACvBp8D,EAAQ68D,YAAcA,GACtB78D,EAAQ88D,iBAAmBA,GAC3B98D,EAAQg9D,qBAAuBA,GAC/Bh9D,EAAQ+7D,UAAYA,GACpB/7D,EAAQo9D,MAAQA,GAChBp9D,EAAQi9D,KAAOA,GACfj9D,EAAQq9D,UAAYA,GACpBr9D,EAAQw9D,KAAOA,GACfx9D,EAAQi8D,UAAYA,GACpBj8D,EAAQ67D,MAAQA,GAChB77D,EAAQmzD,WAAaA,GACrBnzD,EAAQ4/H,WAAaA,GACrB5/H,EAAQ4zC,WAAaA,GACrB5zC,EAAQypD,kBAAoBA,GAC5BzpD,EAAQuqD,mBAAqBA,GAC7BvqD,EAAQ2qD,yBAA2BA,GACnC3qD,EAAQgtD,oBAAsBA,GAC9BhtD,EAAQitD,0BAA4BA,GACpCjtD,EAAQktD,mBAAqBA,GAC7BltD,EAAQmtD,yBAA2BA,GACnCntD,EAAQotD,oBAAsBA,GAC9BptD,EAAQqtD,0BAA4BA,GACpCrtD,EAAQutD,qBAAuBA,GAC/BvtD,EAAQwtD,2BAA6BA,GACrCxtD,EAAQirD,mBAAqBA,GAC7BjrD,EAAQmrD,yBAA2BA,GACnCnrD,EAAQytD,aAAeA,GACvBztD,EAAQ+tD,mBAAqBA,GAC7B/tD,EAAQ4uD,kBAAoBA,GAC5B5uD,EAAQgvD,wBAA0BA,GAClChvD,EAAQ4vD,cAAgBA,GACxB5vD,EAAQ8vD,oBAAsBA,GAC9B9vD,EAAQmwD,aAAeA,GACvBnwD,EAAQqwD,mBAAqBA,GAC7BrwD,EAAQ8wD,eAAiBA,GACzB9wD,EAAQmxD,qBAAuBA,GAC/BnxD,EAAQuxD,aAAeA,GACvBvxD,EAAQ4xD,mBAAqBA,GAC7B5xD,EAAQkpB,cAAgBA,GACxBlpB,EAAQmpB,oBAAsBA,GAC9BnpB,EAAQgyD,cAAgBA,GACxBhyD,EAAQkyD,oBAAsBA,GAC9BlyD,EAAQyyD,cAAgBA,GACxBzyD,EAAQ0yD,oBAAsBA,GAC9B1yD,EAAQ+vD,gBAAkBA,GAC1B/vD,EAAQiwD,sBAAwBA,GAChCjwD,EAAQwzD,cAAgBA,GACxBxzD,EAAQi1D,aAAeA,GACvBj1D,EAAQk1D,mBAAqBA,GAC7Bl1D,EAAQk0D,iBAAmBA,GAC3Bl0D,EAAQs0D,uBAAyBA,GACjCt0D,EAAQm1D,eAAiBA,GACzBn1D,EAAQo1D,qBAAuBA,GAC/Bp1D,EAAQinB,YAAcA,GACtBjnB,EAAQsnB,kBAAoBA,GAC5BtnB,EAAQi9B,eAAiBA,GACzBj9B,EAAQ4nD,eAAiBA,GACzB5nD,EAAQs1D,kBAAoBA,GAC5Bt1D,EAAQqqB,eAAiBA,GACzBrqB,EAAQg9B,eAAiBA,EACzBh9B,GAAQ68B,qBAAuBA,GAC/B78B,EAAQ48B,qBAAuBA,GAC/B58B,EAAQ08B,kBAAoBA,GAC5B18B,EAAQ28B,iBAAmBA,GAC3B38B,EAAQw8B,mBAAqBA,GAC7Bx8B,EAAQy8B,oBAAsBA,GAC9Bz8B,EAAQ6X,kBAAoBA,EAC5B7X,EAAQ0Y,qBAAuBA,GAC/B1Y,EAAQwpB,kBAAoBA,GAC5BxpB,EAAQ+8B,mBAAqBA,GAC7B/8B,EAAQ88B,kBAAoBA,GAC5B98B,EAAQqW,SAAWA,EACnBrW,EAAQqmB,uBAAyBA,GACjCrmB,EAAQomB,uBAAyBA,GACjCpmB,EAAQmmB,sBAAwBA,GAChCnmB,EAAQkmB,qBAAuBA,GAC/BlmB,EAAQimB,sBAAwBA,GAChCjmB,EAAQgmB,qBAAuBA,GAC/BhmB,EAAQ8lB,4BAA8BA,GACtC9lB,EAAQ6lB,qBAAuBA,GAC/B7lB,EAAQ4lB,oBAAsBA,GAC9B5lB,EAAQwlB,gBAAkBA,GAC1BxlB,EAAQkiD,SAAWA,GACnBliD,EAAQ2uE,MAAQA,GAChB3uE,EAAQ0rC,aAAeA,GACvB1rC,EAAQ4rC,aAAeA,GACvB5rC,EAAQ8rC,cAAgBA,GACxB9rC,EAAQulI,kBArq3CgB,EAsq3CxBvlI,EAAQ6mD,qBAAuBA,GAC/B7mD,EAAQwlI,sBArq3CoB,EAsq3C5BxlI,EAAQylI,eArq3Ca,EAsq3CrBzlI,EAAQ0e,aAAeA,GACvB1e,EAAQ03B,iBAAmBA,GAC3B13B,EAAQ0W,UAAYA,GACpB1W,EAAQmc,SAAWA,GACnBnc,EAAQic,WAAaA,GACrBjc,EAAQ0lI,YArq3CU,EAsq3ClB1lI,EAAQ2lI,cArq3CY,EAsq3CpB3lI,EAAQ6W,SAAWA,GACnB7W,EAAQyoE,WAAaA,GACrBzoE,EAAQknE,aAAeA,GACvBlnE,EAAQypC,WAAaA,GACrBzpC,EAAQwW,eAAiBA,GACzBxW,EAAQ6pC,iBAAmBA,GAC3B7pC,EAAQoqC,oBAAsBA,GAC9BpqC,EAAQwqC,iBAAmBA,GAC3BxqC,EAAQ0pC,eAAiBA,GACzB1pC,EAAQiX,YAAcA,GACtBjX,EAAQs1C,iBAAmBA,GAC3Bt1C,EAAQw1C,wBAA0BA,GAClCx1C,EAAQ03C,YAAcA,GACtB13C,EAAQ23C,YAAcA,GACtB33C,EAAQ01C,WAAaA,GACrB11C,EAAQ21C,UAAYA,GACpB31C,EAAQ41C,eAAiBA,GACzB51C,EAAQ61C,uBAAyBA,GACjC71C,EAAQ+W,eAAiBA,GACzB/W,EAAQgX,uBAAyBA,GACjChX,EAAQ81C,eAAiBA,GACzB91C,EAAQg2C,uBAAyBA,GACjCh2C,EAAQk2C,eAAiBA,GACzBl2C,EAAQo2C,uBAAyBA,GACjCp2C,EAAQs2C,uBAAyBA,GACjCt2C,EAAQumC,WAAaA,GACrBvmC,EAAQymC,YAAcA,GACtBzmC,EAAQ2mC,UAAYA,GACpB3mC,EAAQmX,eAAiBA,GACzBnX,EAAQ8mC,WAAaA,GACrB9mC,EAAQgnC,kBAAoBA,GAC5BhnC,EAAQknC,aAAeA,GACvBlnC,EAAQonC,cAAgBA,GACxBpnC,EAAQgqB,kBAAoBA,GAC5BhqB,EAAQo4B,aAAeA,GACvBp4B,EAAQq4B,aAAeA,GACvBr4B,EAAQ65B,cAAgBA,GACxB75B,EAAQs1B,kBAAoBA,GAC5Bt1B,EAAQu1B,oBAAsBA,GAC9Bv1B,EAAQw1B,sBAAwBA,GAChCx1B,EAAQy1B,kBAAoBA,GAC5Bz1B,EAAQqnH,UArq3CQ,IAsq3ChBrnH,EAAQuF,sBAAwBA,GAChCvF,EAAQ83B,sBAAwBA,GAChC93B,EAAQi4B,iCAAmCA,GAC3Cj4B,EAAQk4B,iCAAmCA,GAC3Cl4B,EAAQm4B,2BAA6BA,GACrCn4B,EAAQ+3B,wBAA0BA,GAClC/3B,EAAQg4B,wBAA0BA,GAClCh4B,EAAQ6zC,eAAiBA,GACzB7zC,EAAQgD,oBAAsBA,GAC9BhD,EAAQ+zC,uBAAyBA,GACjC/zC,EAAQoF,cAAgBA,GACxBpF,EAAQ0/B,2BAA6BA,GACrC1/B,EAAQ2/B,0BAA4BA,GACpC3/B,EAAQiD,aAAeA,GACvBjD,EAAQm0C,0BAA4BA,GACpCn0C,EAAQkD,yBAA2BA,GACnClD,EAAQoD,iBAAmBA,GAC3BpD,EAAQ40C,SAAWA,GACnB50C,EAAQ60C,UAAYA,GACpB70C,EAAQqjC,kBAAoBA,GAC5BrjC,EAAQ80C,QAAUA,GAClB90C,EAAQsjC,gBAAkBA,GAC1BtjC,EAAQsiC,UAAYA,GACpBtiC,EAAQuiC,cAAgBA,GACxBviC,EAAQs0C,sBAAwBA,GAChCt0C,EAAQw0C,sBAAwBA,GAChCx0C,EAAQ00C,qBAAuBA,GAC/B10C,EAAQyjC,mBAAqBA,GAC7BzjC,EAAQg1C,YAAcA,GACtBh1C,EAAQ+hC,UAAYA,GACpB/hC,EAAQmD,WAAaA,GACrBnD,EAAQk1C,gBAAkBA,GAC1Bl1C,EAAQo1C,qBAAuBA,GAC/Bp1C,EAAQ+uE,WAAaA,GACrB/uE,EAAQojC,YAAcA,GACtBpjC,EAAQujC,mBAAqBA,GAC7BvjC,EAAQw2C,qBAAuBA,GAC/Bx2C,EAAQy2C,sBAAwBA,GAChCz2C,EAAQ02C,sBAAwBA,GAChC12C,EAAQ22C,sBAAwBA,GAChC32C,EAAQg3C,wBAA0BA,GAClCh3C,EAAQi3C,wBAA0BA,GAClCj3C,EAAQk3C,yBAA2BA,GACnCl3C,EAAQm3C,yBAA2BA,GACnCn3C,EAAQw3C,gBAAkBA,GAC1Bx3C,EAAQ4lI,SArq3CO,KAsq3Cf5lI,EAAQyjE,WAAaA,GACrBzjE,EAAQ6lI,aArq3CW,KAsq3CnB7lI,EAAQ8lI,oBArq3CkB,KAsq3C1B9lI,EAAQ+lI,kBArq3CgB,KAsq3CxB/lI,EAAQgmI,kBArq3CgB,KAsq3CxBhmI,EAAQ6iE,oBAAsBA,GAC9B7iE,EAAQimI,gBArq3Cc,KAsq3CtBjmI,EAAQkmI,iBArq3Ce,KAsq3CvBlmI,EAAQyrB,kBAAoBA,GAC5BzrB,EAAQ4lD,sBAAwBA,GAChC5lD,EAAQ8lD,oBAAsBA,GAC9B9lD,EAAQ+D,eAAiBA,GACzB/D,EAAQw0B,aAAeA,GACvBx0B,EAAQ60B,cAAgBA,GACxB70B,EAAQy0B,aAAeA,GACvBz0B,EAAQmmI,eArq3Ca,KAsq3CrBnmI,EAAQ00B,cAAgBA,GACxB10B,EAAQ20B,eAAiBA,GACzB30B,EAAQ40B,aAAeA,GACvB50B,EAAQgY,kBAAoBA,GAC5BhY,EAAQse,iBAAmBA,GAC3Bte,EAAQomI,aAAen/G,GACvBjnB,EAAQqrE,MAAQA,GAChBrrE,EAAQqmI,UAl6DQ,EAm6DhBrmI,EAAQsmI,WAj6DS,EAk6DjBtmI,EAAQsrE,iBAAmBA,GAC3BtrE,EAAQwrE,cAAgBA,GACxBxrE,EAAQqlE,WAAaA,GACrBrlE,EAAQ0rE,SAAWA,GACnB1rE,EAAQ2rE,eAAiBA,GACzB3rE,EAAQ4rE,mBAAqBA,GAC7B5rE,EAAQ6rE,sBAAwBA,GAChC7rE,EAAQ8rE,uBAAyBA,GACjC9rE,EAAQ+rE,OAASA,GACjB/rE,EAAQgsE,uBAAyBA,GACjChsE,EAAQksE,cAAgBA,GACxBlsE,EAAQmsE,eAAiBA,GACzBnsE,EAAQosE,sBAAwBA,GAChCpsE,EAAQqsE,eAAiBA,GACzBrsE,EAAQssE,gBAAkBA,GAC1BtsE,EAAQusE,eAAiBA,GACzBvsE,EAAQwsE,gBAAkBA,GAC1BxsE,EAAQysE,iBAAmBA,GAC3BzsE,EAAQ0sE,iBAAmBA,GAC3B1sE,EAAQ2sE,mBAAqBA,GAC7B3sE,EAAQ4sE,aAAeA,GACvB5sE,EAAQ6sE,OAASA,GACjB7sE,EAAQ8sE,WAAaA,GACrB9sE,EAAQ+sE,kBAAoBA,GAC5B/sE,EAAQgtE,YAAcA,GACtBhtE,EAAQitE,gBAAkBA,GAC1BjtE,EAAQktE,UAAYA,GACpBltE,EAAQmtE,oBAAsBA,GAC9BntE,EAAQilI,cAAgBA,GACxBjlI,EAAQmlI,WAAaA,GACrBnlI,EAAQotE,UAAYA,GACpBptE,EAAQ0tE,eAAiBA,GAEzBrrE,OAAOC,eAAetC,EAAS,cAAgBuC,OAAO;;AC//3CvDnC,MAAMmmI,cAAgB,SAAW5vE,GAEhCt2D,KAAKs2D,YAAwBp1D,KAAZo1D,EAA0BA,EAAUv2D,MAAMw2D,uBAI5Dx2D,MAAMmmI,cAAc/kE,WAEnBnJ,YAAaj4D,MAAMmmI,cAEnBvsB,YAAa,YAEbrC,KAAM,SAAWvhD,EAAKT,EAAQC,EAAYC,GAEzC,GAAI95C,GAAQ1b,KAERyK,EAAO1K,MAAMo6D,OAAOgH,UAAUsgD,eAAgB1rD,EAErC,IAAIh2D,OAAMs2D,WAAY36C,EAAM46C,SAClCghD,KAAMvhD,EAAK,SAAWhG,GAE5BuF,EAAQ55C,EAAMk5E,MAAO7kC,EAAMtlD,KAEzB8qD,EAAYC,IAIhBvxD,SAECkiI,kBAAmBjkI,GAElBzB,QAAQqa,KAAM,wGAMhBg/F,eAAgB,SAAW53G,GAE1BlC,KAAK25G,YAAcz3G,GAIpB0yF,MAAO,SAAW7kC,EAAMtlD,GAEvB,QAAS27H,GAAsBC,EAAK9jI,GAOnC,IAAM,GAHFgD,MACA+gI,EAAaD,EAAIC,WAEXtgI,EAAI,EAAG8K,EAAIw1H,EAAW9lI,OAAQwF,EAAI8K,EAAG9K,IAAO,CAErD,GAAIo0F,GAAQksC,EAAYtgI,EAEnBo0F,GAAMn5B,WAAa1+D,GAEvBgD,EAAMgF,KAAM6vF,GAMd,MAAO70F,GAIR,QAASghI,GAAcx2E,GAEtB,GAAqB,IAAhBA,EAAKvvD,OAAe,QAKzB,KAAM,GAHFs/G,GAAQ/vD,EAAKguD,OAAOlqF,MAAO,OAC3BtuB,EAAQ,GAAIsX,OAAOijG,EAAMt/G,QAEnBwF,EAAI,EAAG8K,EAAIgvG,EAAMt/G,OAAQwF,EAAI8K,EAAG9K,IAEzCT,EAAOS,GAAM85G,EAAO95G,EAIrB,OAAOT,GAIR,QAASihI,GAAaz2E,GAErB,GAAqB,IAAhBA,EAAKvvD,OAAe,QAKzB,KAAM,GAHFs/G,GAAQ/vD,EAAKguD,OAAOlqF,MAAO,OAC3BtuB,EAAQ,GAAIsX,OAAOijG,EAAMt/G,QAEnBwF,EAAI,EAAG8K,EAAIgvG,EAAMt/G,OAAQwF,EAAI8K,EAAG9K,IAEzCT,EAAOS,GAAMknC,WAAY4yE,EAAO95G,GAIjC,OAAOT,GAIR,QAASkhI,GAAW12E,GAEnB,GAAqB,IAAhBA,EAAKvvD,OAAe,QAKzB,KAAM,GAHFs/G,GAAQ/vD,EAAKguD,OAAOlqF,MAAO,OAC3BtuB,EAAQ,GAAIsX,OAAOijG,EAAMt/G,QAEnBwF,EAAI,EAAG8K,EAAIgvG,EAAMt/G,OAAQwF,EAAI8K,EAAG9K,IAEzCT,EAAOS,GAAMgxB,SAAU8oF,EAAO95G,GAI/B,OAAOT,GAIR,QAASmhI,GAAS32E,GAEjB,MAAOA,GAAKi2D,UAAW,GAIxB,QAAS2gB,KAER,MAAO,iBAAqBnlH,KAI7B,QAASmyE,GAAS/5E,GAEjB,MAAwC,KAAjC5X,OAAO6nD,KAAMjwC,GAASpZ,OAe9B,QAASomI,GAAgBP,GAExB,WAAenlI,KAARmlI,EAAoBn5F,WAAYm5F,EAAIj/D,aAAc,UAAc,EAIxE,QAASy/D,GAAkBR,GAE1B,WAAenlI,KAARmlI,EAAoBA,EAAIS,YAAc,OAM9C,QAASC,GAAcV,EAAKW,EAAa/lE,EAAUm3C,GAElD,GAAItd,GAAUsrC,EAAsBC,EAAKW,GAAe,EAExD,QAAiB9lI,KAAZ45F,EAIJ,IAAM,GAFFx6F,GAAW8lI,EAAsBtrC,EAAS75B,GAEpCj7D,EAAI,EAAGA,EAAI1F,EAASE,OAAQwF,IAErCoyG,EAAQ93G,EAAU0F,IAQrB,QAASihI,GAAcniI,EAAMoiI,GAE5B,IAAM,GAAI3kI,KAAQuC,GAAO,CAEXA,EAAMvC,GACZ4kI,MAAQD,EAASpiI,EAAMvC,KAQhC,QAAS6kI,GAAUtiI,EAAMoiI,GAExB,WAAoBhmI,KAAf4D,EAAKqiI,MAA6BriI,EAAKqiI,OAE5CriI,EAAKqiI,MAAQD,EAASpiI,GAEfA,EAAKqiI,OAMb,QAASlnB,GAAgBomB,GAQxB,IAAM,GANFvhI,IACHuiI,WACAC,YACAC,aAGSvhI,EAAI,EAAG8K,EAAIu1H,EAAIC,WAAW9lI,OAAQwF,EAAI8K,EAAG9K,IAAO,CAEzD,GAAIo0F,GAAQisC,EAAIC,WAAYtgI,EAE5B,IAAwB,IAAnBo0F,EAAMotC,SAAX,CAEA,GAAIz9H,EAEJ,QAASqwF,EAAMn5B,UAEd,IAAK,SACJl3D,EAAKqwF,EAAMhzB,aAAc,MACzBtiE,EAAKuiI,QAASt9H,GAAO09H,GAAartC,EAClC,MAED,KAAK,UACJrwF,EAAKqwF,EAAMhzB,aAAc,MACzBtiE,EAAKwiI,SAAUv9H,GAAO29H,EAAuBttC,EAC7C,MAED,KAAK,UACJrwF,EAAKqwF,EAAMhzB,aAAc,UACzBtiE,EAAKyiI,SAAUx9H,GAAO49H,EAAuBvtC,EAC7C,MAED,SACC35F,QAAQo6B,IAAKu/D,KAMhBU,GAAQ6kB,WAAY0mB,EAAIj/D,aAAc,OAAWtiE,EAIlD,QAAS4iI,GAAuBrB,GAM/B,IAAM,GAJFvhI,IACH8iI,WAGS5hI,EAAI,EAAG8K,EAAIu1H,EAAIC,WAAW9lI,OAAQwF,EAAI8K,EAAG9K,IAAO,CAEzD,GAAIo0F,GAAQisC,EAAIC,WAAYtgI,EAE5B,IAAwB,IAAnBo0F,EAAMotC,SAEX,OAASptC,EAAMn5B,UAEd,IAAK,QACJ,GAAIl3D,GAAK28H,EAAStsC,EAAMhzB,aAAc,WAClCygE,EAAWztC,EAAMhzB,aAAc,WACnCtiE,GAAK8iI,OAAQC,GAAa99H,GAO7B,MAAOjF,GAIR,QAAS6iI,GAAuBtB,GAE/B,GAAIvhI,MAEA0a,EAAS6mH,EAAIj/D,aAAc,UAI3B04C,EAAQtgG,EAAOqU,MAAO,KAEtB9pB,EAAK+1G,EAAMjC,QACXiqB,EAAMhoB,EAAMjC,QAIZkqB,GAAyC,IAAzBD,EAAI3pG,QAAS,KAC7B6pG,GAA0C,IAAzBF,EAAI3pG,QAAS,IAElC,IAAK6pG,EAIJloB,EAAQgoB,EAAIj0G,MAAO,KACnBi0G,EAAMhoB,EAAMjC,QACZ/4G,EAAKmjI,OAASnoB,EAAMjC,YAEd,IAAKkqB,EAAc,CAIzB,GAAI7hH,GAAU4hH,EAAIj0G,MAAO,IACzBi0G,GAAM5hH,EAAQ23F,OAEd,KAAM,GAAI73G,GAAI,EAAGA,EAAIkgB,EAAQ1lB,OAAQwF,IAEpCkgB,EAASlgB,GAAMgxB,SAAU9Q,EAASlgB,GAAImwB,QAAS,KAAM,IAItDrxB,GAAKohB,QAAUA,EAYhB,MARAphB,GAAKiF,GAAKA,EACVjF,EAAKgjI,IAAMA,EAEXhjI,EAAKijI,YAAcA,EACnBjjI,EAAKkjI,aAAeA,EAEpBljI,EAAKojI,QAAUxB,EAASL,EAAIj/D,aAAc,WAEnCtiE,EAIR,QAASqjI,GAAgBrjI,GAExB,GAAIi1D,MAEAwtE,EAAWziI,EAAKyiI,SAChBD,EAAWxiI,EAAKwiI,SAChBD,EAAUviI,EAAKuiI,OAEnB,KAAM,GAAI7nH,KAAU+nH,GAEnB,GAAKA,EAASx5D,eAAgBvuD,GAAW,CAExC,GAAIs5E,GAAUyuC,EAAU/nH,GACpB0oH,EAAUZ,EAAUxuC,EAAQovC,SAE5BE,EAAUF,EAAQN,OAAOS,MACzBC,EAAWJ,EAAQN,OAAOW,OAE1BC,EAAcnB,EAASe,GACvBK,EAAepB,EAASiB,GAExBpoB,EAAYwoB,EAAuB5vC,EAAS0vC,EAAaC,EAE7DE,GAAsBzoB,EAAWnmD,GAMnC,MAAOA,GAIR,QAAS6uE,GAAc7+H,GAEtB,MAAOq9H,GAAUtsC,GAAQ6kB,WAAY51G,GAAMo+H,GAI5C,QAASO,GAAuB5vC,EAAS0vC,EAAaC,GAErD,GAMI/tF,GAAMX,EACN/zC,EAAG2Y,EAAIxM,EAAGC,EAPV2uD,EAAO+5B,GAAQ+tC,MAAO/vC,EAAQ/uF,IAC9B++H,EAAWC,GAAShoE,EAAKh3D,IAEzBqsD,EAAY2K,EAAKioE,WAAYlwC,EAAQgvC,KACrCmB,EAAgBloE,EAAK19D,OAAOoY,QAAQk8D,YAKpC7yE,IAKJ,QAASsxD,GAER,IAAK,SAEJ,IAAMpwD,EAAI,EAAG2Y,EAAK6pH,EAAYjjI,MAAM/E,OAAQwF,EAAI2Y,EAAI3Y,IAOnD,GALA00C,EAAO8tF,EAAYjjI,MAAOS,GAC1B+zC,EAAS/zC,EAAIyiI,EAAa1uF,WAEJ74C,KAAjB4D,EAAM41C,KAAuB51C,EAAM41C,QAEX,IAAxBo+C,EAAQivC,YAAuB,CAEnC,GAAI7lI,GAAQumI,EAAaljI,MAAOw0C,GAC5BtzB,EAAQqyE,EAAQ5yE,QAAS,GAAM,EAAI4yE,EAAQ5yE,QAAS,EAExDphB,GAAM41C,GAAQj0B,GAAUvkB,MAIxB,KAAMiQ,EAAI,EAAGC,EAAKq2H,EAAa1uF,OAAQ5nC,EAAIC,EAAID,IAE9CrN,EAAM41C,GAAQvoC,GAAMs2H,EAAaljI,MAAOw0C,EAAS5nC,EAQpD,MAED,KAAK,YAIL,IAAK,SAIL,IAAK,QACJ1R,QAAQqa,KAAM,0EAA2Es7C,GAK3F,GAAI8yE,GAAYC,EAAsBrkI,EAAMmkI,EAO5C,QAJC1mI,KAAMumI,EAAS1mI,KACf8mI,UAAWA,GAOb,QAASC,GAAsBrkI,EAAMmkI,GA4BpC,QAASG,GAAWj1H,EAAGhN,GAEtB,MAAOgN,GAAEumC,KAAOvzC,EAAEuzC,KA5BnB,GAAIwuF,KAIJ,KAAM,GAAIxuF,KAAQ51C,GAEjBokI,EAAU3+H,MAAQmwC,KAAMxN,WAAYwN,GAAQx4C,MAAO4C,EAAM41C,IAM1DwuF,GAAUh0H,KAAMk0H,EAIhB,KAAM,GAAIpjI,GAAI,EAAGA,EAAI,GAAIA,IAExBqjI,EAAwBH,EAAWljI,EAAGijI,EAAc3oI,SAAU0F,GAI/D,OAAOkjI,GAgBR,QAASP,GAAsBzoB,EAAWnmD,GAUzC,IAAM,GARFmvE,GAAYhpB,EAAUgpB,UACtB3mI,EAAO29G,EAAU39G,KAEjBm2D,KACA4wE,KACAC,KACAC,KAEMxjI,EAAI,EAAG8K,EAAIo4H,EAAU1oI,OAAQwF,EAAI8K,EAAG9K,IAAO,CAEpD,GAAIyjI,GAAWP,EAAWljI,GAEtB00C,EAAO+uF,EAAS/uF,KAChBx4C,EAAQunI,EAASvnI,KAErBmB,IAAOutC,UAAW1uC,GAAQy1E,YAC1Bt0E,GAAOiS,UAAWrC,GAAUsP,GAAYzT,IAExC4pD,EAAMnuD,KAAMmwC,GACZ4uF,EAAa/+H,KAAM0I,GAAS9S,EAAG8S,GAAS7S,EAAG6S,GAASrS,GACpD2oI,EAAeh/H,KAAMgY,GAAWpiB,EAAGoiB,GAAWniB,EAAGmiB,GAAW3hB,EAAG2hB,GAAW1hB,GAC1E2oI,EAAUj/H,KAAMuE,GAAM3O,EAAG2O,GAAM1O,EAAG0O,GAAMlO,GAQzC,MAJK0oI,GAAa9oI,OAAS,GAAIu5D,EAAOxvD,KAAM,GAAIxK,OAAMs5D,oBAAqB92D,EAAO,YAAam2D,EAAO4wE,IACjGC,EAAe/oI,OAAS,GAAIu5D,EAAOxvD,KAAM,GAAIxK,OAAMw5D,wBAAyBh3D,EAAO,cAAem2D,EAAO6wE,IACzGC,EAAUhpI,OAAS,GAAIu5D,EAAOxvD,KAAM,GAAIxK,OAAMs5D,oBAAqB92D,EAAO,SAAUm2D,EAAO8wE,IAEzFzvE,EAIR,QAASsvE,GAAwBH,EAAWQ,EAAUC,GAErD,GAAIF,GAGAzjI,EAAG8K,EADHklF,GAAQ,CAKZ,KAAMhwF,EAAI,EAAG8K,EAAIo4H,EAAU1oI,OAAQwF,EAAI8K,EAAG9K,IAEzCyjI,EAAWP,EAAWljI,OAEc9E,KAA/BuoI,EAASvnI,MAAOwnI,GAEpBD,EAASvnI,MAAOwnI,GAAa,KAI7B1zC,GAAQ,CAMV,KAAe,IAAVA,EAIJ,IAAMhwF,EAAI,EAAG8K,EAAIo4H,EAAU1oI,OAAQwF,EAAI8K,EAAG9K,IAEzCyjI,EAAWP,EAAWljI,GAEtByjI,EAASvnI,MAAOwnI,GAAaC,MAQ9BC,GAAwBV,EAAWQ,GAMrC,QAASE,GAAwBV,EAAWQ,GAI3C,IAAM,GAFFG,GAAM3+H,EAEAlF,EAAI,EAAG8K,EAAIo4H,EAAU1oI,OAAQwF,EAAI8K,EAAG9K,IAAO,CAEpD,GAAIyjI,GAAWP,EAAWljI,EAE1B,IAAoC,OAA/ByjI,EAASvnI,MAAOwnI,GAAsB,CAK1C,GAHAG,EAAOC,EAASZ,EAAWljI,EAAG0jI,GAC9Bx+H,EAAO6+H,EAASb,EAAWljI,EAAG0jI,GAEhB,OAATG,EAAgB,CAEpBJ,EAASvnI,MAAOwnI,GAAax+H,EAAKhJ,MAAOwnI,EACzC,UAID,GAAc,OAATx+H,EAAgB,CAEpBu+H,EAASvnI,MAAOwnI,GAAaG,EAAK3nI,MAAOwnI,EACzC,UAIDM,EAAaP,EAAUI,EAAM3+H,EAAMw+H,KAQtC,QAASI,GAASZ,EAAWljI,EAAG0jI,GAE/B,KAAQ1jI,GAAK,GAAI,CAEhB,GAAIyjI,GAAWP,EAAWljI,EAE1B,IAAoC,OAA/ByjI,EAASvnI,MAAOwnI,GAAsB,MAAOD,EAElDzjI,KAID,MAAO,MAIR,QAAS+jI,GAASb,EAAWljI,EAAG0jI,GAE/B,KAAQ1jI,EAAIkjI,EAAU1oI,QAAS,CAE9B,GAAIipI,GAAWP,EAAWljI,EAE1B,IAAoC,OAA/ByjI,EAASvnI,MAAOwnI,GAAsB,MAAOD,EAElDzjI,KAID,MAAO,MAIR,QAASgkI,GAAatgF,EAAKmgF,EAAM3+H,EAAMw+H,GAEtC,GAAOx+H,EAAKwvC,KAAOmvF,EAAKnvF,MAAW,EAGlC,YADAgP,EAAIxnD,MAAOwnI,GAAaG,EAAK3nI,MAAOwnI,GAKrChgF,GAAIxnD,MAAOwnI,IAAiBhgF,EAAIhP,KAAOmvF,EAAKnvF,OAAWxvC,EAAKhJ,MAAOwnI,GAAaG,EAAK3nI,MAAOwnI,KAAiBx+H,EAAKwvC,KAAOmvF,EAAKnvF,MAAWmvF,EAAK3nI,MAAOwnI,GAMtJ,QAASO,GAAoB5D,GAS5B,IAAM,GAPFvhI,IACHvC,KAAM8jI,EAAIj/D,aAAc,OAAU,UAClCzgD,MAAOumB,WAAYm5F,EAAIj/D,aAAc,UAAa,GAClDr8C,IAAKmiB,WAAYm5F,EAAIj/D,aAAc,QAAW,GAC9Cu4C,eAGS35G,EAAI,EAAG8K,EAAIu1H,EAAIC,WAAW9lI,OAAQwF,EAAI8K,EAAG9K,IAAO,CAEzD,GAAIo0F,GAAQisC,EAAIC,WAAYtgI,EAE5B,IAAwB,IAAnBo0F,EAAMotC,SAEX,OAASptC,EAAMn5B,UAEd,IAAK,qBACJn8D,EAAK66G,WAAWp1G,KAAMm8H,EAAStsC,EAAMhzB,aAAc,UAOtD0zB,GAAQklB,MAAOqmB,EAAIj/D,aAAc,OAAWtiE,EAI7C,QAASolI,GAAoBplI,GAQ5B,IAAM,GANFi1D,MAEAx3D,EAAOuC,EAAKvC,KACZu3D,EAAah1D,EAAKimB,IAAMjmB,EAAK6hB,QAAa,EAC1Cg5F,EAAa76G,EAAK66G,WAEZ35G,EAAI,EAAG2Y,EAAKghG,EAAWn/G,OAAQwF,EAAI2Y,EAAI3Y,IAIhD,IAAM,GAFFmkI,GAAkBvB,EAAcjpB,EAAY35G,IAEtCmM,EAAI,EAAGC,EAAK+3H,EAAgB3pI,OAAQ2R,EAAIC,EAAID,IAErD4nD,EAAOxvD,KAAM4/H,EAAiBh4H,GAMhC,OAAO,IAAIpS,OAAM85D,cAAet3D,EAAMu3D,EAAUC,GAIjD,QAASqwE,GAAkBrgI,GAE1B,MAAOq9H,GAAUtsC,GAAQklB,MAAOj2G,GAAMmgI,GAMvC,QAASG,GAAiBhE,GAIzB,IAAM,GAFFvhI,MAEMkB,EAAI,EAAG8K,EAAIu1H,EAAIC,WAAW9lI,OAAQwF,EAAI8K,EAAG9K,IAAO,CAEzD,GAAIo0F,GAAQisC,EAAIC,WAAYtgI,EAE5B,IAAwB,IAAnBo0F,EAAMotC,SAEX,OAASptC,EAAMn5B,UAEd,IAAK,OAEJn8D,EAAKiF,GAAK28H,EAAStsC,EAAMhzB,aAAc,WACvCtiE,EAAKwlI,KAAO/kB,EAAWnrB,EACvB,MAED,KAAK,QACJt1F,EAAKiF,GAAK28H,EAAStsC,EAAMhzB,aAAc,WACvC3mE,QAAQqa,KAAM,mEAOjBggF,GAAQyvC,YAAalE,EAAIj/D,aAAc,OAAWtiE,EAInD,QAASygH,GAAW8gB,GAMnB,IAAM,GAJFvhI,IACHuiI,YAGSrhI,EAAI,EAAG8K,EAAIu1H,EAAIC,WAAW9lI,OAAQwF,EAAI8K,EAAG9K,IAAO,CAEzD,GAAIo0F,GAAQisC,EAAIC,WAAYtgI,EAE5B,IAAwB,IAAnBo0F,EAAMotC,SAEX,OAASptC,EAAMn5B,UAEd,IAAK,oBACJn8D,EAAK0lI,gBAAkBhE,EAAapsC,EAAM0sC,YAC1C,MAED,KAAK,SACJ,GAAI/8H,GAAKqwF,EAAMhzB,aAAc,KAC7BtiE,GAAKuiI,QAASt9H,GAAO09H,GAAartC,EAClC,MAED,KAAK,SACJt1F,EAAK2lI,OAASC,EAAatwC,EAC3B,MAED,KAAK,iBACJt1F,EAAK6lI,cAAgBC,EAAoBxwC,IAO5C,MAAOt1F,GAIR,QAAS4lI,GAAarE,GAMrB,IAAM,GAJFvhI,IACH8iI,WAGS5hI,EAAI,EAAG8K,EAAIu1H,EAAIC,WAAW9lI,OAAQwF,EAAI8K,EAAG9K,IAAO,CAEzD,GAAIo0F,GAAQisC,EAAIC,WAAYtgI,EAE5B,IAAwB,IAAnBo0F,EAAMotC,SAEX,OAASptC,EAAMn5B,UAEd,IAAK,QACJ,GAAI4mE,GAAWztC,EAAMhzB,aAAc,YAC/Br9D,EAAK28H,EAAStsC,EAAMhzB,aAAc,UACtCtiE,GAAK8iI,OAAQC,GAAa99H,GAO7B,MAAOjF,GAIR,QAAS8lI,GAAoBvE,GAM5B,IAAM,GAJFvhI,IACH8iI,WAGS5hI,EAAI,EAAG8K,EAAIu1H,EAAIC,WAAW9lI,OAAQwF,EAAI8K,EAAG9K,IAAO,CAEzD,GAAIo0F,GAAQisC,EAAIC,WAAYtgI,EAE5B,IAAwB,IAAnBo0F,EAAMotC,SAEX,OAASptC,EAAMn5B,UAEd,IAAK,QACJ,GAAI4mE,GAAWztC,EAAMhzB,aAAc,YAC/Br9D,EAAK28H,EAAStsC,EAAMhzB,aAAc,WAClCpkE,EAASg0B,SAAUojE,EAAMhzB,aAAc,UAC3CtiE,GAAK8iI,OAAQC,IAAe99H,GAAIA,EAAI/G,OAAQA,EAC5C,MAED,KAAK,SACJ8B,EAAK+lI,OAASpE,EAAWrsC,EAAM0sC,YAC/B,MAED,KAAK,IACJhiI,EAAK0B,EAAIigI,EAAWrsC,EAAM0sC,cAO7B,MAAOhiI,GAIR,QAASgmI,GAAiBhmI,GAEzB,GAAIqiI,IACHp9H,GAAIjF,EAAKiF,IAGNkQ,EAAW6gF,GAAQvvE,WAAY47G,EAAMp9H,GAazC,YAXmB7I,KAAd4D,EAAKwlI,OAETnD,EAAMmD,KAAOS,EAAWjmI,EAAKwlI,MAI7BrwH,EAASotH,QAAQ7iH,YAAc2iH,EAAMmD,KAAKpkH,QAC1CjM,EAASotH,QAAQ9iH,YAAc4iH,EAAMmD,KAAKU,SAIpC7D,EAIR,QAAS4D,GAAWjmI,GAkGnB,QAASmmI,GAAY92H,EAAGhN,GAEvB,MAAOA,GAAEs8D,OAAStvD,EAAEsvD,OAlGrB,GA4BIz9D,GAAGmM,EAAGrB,EA1BNq2H,GACHsD,UACAvkH,SACC3gB,SACAw0C,OANe,GAQhBixF,SACCzlI,SACAw0C,OAVe,IAcbstF,EAAUviI,EAAKuiI,QACfsD,EAAgB7lI,EAAK6lI,cAErBE,EAASF,EAAcE,OACvBrkI,EAAImkI,EAAcnkI,EAClB0kI,EAAcP,EAAc/C,OAAOuD,MAAMnoI,OACzCooI,EAAeT,EAAc/C,OAAOyD,OAAOroI,OAE3CsoI,EAAcxmI,EAAKuiI,QAASviI,EAAK2lI,OAAO7C,OAAOuD,OAC/CI,EAAgBzmI,EAAKuiI,QAASviI,EAAK2lI,OAAO7C,OAAO4D,iBAEjDR,EAAU3D,EAASsD,EAAc/C,OAAOyD,OAAOthI,IAAKxE,MACpDw0C,EAAS,CAMb,KAAM/zC,EAAI,EAAG8K,EAAI+5H,EAAOrqI,OAAQwF,EAAI8K,EAAG9K,IAAO,CAE7C,GAAIylI,GAAaZ,EAAQ7kI,GACrB0lI,IAEJ,KAAMv5H,EAAI,EAAGA,EAAIs5H,EAAYt5H,IAAO,CAEnC,GAAIw5H,GAAYnlI,EAAGuzC,EAASmxF,GACxBU,EAAWplI,EAAGuzC,EAASqxF,GACvB/gC,EAAa2gC,EAASY,EAE1BF,GAAenhI,MAAQkc,MAAOklH,EAAWloE,OAAQ4mC,IAEjDtwD,GAAU,EAYX,IALA2xF,EAAex2H,KAAM+1H,GAKf94H,EAAI,EAAGA,EAzDG,EAyDaA,IAAO,CAEnC,GAAImW,GAAIojH,EAAgBv5H,OAEbjR,KAANonB,GAEJ6+G,EAAMjhH,QAAQ3gB,MAAMgF,KAAM+d,EAAE7B,OAC5B0gH,EAAM6D,QAAQzlI,MAAMgF,KAAM+d,EAAEm7C,UAI5B0jE,EAAMjhH,QAAQ3gB,MAAMgF,KAAM,GAC1B48H,EAAM6D,QAAQzlI,MAAMgF,KAAM,KAc7B,IAJA48H,EAAMj/E,YAAa,GAAInoD,OAAMM,SAAUuwC,UAAW9rC,EAAK0lI,iBAAkB7yD,YAInE3xE,EAAI,EAAG8K,EAAIw6H,EAAY/lI,MAAM/E,OAAQwF,EAAI8K,EAAG9K,IAAO,CAExD,GAAIzD,GAAO+oI,EAAY/lI,MAAOS,GAC1B6lI,GAAc,GAAI9rI,OAAMM,SAAUuwC,UAAW26F,EAAchmI,MAAOS,EAAIulI,EAAcxxF,QAAS49B,WAEjGwvD,GAAMsD,OAAOlgI,MAAQhI,KAAMA,EAAMspI,YAAaA,IAI/C,MAAO1E,GAYR,QAAS2E,GAAe/hI,GAEvB,MAAOq9H,GAAUtsC,GAAQyvC,YAAaxgI,GAAM+gI,GAM7C,QAASiB,GAAY1F,GAEpB,GAAIvhI,IACHknI,UAAW5F,EAAsBC,EAAK,aAAe,GAAIS,YAG1DhsC,IAAQ71F,OAAQohI,EAAIj/D,aAAc,OAAWtiE,EAI9C,QAASmnI,GAAYnnI,GAEpB,WAAoB5D,KAAf4D,EAAKqiI,MAA6BriI,EAAKqiI,MAErCriI,EAAKknI,UAIb,QAASE,GAAUniI,GAElB,MAAOq9H,GAAUtsC,GAAQ71F,OAAQ8E,GAAMkiI,GAMxC,QAASE,GAAa9F,GAIrB,IAAM,GAFFvhI,MAEMkB,EAAI,EAAG8K,EAAIu1H,EAAIC,WAAW9lI,OAAQwF,EAAI8K,EAAG9K,IAAO,CAEzD,GAAIo0F,GAAQisC,EAAIC,WAAYtgI,EAE5B,IAAwB,IAAnBo0F,EAAMotC,SAEX,OAASptC,EAAMn5B,UAEd,IAAK,iBACJn8D,EAAKsnI,QAAUC,EAA0BjyC,IAO5CU,GAAQwxC,QAASjG,EAAIj/D,aAAc,OAAWtiE,EAI/C,QAASunI,GAA0BhG,GAOlC,IAAM,GALFvhI,IACHynI,YACAjF,aAGSthI,EAAI,EAAG8K,EAAIu1H,EAAIC,WAAW9lI,OAAQwF,EAAI8K,EAAG9K,IAAO,CAEzD,GAAIo0F,GAAQisC,EAAIC,WAAYtgI,EAE5B,IAAwB,IAAnBo0F,EAAMotC,SAEX,OAASptC,EAAMn5B,UAEd,IAAK,WACJurE,EAAqBpyC,EAAOt1F,EAC5B,MAED,KAAK,YACJA,EAAK2nI,UAAYC,EAAsBtyC,IAO1C,MAAOt1F,GAIR,QAAS0nI,GAAqBnG,EAAKvhI,GAIlC,IAAM,GAFFgjI,GAAMzB,EAAIj/D,aAAc,OAElBphE,EAAI,EAAG8K,EAAIu1H,EAAIC,WAAW9lI,OAAQwF,EAAI8K,EAAG9K,IAAO,CAEzD,GAAIo0F,GAAQisC,EAAIC,WAAYtgI,EAE5B,IAAwB,IAAnBo0F,EAAMotC,SAEX,OAASptC,EAAMn5B,UAEd,IAAK,UACJn8D,EAAKynI,SAAUzE,GAAQ6E,EAAoBvyC,EAC3C,MAED,KAAK,YACJt1F,EAAKwiI,SAAUQ,GAAQ8E,EAAoBxyC,KAS/C,QAASuyC,GAAoBtG,GAI5B,IAAM,GAFFvhI,MAEMkB,EAAI,EAAG8K,EAAIu1H,EAAIC,WAAW9lI,OAAQwF,EAAI8K,EAAG9K,IAAO,CAEzD,GAAIo0F,GAAQisC,EAAIC,WAAYtgI,EAE5B,IAAwB,IAAnBo0F,EAAMotC,SAEX,OAASptC,EAAMn5B,UAEd,IAAK,YACJn8D,EAAKknI,UAAY5xC,EAAM0sC,aAO1B,MAAOhiI,GAIR,QAAS8nI,GAAoBvG,GAI5B,IAAM,GAFFvhI,MAEMkB,EAAI,EAAG8K,EAAIu1H,EAAIC,WAAW9lI,OAAQwF,EAAI8K,EAAG9K,IAAO,CAEzD,GAAIo0F,GAAQisC,EAAIC,WAAYtgI,EAE5B,IAAwB,IAAnBo0F,EAAMotC,SAEX,OAASptC,EAAMn5B,UAEd,IAAK,SACJn8D,EAAK+oE,OAASusB,EAAM0sC,aAOvB,MAAOhiI,GAIR,QAAS4nI,GAAsBrG,GAI9B,IAAM,GAFFvhI,MAEMkB,EAAI,EAAG8K,EAAIu1H,EAAIC,WAAW9lI,OAAQwF,EAAI8K,EAAG9K,IAAO,CAEzD,GAAIo0F,GAAQisC,EAAIC,WAAYtgI,EAE5B,IAAwB,IAAnBo0F,EAAMotC,SAEX,OAASptC,EAAMn5B,UAEd,IAAK,WACL,IAAK,UACL,IAAK,QACL,IAAK,QACJn8D,EAAKjD,KAAOu4F,EAAMn5B,SAClBn8D,EAAK2S,WAAao1H,EAAuBzyC,IAO5C,MAAOt1F,GAIR,QAAS+nI,GAAuBxG,GAI/B,IAAM,GAFFvhI,MAEMkB,EAAI,EAAG8K,EAAIu1H,EAAIC,WAAW9lI,OAAQwF,EAAI8K,EAAG9K,IAAO,CAEzD,GAAIo0F,GAAQisC,EAAIC,WAAYtgI,EAE5B,IAAwB,IAAnBo0F,EAAMotC,SAEX,OAASptC,EAAMn5B,UAEd,IAAK,WACL,IAAK,UACL,IAAK,WACL,IAAK,YACL,IAAK,cACL,IAAK,eACJn8D,EAAMs1F,EAAMn5B,UAAa6rE,EAAsB1yC,IAOlD,MAAOt1F,GAIR,QAASgoI,GAAsBzG,GAI9B,IAAM,GAFFvhI,MAEMkB,EAAI,EAAG8K,EAAIu1H,EAAIC,WAAW9lI,OAAQwF,EAAI8K,EAAG9K,IAAO,CAEzD,GAAIo0F,GAAQisC,EAAIC,WAAYtgI,EAE5B,IAAwB,IAAnBo0F,EAAMotC,SAEX,OAASptC,EAAMn5B,UAEd,IAAK,QACJn8D,EAAMs1F,EAAMn5B,UAAaulE,EAAapsC,EAAM0sC,YAC5C,MAED,KAAK,QACJhiI,EAAMs1F,EAAMn5B,UAAa/zB,WAAYktD,EAAM0sC,YAC3C,MAED,KAAK,UACJhiI,EAAMs1F,EAAMn5B,WAAel3D,GAAIqwF,EAAMhzB,aAAc,WAAa2lE,MAAOC,EAA6B5yC,KAOvG,MAAOt1F,GAIR,QAASkoI,GAA6B3G,GAMrC,IAAM,GAJFvhI,IACH2nI,cAGSzmI,EAAI,EAAG8K,EAAIu1H,EAAIC,WAAW9lI,OAAQwF,EAAI8K,EAAG9K,IAAO,CAEzD,GAAIo0F,GAAQisC,EAAIC,WAAYtgI,EAE5B,IAAwB,IAAnBo0F,EAAMotC,SAEX,OAASptC,EAAMn5B,UAEd,IAAK,QACJgsE,EAAkC7yC,EAAOt1F,IAO5C,MAAOA,GAIR,QAASmoI,GAAkC5G,EAAKvhI,GAE/C,IAAM,GAAIkB,GAAI,EAAG8K,EAAIu1H,EAAIC,WAAW9lI,OAAQwF,EAAI8K,EAAG9K,IAAO,CAEzD,GAAIo0F,GAAQisC,EAAIC,WAAYtgI,EAE5B,IAAwB,IAAnBo0F,EAAMotC,SAEX,OAASptC,EAAMn5B,UAEd,IAAK,YACJisE,EAA2C9yC,EAAOt1F,KAStD,QAASooI,GAA2C7G,EAAKvhI,GAExD,IAAM,GAAIkB,GAAI,EAAG8K,EAAIu1H,EAAIC,WAAW9lI,OAAQwF,EAAI8K,EAAG9K,IAAO,CAEzD,GAAIo0F,GAAQisC,EAAIC,WAAYtgI,EAE5B,IAAwB,IAAnBo0F,EAAMotC,SAEX,OAASptC,EAAMn5B,UAEd,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,UACJn8D,EAAK2nI,UAAWryC,EAAMn5B,UAAa/zB,WAAYktD,EAAM0sC,YACrD,MAED,KAAK,QACL,IAAK,QAIqC,SAApC1sC,EAAM0sC,YAAYqG,cAEtBroI,EAAK2nI,UAAWryC,EAAMn5B,UAAa,EAEY,UAApCm5B,EAAM0sC,YAAYqG,cAE7BroI,EAAK2nI,UAAWryC,EAAMn5B,UAAa,EAInCn8D,EAAK2nI,UAAWryC,EAAMn5B,UAAajqC,SAAUojE,EAAM0sC,eAYxD,QAASsG,GAAatoI,GAErB,MAAOA,GAIR,QAASuoI,GAAWtjI,GAEnB,MAAOq9H,GAAUtsC,GAAQwxC,QAASviI,GAAMqjI,GAMzC,QAASE,GAAejH,GAMvB,IAAM,GAJFvhI,IACHvC,KAAM8jI,EAAIj/D,aAAc,SAGfphE,EAAI,EAAG8K,EAAIu1H,EAAIC,WAAW9lI,OAAQwF,EAAI8K,EAAG9K,IAAO,CAEzD,GAAIo0F,GAAQisC,EAAIC,WAAYtgI,EAE5B,IAAwB,IAAnBo0F,EAAMotC,SAEX,OAASptC,EAAMn5B,UAEd,IAAK,kBACJn8D,EAAKixD,IAAM2wE,EAAStsC,EAAMhzB,aAAc,SAO3C0zB,GAAQ5vB,UAAWm7D,EAAIj/D,aAAc,OAAWtiE,EAIjD,QAASyoI,IAAezoI,GA0BvB,QAASk8G,GAAYwsB,GAEpB,GAAItF,GAAUuF,EAAOrB,QAAQ9E,SAAUkG,EAAczjI,GAErD,QAAiB7I,KAAZgnI,EAAwB,CAE5B,GAAIwF,GAAUD,EAAOrB,QAAQG,SAAUrE,EAAQr6D,QAE3CxpE,EAAUw9G,GAAcvK,KAAM40B,EAAUwB,EAAQ1B,YAEhDe,EAAQS,EAAcT,KAE1B,QAAe7rI,KAAV6rI,OAA2C7rI,KAApB6rI,EAAMN,YAA0D,IAA/B94C,EAASo5C,EAAMN,WAAwB,CAEnG,GAAIA,GAAYM,EAAMN,SAEtBpoI,GAAQ7C,MAAQirI,EAAUkB,MAAQ5tI,MAAMyzC,eAAiBzzC,MAAM4C,oBAC/D0B,EAAQ5C,MAAQgrI,EAAUmB,MAAQ7tI,MAAMyzC,eAAiBzzC,MAAM4C,oBAE/D0B,EAAQrB,OAAO6E,IAAK4kI,EAAUoB,SAAW,EAAGpB,EAAUqB,SAAW,GACjEzpI,EAAQpB,OAAO4E,IAAK4kI,EAAUsB,SAAW,EAAGtB,EAAUuB,SAAW,OAIjE3pI,GAAQ7C,MAAQzB,MAAMyzC,eACtBnvC,EAAQ5C,MAAQ1B,MAAMyzC,cAIvB,OAAOnvC,GAMR,MAFA5D,SAAQC,MAAO,yCAA0C8sI,EAAczjI,IAEhE,KA3DR,GAGIoL,GAHAs4H,EAASJ,EAAWvoI,EAAKixD,KACzB02E,EAAYgB,EAAOrB,QAAQK,SAI/B,QAASA,EAAU5qI,MAElB,IAAK,QACL,IAAK,QACJsT,EAAW,GAAIpV,OAAMs8B,iBACrB,MAED,KAAK,UACJlnB,EAAW,GAAIpV,OAAMq8B,mBACrB,MAED,SACCjnB,EAAW,GAAIpV,OAAMopB,kBAKvBhU,EAAS5S,KAAOuC,EAAKvC,IAyCrB,IAAIkV,GAAag1H,EAAUh1H,UAE3B,KAAM,GAAIiyC,KAAOjyC,GAAa,CAE7B,GAAIw2H,GAAYx2H,EAAYiyC,EAE5B,QAASA,GAER,IAAK,UACCukF,EAAUp/H,OAAQsG,EAAStG,MAAM+hC,UAAWq9F,EAAUp/H,OACtDo/H,EAAU5pI,UAAU8Q,EAAS9P,IAAM27G,EAAYitB,EAAU5pI,SAC9D,MACD,KAAK,WACC4pI,EAAUp/H,OAASsG,EAASgsC,UAAWhsC,EAASgsC,SAASvQ,UAAWq9F,EAAUp/H,OAC9Eo/H,EAAU5pI,UAAU8Q,EAASqU,YAAcw3F,EAAYitB,EAAU5pI,SACtE,MACD,KAAK,YACC4pI,EAAUC,OAAS/4H,EAASisC,YAChCjsC,EAASisC,UAAY6sF,EAAUC,MAChC,MACD,KAAK,WACCD,EAAUp/H,OAASsG,EAASurC,UAChCvrC,EAASurC,SAAS9P,UAAWq9F,EAAUp/H,MACxC,MACD,KAAK,cAEJsG,EAASsB,aAAc,CACvB,MACD,KAAK,mBACqBvV,KAApB+sI,EAAUC,QAAsB/4H,EAASvG,QAAUq/H,EAAUC,OAClE/4H,EAASsB,aAAc,GAO1B,MAAOtB,GAIR,QAAS4xG,IAAah9G,GAErB,MAAOq9H,GAAUtsC,GAAQ5vB,UAAWnhE,GAAMwjI,IAM3C,QAASY,IAAa9H,GAMrB,IAAM,GAJFvhI,IACHvC,KAAM8jI,EAAIj/D,aAAc,SAGfphE,EAAI,EAAG8K,EAAIu1H,EAAIC,WAAW9lI,OAAQwF,EAAI8K,EAAG9K,IAAO,CAEzD,GAAIo0F,GAAQisC,EAAIC,WAAYtgI,EAE5B,IAAwB,IAAnBo0F,EAAMotC,SAEX,OAASptC,EAAMn5B,UAEd,IAAK,SACJn8D,EAAKspI,OAASC,GAAmBj0C,IAOpCU,GAAQhsD,QAASu3F,EAAIj/D,aAAc,OAAWtiE,EAI/C,QAASupI,IAAmBhI,GAE3B,IAAM,GAAIrgI,GAAI,EAAGA,EAAIqgI,EAAIC,WAAW9lI,OAAQwF,IAAO,CAElD,GAAIo0F,GAAQisC,EAAIC,WAAYtgI,EAE5B,QAASo0F,EAAMn5B,UAEd,IAAK,mBACJ,MAAOqtE,IAAsBl0C,IAMhC,SAID,QAASk0C,IAAsBjI,GAI9B,IAAM,GAFFvhI,MAEMkB,EAAI,EAAGA,EAAIqgI,EAAIC,WAAW9lI,OAAQwF,IAAO,CAElD,GAAIo0F,GAAQisC,EAAIC,WAAYtgI,EAE5B,QAASo0F,EAAMn5B,UAEd,IAAK,cACL,IAAK,eAEJn8D,EAAK2nI,UAAYryC,EAAMn5B,SACvBn8D,EAAK2S,WAAa82H,GAAuBn0C,IAQ5C,MAAOt1F,GAIR,QAASypI,IAAuBlI,GAI/B,IAAM,GAFFvhI,MAEMkB,EAAI,EAAGA,EAAIqgI,EAAIC,WAAW9lI,OAAQwF,IAAO,CAElD,GAAIo0F,GAAQisC,EAAIC,WAAYtgI,EAE5B,QAASo0F,EAAMn5B,UAEd,IAAK,OACL,IAAK,OACL,IAAK,OACL,IAAK,OACL,IAAK,QACL,IAAK,OACL,IAAK,eACJn8D,EAAMs1F,EAAMn5B,UAAa/zB,WAAYktD,EAAM0sC,cAO9C,MAAOhiI,GAIR,QAAS0pI,IAAa1pI,GAErB,GAAI8K,EAEJ,QAAS9K,EAAKspI,OAAO3B,WAEpB,IAAK,cACJ78H,EAAS,GAAI7P,OAAMwuC,kBAClBzpC,EAAKspI,OAAO32H,WAAWg3H,KACvB3pI,EAAKspI,OAAO32H,WAAWi3H,aACvB5pI,EAAKspI,OAAO32H,WAAWk3H,MACvB7pI,EAAKspI,OAAO32H,WAAWm3H,KAExB,MAED,KAAK,eACJ,GAAIC,GAAO/pI,EAAKspI,OAAO32H,WAAWo3H,KAC9BC,EAAOhqI,EAAKspI,OAAO32H,WAAWq3H,KAC9BC,EAAcjqI,EAAKspI,OAAO32H,WAAWi3H,YAEzCI,OAAkB5tI,KAAT4tI,EAAyBD,EAAOE,EAAgBD,EACzDD,MAAkB3tI,KAAT2tI,EAAyBC,EAAOC,EAAgBF,EAEzDC,GAAQ,GACRD,GAAQ,GAERj/H,EAAS,GAAI7P,OAAMujB,oBAChBwrH,EAAMA,EAAMD,GAAQA,EACtB/pI,EAAKspI,OAAO32H,WAAWk3H,MACvB7pI,EAAKspI,OAAO32H,WAAWm3H,KAExB,MAED,SACCh/H,EAAS,GAAI7P,OAAMwuC,kBAOrB,MAFA3+B,GAAOrN,KAAOuC,EAAKvC,KAEZqN,EAIR,QAAS2gC,IAAWxmC,GAEnB,MAAOq9H,GAAUtsC,GAAQhsD,QAAS/kC,GAAMykI,IAMzC,QAASQ,IAAY3I,GAIpB,IAAM,GAFFvhI,MAEMkB,EAAI,EAAG8K,EAAIu1H,EAAIC,WAAW9lI,OAAQwF,EAAI8K,EAAG9K,IAAO,CAEzD,GAAIo0F,GAAQisC,EAAIC,WAAYtgI,EAE5B,IAAwB,IAAnBo0F,EAAMotC,SAEX,OAASptC,EAAMn5B,UAEd,IAAK,mBACJn8D,EAAOmqI,GAAqB70C,IAO/BU,GAAQ5kF,OAAQmwH,EAAIj/D,aAAc,OAAWtiE,EAI9C,QAASmqI,IAAqB5I,GAI7B,IAAM,GAFFvhI,MAEMkB,EAAI,EAAG8K,EAAIu1H,EAAIC,WAAW9lI,OAAQwF,EAAI8K,EAAG9K,IAAO,CAEzD,GAAIo0F,GAAQisC,EAAIC,WAAYtgI,EAE5B,IAAwB,IAAnBo0F,EAAMotC,SAEX,OAASptC,EAAMn5B,UAEd,IAAK,cACL,IAAK,QACL,IAAK,OACL,IAAK,UAEJn8D,EAAK2nI,UAAYryC,EAAMn5B,SACvBn8D,EAAK2S,WAAay3H,GAAsB90C,IAM3C,MAAOt1F,GAIR,QAASoqI,IAAsB7I,GAI9B,IAAM,GAFFvhI,MAEMkB,EAAI,EAAG8K,EAAIu1H,EAAIC,WAAW9lI,OAAQwF,EAAI8K,EAAG9K,IAAO,CAEzD,GAAIo0F,GAAQisC,EAAIC,WAAYtgI,EAE5B,IAAwB,IAAnBo0F,EAAMotC,SAEX,OAASptC,EAAMn5B,UAEd,IAAK,QACJ,GAAI17D,GAAQihI,EAAapsC,EAAM0sC,YAC/BhiI,GAAK+J,OAAQ,GAAI9O,OAAM2L,OAAQklC,UAAWrrC,EAC1C,MAED,KAAK,gBACJT,EAAKqqI,aAAejiG,WAAYktD,EAAM0sC,YACtC,MAED,KAAK,wBACJ,GAAI1nG,GAAI8N,WAAYktD,EAAM0sC,YAC1BhiI,GAAKsrB,SAAWgP,EAAI3W,KAAK81B,KAAM,EAAInf,GAAM,GAO5C,MAAOt6B,GAIR,QAASsqI,IAAYtqI,GAEpB,GAAI8Z,EAEJ,QAAS9Z,EAAK2nI,WAEb,IAAK,cACJ7tH,EAAQ,GAAI7e,OAAMw3D,gBAClB,MAED,KAAK,QACJ34C,EAAQ,GAAI7e,OAAMs3D,UAClB,MAED,KAAK,OACJz4C,EAAQ,GAAI7e,OAAMo3D,SAClB,MAED,KAAK,UACJv4C,EAAQ,GAAI7e,OAAMy3D,aAQpB,MAHK1yD,GAAK2S,WAAW5I,OAAQ+P,EAAM/P,MAAMuC,KAAMtM,EAAK2S,WAAW5I,OAC1D/J,EAAK2S,WAAW2Y,WAAWxR,EAAMwR,SAAWtrB,EAAK2S,WAAW2Y,UAE1DxR,EAIR,QAASywH,IAAUtlI,GAElB,MAAOq9H,GAAUtsC,GAAQ5kF,OAAQnM,GAAMqlI,IAMxC,QAASE,IAAejJ,GAWvB,IAAM,GATFvhI,IACHvC,KAAM8jI,EAAIj/D,aAAc,QACxBigE,WACAh7H,YACAkjI,eAGGpxC,EAAOioC,EAAsBC,EAAK,QAAU,GAEtCrgI,EAAI,EAAGA,EAAIm4F,EAAKmoC,WAAW9lI,OAAQwF,IAAO,CAEnD,GAAIo0F,GAAQ+D,EAAKmoC,WAAYtgI,EAE7B,IAAwB,IAAnBo0F,EAAMotC,SAAX,CAEA,GAAIz9H,GAAKqwF,EAAMhzB,aAAc,KAE7B,QAASgzB,EAAMn5B,UAEd,IAAK,SACJn8D,EAAKuiI,QAASt9H,GAAO09H,GAAartC,EAClC,MAED,KAAK,WAEJt1F,EAAKuH,SAAWmjI,GAAuBp1C,EACvC,MAED,KAAK,WACJ35F,QAAQqa,KAAM,oDAAqDs/E,EAAMn5B,SACzE,MAED,KAAK,QACL,IAAK,aACL,IAAK,WACL,IAAK,YACJn8D,EAAKyqI,WAAWhlI,KAAMklI,GAAwBr1C,GAC9C,MAED,SACC35F,QAAQo6B,IAAKu/D,KAMhBU,GAAQvvE,WAAY86G,EAAIj/D,aAAc,OAAWtiE,EAIlD,QAAS2iI,IAAapB,GAOrB,IAAM,GALFvhI,IACHS,SACAw0C,OAAQ,GAGC/zC,EAAI,EAAGA,EAAIqgI,EAAIC,WAAW9lI,OAAQwF,IAAO,CAElD,GAAIo0F,GAAQisC,EAAIC,WAAYtgI,EAE5B,IAAwB,IAAnBo0F,EAAMotC,SAEX,OAASptC,EAAMn5B,UAEd,IAAK,cACJn8D,EAAKS,MAAQihI,EAAapsC,EAAM0sC,YAChC,MAED,KAAK,aACJhiI,EAAKS,MAAQghI,EAAcnsC,EAAM0sC,YACjC,MAED,KAAK,mBACJ,GAAI4I,GAAWtJ,EAAsBhsC,EAAO,YAAc,OAExCl5F,KAAbwuI,IAEJ5qI,EAAKi1C,OAAS/iB,SAAU04G,EAAStoE,aAAc,aASnD,MAAOtiE,GAIR,QAAS0qI,IAAuBnJ,GAI/B,IAAM,GAFFvhI,MAEMkB,EAAI,EAAGA,EAAIqgI,EAAIC,WAAW9lI,OAAQwF,IAAO,CAElD,GAAIo0F,GAAQisC,EAAIC,WAAYtgI,EAEJ,KAAnBo0F,EAAMotC,WAEX1iI,EAAMs1F,EAAMhzB,aAAc,aAAiBs/D,EAAStsC,EAAMhzB,aAAc,YAIzE,MAAOtiE,GAIR,QAAS2qI,IAAwBpJ,GAUhC,IAAM,GARFsJ,IACH9tI,KAAMwkI,EAAIplE,SACV9rD,SAAUkxH,EAAIj/D,aAAc,YAC5B5lD,MAAOwV,SAAUqvG,EAAIj/D,aAAc,UACnCwgE,UACA7tF,OAAQ,GAGC/zC,EAAI,EAAG8K,EAAIu1H,EAAIC,WAAW9lI,OAAQwF,EAAI8K,EAAG9K,IAAO,CAEzD,GAAIo0F,GAAQisC,EAAIC,WAAYtgI,EAE5B,IAAwB,IAAnBo0F,EAAMotC,SAEX,OAASptC,EAAMn5B,UAEd,IAAK,QACJ,GAAIl3D,GAAK28H,EAAStsC,EAAMhzB,aAAc,WAClCygE,EAAWztC,EAAMhzB,aAAc,YAC/BpkE,EAASg0B,SAAUojE,EAAMhzB,aAAc,UAC3CuoE,GAAU/H,OAAQC,IAAe99H,GAAIA,EAAI/G,OAAQA,GACjD2sI,EAAU51F,OAAStxB,KAAK3c,IAAK6jI,EAAU51F,OAAQ/2C,EAAS,EACxD,MAED,KAAK,SACJ2sI,EAAU9E,OAASpE,EAAWrsC,EAAM0sC,YACpC,MAED,KAAK,IACJ6I,EAAU5xG,EAAI0oG,EAAWrsC,EAAM0sC,cAOlC,MAAO6I,GAIR,QAASC,IAAiBL,GAIzB,IAAM,GAFFpI,MAEMnhI,EAAI,EAAGA,EAAIupI,EAAW/uI,OAAQwF,IAAO,CAE9C,GAAI2pI,GAAYJ,EAAYvpI,OAEK9E,KAA5BimI,EAAOwI,EAAU9tI,QAAuBslI,EAAOwI,EAAU9tI,UAE9DslI,EAAOwI,EAAU9tI,MAAO0I,KAAMolI,GAI/B,MAAOxI,GAIR,QAAS0I,IAAe/qI,GAEvB,GAAIqiI,MAEAE,EAAUviI,EAAKuiI,QACfh7H,EAAWvH,EAAKuH,SAChBkjI,EAAazqI,EAAKyqI,UAEtB,IAA2B,IAAtBA,EAAW/uI,OAAe,QAK/B,IAAIsvI,GAAoBF,GAAiBL,EAEzC,KAAM,GAAI1tI,KAAQiuI,GAIjB3I,EAAOtlI,GAASkuI,GAAmBD,EAAmBjuI,GAAQwlI,EAASh7H,EAIxE,OAAO86H,GAIR,QAAS4I,IAAmBR,EAAYlI,EAASh7H,GAkBhD,IAAM,GAhBF86H,MAEAl0H,GAAa1N,SAAWw0C,OAAQ,GAChClhC,GAAWtT,SAAWw0C,OAAQ,GAC9BvrC,GAAOjJ,SAAWw0C,OAAQ,GAC1BlrC,GAAUtJ,SAAWw0C,OAAQ,GAE7B4xF,GAAcpmI,SAAWw0C,OAAQ,GACjCswD,GAAe9kG,SAAWw0C,OAAQ,GAElC9/B,EAAW,GAAIla,OAAMwmB,eAErBypH,KAEArpH,EAAQ,EAAGnF,EAAQ,EAEbuc,EAAI,EAAGA,EAAIwxG,EAAW/uI,OAAQu9B,IAAO,CAE9C,GAAI4xG,GAAYJ,EAAYxxG,GACxB6pG,EAAS+H,EAAU/H,OACnBqI,EAAgB,CAEfN,GAAU9E,QAAoC,IAA1B8E,EAAU9E,OAAQ,KAE1CoF,EAAgB,GAQhBzuH,EAFuB,UAAnBmuH,EAAU9tI,MAAuC,eAAnB8tI,EAAU9tI,KAElB,EAAlB8tI,EAAUnuH,MAIQ,EAAlBmuH,EAAUnuH,MAAYyuH,EAI/Bh2H,EAASsO,SAAU5B,EAAOnF,EAAOuc,GACjCpX,GAASnF,EAIJmuH,EAAUx6H,UAEd66H,EAAazlI,KAAMolI,EAAUx6H,SAM9B,KAAM,GAAI5S,KAAQqlI,GAAS,CAE1B,GAAIsI,GAAQtI,EAAQrlI,EAEpB,QAASA,GAER,IAAK,SACJ,IAAM,GAAImnD,KAAOr9C,GAAW,CAE3B,GAAItC,GAAKsC,EAAUq9C,EAEnB,QAASA,GAER,IAAK,WACJymF,GAAmBR,EAAWtI,EAASt9H,GAAMmmI,EAAMltI,OAAQiQ,EAAS1N,OACpE0N,EAAS8mC,OAASstF,EAASt9H,GAAKgwC,OAE3BstF,EAAQ9iH,aAAe8iH,EAAQ7iH,cAEnC2rH,GAAmBR,EAAWtI,EAAQ7iH,YAAa0rH,EAAMltI,OAAQ2oI,EAAUpmI,OAC3E4qI,GAAmBR,EAAWtI,EAAQ9iH,YAAa2rH,EAAMltI,OAAQqnG,EAAW9kG,OAG7E,MAED,KAAK,SACJ4qI,GAAmBR,EAAWtI,EAASt9H,GAAMmmI,EAAMltI,OAAQ6V,EAAOtT,OAClEsT,EAAOkhC,OAASstF,EAASt9H,GAAKgwC,MAC9B,MAED,KAAK,QACJo2F,GAAmBR,EAAWtI,EAASt9H,GAAMmmI,EAAMltI,OAAQ6L,EAAMtJ,OACjEsJ,EAAMkrC,OAASstF,EAASt9H,GAAKgwC,MAC7B,MAED,KAAK,WACJo2F,GAAmBR,EAAWtI,EAASt9H,GAAMmmI,EAAMltI,OAAQwL,EAAGjJ,OAC9DiJ,EAAGurC,OAASstF,EAASt9H,GAAKgwC,MAC1B,MAED,SACCt5C,QAAQqa,KAAM,4EAA6E4uC,IAK9F,KAED,KAAK,SACJymF,GAAmBR,EAAWtI,EAAS6I,EAAMnmI,IAAMmmI,EAAMltI,OAAQ6V,EAAOtT,OACxEsT,EAAOkhC,OAASstF,EAAS6I,EAAMnmI,IAAKgwC,MACpC,MAED,KAAK,QACJo2F,GAAmBR,EAAWtI,EAAS6I,EAAMnmI,IAAMmmI,EAAMltI,OAAQ6L,EAAMtJ,OACvEsJ,EAAMkrC,OAASstF,EAAS6I,EAAMnmI,IAAKgwC,MACnC,MAED,KAAK,WACJo2F,GAAmBR,EAAWtI,EAAS6I,EAAMnmI,IAAMmmI,EAAMltI,OAAQwL,EAAGjJ,OACpEiJ,EAAGurC,OAASstF,EAAS6I,EAAMnmI,IAAKgwC,SAuBpC,MAZK9mC,GAAS1N,MAAM/E,OAAS,GAAIyZ,EAAS2O,aAAc,WAAY,GAAI7oB,OAAMgmB,uBAAwB9S,EAAS1N,MAAO0N,EAAS8mC,SAC1HlhC,EAAOtT,MAAM/E,OAAS,GAAIyZ,EAAS2O,aAAc,SAAU,GAAI7oB,OAAMgmB,uBAAwBlN,EAAOtT,MAAOsT,EAAOkhC,SAClHlrC,EAAMtJ,MAAM/E,OAAS,GAAIyZ,EAAS2O,aAAc,QAAS,GAAI7oB,OAAMgmB,uBAAwBlX,EAAMtJ,MAAOsJ,EAAMkrC,SAC9GvrC,EAAGjJ,MAAM/E,OAAS,GAAIyZ,EAAS2O,aAAc,KAAM,GAAI7oB,OAAMgmB,uBAAwBvX,EAAGjJ,MAAOiJ,EAAGurC,SAElG4xF,EAAUpmI,MAAM/E,OAAS,GAAIyZ,EAAS2O,aAAc,YAAa,GAAI7oB,OAAMgmB,uBAAwB4lH,EAAUpmI,MAAOomI,EAAU5xF,SAC9HswD,EAAW9kG,MAAM/E,OAAS,GAAIyZ,EAAS2O,aAAc,aAAc,GAAI7oB,OAAMgmB,uBAAwBskF,EAAW9kG,MAAO8kG,EAAWtwD,SAEvIotF,EAAMriI,KAAOmV,EACbktH,EAAMtlI,KAAO0tI,EAAY,GAAI1tI,KAC7BslI,EAAM6I,aAAeA,EAEd7I,EAIR,QAASgJ,IAAmBR,EAAW9hE,EAAQ7qE,EAAQuC,GAMtD,QAAS6qI,GAAYpqI,GAKpB,IAHA,GAAIygB,GAAQP,EAASlgB,EAAIhD,GAAWqtI,EAChC7vI,EAASimB,EAAQ4pH,EAEb5pH,EAAQjmB,EAAQimB,IAEvBlhB,EAAMgF,KAAMuqH,EAAaruG,IAX3B,GAAIP,GAAUypH,EAAU5xG,EACpBgc,EAAS41F,EAAU51F,OACnB8wF,EAAS8E,EAAU9E,OAenByF,EAAW,EAEXxb,EAAcjnD,EAAOtoE,MACrB8qI,EAAexiE,EAAO9zB,MAE1B,QAA0B74C,KAArByuI,EAAU9E,OAAuB,CAIrC,IAAM,GAFFpkH,GAAQ,EAEFzgB,EAAI,EAAG8K,EAAI+5H,EAAOrqI,OAAQwF,EAAI8K,EAAG9K,IAAO,CAEjD,GAAIwb,GAAQqpH,EAAQ7kI,EAEpB,IAAe,IAAVwb,EAAc,CAElB,GAAIrN,GAAIsS,EAAiB,EAATszB,EACZ5yC,EAAIsf,EAAiB,EAATszB,EACZj2B,EAAI2C,EAAiB,EAATszB,EACZzxB,EAAI7B,EAAiB,EAATszB,CAEhBq2F,GAAYj8H,GAAKi8H,EAAYjpI,GAAKipI,EAAY9nH,GAC9C8nH,EAAYjpI,GAAKipI,EAAYtsH,GAAKssH,EAAY9nH,OAExC,IAAe,IAAV9G,EAAc,CAEzB,GAAIrN,GAAIsS,EAAiB,EAATszB,EACZ5yC,EAAIsf,EAAiB,EAATszB,EACZj2B,EAAI2C,EAAiB,EAATszB,CAEhBq2F,GAAYj8H,GAAKi8H,EAAYjpI,GAAKipI,EAAYtsH,OAI9CwsH,GAAW7nH,KAAK3c,IAAKwkI,EAAU9uH,EAIhCiF,IAASszB,EAASv4B,EAId8uH,EAAW,GAEf7vI,QAAQo6B,IAAK,0EAMd,KAAM,GAAI70B,GAAI,EAAG8K,EAAIoV,EAAQ1lB,OAAQwF,EAAI8K,EAAG9K,GAAK+zC,EAEhDq2F,EAAYpqI,GAQf,QAAS8gH,IAAa/8G,GAErB,MAAOq9H,GAAUtsC,GAAQvvE,WAAYxhB,GAAM8lI,IAM5C,QAASU,IAAsBlK,GAQ9B,IAAM,GANFvhI,IACHvC,KAAM8jI,EAAIj/D,aAAc,SAAY,GACpCqjE,UACA+F,UAGSxqI,EAAI,EAAGA,EAAIqgI,EAAIC,WAAW9lI,OAAQwF,IAAO,CAElD,GAAIo0F,GAAQisC,EAAIC,WAAYtgI,EAE5B,IAAwB,IAAnBo0F,EAAMotC,SAEX,OAASptC,EAAMn5B,UAEd,IAAK,mBACJwvE,GAAgCr2C,EAAOt1F,IAO1Cg2F,GAAQ41C,iBAAkBrK,EAAIj/D,aAAc,OAAWtiE,EAIxD,QAAS6rI,IAAsB7rI,GAE9B,WAAoB5D,KAAf4D,EAAKqiI,MAA6BriI,EAAKqiI,MAErCriI,EAIR,QAAS8rI,IAAoB7mI,GAE5B,MAAOq9H,GAAUtsC,GAAQ41C,iBAAkB3mI,GAAM4mI,IAIlD,QAASF,IAAgCpK,EAAKvhI,GAE7C,IAAM,GAAIkB,GAAI,EAAGA,EAAIqgI,EAAIC,WAAW9lI,OAAQwF,IAAO,CAElD,GAAIo0F,GAAQisC,EAAIC,WAAYtgI,EAE5B,IAAwB,IAAnBo0F,EAAMotC,SAEX,OAASptC,EAAMn5B,UAEd,IAAK,QACJn8D,EAAK2lI,OAAQrwC,EAAMhzB,aAAc,QAAYypE,GAAsBz2C,EACnE,MAED,KAAK,OACJt1F,EAAK0rI,MAAMjmI,KAAMumI,GAAqB12C,MAS1C,QAASy2C,IAAsBxK,GAI9B,IAAM,GAFFvhI,GAEMkB,EAAI,EAAGA,EAAIqgI,EAAIC,WAAW9lI,OAAQwF,IAAO,CAElD,GAAIo0F,GAAQisC,EAAIC,WAAYtgI,EAE5B,IAAwB,IAAnBo0F,EAAMotC,SAEX,OAASptC,EAAMn5B,UAEd,IAAK,YACL,IAAK,WACJn8D,EAAOisI,GAA+B32C,IAOzC,MAAOt1F,GAIR,QAASisI,IAA+B1K,EAAKvhI,GAgB5C,IAAM,GAdFA,IACHgjI,IAAKzB,EAAIj/D,aAAc,OACvB7kE,KAAM8jI,EAAIj/D,aAAc,SAAY,GACpC0R,KAAM,GAAI/4E,OAAMoB,QAChB6vI,QACCnlI,IAAK,EACLC,IAAK,GAENjK,KAAMwkI,EAAIplE,SACVgwE,QAAQ,EACRC,aAAc,EACdC,eAAgB,GAGPnrI,EAAI,EAAGA,EAAIqgI,EAAIC,WAAW9lI,OAAQwF,IAAO,CAElD,GAAIo0F,GAAQisC,EAAIC,WAAYtgI,EAE5B,IAAwB,IAAnBo0F,EAAMotC,SAEX,OAASptC,EAAMn5B,UAEd,IAAK,OACJ,GAAI17D,GAAQihI,EAAapsC,EAAM0sC,YAC/BhiI,GAAKg0E,KAAKloC,UAAWrrC,EACrB,MACD,KAAK,SACJ,GAAIuG,GAAMsuF,EAAMgsC,qBAAsB,OAAS,GAC3Cv6H,EAAMuuF,EAAMgsC,qBAAsB,OAAS,EAE/CthI,GAAKksI,OAAOllI,IAAMohC,WAAYphC,EAAIg7H,aAClChiI,EAAKksI,OAAOnlI,IAAMqhC,WAAYrhC,EAAIi7H,cAmBrC,MAVKhiI,GAAKksI,OAAOnlI,KAAO/G,EAAKksI,OAAOllI,MAEnChH,EAAKmsI,QAAS,GAMfnsI,EAAKqsI,gBAAmBrsI,EAAKksI,OAAOnlI,IAAM/G,EAAKksI,OAAOllI,KAAQ,EAEvDhH,EAIR,QAASgsI,IAAqBzK,GAS7B,IAAM,GAPFvhI,IACHgjI,IAAKzB,EAAIj/D,aAAc,OACvB7kE,KAAM8jI,EAAIj/D,aAAc,SAAY,GACpCgqE,eACApI,eAGShjI,EAAI,EAAGA,EAAIqgI,EAAIC,WAAW9lI,OAAQwF,IAAO,CAElD,GAAIo0F,GAAQisC,EAAIC,WAAYtgI,EAE5B,IAAwB,IAAnBo0F,EAAMotC,SAEX,OAASptC,EAAMn5B,UAEd,IAAK,kBACJn8D,EAAKssI,YAAY7mI,KAAM8mI,GAA2Bj3C,GAClD,MAED,KAAK,SACL,IAAK,YACL,IAAK,SACJt1F,EAAKkkI,WAAWz+H,KAAM+mI,GAA0Bl3C,KAOnD,MAAOt1F,GAIR,QAASusI,IAA2BhL,GAQnC,IAAM,GANFvhI,IACHysI,MAAOlL,EAAIj/D,aAAc,SAAUvzC,MAAO,KAAMuK,MAChD4qG,cACAwH,UAGSxqI,EAAI,EAAGA,EAAIqgI,EAAIC,WAAW9lI,OAAQwF,IAAO,CAElD,GAAIo0F,GAAQisC,EAAIC,WAAYtgI,EAE5B,IAAwB,IAAnBo0F,EAAMotC,SAEX,OAASptC,EAAMn5B,UAEd,IAAK,OACJn8D,EAAK0rI,MAAMjmI,KAAMumI,GAAqB12C,GACtC,MAED,KAAK,SACL,IAAK,YACL,IAAK,SACJt1F,EAAKkkI,WAAWz+H,KAAM+mI,GAA0Bl3C,KAOnD,MAAOt1F,GAIR,QAASwsI,IAA0BjL,GAElC,GAAIvhI,IACHjD,KAAMwkI,EAAIplE,UAGP17D,EAAQihI,EAAaH,EAAIS,YAE7B,QAAShiI,EAAKjD,MAEb,IAAK,SACJiD,EAAK+2F,IAAM,GAAI97F,OAAMM,QACrByE,EAAK+2F,IAAIjrD,UAAWrrC,GAAQoyE,WAC5B,MAED,KAAK,YACJ7yE,EAAK+2F,IAAM,GAAI97F,OAAMoB,QACrB2D,EAAK+2F,IAAIjrD,UAAWrrC,EACpB,MAED,KAAK,SACJT,EAAK+2F,IAAM,GAAI97F,OAAMoB,QACrB2D,EAAK+2F,IAAIjrD,UAAWrrC,GACpBT,EAAKqtB,MAAQpyB,MAAM0oB,KAAKonD,SAAUtqE,EAAO,IAK3C,MAAOT,GAIR,QAAS0sI,IAAsBnL,GAM9B,IAAM,GAJFvhI,IACH2sI,kBAGSzrI,EAAI,EAAGA,EAAIqgI,EAAIC,WAAW9lI,OAAQwF,IAAO,CAElD,GAAIo0F,GAAQisC,EAAIC,WAAYtgI,EAE5B,IAAwB,IAAnBo0F,EAAMotC,SAEX,OAASptC,EAAMn5B,UAEd,IAAK,kBACJn8D,EAAK2sI,cAAclnI,KAAMmnI,GAA8Bt3C,KAO1DU,GAAQ62C,iBAAkBjL,EAASL,EAAIj/D,aAAc,SAActiE,EAIpE,QAAS4sI,IAA8BrL,GAMtC,IAAM,GAJFvhI,IACH0a,OAAQ6mH,EAAIj/D,aAAc,UAAWvzC,MAAO,KAAMuK,OAGzCp4B,EAAI,EAAGA,EAAIqgI,EAAIC,WAAW9lI,OAAQwF,IAAO,CAElD,GAAIo0F,GAAQisC,EAAIC,WAAYtgI,EAE5B,IAAwB,IAAnBo0F,EAAMotC,SAEX,OAASptC,EAAMn5B,UAEd,IAAK,OACJ,GAAI2wE,GAAQx3C,EAAMgsC,qBAAsB,SAAW,EACnDthI,GAAKg0E,KAAO84D,EAAM9K,WAClB,IAAI+K,GAAgB/sI,EAAKg0E,KAAKjlD,MAAO,SAAUuK,MAAMvK,MAAO,QAAU,EACtE/uB,GAAKgtI,WAAaD,EAAcj4B,OAAQ,EAAGi4B,EAAcrxI,OAAS,IAOrE,MAAOsE,GAIR,QAASitI,IAAsBjtI,GAE9B,WAAoB5D,KAAf4D,EAAKqiI,MAA6BriI,EAAKqiI,MAErCriI,EAIR,QAASktI,IAAoBjoI,GAE5B,MAAOq9H,GAAUtsC,GAAQ62C,iBAAkB5nI,GAAMgoI,IAoLlD,QAASE,IAAoBlxE,GAM5B,IAAM,GAJFioE,MAEA3C,EAAM6L,GAAQC,cAAe,QAAUpxE,EAAKh3D,GAAK,MAE3C/D,EAAI,EAAGA,EAAIqgI,EAAIC,WAAW9lI,OAAQwF,IAAO,CAElD,GAAIo0F,GAAQisC,EAAIC,WAAYtgI,EAE5B,IAAwB,IAAnBo0F,EAAMotC,SAEX,OAASptC,EAAMn5B,UAEd,IAAK,SACJ,GAAI17D,GAAQihI,EAAapsC,EAAM0sC,aAC3BzjI,GAAS,GAAItD,OAAMM,SAAUuwC,UAAWrrC,GAAQoyE,WACpDqxD,GAAWz+H,MACVu9H,IAAK1tC,EAAMhzB,aAAc,OACzBvlE,KAAMu4F,EAAMn5B,SACZ46B,IAAKx4F,GAEN,MAED,KAAK,YACL,IAAK,QACJ,GAAIkC,GAAQihI,EAAapsC,EAAM0sC,aAC3B1+G,GAAS,GAAIroB,OAAMoB,SAAUyvC,UAAWrrC,EAC5CyjI,GAAWz+H,MACVu9H,IAAK1tC,EAAMhzB,aAAc,OACzBvlE,KAAMu4F,EAAMn5B,SACZ46B,IAAKzzE,GAEN,MAED,KAAK,SACJ,GAAI7iB,GAAQihI,EAAapsC,EAAM0sC,aAC3B1+G,GAAS,GAAIroB,OAAMoB,SAAUyvC,UAAWrrC,GACxC4sB,EAAQpyB,MAAM0oB,KAAKonD,SAAUtqE,EAAO,GACxCyjI,GAAWz+H,MACVu9H,IAAK1tC,EAAMhzB,aAAc,OACzBvlE,KAAMu4F,EAAMn5B,SACZ46B,IAAKzzE,EACL+J,MAAOA,KAQX,MAAO62G,GAMR,QAASoJ,IAAc/L,GAMtB,IAAM,GAJF/lI,GAAW+lI,EAAID,qBAAsB,QAI/BpgI,EAAI,EAAGA,EAAI1F,EAASE,OAAQwF,IAAO,CAE5C,GAAI+0F,GAAUz6F,EAAU0F,IAEc,IAAjC+0F,EAAQs3C,aAAc,OAE1Bt3C,EAAQu3C,aAAc,KAAM3L,MAW/B,QAAS4L,IAAWlM,GAiBnB,IAAM,GAfFvhI,IACHvC,KAAM8jI,EAAIj/D,aAAc,SAAY,GACpCvlE,KAAMwkI,EAAIj/D,aAAc,QACxBr9D,GAAIs8H,EAAIj/D,aAAc,MACtB0gE,IAAKzB,EAAIj/D,aAAc,OACvB/jE,OAAQ,GAAItD,OAAMM,QAClBwoI,SACA2J,mBACAC,uBACAC,kBACAC,sBACAC,iBACA5J,eAGShjI,EAAI,EAAGA,EAAIqgI,EAAIC,WAAW9lI,OAAQwF,IAAO,CAElD,GAAIo0F,GAAQisC,EAAIC,WAAYtgI,EAE5B,IAAwB,IAAnBo0F,EAAMotC,SAEX,OAASptC,EAAMn5B,UAEd,IAAK,OACJn8D,EAAK+jI,MAAMt+H,KAAM6vF,EAAMhzB,aAAc,OACrCmrE,GAAWn4C,EACX,MAED,KAAK,kBACJt1F,EAAK0tI,gBAAgBjoI,KAAMm8H,EAAStsC,EAAMhzB,aAAc,QACxD,MAED,KAAK,sBACJtiE,EAAK2tI,oBAAoBloI,KAAMsoI,GAAmBz4C,GAClD,MAED,KAAK,iBACJt1F,EAAK4tI,eAAenoI,KAAMm8H,EAAStsC,EAAMhzB,aAAc,QACvD,MAED,KAAK,oBACJtiE,EAAK6tI,mBAAmBpoI,KAAMsoI,GAAmBz4C,GACjD,MAED,KAAK,gBACJt1F,EAAK8tI,cAAcroI,KAAMm8H,EAAStsC,EAAMhzB,aAAc,QACtD,MAED,KAAK,SACJ,GAAI7hE,GAAQihI,EAAapsC,EAAM0sC,YAC/BhiI,GAAKzB,OAAOsc,SAAUtc,GAAOutC,UAAWrrC,GAAQoyE,aAChD7yE,EAAKkkI,WAAY5uC,EAAMhzB,aAAc,QAAYgzB,EAAMn5B,QACvD,MAED,KAAK,YACJ,GAAI17D,GAAQihI,EAAapsC,EAAM0sC,YAC/B1+G,IAAOwoB,UAAWrrC,GAClBT,EAAKzB,OAAOsc,SAAUtc,GAAOkc,gBAAiB6I,GAAOjoB,EAAGioB,GAAOhoB,EAAGgoB,GAAOxnB,IACzEkE,EAAKkkI,WAAY5uC,EAAMhzB,aAAc,QAAYgzB,EAAMn5B,QACvD,MAED,KAAK,SACJ,GAAI17D,GAAQihI,EAAapsC,EAAM0sC,aAC3B30G,EAAQpyB,MAAM0oB,KAAKonD,SAAUtqE,EAAO,GACxCT,GAAKzB,OAAOsc,SAAUtc,GAAOw1E,iBAAkBzwD,GAAOwoB,UAAWrrC,GAAS4sB,IAC1ErtB,EAAKkkI,WAAY5uC,EAAMhzB,aAAc,QAAYgzB,EAAMn5B,QACvD,MAED,KAAK,QACJ,GAAI17D,GAAQihI,EAAapsC,EAAM0sC,YAC/BhiI,GAAKzB,OAAOyL,MAAOsZ,GAAOwoB,UAAWrrC,IACrCT,EAAKkkI,WAAY5uC,EAAMhzB,aAAc,QAAYgzB,EAAMn5B,QACvD,MAED,KAAK,QACJ,KAED,SACCxgE,QAAQo6B,IAAKu/D,IAQhB,MAFAU,IAAQ+tC,MAAO/jI,EAAKiF,IAAOjF,EAEpBA,EAIR,QAAS+tI,IAAmBxM,GAQ3B,IAAM,GANFvhI,IACHiF,GAAI28H,EAASL,EAAIj/D,aAAc,QAC/B8D,aACA4nE,cAGS9sI,EAAI,EAAGA,EAAIqgI,EAAIC,WAAW9lI,OAAQwF,IAAO,CAElD,GAAIo0F,GAAQisC,EAAIC,WAAYtgI,EAE5B,QAASo0F,EAAMn5B,UAEd,IAAK,gBAGJ,IAAM,GAFF8xE,GAAY34C,EAAMgsC,qBAAsB,qBAElCj0H,EAAI,EAAGA,EAAI4gI,EAAUvyI,OAAQ2R,IAAO,CAE7C,GAAIo8G,GAAWwkB,EAAW5gI,GACtB6gI,EAASzkB,EAASnnD,aAAc,UAChC5nD,EAAS+uG,EAASnnD,aAAc,SAEpCtiE,GAAKomE,UAAW8nE,GAAWtM,EAASlnH,GAIrC,KAED,KAAK,WACJ1a,EAAKguI,UAAUvoI,KAAMm8H,EAAStsC,EAAM0sC,eAUvC,MAAOhiI,GAIR,QAASmuI,IAAeH,EAAWrI,GAElC,GAGIzkI,GAAGmM,EAAGrN,EAHNouI,KACAC,IAOJ,KAAMntI,EAAI,EAAGA,EAAI8sI,EAAUtyI,OAAQwF,IAAO,CAOzCotI,GAJWrK,GADI+J,EAAW9sI,IAKAykI,EAAQyI,GAMnC,IAAMltI,EAAI,EAAGA,EAAIykI,EAAOjqI,OAAQwF,IAE/B,IAAMmM,EAAI,EAAGA,EAAI+gI,EAAS1yI,OAAQ2R,IAIjC,GAFArN,EAAOouI,EAAU/gI,GAEZrN,EAAK8hE,KAAKrkE,OAASkoI,EAAQzkI,GAAIzD,KAAO,CAE1C4wI,EAAgBntI,GAAMlB,EACtBA,EAAKuuI,WAAY,CACjB,OAUH,IAAMrtI,EAAI,EAAGA,EAAIktI,EAAS1yI,OAAQwF,IAEjClB,EAAOouI,EAAUltI,IAEO,IAAnBlB,EAAKuuI,YAETF,EAAe5oI,KAAMzF,GACrBA,EAAKuuI,WAAY,EAQnB,IAAI53G,MACAmsB,IAEJ,KAAM5hD,EAAI,EAAGA,EAAImtI,EAAe3yI,OAAQwF,IAEvClB,EAAOquI,EAAgBntI,GAEvBy1B,EAAMlxB,KAAMzF,EAAK8hE,MACjBhf,EAAar9C,KAAMzF,EAAK+mI,YAIzB,OAAO,IAAI9rI,OAAM4nD,SAAUlsB,EAAOmsB,GAInC,QAASwrF,IAAoBnvE,EAAMwmE,EAAQyI,GAI1CjvE,EAAKje,SAAU,SAAWpsC,GAEzB,IAAuB,IAAlBA,EAAO4sD,OAAkB,CAM7B,IAAM,GAJFqlE,GAIM7lI,EAAI,EAAGA,EAAIykI,EAAOjqI,OAAQwF,IAAO,CAE1C,GAAIurI,GAAQ9G,EAAQzkI,EAEpB,IAAKurI,EAAMhvI,OAASqX,EAAOrX,KAAO,CAEjCspI,EAAc0F,EAAM1F,WACpB,YAMmB3qI,KAAhB2qI,IAQHA,EAAc,GAAI9rI,OAAMM,SAI1B6yI,EAAS3oI,MAAQq8D,KAAMhtD,EAAQiyH,YAAaA,EAAawH,WAAW,OAQvE,QAASC,IAAWxuI,GAenB,IAAM,GAbFszC,MAEA/0C,EAASyB,EAAKzB,OACdwlI,EAAQ/jI,EAAK+jI,MACbhnI,EAAOiD,EAAKjD,KACZ2wI,EAAkB1tI,EAAK0tI,gBACvBC,EAAsB3tI,EAAK2tI,oBAC3BC,EAAiB5tI,EAAK4tI,eACtBC,EAAqB7tI,EAAK6tI,mBAC1BC,EAAgB9tI,EAAK8tI,cAIf5sI,EAAI,EAAG8K,EAAI+3H,EAAMroI,OAAQwF,EAAI8K,EAAG9K,IAEzCoyC,EAAQ7tC,KAAMw+H,GAASF,EAAO7iI,IAM/B,KAAM,GAAIA,GAAI,EAAG8K,EAAI0hI,EAAgBhyI,OAAQwF,EAAI8K,EAAG9K,IAEnDoyC,EAAQ7tC,KAAMgmC,GAAWiiG,EAAiBxsI,IAAMyV,QAMjD,KAAM,GAAIzV,GAAI,EAAG8K,EAAI2hI,EAAoBjyI,OAAQwF,EAAI8K,EAAG9K,IAYvD,IAAM,GAVFuoH,GAAWkkB,EAAqBzsI,GAChCutI,EAAazH,EAAevd,EAASxkH,IACrCwhB,EAAau7F,GAAaysB,EAAWxpI,IACrCypI,EAAaC,GAAcloH,EAAYgjG,EAASrjD,WAEhD4nE,EAAYvkB,EAASukB,UACrBrI,EAAS8I,EAAWjJ,KAAKG,OAEzBjvG,EAAWy3G,GAAeH,EAAWrI,GAE/Bt4H,EAAI,EAAGC,EAAKohI,EAAWhzI,OAAQ2R,EAAIC,EAAID,IAAO,CAEvD,GAAIyH,GAAS45H,EAAYrhI,EAEpByH,GAAOiB,gBAEXjB,EAAOyuC,KAAM7sB,EAAU+3G,EAAWjJ,KAAKpiF,YACvCtuC,EAAO0uC,wBAIRlQ,EAAQ7tC,KAAMqP,GAQhB,IAAM,GAAI5T,GAAI,EAAG8K,EAAI4hI,EAAelyI,OAAQwF,EAAI8K,EAAG9K,IAElDoyC,EAAQ7tC,KAAM8kI,GAAUqD,EAAgB1sI,IAAMyV,QAM/C,KAAM,GAAIzV,GAAI,EAAG8K,EAAI6hI,EAAmBnyI,OAAQwF,EAAI8K,EAAG9K,IAUtD,IAAM,GARFuoH,GAAWokB,EAAoB3sI,GAK/BulB,EAAau7F,GAAayH,EAASxkH,IACnCypI,EAAaC,GAAcloH,EAAYgjG,EAASrjD,WAE1C/4D,EAAI,EAAGC,EAAKohI,EAAWhzI,OAAQ2R,EAAIC,EAAID,IAEhDimC,EAAQ7tC,KAAMipI,EAAYrhI,GAQ5B,KAAM,GAAInM,GAAI,EAAG8K,EAAI8hI,EAAcpyI,OAAQwF,EAAI8K,EAAG9K,IAEjDoyC,EAAQ7tC,KAAMw+H,GAAS6J,EAAe5sI,IAAMyV,QAI7C,IAAI7B,EAEJ,IAAsB,IAAjBivH,EAAMroI,QAAmC,IAAnB43C,EAAQ53C,OAElCoZ,EAASw+B,EAAS,OAEZ,CAENx+B,EAAoB,UAAT/X,EAAqB,GAAI9B,OAAMgoD,KAAS,GAAIhoD,OAAM8oD,KAE7D,KAAM,GAAI7iD,GAAI,EAAGA,EAAIoyC,EAAQ53C,OAAQwF,IAEpC4T,EAAOmG,IAAKq4B,EAASpyC,IAUvB,MAJA4T,GAAOrX,KAAkB,UAATV,EAAqBiD,EAAKgjI,IAAMhjI,EAAKvC,KACrDqX,EAAOvW,OAAO+N,KAAM/N,GACpBuW,EAAOvW,OAAOiS,UAAWsE,EAAO3G,SAAU2G,EAAO2I,WAAY3I,EAAO9K,OAE7D8K,EAIR,QAAS85H,IAAwB7pF,EAAM8pF,GAItC,IAAM,GAFFzoE,MAEMllE,EAAI,EAAG8K,EAAI+4C,EAAKrpD,OAAQwF,EAAI8K,EAAG9K,IAAO,CAE/C,GAAI+D,GAAK4pI,EAAmB9pF,EAAM7jD,GAClCklE,GAAU3gE,KAAMw8G,GAAah9G,IAI9B,MAAOmhE,GAIR,QAASuoE,IAAcloH,EAAYooH,GAElC,GAAIv7F,KAEJ,KAAM,GAAIv2C,KAAQ0pB,GAAa,CAE9B,GAAItR,GAAWsR,EAAY1pB,GAEvBqpE,EAAYwoE,GAAwBz5H,EAAS+1H,aAAc2D,EAIrC,KAArBzoE,EAAU1qE,SAEA,UAATqB,GAA6B,eAATA,EAExBqpE,EAAU3gE,KAAM,GAAIxK,OAAM08B,mBAI1ByuC,EAAU3gE,KAAM,GAAIxK,OAAMs8B,mBAQ5B,IAAIzkB,OAAoD1W,KAAvC+Y,EAASnV,KAAKuJ,WAAWs9H,SAE1C,IAAK/zH,EAEJ,IAAM,GAAI5R,GAAI,EAAG8K,EAAIo6D,EAAU1qE,OAAQwF,EAAI8K,EAAG9K,IAE7CklE,EAAWllE,GAAI4R,UAAW,CAQ5B,IAIIgC,GAJAzE,EAAkC,IAArB+1D,EAAU1qE,OAAiB0qE,EAAW,GAAMA,CAM7D,QAASrpE,GAER,IAAK,QACJ+X,EAAS,GAAI7Z,OAAM2oD,aAAczuC,EAASnV,KAAMqQ,EAChD,MAED,KAAK,aACJyE,EAAS,GAAI7Z,OAAM0oD,KAAMxuC,EAASnV,KAAMqQ,EACxC,MAED,KAAK,YACL,IAAK,WAGHyE,EAFIhC,EAEK,GAAI7X,OAAMioD,YAAa/tC,EAASnV,KAAMqQ,GAItC,GAAIpV,OAAMkrB,KAAMhR,EAASnV,KAAMqQ,GAO3CijC,EAAQ7tC,KAAMqP,GAIf,MAAOw+B,GAIR,QAAS2wF,IAASh/H,GAEjB,MAAOq9H,GAAUtsC,GAAQ+tC,MAAO9+H,GAAMupI,IAMvC,QAASM,IAAkBvN,GAE1B,GAAIvhI,IACHvC,KAAM8jI,EAAIj/D,aAAc,QACxB5pD,YAGD40H,IAAc/L,EAId,KAAM,GAFF/lI,GAAW8lI,EAAsBC,EAAK,QAEhCrgI,EAAI,EAAGA,EAAI1F,EAASE,OAAQwF,IAErClB,EAAK0Y,SAASjT,KAAMgoI,GAAWjyI,EAAU0F,IAI1C80F,IAAQ+4C,aAAcxN,EAAIj/D,aAAc,OAAWtiE,EAIpD,QAASgvI,IAAkBhvI,GAE1B,GAAIoY,GAAQ,GAAInd,OAAM8oD,KACtB3rC,GAAM3a,KAAOuC,EAAKvC,IAIlB,KAAM,GAFFib,GAAW1Y,EAAK0Y,SAEVxX,EAAI,EAAGA,EAAIwX,EAAShd,OAAQwF,IAAO,CAE5C,GAAIo0F,GAAQ58E,EAAUxX,EAEJ,QAAbo0F,EAAMrwF,GAEVmT,EAAM6C,IAAKuzH,GAAWl5C,IAMtBl9E,EAAM6C,IAAKgpH,GAAS3uC,EAAMrwF,KAM5B,MAAOmT,GAIR,QAAS62H,IAAgBhqI,GAExB,MAAOq9H,GAAUtsC,GAAQ+4C,aAAc9pI,GAAM+pI,IA9uF9C,GAAI7gI,IAAW,GAAIlT,OAAMoB,QACrB2N,GAAQ,GAAI/O,OAAMoB,QAClBohB,GAAa,GAAIxiB,OAAMY,WAotEvB0C,GAAS,GAAItD,OAAMM,QACnB+nB,GAAS,GAAIroB,OAAMoB,OA8kBvB,IAFAV,QAAQi6C,KAAM,uBAEO,IAAhBqV,EAAKvvD,OAET,OAASmP,MAAO,GAAI5P,OAAMsnD,MAI3B5mD,SAAQi6C,KAAM,iCAEd,IAAI2rF,KAAM,GAAIhuB,YAAYC,gBAAiBvoD,EAAM,kBAEjDtvD,SAAQuzI,QAAS,iCAEjB,IAAI9B,IAAU9L,EAAsBC,GAAK,WAAa,GAIlD1iI,GAAUuuI,GAAQ9qE,aAAc,UACpC3mE,SAAQo6B,IAAK,oCAAqCl3B,GAElD,IAAIswI,IA7oGJ,SAAqB5N,GAEpB,OACCn+H,KAAM0+H,EAAgBR,EAAsBC,EAAK,QAAU,IAC3D6N,OAAQrN,EAAkBT,EAAsBC,EAAK,WAAa,MAyoG5CD,EAAsB8L,GAAS,SAAW,IAC9DrwB,GAAgB,GAAI9hH,OAAM82D,cAAe72D,KAAKs2D,QAClDurD,IAAc5I,QAASxuG,GAAOqvG,eAAgB95G,KAAK25G,YAInD,IAAIgG,OACAw0B,MACA3yH,GAAQ,EAIRs5E,IACH6kB,cACAK,SACAuqB,eACAtlI,UACAqnI,WACAphE,aACAp8B,WACA54B,UACAqV,cACAs9G,SACAgL,gBACAnD,oBACAiB,oBAGDlxI,SAAQi6C,KAAM,8BAEdqsF,EAAcmL,GAAS,qBAAsB,YAAajyB,GAC1D8mB,EAAcmL,GAAS,0BAA2B,iBAAkBjI,GACpElD,EAAcmL,GAAS,sBAAuB,aAAc7H,GAC5DtD,EAAcmL,GAAS,iBAAkB,QAASnG,GAClDhF,EAAcmL,GAAS,kBAAmB,SAAU/F,GACpDpF,EAAcmL,GAAS,oBAAqB,WAAY5E,GACxDvG,EAAcmL,GAAS,kBAAmB,SAAU/D,IACpDpH,EAAcmL,GAAS,iBAAkB,QAASlD,IAClDjI,EAAcmL,GAAS,qBAAsB,WAAY5C,IACzDvI,EAAcmL,GAAS,gBAAiB,OAAQK,IAChDxL,EAAcmL,GAAS,wBAAyB,eAAgB0B,IAChE7M,EAAcmL,GAAS,4BAA6B,mBAAoB3B,IACxExJ,EAAcmL,GAAS,QAAS,4BAA6BV,IAE7D/wI,QAAQuzI,QAAS,8BAEjBvzI,QAAQi6C,KAAM,8BAEdusF,EAAcnsC,GAAQ6kB,WAAYwoB,GAClClB,EAAcnsC,GAAQklB,MAAOkqB,GAC7BjD,EAAcnsC,GAAQyvC,YAAaO,GACnC7D,EAAcnsC,GAAQ71F,OAAQgnI,GAC9BhF,EAAcnsC,GAAQwxC,QAASc,GAC/BnG,EAAcnsC,GAAQ5vB,UAAWqiE,IACjCtG,EAAcnsC,GAAQhsD,QAAS0/F,IAC/BvH,EAAcnsC,GAAQ5kF,OAAQk5H,IAC9BnI,EAAcnsC,GAAQvvE,WAAYskH,IAClC5I,EAAcnsC,GAAQ+4C,aAAcC,IAEpCrzI,QAAQuzI,QAAS,8BAxHjB,WAEC,GAAIh0B,GAAQllB,GAAQklB,KAEpB,KAA0B,IAArBrsB,EAASqsB,IAEb,IAAuC,IAAlCrsB,EAASmH,GAAQ6kB,YAAyB,CAI9C,GAAI5lD,KAEJ,KAAM,GAAIhwD,KAAM+wF,IAAQ6kB,WAIvB,IAAM,GAFFwqB,GAAkBvB,EAAc7+H,GAE1B/D,EAAI,EAAG8K,EAAIq5H,EAAgB3pI,OAAQwF,EAAI8K,EAAG9K,IAEnD+zD,EAAOxvD,KAAM4/H,EAAiBnkI,GAMhC25G,IAAWp1G,KAAM,GAAIxK,OAAM85D,cAAe,WAAa,EAAGE,SAM3D,KAAM,GAAIhwD,KAAMi2G,GAEfL,GAAWp1G,KAAM6/H,EAAkBrgI,OAl0BtC,WAEC,GAAIqqI,GAAoBpyI,OAAO6nD,KAAMixC,GAAQ41C,kBAAoB,GAC7D2D,EAAoBryI,OAAO6nD,KAAMixC,GAAQ62C,kBAAoB,GAC7D2C,EAAgBtyI,OAAO6nD,KAAMixC,GAAQ+4C,cAAgB,EAEzD,QAA2B3yI,KAAtBkzI,OAAyDlzI,KAAtBmzI,EAAxC,CASA,IAAM,GAPFE,GAAkB3D,GAAoBwD,GACtCI,EAAkBxC,GAAoBqC,GACtCI,EAAcV,GAAgBO,GAE9B7C,EAAgB+C,EAAgB/C,cAChCiD,KAEM1uI,EAAI,EAAG8K,EAAI2gI,EAAcjxI,OAAQwF,EAAI8K,EAAG9K,IAAO,CAExD,GAAI8yE,GAAO24D,EAAezrI,GAItB2uI,EAAgBzC,GAAQC,cAAe,SAAWr5D,EAAKt5D,OAAS,KAEpE,IAAKm1H,EAAgB,CAIpB,GAAIC,GAAsBD,EAAcE,eAU1C,SAAkB/C,EAAYgD,GAE7B,GAAIC,GAAoBD,EAAc1tE,aAAc,QAChDmqE,EAAQgD,EAAgB9J,OAAQqH,EAEpC2C,GAAYzuF,SAAU,SAAWpsC,GAE3BA,EAAOrX,OAASwyI,IAEpBL,EAAU5C,IACTl4H,OAAQA,EACRovH,WAAYiJ,GAAoB6C,GAChCvD,MAAOA,EACPt+H,SAAUs+H,EAAML,kBAnBTp4D,EAAKg5D,WAAY8C,IA4B5B,GAAII,GAAK,GAAIj1I,OAAMM,OAEnB8zI,KAEC1J,OAAQ8J,GAAmBA,EAAgB9J,OAE3CwK,cAAe,SAAWnD,GAEzB,GAAIoD,GAAYR,EAAU5C,EAE1B,IAAKoD,EAEJ,MAAOA,GAAUjiI,QAIjBxS,SAAQqa,KAAM,8BAAgCg3H,EAAa,oBAM7DqD,cAAe,SAAWrD,EAAY5vI,GAErC,GAAIgzI,GAAYR,EAAU5C,EAE1B,IAAKoD,EAAY,CAEhB,GAAI3D,GAAQ2D,EAAU3D,KAEtB,IAAKrvI,EAAQqvI,EAAMP,OAAOllI,KAAO5J,EAAQqvI,EAAMP,OAAOnlI,IAErDpL,QAAQqa,KAAM,8BAAgCg3H,EAAa,UAAY5vI,EAAQ,4BAA8BqvI,EAAMP,OAAOnlI,IAAM,UAAY0lI,EAAMP,OAAOllI,IAAM,UAEzJ,IAAKylI,EAAMN,OAEjBxwI,QAAQqa,KAAM,8BAAgCg3H,EAAa,mBAErD,CAEN,GAAIl4H,GAASs7H,EAAUt7H,OACnBk/D,EAAOy4D,EAAMz4D,KACbkwD,EAAakM,EAAUlM,UAE3B3lI,IAAOqvB,UAIP,KAAM,GAAI1sB,GAAI,EAAGA,EAAIgjI,EAAWxoI,OAAQwF,IAAO,CAE9C,GAAIowD,GAAY4yE,EAAYhjI,EAI5B,IAAKowD,EAAU0xE,MAAiD,IAA1C1xE,EAAU0xE,IAAI3pG,QAAS2zG,GAE5C,OAASP,EAAM1vI,MAEd,IAAK,WACJwB,GAAOsc,SAAUq1H,EAAGn8D,iBAAkBC,EAAM/4E,MAAM0oB,KAAKonD,SAAU3tE,IACjE,MAED,KAAK,YACJmB,GAAOsc,SAAUq1H,EAAGz1H,gBAAiBu5D,EAAK34E,EAAI+B,EAAO42E,EAAK14E,EAAI8B,EAAO42E,EAAKl4E,EAAIsB,GAC9E,MAED,SACCzB,QAAQqa,KAAM,4CAA8Cy2H,EAAM1vI,UAOpE,QAASu0D,EAAUv0D,MAElB,IAAK,SACJwB,GAAOsc,SAAUy2C,EAAUylC,IAC3B,MAED,KAAK,YACJx4F,GAAOsc,SAAUq1H,EAAGz1H,gBAAiB62C,EAAUylC,IAAI17F,EAAGi2D,EAAUylC,IAAIz7F,EAAGg2D,EAAUylC,IAAIj7F,GACrF,MAED,KAAK,QACJyC,GAAOyL,MAAOsnD,EAAUylC,IACxB,MAED,KAAK,SACJx4F,GAAOsc,SAAUq1H,EAAGn8D,iBAAkBziB,EAAUylC,IAAKzlC,EAAUjkC,SASnEvY,EAAOvW,OAAO+N,KAAM/N,IACpBuW,EAAOvW,OAAOiS,UAAWsE,EAAO3G,SAAU2G,EAAO2I,WAAY3I,EAAO9K,OAEpE4lI,EAAU5C,GAAa7+H,SAAW/Q,OAMnCzB,SAAQo6B,IAAK,wBAA0Bi3G,EAAa,yBAyvBxD,IAAIniI,IApIJ,SAAqB02H,GAGpB,MAAO0N,IAAgBrN,EADRN,EAAsBC,EAAK,yBAA2B,GAC5Bj/D,aAAc,UAiIhCg/D,EAAsB8L,GAAS,SAAW,GAYlE,OAVsB,SAAjB+B,GAAMC,SAEVvkI,GAAMxM,SAAShD,GAAMsoB,KAAK6jC,GAAK,GAIhC38C,GAAMb,MAAM2iB,eAAgBwiH,GAAM/rI,MAElCzH,QAAQuzI,QAAS,wBAGhBr0B,WAAYA,GACZw0B,WAAYA,GACZr5C,QAASA,GACTnrF,MAAOA;;ACr2GV5P,MAAMq1I,WAAa,WAElB,QAASA,GAAY9+E,GAEpBt2D,KAAKs2D,YAAwBp1D,KAAZo1D,EAA0BA,EAAUv2D,MAAMw2D,sBA6I5D,QAAS8+E,KAER,GAAIj9F,KAEJ,QAECz2B,IAAK,SAAW+nC,GAEf,MAAOtR,GAASsR,IAIjB3pC,IAAK,SAAW2pC,EAAK9vC,GAEpBw+B,EAASsR,GAAQ9vC,GAIlBiI,OAAQ,SAAW6nC,SAEXtR,GAASsR,IAIjB4rF,UAAW,WAEVl9F,OAwBH,QAASm9F,GAAqB32B,GAE7B5+G,KAAKuC,KAAOizI,EAAWC,WAEvBz1I,KAAKkW,SAEL,IAAI2Y,GAAc+vF,EAAKz0F,YAAcy0F,EAAKz0F,WAAYqrH,EAAWC,gBAC7Dv/H,EAAS2Y,EAAU3Y,UAEvB,KAAM,GAAIw/H,KAAWx/H,GAAS,CAE7B,GACIy/H,GADA/2H,EAAQ1I,EAAQw/H,GAGhB7mI,GAAQ,GAAI9O,OAAM2L,OAAQklC,UAAWhyB,EAAM/P,MAE/C,QAAS+P,EAAM/c,MAEd,IAAK,cACJ8zI,EAAY,GAAI51I,OAAMw3D,iBAAkB1oD,GACxC8mI,EAAU1iI,SAASpL,IAAK,EAAG,EAAG,EAC9B,MAED,KAAK,QACJ8tI,EAAY,GAAI51I,OAAMs3D,WAAYxoD,EAClC,MAED,KAAK,OACJ8mI,EAAY,GAAI51I,OAAMo3D,UAAWtoD,GACjC8mI,EAAU1iI,SAASpL,IAAK,EAAG,EAAG,EAC9B,MAED,KAAK,UACJ8tI,EAAY,GAAI51I,OAAMy3D,aAAc3oD,GAKjC8mI,QAE+Bz0I,KAA9B0d,EAAMg3H,sBAEVD,EAAUtkH,UAAYzS,EAAMg3H,yBAII10I,KAA5B0d,EAAMi3H,oBAEVF,EAAUvlH,SAAW,EAAIxR,EAAMi3H,uBAII30I,KAA/B0d,EAAMk3H,uBAEVH,EAAUplH,MAAQ3R,EAAMk3H,0BAIG50I,KAAvB0d,EAAMm3H,eAEVJ,EAAUxjH,MAAQvT,EAAMm3H,kBAIM70I,KAA1B0d,EAAMo3H,iBAEVv1I,QAAQqa,KAAM,qEAIf66H,EAAUpzI,KAAOqc,EAAMrc,MAAU,SAAWmzI,EAC5C11I,KAAKkW,OAAQw/H,GAAYC,IAa5B,QAASM,GAA8Br3B,GAEtC5+G,KAAKuC,KAAOizI,EAAWU,qBAqGxB,QAASC,GAAqBrxI,GAE7B9E,KAAKuC,KAAOizI,EAAWY,gBACvBp2I,KAAKq2I,QAAU,KACfr2I,KAAKs2I,KAAO,IAEZ,IAAIC,GAAa,GAAI97B,UAAU31G,EAAM,EAAG0xI,EAQxC,IANAx2I,KAAK64G,QACJ49B,MAAOC,EAA2B,GAAIv1H,YAAYrc,EAAK+iD,MAAO,EAAG,KACjElkD,QAAS4yI,EAAWI,UAAW,GAAG,GAClCn2I,OAAQ+1I,EAAWI,UAAW,GAAG,IAG7B32I,KAAK64G,OAAO49B,QAAUG,EAE1B,KAAM,IAAIniH,OAAO,oDAEX,IAAKz0B,KAAK64G,OAAOl1G,QAAU,EAEjC,KAAM,IAAI8wB,OAAO,yEAOlB,KAHA,GAAIoiH,GAAY,GAAIp8B,UAAU31G,EAAM0xI,GAChCM,EAAa,EAETA,EAAaD,EAAUE,YAAa,CAE3C,GAAIC,GAAcH,EAAUF,UAAWG,GAAY,EACnDA,IAAc,CAEd,IAAIG,GAAYJ,EAAUF,UAAWG,GAAY,EAGjD,IAFAA,GAAc,EAETG,IAAcC,EAA6BxiD,KAAO,CAEtD,GAAIyiD,GAAe,GAAIh2H,YAAYrc,EAAM0xI,EAAiCM,EAAYE,EACtFh3I,MAAKq2I,QAAUK,EAA2BS,OAEpC,IAAKF,IAAcC,EAA6BE,IAAM,CAE5D,GAAIC,GAAab,EAAiCM,CAClD92I,MAAKs2I,KAAOxxI,EAAK+iD,MAAOwvF,EAAYA,EAAaL,GAMlDF,GAAcE,EAIf,GAAsB,OAAjBh3I,KAAKq2I,QAET,KAAM,IAAI5hH,OAAO,6CAWnB,QAAS6iH,KAER,OAEC/0I,KAAMizI,EAAW+B,sCAEjBC,0BACC,QACA,MACA,WACA,oBACA,QACA,iBACA,WACA,oBACA,cACA,UACA,YACA,YACA,kBACA,oBACA,mBACA,cACA,WACA,gBACA,aACA,WACA,SACA,kBACA,mBAGDC,gBAAiB,WAEhB,MAAO13I,OAAMiqB,gBAId0tH,aAAc,SAAW5yE,EAAQ3vD,EAAUijG,GAE1C,GAAIu/B,GAAwBxiI,EAASgV,WAAYnqB,KAAKuC,MAElDyL,EAASjO,MAAMosB,UAAsB,SAErC1d,EAAW1O,MAAMu8C,cAAc7gC,MAAOzN,EAAOS,UAE7CmpI,GACH,yBACA,mCACA,UACC1pI,KAAM,MAEJ2pI,GACH,2BACA,qCACA,UACC3pI,KAAM,MAEJ4pI,GACH,kCACA,yBACA,wDACA,oFACA,yCACA,UACC5pI,KAAM,MAEJ6pI,GACH,uCACA,2BACA,4DACA,kFACA,2CACA,UACC7pI,KAAM,MAEJ8pI,GACH,6BACA,4CACA,2EACA,gDACC9pI,KAAM,MAEJC,EAAiBH,EAAOG,eAC1BgoB,QAAS,kCAAmC,IAC5CA,QAAS,2BAA4B,0BACrCA,QAAS,2BAA4B,6BACrCA,QAAS,wCAAyCyhH,GAClDzhH,QAAS,wCAAyC0hH,GAClD1hH,QAAS,mCAAoC2hH,GAC7C3hH,QAAS,mCAAoC4hH,GAC7C5hH,QAAS,sCAAuC6hH,SAE3CvpI,GAAS8yC,gBACT9yC,GAAS+yC,gBACT/yC,GAASoqB,mBACTpqB,GAASqqB,aAEhBrqB,EAAS0yC,UAAaj/C,OAAO,GAAInC,OAAM2L,OAAQg+E,OAAQ,UACvDj7E,EAASwpI,YAAe/1I,MAAO,IAC/BuM,EAAS+a,aAAgBtnB,MAAO,MAChCuM,EAASypI,eAAkBh2I,MAAO,MAElC4iE,EAAO72D,aAAeD,EAAOC,aAC7B62D,EAAO32D,eAAiBA,EACxB22D,EAAOr2D,SAAWA,EAClBq2D,EAAO76C,SAAYirC,SAAY,IAE/B4P,EAAOj2D,MAAQ,GAAI9O,OAAM2L,MAAO,EAAK,EAAK,GAC1Co5D,EAAOl2D,QAAU,CAEjB,IAAI+qH,KAEJ,IAAK98G,MAAMC,QAAS66H,EAAsBQ,eAAkB,CAE3D,GAAI5yI,GAAQoyI,EAAsBQ,aAElCrzE,GAAOj2D,MAAM+hC,UAAWrrC,GACxBu/D,EAAOl2D,QAAUrJ,EAAO,GAoBzB,OAhB8CrE,KAAzCy2I,EAAsBS,gBAE1Bze,EAAQpvH,KAAM6tG,EAAOigC,cAAevzE,EAAQ,MAAO6yE,EAAsBS,eAAe3xH,QAIzFq+C,EAAOpkB,SAAW,GAAI3gD,OAAM2L,MAAO,EAAK,EAAK,GAC7Co5D,EAAOmzE,eAAwD/2I,KAA3Cy2I,EAAsBW,iBAAiCX,EAAsBW,iBAAmB,EACpHxzE,EAAO3jB,SAAW,GAAIphD,OAAM2L,MAAO,EAAK,EAAK,GAExCmR,MAAMC,QAAS66H,EAAsBY,iBAEzCzzE,EAAO3jB,SAASvQ,UAAW+mG,EAAsBY,oBAIOr3I,KAApDy2I,EAAsBa,0BAA0C,CAEpE,GAAIC,GAAiBd,EAAsBa,0BAA0B/xH,KACrEkzG,GAAQpvH,KAAM6tG,EAAOigC,cAAevzE,EAAQ,gBAAiB2zE,IAC7D9e,EAAQpvH,KAAM6tG,EAAOigC,cAAevzE,EAAQ,cAAe2zE,IAI5D,MAAOC,SAAQC,IAAKhf,IAIrBhY,eAAgB,SAAW78C,GAI1B,GAAI3vD,GAAW,GAAIpV,OAAMiqB,gBACxBC,QAAS66C,EAAO76C,QAChBhc,aAAc62D,EAAO72D,aACrBE,eAAgB22D,EAAO32D,eACvBM,SAAUq2D,EAAOr2D,SACjBkG,KAAK,EACLuB,QAAQ,EACRtH,QAASk2D,EAAOl2D,QAChB6H,YAAaquD,EAAOruD,aA4CrB,OAzCAtB,GAASyjI,kCAAmC,EAE5CzjI,EAAStG,MAAQi2D,EAAOj2D,MAExBsG,EAAS9P,QAAqBnE,KAAf4jE,EAAOz/D,IAAoB,KAAOy/D,EAAOz/D,IAExD8P,EAASiU,SAAW,KACpBjU,EAASkU,kBAAoB,EAE7BlU,EAASmU,UAAyBpoB,KAAjB4jE,EAAOx7C,MAAsB,KAAOw7C,EAAOx7C,MAC5DnU,EAASoU,eAAiB,EAE1BpU,EAASurC,SAAWokB,EAAOpkB,SAC3BvrC,EAASwrC,kBAAoB,EAC7BxrC,EAASyjB,gBAAqC13B,KAAvB4jE,EAAOlsC,YAA4B,KAAOksC,EAAOlsC,YAExEzjB,EAASqgB,YAA6Bt0B,KAAnB4jE,EAAOtvC,QAAwB,KAAOsvC,EAAOtvC,QAChErgB,EAASksC,UAAY,EAErBlsC,EAASsgB,cAAiCv0B,KAArB4jE,EAAOrvC,UAA0B,KAAOqvC,EAAOrvC,UAC/DqvC,EAAOxjB,cAAcnsC,EAASmsC,YAAcwjB,EAAOxjB,aAExDnsC,EAAS4C,gBAAkB,KAC3B5C,EAAS6C,kBAAoB,EAC7B7C,EAAS8C,iBAAmB,EAE5B9C,EAASqU,gBAAqCtoB,KAAvB4jE,EAAOt7C,YAA4B,KAAOs7C,EAAOt7C,YACxErU,EAASgsC,SAAW2jB,EAAO3jB,SAE3BhsC,EAAS+iI,kBAAyCh3I,KAAzB4jE,EAAOozE,cAA8B,KAAOpzE,EAAOozE,cAC5E/iI,EAAS8iI,WAAanzE,EAAOmzE,WAE7B9iI,EAAS2C,SAAW,KAEpB3C,EAASsU,WAA2BvoB,KAAlB4jE,EAAOr7C,OAAuB,KAAOq7C,EAAOr7C,OAC9DtU,EAASssC,gBAAkB,EAE3BtsC,EAAS0U,gBAAkB,IAE3B1U,EAASgV,WAAWC,aAAc,EAE3BjV,GAgBR0jI,cAAe,SAAWhrE,GAEzB,GAAIruD,GAASquD,EAAOpyD,OAEpB+D,GAAOo5H,kCAAmC,CAI1C,KAAM,GAFF9zE,GAAS9kE,KAAKw3I,yBAERxxI,EAAI,EAAGA,EAAI8+D,EAAOtkE,OAAQwF,IAEnCwZ,EAAQslD,EAAQ9+D,IAAQ6nE,EAAQ/I,EAAQ9+D,GAIzC,OAAOwZ,IAKRs5H,gBAAiB,SAAW5yI,EAAUyJ,EAAOC,EAAQqK,EAAU9E,EAAU+H,GAExE,GAAIzO,GAAW0G,EAAS1G,SACpBwb,EAAU9U,EAAS8U,OAEvBxb,GAASG,QAAQ1M,MAAQiT,EAASvG,QAElCH,EAASgyC,QAAQv+C,MAAMkP,KAAM+D,EAAStG,OACtCJ,EAASiyC,SAASx+C,MAAMkP,KAAM+D,EAASurC,UAAWjvB,eAAgBtc,EAASwrC,mBAE3ElyC,EAASpJ,IAAInD,MAAQiT,EAAS9P,IAC9BoJ,EAAS+a,YAAYtnB,MAAQiT,EAASqU,YACtC/a,EAASqJ,SAAS5V,MAAQiT,EAAS2C,SAEnCrJ,EAAS2a,SAASlnB,MAAQiT,EAASiU,SACnC3a,EAAS4a,kBAAkBnnB,MAAQiT,EAASkU,kBAE5C5a,EAAS6a,MAAMpnB,MAAQiT,EAASmU,MAChC7a,EAAS8a,eAAernB,MAAQiT,EAASoU,cAUzC,IAAIs3B,EAoCJ,IAlCK1rC,EAAS9P,IAEbw7C,EAAa1rC,EAAS9P,IAEX8P,EAASqU,YAEpBq3B,EAAa1rC,EAASqU,YAEXrU,EAAS4C,gBAEpB8oC,EAAa1rC,EAAS4C,gBAEX5C,EAASsgB,UAEpBorB,EAAa1rC,EAASsgB,UAEXtgB,EAASqgB,QAEpBqrB,EAAa1rC,EAASqgB,QAEXrgB,EAAS+iI,cAEpBr3F,EAAa1rC,EAAS+iI,cAEX/iI,EAAS2C,SAEpB+oC,EAAa1rC,EAAS2C,SAEX3C,EAASyjB,cAEpBioB,EAAa1rC,EAASyjB,iBAIH13B,KAAf2/C,EAA2B,CAG1BA,EAAW7kB,sBAEf6kB,EAAaA,EAAWx8C,QAIzB,IAAIrB,GACAC,CAEJ,QAA2B/B,KAAtB2/C,EAAWx9C,OAAuB,CAItC,IAAqC,IAAhCw9C,EAAWz9C,iBAA4B,CAE3CJ,EAAS69C,EAAW79C,OACpBC,EAAS49C,EAAW59C,MACpB,IAAIE,GAAW09C,EAAW19C,SACtBD,EAAS29C,EAAW39C,MAExB29C,GAAWx9C,OAAOy9C,eAAgB99C,EAAO7C,EAAG6C,EAAO5C,EAAG6C,EAAO9C,EAAG8C,EAAO7C,EAAG+C,EAAUD,EAAO/C,EAAG+C,EAAO9C,GAItGqO,EAASsyC,YAAY7+C,MAAMkP,KAAMyvC,EAAWx9C,YAM3CL,GAAS69C,EAAW79C,OACpBC,EAAS49C,EAAW59C,OAEpBwL,EAASsqI,aAAa72I,MAAM2F,IAAK7E,EAAO7C,EAAG6C,EAAO5C,EAAG6C,EAAO9C,EAAG8C,EAAO7C,GAMzEqO,EAASgb,OAAOvnB,MAAQiT,EAASsU,OACjChb,EAASgzC,gBAAgBv/C,MAAQiT,EAASssC,gBAC1ChzC,EAASmyC,WAAW1+C,MAAUiT,EAASsU,QAAUtU,EAASsU,OAAOwC,eAAoB,EAAI,EAEzFxd,EAASob,gBAAgB3nB,MAAQiT,EAAS0U,gBAE1Cpb,EAAS0yC,SAASj/C,MAAMkP,KAAM+D,EAASgsC,UACvC1yC,EAASwpI,WAAW/1I,MAAQiT,EAAS8iI,WAErCxpI,EAASypI,cAAch2I,MAAQiT,EAAS+iI,cAExCzpI,EAASmqB,YAAY12B,MAAQiT,EAASyjB,YACtCnqB,EAAS+mB,QAAQtzB,MAAQiT,EAASqgB,QAClC/mB,EAASgnB,UAAUvzB,MAAQiT,EAASsgB,UAEpChnB,EAASsJ,gBAAgB7V,MAAQiT,EAAS4C,gBAC1CtJ,EAASuJ,kBAAkB9V,MAAQiT,EAAS6C,kBAC5CvJ,EAASwJ,iBAAiB/V,MAAQiT,EAAS8C,iBAEL,OAAjCxJ,EAASypI,cAAch2I,WAAgDhB,KAA9B+oB,EAAQ+uH,oBAErD/uH,EAAQ+uH,kBAAoB,GAE5B/uH,EAAQgvH,iBAAmB,IAIU,OAAjCxqI,EAASypI,cAAch2I,WAAgDhB,KAA9B+oB,EAAQ+uH,0BAE9C/uH,GAAQ+uH,wBACR/uH,GAAQgvH,oBA2KnB,QAASC,GAAOt/H,EAAQssC,EAAUizF,GAEjC,IAAOv/H,EAEN,MAAO8+H,SAAQU,SAIhB,IAAI/lB,GACAgmB,IAEJ,IAAkD,mBAA7Cr3I,OAAOm/D,UAAUtjC,SAASn5B,KAAMkV,GAAgC,CAEpEy5G,IAIA,KAAM,GAFF7yH,GAASoZ,EAAOpZ,OAEVg+F,EAAM,EAAGA,EAAMh+F,EAAQg+F,IAAS,CAEzC,GAAIt8F,GAAQgkD,EAASxhD,KAAMy0I,GAAWn5I,KAAM4Z,EAAQ4kF,GAAOA,EAEtDt8F,KAECA,YAAiBw2I,SAErBx2I,EAAQA,EAAMo3I,KAAM,SAAW5vF,EAAKxnD,GAEnCmxH,EAAS3pE,GAAQxnD,GAEhBmmD,KAAMroD,KAAMw+F,IAId60B,EAAS70B,GAAQt8F,EAIlBm3I,EAAI9uI,KAAMrI,SAMN,CAENmxH,IAEA,KAAM,GAAI3pE,KAAO9vC,GAEhB,GAAKA,EAAOm0D,eAAgBrkB,GAAQ,CAEnC,GAAIxnD,GAAQgkD,EAASxhD,KAAMy0I,GAAWn5I,KAAM4Z,EAAQ8vC,GAAOA,EAEtDxnD,KAECA,YAAiBw2I,SAErBx2I,EAAQA,EAAMo3I,KAAM,SAAW5vF,EAAKxnD,GAEnCmxH,EAAS3pE,GAAQxnD,GAEhBmmD,KAAMroD,KAAM0pD,IAId2pE,EAAS3pE,GAAQxnD,EAIlBm3I,EAAI9uI,KAAMrI,KAUd,MAAOw2I,SAAQC,IAAKU,GAAMC,KAAM,WAE/B,MAAOjmB,KAMT,QAASn9D,GAAYH,EAAKtrD,GAGzB,MAAoB,gBAARsrD,IAA4B,KAARA,EACxB,GAGH,mBAAmB35C,KAAM25C,GAEtBA,EAKH,gBAAgB35C,KAAM25C,GAEnBA,EAKH,aAAa35C,KAAM25C,GAEhBA,EAKDtrD,EAAOsrD,EAIf,QAAS2gF,GAA2BnxI,GAEnC,OAA4BrE,KAAvB+jC,OAAOs0G,YAEX,OAAO,GAAIA,cAAcC,OAAQj0I,EASlC,KAAM,GAFFyvD,GAAI,GAEEhvD,EAAI,EAAG2Y,EAAKpZ,EAAM/E,OAAQwF,EAAI2Y,EAAI3Y,IAE3CgvD,GAAKiyC,OAAOwyC,aAAcl0I,EAAOS,GAIlC,OAAOgvD,GAOR,QAAS0kF,KAER,MAAO,IAAI35I,OAAMw8B,sBAChB1tB,MAAO,SACP6xC,SAAU,EACVc,UAAW,EACXD,UAAW,EACX9qC,aAAa,EACbb,WAAW,EACXQ,KAAMrW,MAAMsW,YAed,QAASsjI,GAAiBx7C,EAAMy7C,EAASC,EAAcC,GAEtD,GAAI7/H,GAAWkkF,EAAKlkF,SAChB9E,EAAWgpF,EAAKhpF,SAEhBkzF,EAAUwxC,EAAaxxC,QACvB1tF,EAAkBV,EAASU,eAE/BA,GAAgB1H,YAChB0H,EAAgB9B,UAEhB1D,EAAS0C,cAAe,CAExB,KAAM,GAAI7R,GAAI,EAAG2Y,EAAK0pF,EAAQ7nG,OAAQwF,EAAI2Y,EAAI3Y,IAAO,CAEpD,GAGI4rG,GAAmBmoC,EAHnBv6H,EAAS6oF,EAASriG,GAClBg0I,EAAgB,cAAgBh0I,CAIpC,QAAyB9E,KAApBse,EAAOy6H,SAAyB,CAgBpCroC,EAAoBkoC,EAAaI,UAAW16H,EAAOy6H,UAAWx+H,OAG9D,KAAM,GAFFxI,GAAWgH,EAAS5L,WAAW4E,SAEzBd,EAAI,EAAGC,EAAKw/F,EAAkBpwF,MAAOrP,EAAIC,EAAID,IAEtDy/F,EAAkBn6B,OACjBtlE,EACAy/F,EAAkB5nD,KAAM73C,GAAMc,EAAS+2C,KAAM73C,GAC7Cy/F,EAAkB//B,KAAM1/D,GAAMc,EAAS4+D,KAAM1/D,GAC7Cy/F,EAAkBp6B,KAAMrlE,GAAMc,EAASukE,KAAMrlE,QAKpC8H,GAAS5L,WAAW4E,WAI/B2+F,EAAoB33F,EAAS5L,WAAW4E,SAASwI,QAWlD,QAP2Bva,KAAtB0wG,IAEJA,EAAkBrvG,KAAOy3I,EACzBr/H,EAAgB1H,SAAS1I,KAAMqnG,QAIT1wG,KAAlBse,EAAO26H,OAAuB,CAElChlI,EAASmP,cAAe,EAIxBy1H,EAAkBD,EAAaI,UAAW16H,EAAO26H,QAAS1+H,OAG1D,KAAM,GAFF5C,GAASoB,EAAS5L,WAAWwK,OAEvB1G,EAAI,EAAGC,EAAK2nI,EAAgBv4H,MAAOrP,EAAIC,EAAID,IAEpD4nI,EAAgBtiE,OACftlE,EACA4nI,EAAgB/vF,KAAM73C,GAAM0G,EAAOmxC,KAAM73C,GACzC4nI,EAAgBloE,KAAM1/D,GAAM0G,EAAOg5D,KAAM1/D,GACzC4nI,EAAgBviE,KAAMrlE,GAAM0G,EAAO2+D,KAAMrlE,aAKDjR,KAA/B+Y,EAAS5L,WAAWwK,SAE/BkhI,EAAkB9/H,EAAS5L,WAAWwK,OAAO4C,aAIrBva,KAApB64I,IAEJA,EAAgBx3I,KAAOy3I,EACvBr/H,EAAgB9B,OAAOtO,KAAMwvI,IAQ/B,GAFA57C,EAAK9yE,yBAEoBnqB,KAApB04I,EAAQ5O,QAEZ,IAAM,GAAIhlI,GAAI,EAAG2Y,EAAKi7H,EAAQ5O,QAAQxqI,OAAQwF,EAAI2Y,EAAI3Y,IAErDm4F,EAAKpwE,sBAAuB/nB,GAAM4zI,EAAQ5O,QAAShlI,GAUtD,QAASo0I,GAAYx7B,EAAMz0F,EAAYlmB,GAEtCjE,KAAK4+G,KAAOA,MACZ5+G,KAAKmqB,WAAaA,MAClBnqB,KAAKiE,QAAUA,MAGfjE,KAAKwxB,MAAQ,GAAI6jH,GAEjBr1I,KAAK6hH,cAAgB,GAAI9hH,OAAM82D,cAAe72D,KAAKiE,QAAQqyD,SAC3Dt2D,KAAK6hH,cAAc/H,eAAgB95G,KAAKiE,QAAQ01G,aAEhD35G,KAAKq6I,WAAa,GAAIt6I,OAAMs2D,WAAYr2D,KAAKiE,QAAQqyD,SACrDt2D,KAAKq6I,WAAWnhC,gBAAiB,eAtwClCk8B,EAAWj0E,WAEVnJ,YAAao9E,EAEbz7B,YAAa,YAEbrC,KAAM,SAAWvhD,EAAKT,EAAQC,EAAYC,GAEzC,GAAI95C,GAAQ1b,KAERyK,MAAqBvJ,KAAdlB,KAAKyK,KAAqBzK,KAAKyK,KAAO1K,MAAMo6D,OAAOgH,UAAUsgD,eAAgB1rD,GAEpFsjD,EAAS,GAAIt5G,OAAMs2D,WAAY36C,EAAM46C,QAEzC+iD,GAAOH,gBAAiB,eAExBG,EAAO/B,KAAMvhD,EAAK,SAAWjxD,GAE5B,IAEC4W,EAAMk5E,MAAO9vF,EAAM2F,EAAM6qD,EAAQE,GAEhC,MAAQjM,OAEQroD,KAAZs0D,GAGJA,EAASjM,EAAEyO,cAAgBvjC,MAAQ80B,EAAI,GAAI90B,OAAO,+CAMlD8gC,EAAYC,IAIhBskD,eAAgB,SAAW53G,GAE1BlC,KAAK25G,YAAcz3G,GAIpB+2G,QAAS,SAAW/2G,GAEnBlC,KAAKyK,KAAOvI,GAIb0yF,MAAO,SAAW9vF,EAAM2F,EAAM6qD,EAAQE,GAErC,GAAI6gF,GACAlsH,IAEJ,IAAqB,gBAATrlB,GAEXuxI,EAAUvxI,MAEJ,CAEM4xI,EAA2B,GAAIv1H,YAAYrc,EAAM,EAAG,MAEjD8xI,GAEdzsH,EAAYqrH,EAAWY,iBAAoB,GAAID,GAAqBrxI,GACpEuxI,EAAUlsH,EAAYqrH,EAAWY,iBAAkBC,SAInDA,EAAUK,EAA2B,GAAIv1H,YAAYrc,IAMvD,GAAI85G,GAAOlqB,KAAKE,MAAOyhD,EAEvB,QAAoBn1I,KAAf09G,EAAKq1B,OAAuBr1B,EAAKq1B,MAAMtwI,QAAS,GAAM,EAG1D,WADA6xD,GAAS,GAAI/gC,OAAO,2EAKhBmqF,GAAK07B,iBAEJ17B,EAAK07B,eAAen8G,QAASq3G,EAAWC,aAAgB,IAE5DtrH,EAAYqrH,EAAWC,YAAe,GAAIF,GAAqB32B,IAI3DA,EAAK07B,eAAen8G,QAASq3G,EAAWU,uBAA0B,IAEtE/rH,EAAYqrH,EAAWU,sBAAyB,GAAID,GAA8Br3B,IAI9EA,EAAK07B,eAAen8G,QAASq3G,EAAW+B,wCAA2C,IAEvFptH,EAAYqrH,EAAW+B,uCAA0C,GAAID,KAMvE72I,QAAQi6C,KAAM,cAED,GAAI0/F,GAAYx7B,EAAMz0F,GAElC1f,KAAMA,GAAQzK,KAAKyK,MAAQ,GAC3BkvG,YAAa35G,KAAK25G,YAClBrjD,QAASt2D,KAAKs2D,UAIRs+B,MAAO,SAAWjlF,EAAO4qI,EAAQzrG,EAAS6wE,GAEhDl/G,QAAQuzI,QAAS,cASjB1+E,GANC3lD,MAAOA,EACP4qI,OAAQA,EACRzrG,QAASA,EACT6wE,WAAYA,KAKXnqD,IA8CL,IAAIggF,IACHY,gBAAiB,kBACjBX,WAAY,aACZS,qBAAsB,uBACtBqB,sCAAuC,sCAkGxCtB,GAA6B90E,UAAUs2E,gBAAkB,SAAWtiI,GAInE,OAFkBA,EAASgV,WAAYnqB,KAAKuC,MAEvBV,MAEpB,IAAK,cACL,IAAK,cACJ,MAAO9B,OAAMs8B,iBAEd,KAAK,gBACJ,MAAOt8B,OAAMq8B,mBAEd,KAAK,iBACL,QACC,MAAOr8B,OAAMopB,oBAMhB8sH,EAA6B90E,UAAUu2E,aAAe,SAAW8C,EAAgBrlI,EAAUijG,GAE1F,GAAIqiC,GAActlI,EAASgV,WAAYnqB,KAAKuC,MAExCo3H,KAEA9vE,IAGJ,QAAS4wF,EAAY54I,MAEpB,IAAK,cACL,IAAK,cACJgoD,EAAKt/C,KAAM,gBAAiB,iBAAkB,iBAAkB,kBAAmB,kBACnF,MAED,KAAK,gBACJs/C,EAAKt/C,KAAM,gBAAiB,kBAS9B,GAAImwI,KAuCJ,OArCA7wF,GAAKulD,QAAS,SAAW5oG,OAEEtF,KAArBu5I,EAAaj0I,KAAoBk0I,EAAgBl0I,GAAMi0I,EAAaj0I,UAIpCtF,KAAjCw5I,EAAevC,gBAEnBqC,EAAe3rI,OAAQ,GAAI9O,OAAM2L,OAAQklC,UAAW8pG,EAAevC,eACnEqC,EAAe5rI,QAAU8rI,EAAevC,cAAe,QAIjBj3I,KAAlCw5I,EAAetC,gBAEnBze,EAAQpvH,KAAM6tG,EAAOigC,cAAemC,EAAgB,MAAOE,EAAetC,eAAe3xH,YAInDvlB,KAAlCw5I,EAAenC,iBAEnBiC,EAAer5F,UAAW,GAAIphD,OAAM2L,OAAQklC,UAAW8pG,EAAenC,qBAI/Br3I,KAAnCw5I,EAAeC,iBAEnBhhB,EAAQpvH,KAAM6tG,EAAOigC,cAAemC,EAAgB,cAAeE,EAAeC,gBAAgBl0H,YAI3DvlB,KAAnCw5I,EAAeE,kBAEnBJ,EAAep5F,UAAYs5F,EAAeE,iBAIpClC,QAAQC,IAAKhf,GAMrB,IACIid,GAAgC,OAChCJ,EAAiC,GACjCU,GAAiCxiD,KAAM,WAAY0iD,IAAK,SA6cxDyD,GACHrqI,MAAO,KAEPsqI,WAAY,MACZC,WAAY,MACZC,WAAY,MACZC,WAAY,MACZC,WAAY,MACZ37G,OAAQ,KACRkU,OAAQ,MACR0nG,WAAY,MACZzsH,OAAQ,EACR42B,MAAO,EACPO,UAAW,EACXC,WAAY,EACZh0C,UAAW,EACX0zC,eAAgB,EAChBE,aAAc,EACdn4C,cAAe,KACfwE,eAAgB,MAcbqpI,GAVG9tE,OAECvtE,MAAMqB,QACNrB,MAAMM,QACNN,MAAMG,QACNH,MAAMoB,QACNpB,MAAM8D,QACN9D,MAAMsB,SAIbg6I,KAAMp6H,UACNq6H,KAAMn6H,WACNo6H,KAAM36H,WACN46H,KAAMjvI,YACNkvI,KAAM36H,YACN46H,KAAM51I,eAGH61I,GACHC,KAAM77I,MAAMgF,cACZ82I,KAAM97I,MAAM6C,aACZk5I,KAAM/7I,MAAMs/B,2BACZ08G,KAAMh8I,MAAM+zC,0BACZkoG,KAAMj8I,MAAMu/B,0BACZ28G,KAAMl8I,MAAM8C,0BAGTq5I,GACHC,MAAOp8I,MAAM4C,oBACby5I,MAAOr8I,MAAM2zC,uBACb2oG,MAAOt8I,MAAMyzC,gBAGV8oG,GACHC,KAAMx8I,MAAM40C,YACZ6nG,KAAMz8I,MAAM2hC,UACZ+6G,KAAM18I,MAAM+C,WACZ45I,KAAM38I,MAAM80C,gBACZ8nG,KAAM58I,MAAMg1C,sBAGT6nG,GACHtB,KAAMv7I,MAAMgD,iBACZ85I,MAAO98I,MAAMk0C,sBACb6oG,MAAO/8I,MAAMo0C,sBACb4oG,MAAOh9I,MAAMs0C,sBA6CV2oG,GAzCGj9I,MAAM+b,SACN/b,MAAMsW,UAKPtW,MAAMmmC,WACNnmC,MAAMumC,UACNvmC,MAAM0mC,WACN1mC,MAAM+W,eACN/W,MAAM4mC,kBACN5mC,MAAMgnC,cACNhnC,MAAM4mC,kBACN5mC,MAAMqmC,YAIJrmC,MAAM6W,YACN7W,MAAMk1C,iBACNl1C,MAAMo1C,wBAIVp1C,MAAMs1C,WACNt1C,MAAMu1C,UACJv1C,MAAMw1C,eACNx1C,MAAMy1C,uBACNz1C,MAAM2W,eACN3W,MAAM4W,uBACN5W,MAAM01C,eACN11C,MAAM41C,uBACN51C,MAAM81C,eACN91C,MAAMg2C,uBACNh2C,MAAMk2C,wBASXgnG,OAAU,EACVC,KAAQ,EACRC,KAAQ,EACRC,KAAQ,EACRC,KAAQ,EACRC,KAAQ,EACRC,KAAQ,KAGLC,GACH1uI,MAAO,QACP2uI,YAAa,WACbt6I,SAAU,aACV6nI,QAAS,yBAGN0S,GACHC,iBAAkB59I,MAAM4lI,kBACxBiY,YAAa79I,MAAM4lI,kBACnBpmG,OAAQx/B,MAAM2lI,kBACdmY,KAAM99I,MAAM0lI,qBAYTqY,GACHC,OAAQ,SACRC,KAAM,OACNtsI,MAAO,QAq+CR,OAlrCA0oI,GAAWj5E,UAAU88E,kBAAoB,SAAWnE,GAInD,IAAM,GAFFoE,MAEMl4I,EAAI,EAAGA,EAAI8zI,EAAat5I,OAAQwF,IAAO,CAEhD,GAAIm4I,GAAarE,EAAc9zI,GAC3Bo4I,EAAS,OAASD,EAAWp0D,OAAQ,GAAIojD,cAAgBgR,EAAWt2F,MAAO,GAE3E0vD,EAASv3G,KAAKwxB,MAAM7P,IAAKw8H,EAE7B,QAAgBj9I,KAAXq2G,EAEJ2mC,EAAeC,GAAe5mC,MAExB,IAAKv3G,KAAMo+I,GAAW,CAE5B,GAAIC,GAAKr+I,KAAMo+I,IACfp+I,MAAKwxB,MAAMzR,IAAKo+H,EAAYE,GAE5BH,EAAeC,GAAeE,GAMhC,MAAOnF,GAAOgF,EAAe,SAAWC,GAEvC,MAAOA,MAMT/D,EAAWj5E,UAAUyzB,MAAQ,SAAWt/B,EAAQE,GAE/C,GAAIopD,GAAO5+G,KAAK4+G,KACZxG,EAASp4G,IAGbA,MAAKwxB,MAAM8jH,YAGXt1I,KAAKi+I,mBAEJ,SACA,eAEG3E,KAAM,SAAWQ,GAEpB,GAAIS,GAAST,EAAaS,WACtB5qI,EAAQ4qI,EAAQ37B,EAAKjvG,OAAS,GAC9BgwG,EAAam6B,EAAan6B,cAE9BvH,GAAOkmC,gBAAiB,UAAWhF,KAAM,SAAWxqG,GAEnDwmB,EAAQ3lD,EAAO4qI,EAAQzrG,EAAS6wE,KAE7B4+B,MAAO/oF,KAER+oF,MAAO/oF,IAUZ4kF,EAAWj5E,UAAUq9E,cAAgB,SAAW38I,EAAM4kB,GAErD,GAAIg4H,GAAW58I,EAAO,IAAM4kB,EACxB03H,EAAan+I,KAAKwxB,MAAM7P,IAAK88H,EAEjC,KAAON,EAAa,CAGnBA,EAAan+I,KADA,OAAS6B,EAAKkoF,OAAQ,GAAIojD,cAAgBtrI,EAAKgmD,MAAO,IACtCphC,GAC7BzmB,KAAKwxB,MAAMzR,IAAK0+H,EAAUN,GAI3B,MAAOA,IASR/D,EAAWj5E,UAAUm9E,gBAAkB,SAAWz8I,GAEjD,GAAIu2G,GAASp4G,KACT0+I,EAAO1+I,KAAK4+G,KAAM/8G,EAAO,QAE7B,OAAO62I,SAAQC,IAAK+F,EAAKr5I,IAAK,SAAWs5I,EAAKl4H,GAE7C,MAAO2xF,GAAOomC,cAAe38I,EAAM4kB,OAWrC2zH,EAAWj5E,UAAUy9E,WAAa,SAAWC,GAE5C,GAAIC,GAAY9+I,KAAK4+G,KAAKjuG,QAASkuI,GAC/BxlC,EAASr5G,KAAKq6I,UAElB,IAAKyE,EAAUj9I,MAA2B,gBAAnBi9I,EAAUj9I,KAEhC,KAAM,IAAI4yB,OAAO,qBAAuBqqH,EAAUj9I,KAAO,iCAK1D,QAAuBX,KAAlB49I,EAAUC,KAAqC,IAAhBF,EAEnC,MAAOnG,SAAQU,QAASp5I,KAAKmqB,WAAYqrH,EAAWY,iBAAkBE,KAIvE,IAAIryI,GAAUjE,KAAKiE,OAEnB,OAAO,IAAIy0I,SAAS,SAAWU,EAAS4F,GAEvC3lC,EAAO/B,KAAMphD,EAAY4oF,EAAUC,IAAK96I,EAAQwG,MAAQ2uI,MAASl4I,GAAW,WAE3E89I,EAAQ,GAAIvqH,OAAO,4CAA8CqqH,EAAUC,IAAM,YAapF3E,EAAWj5E,UAAU89E,eAAiB,SAAWC,GAEhD,GAAIC,GAAgBn/I,KAAK4+G,KAAKwgC,YAAaF,EAE3C,OAAOl/I,MAAKw+I,cAAe,SAAUW,EAAc1+H,QAAS64H,KAAM,SAAW74H,GAE5E,GAAIs2H,GAAaoI,EAAcpI,YAAc,EACzCM,EAAa8H,EAAc9H,YAAc,CAC7C,OAAO52H,GAAOonC,MAAOwvF,EAAYA,EAAaN,MAMhDqD,EAAWj5E,UAAUk+E,cAAgB,WAEpC,GAAIjnC,GAASp4G,KACT4+G,EAAO5+G,KAAK4+G,IAEhB,OAAOs6B,GAAOt6B,EAAKs7B,UAAW,SAAWxK,GAExC,MAAOt3B,GAAOomC,cAAe,aAAc9O,EAAS4P,YAAahG,KAAM,SAAWgG,GAEjF,GAQI/5I,GARA6f,EAAW43H,EAAkBtN,EAAS7tI,MACtC09I,EAAanE,EAAuB1L,EAAS8P,eAG7CC,EAAeF,EAAWl+H,kBAC1Bq+H,EAAYD,EAAer6H,EAC3Bu6H,EAAa/gC,EAAKwgC,YAAa1P,EAAS4P,YAAaK,WACrDt6H,GAAqC,IAAxBqqH,EAASrqH,UAI1B,IAAKs6H,GAAcA,IAAeD,EAAY,CAG7Cn6I,EAAQ,GAAIg6I,GAAYD,EAGxB,IAAIM,GAAK,GAAI7/I,OAAM0kE,kBAAmBl/D,EAAOo6I,EAAaF,EAE1D,OAAO,IAAI1/I,OAAMwkE,2BAA4Bq7E,EAAIx6H,EAAUsqH,EAAS2H,WAAaoI,EAAcp6H,GAM/F,MAFA9f,GAAQ,GAAIg6I,GAAYD,EAAY5P,EAAS2H,WAAY3H,EAASluH,MAAQ4D,GAEnE,GAAIrlB,OAAMolB,gBAAiB5f,EAAO6f,EAAUC,QAevD+0H,EAAWj5E,UAAU4gD,YAAc,SAAW89B,GAE7C,GAAIznC,GAASp4G,KACT4+G,EAAO5+G,KAAK4+G,KACZ36G,EAAUjE,KAAKiE,QACf49G,EAAgB7hH,KAAK6hH,cAErBi+B,EAAM76G,OAAO66G,KAAO76G,OAAO86G,UAE3BC,EAAaphC,EAAK1yG,SAAU2zI,GAC5BhyE,EAAS+wC,EAAK35G,OAAQ+6I,EAAWnyE,QACjCoyE,EAAYpyE,EAAOkxE,IACnBmB,GAAc,CAkBlB,YAhB2Bh/I,KAAtB2sE,EAAOyxE,aAIXW,EAAY7nC,EAAOomC,cAAe,aAAc3wE,EAAOyxE,YACrDhG,KAAM,SAAWgG,GAEjBY,GAAc,CACd,IAAIC,GAAO,GAAIhoC,OAAQmnC,IAAgBz9I,KAAMgsE,EAAO8pC,UAEpD,OADAsoC,GAAYH,EAAIM,gBAAiBD,MAO7BzH,QAAQU,QAAS6G,GAAY3G,KAAM,SAAW2G,GAIpD,GAAI5mC,GAASt5G,MAAMo6D,OAAOmnD,SAAS3/F,IAAKs+H,IAAep+B,CAEvD,OAAO,IAAI62B,SAAS,SAAWU,EAAS4F,GAEvC3lC,EAAO/B,KAAMphD,EAAY+pF,EAAWh8I,EAAQwG,MAAQ2uI,MAASl4I,GAAW89I,OAItE1F,KAAM,SAAWj1I,IAIC,IAAhB67I,GAEJJ,EAAIO,gBAAiBJ,GAItB57I,EAAQb,OAAQ,MAEStC,KAApB8+I,EAAWz9I,OAAqB8B,EAAQ9B,KAAOy9I,EAAWz9I,MAE/D8B,EAAQzC,WAA+BV,KAAtB8+I,EAAWp+I,OAAuB06I,EAAuB0D,EAAWp+I,QAAW7B,MAAM+C,eAEnE5B,KAA9B8+I,EAAWt9G,gBAAgCr+B,EAAQzC,SAAW06I,EAAuB0D,EAAWt9G,iBAEpGjiC,QAAQqa,KAAM,4KAKfzW,EAAQxC,SAA2BX,KAApB8+I,EAAWn+I,KAAqB+6I,EAAyBoD,EAAWn+I,MAAS9B,MAAMgD,gBAElG,IAAIukI,GAAW1oB,EAAK0oB,aAChBY,EAAUZ,EAAU0Y,EAAW9X,YAOnC,OALA7jI,GAAQ3C,UAAYi6I,EAAezT,EAAQxmI,YAAe3B,MAAM6C,aAChEyB,EAAQ1C,UAAYg6I,EAAezT,EAAQvmI,YAAe5B,MAAM8C,yBAChEwB,EAAQ7C,MAAQ06I,EAAiBhU,EAAQ1mI,QAAWzB,MAAMyzC,eAC1DnvC,EAAQ5C,MAAQy6I,EAAiBhU,EAAQzmI,QAAW1B,MAAMyzC,eAEnDnvC,KAaT+1I,EAAWj5E,UAAUk3E,cAAgB,SAAWmC,EAAgB8F,EAAaT,GAE5E,MAAO7/I,MAAKw+I,cAAe,UAAWqB,GAAevG,KAAM,SAAWj1I,GAErEm2I,EAAgB8F,GAAgBj8I,KAUlC+1I,EAAWj5E,UAAUo/E,cAAgB,WAEpC,GAAInoC,GAASp4G,KACT4+G,EAAO5+G,KAAK4+G,KACZz0F,EAAanqB,KAAKmqB,UAEtB,OAAO+uH,GAAOt6B,EAAK1zC,UAAW,SAAW/1D,GAExC,GAAIqrI,GACAhG,KACAiG,EAAqBtrI,EAASgV,eAE9BwvG,IAEJ,IAAK8mB,EAAoBjL,EAAWU,sBAAyB,CAE5D,GAAIwK,GAAev2H,EAAYqrH,EAAWU,qBAC1CsK,GAAeE,EAAajJ,gBAAiBtiI,GAC7CwkH,EAAQpvH,KAAMm2I,EAAahJ,aAAc8C,EAAgBrlI,EAAUijG,QAE7D,IAAKqoC,EAAoBjL,EAAW+B,uCAA0C,CAEpF,GAAIoJ,GAAcx2H,EAAYqrH,EAAW+B,sCACzCiJ,GAAeG,EAAYlJ,gBAAiBtiI,GAC5CwkH,EAAQpvH,KAAMo2I,EAAYjJ,aAAc8C,EAAgBrlI,EAAUijG,QAE5D,QAAuCl3G,KAAlCiU,EAASyrI,qBAAqC,CAKzDJ,EAAezgJ,MAAMw8B,oBAErB,IAAIskH,GAAoB1rI,EAASyrI,oBAKjC,IAHApG,EAAe3rI,MAAQ,GAAI9O,OAAM2L,MAAO,EAAK,EAAK,GAClD8uI,EAAe5rI,QAAU,EAEpBiO,MAAMC,QAAS+jI,EAAkBC,iBAAoB,CAEzD,GAAIv7I,GAAQs7I,EAAkBC,eAE9BtG,GAAe3rI,MAAM+hC,UAAWrrC,GAChCi1I,EAAe5rI,QAAUrJ,EAAO,GAajC,OAT4CrE,KAAvC2/I,EAAkBE,kBAEtBpnB,EAAQpvH,KAAM6tG,EAAOigC,cAAemC,EAAgB,MAAOqG,EAAkBE,iBAAiBt6H,QAI/F+zH,EAAeh5F,cAAiDtgD,KAArC2/I,EAAkBG,eAA+BH,EAAkBG,eAAiB,EAC/GxG,EAAej5F,cAAkDrgD,KAAtC2/I,EAAkBI,gBAAgCJ,EAAkBI,gBAAkB,MAE7D//I,KAA/C2/I,EAAkBK,yBAAyC,CAE/D,GAAIrB,GAAegB,EAAkBK,yBAAyBz6H,KAC9DkzG,GAAQpvH,KAAM6tG,EAAOigC,cAAemC,EAAgB,eAAgBqF,IACpElmB,EAAQpvH,KAAM6tG,EAAOigC,cAAemC,EAAgB,eAAgBqF,SAMrEW,GAAezgJ,MAAMs8B,mBAIQ,IAAzBlnB,EAAS6jB,cAEbwhH,EAAepkI,KAAOrW,MAAM6b,WAI7B,IAAIulI,GAAYhsI,EAASgsI,WAAarD,EAAYC,MAwElD,OAtEKoD,KAAcrD,EAAYC,QAE9BvD,EAAe/jI,aAAc,EAExB0qI,IAAcrD,EAAYE,OAE9BxD,EAAe7mI,UAAYwB,EAASisI,aAAe,KAMpD5G,EAAe/jI,aAAc,MAIEvV,KAA3BiU,EAASksI,gBAEb1nB,EAAQpvH,KAAM6tG,EAAOigC,cAAemC,EAAgB,YAAarlI,EAASksI,cAAc56H,QAExF+zH,EAAel5F,YAAc,GAAIvhD,OAAMG,QAAS,EAAG,OAEbgB,KAAjCiU,EAASksI,cAAcvyI,OAE3B0rI,EAAel5F,YAAYz5C,IAAKsN,EAASksI,cAAcvyI,MAAOqG,EAASksI,cAAcvyI,YAMpD5N,KAA9BiU,EAASjI,mBAEbysH,EAAQpvH,KAAM6tG,EAAOigC,cAAemC,EAAgB,QAASrlI,EAASjI,iBAAiBuZ,YAE3CvlB,KAAvCiU,EAASjI,iBAAiBo0I,WAE9B9G,EAAejxH,eAAiBpU,EAASjI,iBAAiBo0I,eAM3BpgJ,KAA5BiU,EAASosI,iBAERf,IAAiBzgJ,MAAMopB,kBAE3BqxH,EAAe3rI,OAAQ,GAAI9O,OAAM2L,OAAQklC,UAAWz7B,EAASosI,gBAI7D/G,EAAe95F,UAAW,GAAI3gD,OAAM2L,OAAQklC,UAAWz7B,EAASosI,qBAMhCrgJ,KAA7BiU,EAASqsI,kBAERhB,IAAiBzgJ,MAAMopB,kBAE3BwwG,EAAQpvH,KAAM6tG,EAAOigC,cAAemC,EAAgB,MAAOrlI,EAASqsI,gBAAgB/6H,QAIpFkzG,EAAQpvH,KAAM6tG,EAAOigC,cAAemC,EAAgB,cAAerlI,EAASqsI,gBAAgB/6H,SAMvFiyH,QAAQC,IAAKhf,GAAU2f,KAAM,WAEnC,GAAImI,EA4BJ,OAxBCA,GAFIjB,IAAiBzgJ,MAAMiqB,eAEfG,EAAYqrH,EAAW+B,uCAAwC51B,eAAgB64B,GAI/E,GAAIgG,GAAchG,OAIRt5I,KAAlBiU,EAAS5S,OAAqBk/I,EAAUl/I,KAAO4S,EAAS5S,MAIxDk/I,EAAUngG,cAEdmgG,EAAUngG,YAAYnhD,GAAMshJ,EAAUngG,YAAYnhD,GAK9CshJ,EAAUp8I,MAAMo8I,EAAUp8I,IAAItD,SAAWhC,MAAMo0B,cAC/CstH,EAAU7oH,cAAc6oH,EAAU7oH,YAAY72B,SAAWhC,MAAMo0B,cAE/Dhf,EAASusI,SAASD,EAAUlqI,SAAWpC,EAASusI,QAE9CD,OAQVrH,EAAWj5E,UAAUwgF,eAAiB,SAAWpS,GAEhD,MAAOvvI,MAAKi+I,mBAEX,cAEG3E,KAAM,SAAWQ,GAEpB,MAAOZ,GAAO3J,EAAY,SAAWI,GAEpC,GAAI11H,GAAW,GAAIla,OAAMwmB,eAErBlY,EAAashI,EAAUthI,UAE3B,KAAM,GAAIuzI,KAAevzI,GAAa,CAErC,GAAIwzI,GAAiBxzI,EAAYuzI,EAEjC,QAAwB1gJ,KAAnB2gJ,EAA+B,MAEpC,IAAIC,GAAkBhI,EAAaI,UAAW2H,EAE9C,QAASD,GAER,IAAK,WAEJ3nI,EAAS2O,aAAc,WAAYk5H,EACnC,MAED,KAAK,SAEJ7nI,EAAS2O,aAAc,SAAUk5H,EACjC,MAED,KAAK,aACL,IAAK,YACL,IAAK,WAEJ7nI,EAAS2O,aAAc,KAAMk5H,EAC7B,MAED,KAAK,aAEJ7nI,EAAS2O,aAAc,MAAOk5H,EAC9B,MAED,KAAK,UACL,IAAK,SACL,IAAK,QAEJ7nI,EAAS2O,aAAc,QAASk5H,EAChC,MAED,KAAK,YACL,IAAK,SAEJ7nI,EAAS2O,aAAc,aAAck5H,EACrC,MAED,KAAK,WACL,IAAK,QAEJ7nI,EAAS2O,aAAc,YAAak5H,IAavC,WAN2B5gJ,KAAtByuI,EAAUzpH,SAEdjM,EAAS0O,SAAUmxH,EAAaI,UAAWvK,EAAUzpH,UAI/CjM,OAWVmgI,EAAWj5E,UAAU4gF,WAAa,WAEjC,GAAIrmI,GAAQ1b,KACR4+G,EAAO5+G,KAAK4+G,KACZz0F,EAAanqB,KAAKmqB,UAEtB,OAAOnqB,MAAKi+I,mBAEX,YACA,cAEG3E,KAAM,SAAWQ,GAEpB,MAAOZ,GAAOt6B,EAAKojC,OAAQ,SAAWpI,EAASqI,GAE9C,GAAI/kI,GAAQ,GAAInd,OAAM8oD,MAElB0mF,EAAaqK,EAAQrK,cAEzB,OAAO7zH,GAAMimI,eAAgBpS,GAAa+J,KAAM,SAAW/tH,GAE1D,IAAM,GAAIvlB,GAAI,EAAGA,EAAIupI,EAAW/uI,OAAQwF,IAAO,CAE9C,GAAI2pI,GAAYJ,EAAYvpI,GACxBiU,EAAWsR,EAAYvlB,GAEvBmP,MAAkCjU,KAAvByuI,EAAUx6H,SACtBukI,IACAI,EAAa5uE,UAAWykE,EAAUx6H,SAEhCA,GAASmU,WACmBpoB,KAA5B+Y,EAAS5L,WAAWoc,SACOvpB,KAA3B+Y,EAAS5L,WAAWG,KAExB/N,QAAQo6B,IAAK,uDACb5gB,EAAS2O,aAAc,MAAO,GAAI7oB,OAAMolB,gBAAiBlL,EAAS5L,WAAWG,GAAGjJ,MAAO,IAIxF,IAAI28I,OAAgDhhJ,KAA9B+Y,EAAS5L,WAAWQ,MACtCszI,MAAgDjhJ,KAA/B+Y,EAAS5L,WAAWwK,MAEzC,IAAKqpI,GAAmBC,EAEvB,GAAKhtI,EAASyjI,iCAAmC,CAEhD,GAAIwJ,GAAqBj4H,EAAYqrH,EAAW+B,sCAChDpiI,GAAWitI,EAAmBvJ,cAAe1jI,OAI7CA,GAAWA,EAASsG,OAMjBymI,KAEJ/sI,EAASoB,aAAexW,MAAM8mE,aAC9B1xD,EAASpC,aAAc,GAInBovI,IAEJhtI,EAASmB,aAAc,EAIxB,IAAI6nF,EAEJ,IAAKwxC,EAAUnhH,OAASqsH,EAAgB/oI,eAAgC5Q,KAAnByuI,EAAUnhH,KAE9D2vE,EAAO,GAAIp+F,OAAMkrB,KAAMhR,EAAU9E,OAE3B,IAAKw6H,EAAUnhH,OAASqsH,EAAgBr1F,eAE9C24C,EAAO,GAAIp+F,OAAMkrB,KAAMhR,EAAU9E,GACjCgpF,EAAKhzE,SAAWprB,MAAMwlD,0BAEhB,IAAKoqF,EAAUnhH,OAASqsH,EAAgBn1F,aAE9Cy4C,EAAO,GAAIp+F,OAAMkrB,KAAMhR,EAAU9E,GACjCgpF,EAAKhzE,SAAWprB,MAAM0lD,wBAEhB,IAAKkqF,EAAUnhH,OAASqsH,EAAgBv1F,MAE9C64C,EAAO,GAAIp+F,OAAM2oD,aAAczuC,EAAU9E,OAEnC,IAAKw6H,EAAUnhH,OAASqsH,EAAgB/0F,WAE9Cq4C,EAAO,GAAIp+F,OAAM0oD,KAAMxuC,EAAU9E,OAE3B,IAAKw6H,EAAUnhH,OAASqsH,EAAgBh1F,UAE9Cs4C,EAAO,GAAIp+F,OAAM4oD,SAAU1uC,EAAU9E,OAE/B,CAAA,GAAKw6H,EAAUnhH,OAASqsH,EAAgBnsH,OAM9C,KAAM,IAAI+F,OAAO,iDAAkDk7G,EAAUnhH,KAJ7E2vE,GAAO,GAAIp+F,OAAM6oD,OAAQ3uC,EAAU9E,GAkBpC,GAVAgpF,EAAK57F,KAAOq3I,EAAQr3I,MAAU,QAAU0/I,MAEb/gJ,KAAtByuI,EAAUtnC,SAEdsxC,EAAiBx7C,EAAMy7C,EAASjK,EAAWmK,GAIvCnK,EAAU+R,SAASvjD,EAAK5mF,SAAWo4H,EAAU+R,UAE7CnS,EAAW/uI,OAAS,GAQxB,MAAO29F,EANPA,GAAK57F,MAAQ,IAAMyD,EAEnBkX,EAAM6C,IAAKo+E,GAUb,MAAOjhF,UAeXk9H,EAAWj5E,UAAUkhF,WAAa,SAAWC,GAE5C,GAAI1yI,GACA2yI,EAAYviJ,KAAK4+G,KAAK9vE,QAASwzG,GAC/Bx9E,EAASy9E,EAAWA,EAAU1gJ,KAElC,KAAOijE,EAGN,WADArkE,SAAQqa,KAAM,+CAKf,IAAwB,gBAAnBynI,EAAU1gJ,KAAyB,CAEvC,GAAIktI,GAAcjqE,EAAOiqE,aAAe,EACpCyT,EAAO19E,EAAO2pE,KAAOM,CAEzBn/H,GAAS,GAAI7P,OAAMwuC,kBAAmBxuC,MAAM0oB,KAAKsnD,SAAUyyE,GAAQzT,EAAajqE,EAAO6pE,OAAS,EAAG7pE,EAAO8pE,MAAQ,SAEpF,iBAAnB2T,EAAU1gJ,OAErB+N,EAAS,GAAI7P,OAAMujB,mBAAoBwhD,EAAOgqE,MAAQ,EAAGhqE,EAAOgqE,KAAO,EAAGhqE,EAAO+pE,KAAO,EAAG/pE,EAAO+pE,MAAQ,EAAG/pE,EAAO6pE,MAAO7pE,EAAO8pE,MAOnI,YAHwB1tI,KAAnBqhJ,EAAUhgJ,OAAqBqN,EAAOrN,KAAOggJ,EAAUhgJ,MACvDggJ,EAAUb,SAAS9xI,EAAO2H,SAAWgrI,EAAUb,QAE7ChJ,QAAQU,QAASxpI,IAIzBwqI,EAAWj5E,UAAUshF,UAAY,WAEhC,GAAI7jC,GAAO5+G,KAAK4+G,IAEhB,OAAO5+G,MAAKi+I,mBAEX,cAEG3E,KAAM,SAAWQ,GAEpB,MAAOZ,GAAOt6B,EAAK8jC,MAAO,SAAWpY,GAOpC,OAJCG,OAAQH,EAAKG,OACbkY,oBAAqB7I,EAAaI,UAAW5P,EAAKqY,2BAWtDvI,EAAWj5E,UAAUyhF,eAAiB,WAErC,GAAIhkC,GAAO5+G,KAAK4+G,IAEhB,OAAO5+G,MAAKi+I,mBAEX,YACA,UAEG3E,KAAM,SAAWQ,GAEpB,MAAOZ,GAAOt6B,EAAKe,WAAY,SAAWO,EAAW2iC,GAIpD,IAAM,GAFF9oF,MAEM/zD,EAAI,EAAGA,EAAIk6G,EAAUqnB,SAAS/mI,OAAQwF,IAAO,CAEtD,GAAI8yF,GAAUonB,EAAUqnB,SAAUvhI,GAC9BkiI,EAAUhoB,EAAUonB,SAAUxuC,EAAQovC,QAE1C,IAAKA,EAAU,CAEd,GAAI1oH,GAASs5E,EAAQt5E,OACjBjd,MAAuBrB,KAAhBse,EAAOuhD,KAAqBvhD,EAAOuhD,KAAOvhD,EAAOzV,GACxDmmI,MAAiChvI,KAAzBg/G,EAAUzoG,WAA2ByoG,EAAUzoG,WAAYywH,EAAQgI,OAAUhI,EAAQgI,MAC7FtiE,MAAkC1sE,KAAzBg/G,EAAUzoG,WAA2ByoG,EAAUzoG,WAAYywH,EAAQt6D,QAAWs6D,EAAQt6D,OAE/Fk1E,EAAgBhJ,EAAaI,UAAWhK,GACxC6S,EAAiBjJ,EAAaI,UAAWtsE,GAEzC7M,EAAO+4E,EAAajR,MAAOtmI,EAE/B,IAAKw+D,EAAO,CAEXA,EAAK/J,eACL+J,EAAK39D,kBAAmB,CAExB,IAAI4/I,EAEJ,QAASxF,EAAiBh+H,EAAO/U,OAEhC,IAAK+yI,GAAgBxS,QAEpBgY,EAAqBjjJ,MAAMy5D,mBAC3B,MAED,KAAKgkF,GAAgBr6I,SAEpB6/I,EAAqBjjJ,MAAMw5D,uBAC3B,MAED,KAAKikF,GAAgBvqI,SACrB,IAAKuqI,GAAgB1uI,MACrB,QAECk0I,EAAqBjjJ,MAAMs5D,oBAK7B,GAAI4pF,GAAaliF,EAAKx+D,KAAOw+D,EAAKx+D,KAAOw+D,EAAK3+D,IAEf,sBAA1B8lI,EAAQtvE,eAEZn4D,QAAQqa,KAAM,gGAIf,IAAI89C,OAA0C13D,KAA1BgnI,EAAQtvE,cAA8B8kF,EAAexV,EAAQtvE,eAAkB74D,MAAM2lI,kBAErGwd,IAEC1F,GAAiBh+H,EAAO/U,QAAW+yI,EAAgBxS,QAOvDjqE,EAAK/a,SAAU,SAAWpsC,IAEF,IAAlBA,EAAOyC,SAAoD,IAAjCzC,EAAOzE,SAAS0C,cAE9CqrI,EAAY34I,KAAMqP,EAAOrX,KAAOqX,EAAOrX,KAAOqX,EAAOxX,QAQvD8gJ,EAAY34I,KAAM04I,EAOnB,KAAM,GAAI9wI,GAAI,EAAGC,EAAK8wI,EAAY1iJ,OAAQ2R,EAAIC,EAAID,IAEjD4nD,EAAOxvD,KAAM,GAAIy4I,GAChBE,EAAa/wI,GAAM,IAAMqrI,EAAiBh+H,EAAO/U,MACjD1K,MAAM84D,eAAeqhD,WAAY4oC,EAAcv9I,MAAO,GACtDxF,MAAM84D,eAAeqhD,WAAY6oC,EAAex9I,MAAO,GACvDqzD,MAWL,GAAIr2D,OAA0BrB,KAAnBg/G,EAAU39G,KAAqB29G,EAAU39G,KAAO,aAAesgJ,CAE1E,OAAO,IAAI9iJ,OAAM85D,cAAet3D,MAAMrB,GAAW64D,QAQpDqgF,EAAWj5E,UAAUgiF,UAAY,WAEhC,GAAIvkC,GAAO5+G,KAAK4+G,KACZz0F,EAAanqB,KAAKmqB,WAClBzO,EAAQ1b,KAER6oI,EAAQjqB,EAAKiqB,UACb6Z,EAAQ9jC,EAAK8jC,UAEbU,KACAC,IAIJ,KAAM,GAAI1X,KAAa+W,GAItB,IAAM,GAFFjY,GAASiY,EAAO/W,GAAYlB,OAEtBzkI,EAAI,EAAGA,EAAIykI,EAAOjqI,SAAWwF,EAEtC6iI,EAAO4B,EAAQzkI,IAAMwgE,QAAS,CAWhC,KAAM,GAAI88E,KAAaza,GAAQ,CAE9B,GAAI0a,GAAU1a,EAAOya,OAECpiJ,KAAjBqiJ,EAAQplD,WAE4Bj9F,KAAnCkiJ,EAAgBG,EAAQplD,QAE5BilD,EAAgBG,EAAQplD,MAASklD,EAAUE,EAAQplD,MAAS,GAI7DilD,EAAgBG,EAAQplD,SAM1B,MAAOziF,GAAMuiI,mBAEZ,SACA,QACA,YAEG3E,KAAM,SAAWQ,GAEpB,MAAOZ,GAAOt6B,EAAKiqB,MAAO,SAAW0a,GAEpC,IAAwB,IAAnBA,EAAQ/8E,OAEZ,MAAO,IAAIzmE,OAAMgoD,IAEX,QAAsB7mD,KAAjBqiJ,EAAQplD,KAAqB,CAExC,GAAIA,GAAO27C,EAAakI,OAAQuB,EAAQplD,MAAO1iF,OAQ/C,OANK2nI,GAAgBG,EAAQplD,MAAS,IAErCA,EAAK57F,MAAQ,aAAe8gJ,EAAUE,EAAQplD,SAIxCA,EAED,OAAwBj9F,KAAnBqiJ,EAAQ3zI,OAEnB,MAAO8L,GAAM8iI,cAAe,SAAU+E,EAAQ3zI,OAExC,IAAK2zI,EAAQp5H,YACZo5H,EAAQp5H,WAAYqrH,EAAWC,iBACuBv0I,KAAtDqiJ,EAAQp5H,WAAYqrH,EAAWC,YAAa72H,MAAsB,CAGzE,MADauL,GAAYqrH,EAAWC,YAAav/H,OAClCqtI,EAAQp5H,WAAYqrH,EAAWC,YAAa72H,OAI3D,MAAO,IAAI7e,OAAMsiB,WAIfi3H,KAAM,SAAWkK,GAEpB,MAAOtK,GAAOsK,EAAS,SAAWziF,EAAMuiF,GAEvC,GAAIC,GAAU3kC,EAAKiqB,MAAOya,EAU1B,QARsBpiJ,KAAjBqiJ,EAAQhhJ,OAEZw+D,EAAKx+D,KAAOxC,MAAM0gE,gBAAgBmyD,iBAAkB2wB,EAAQhhJ,OAIxDghJ,EAAQ7B,SAAS3gF,EAAKxpD,SAAWgsI,EAAQ7B,YAEtBxgJ,KAAnBqiJ,EAAQlgJ,OAAuB,CAEnC,GAAIA,GAAS,GAAItD,OAAMM,OACvBgD,GAAOutC,UAAW2yG,EAAQlgJ,QAC1B09D,EAAKk4B,YAAa51F,YAIWnC,KAAxBqiJ,EAAQ9F,aAEZ18E,EAAK9tD,SAAS29B,UAAW2yG,EAAQ9F,iBAIRv8I,KAArBqiJ,EAAQpgJ,UAEZ49D,EAAKx+C,WAAWquB,UAAW2yG,EAAQpgJ,cAIbjC,KAAlBqiJ,EAAQz0I,OAEZiyD,EAAKjyD,MAAM8hC,UAAW2yG,EAAQz0I,MAMhC,QAAsB5N,KAAjBqiJ,EAAQjZ,KAAqB,CAMjC,IAAM,GAJFmZ,MAEAzB,EAASjhF,EAAKvjD,SAAShd,OAAS,EAAIugE,EAAKvjD,UAAaujD,GAEhD/6D,EAAI,EAAGA,EAAIg8I,EAAOxhJ,OAAQwF,IAAO,CAE1C,GAAIm4F,GAAO6jD,EAAQh8I,GACf09I,EAAY5J,EAAa4I,MAAOa,EAAQjZ,MAGxCrwH,EAAWkkF,EAAKlkF,SAChB9E,EAAWgpF,EAAKhpF,QACpBA,GAASyC,UAAW,CAEpB,IAAI+rI,GAAc,GAAI5jJ,OAAMioD,YAAa/tC,EAAU9E,EACnDwuI,GAAY51H,sBAAwBowE,EAAKpwE,sBACzC41H,EAAYpsI,SAAW4mF,EAAK5mF,SAC5BosI,EAAYphJ,KAAO47F,EAAK57F,IAKxB,KAAM,GAHFk5B,MACAmsB,KAEMz1C,EAAI,EAAGrB,EAAI4yI,EAAUjZ,OAAOjqI,OAAQ2R,EAAIrB,EAAGqB,IAAO,CAE3D,GAAIyxI,GAAUF,EAAUjZ,OAAQt4H,GAC5B0xI,EAAYL,EAASI,EAEzB,IAAKC,EAAY,CAEhBpoH,EAAMlxB,KAAMs5I,EAEZ,IAAI90E,GAAI20E,EAAUf,oBAAoBp9I,MAClC4iH,GAAM,GAAIpoH,OAAMM,SAAUuwC,UAAWm+B,EAAO,GAAJ58D,EAC5Cy1C,GAAar9C,KAAM49G,OAInB1nH,SAAQqa,KAAM,mDAAoD8oI,GAMpED,EAAYt7F,KAAM,GAAItoD,OAAM4nD,SAAUlsB,EAAOmsB,GAAgB+7F,EAAY3yI,aAEzEyyI,EAAcl5I,KAAMo5I,GAIhB5iF,EAAKvjD,SAAShd,OAAS,GAE3BugE,EAAKl/C,OAAO+qB,MAAOm0B,EAAMA,EAAKvjD,UAC9BujD,EAAKhhD,IAAI6sB,MAAOm0B,EAAM0iF,IAItB1iF,EAAO0iF,EAAe,GAMxB,MAAO1iF,UAUXq5E,EAAWj5E,UAAU2iF,WAAa,WAOjC,QAASC,GAAmBC,EAAQC,EAAcC,GAEjD,GAAIC,GAAQD,EAAUF,EACtBC,GAAalkI,IAAKokI,EAElB,IAAIpjF,GAAO69C,EAAKiqB,MAAOmb,EAEvB,IAAKjjF,EAAKvjD,SAIT,IAAM,GAFFA,GAAWujD,EAAKvjD,SAEVxX,EAAI,EAAG8K,EAAI0M,EAAShd,OAAQwF,EAAI8K,EAAG9K,IAAO,CAEnD,GAAIo0F,GAAQ58E,EAAUxX,EACtB+9I,GAAmB3pD,EAAO+pD,EAAOD,IAnBpC,GAAItlC,GAAO5+G,KAAK4+G,KACZz0F,EAAanqB,KAAKmqB,UA0BtB,OAAOnqB,MAAKi+I,mBAEX,UAEG3E,KAAM,SAAWQ,GAEpB,MAAOZ,GAAOt6B,EAAK27B,OAAQ,SAAW5qI,GAErC,GAAIy0I,GAAS,GAAIrkJ,OAAMsnD,UACHnmD,KAAfyO,EAAMpN,OAAqB6hJ,EAAO7hJ,KAAOoN,EAAMpN,MAE/CoN,EAAM+xI,SAAS0C,EAAO7sI,SAAW5H,EAAM+xI,OAI5C,KAAM,GAFF7Y,GAAQl5H,EAAMk5H,UAER7iI,EAAI,EAAG8K,EAAI+3H,EAAMroI,OAAQwF,EAAI8K,EAAG9K,IAAO,CAGhD+9I,EADalb,EAAO7iI,GACOo+I,EAAQtK,EAAajR,OAgBjD,GAZAub,EAAOp+F,SAAU,SAAWo0C,GAGtBA,EAAMjlF,UAAYilF,EAAMjlF,SAASyjI,mCAErCx+C,EAAM/kF,eAAiB8U,EAAYqrH,EAAW+B,uCAAwCuB,mBAOnFnpI,EAAMwa,YACJxa,EAAMwa,WAAYqrH,EAAWC,iBACuBv0I,KAApDyO,EAAMwa,WAAYqrH,EAAWC,YAAa72H,MAAsB,CAEtE,GAAI1I,GAASiU,EAAYqrH,EAAWC,YAAav/H,MACjDkuI,GAAOrkI,IAAK7J,EAAQvG,EAAMwa,WAAYqrH,EAAWC,YAAa72H,QAI/D,MAAOwlI,QAQHhP;;ACt8ERr1I,MAAMskJ,UAAY,SAAW/tF,GAE5Bt2D,KAAKs2D,YAAwBp1D,KAAZo1D,EAA0BA,EAAUv2D,MAAMw2D,uBAI5Dx2D,MAAMskJ,UAAUljF,WAEfnJ,YAAaj4D,MAAMskJ,UAenB/sC,KAAM,SAAWvhD,EAAKT,EAAQC,EAAYC,GAEzC,GAAI95C,GAAQ1b,KAERq5G,EAAS,GAAIt5G,OAAMs2D,WAAYr2D,KAAKs2D,QACxC+iD,GAAOJ,QAASj5G,KAAKyK,MACrB4uG,EAAO/B,KAAMvhD,EAAK,SAAWhG,GAE5BuF,EAAQ55C,EAAMk5E,MAAO7kC,KAEnBwF,EAAYC,IAehByjD,QAAS,SAAWxuG,GAEnBzK,KAAKyK,KAAOA,GAiBbg6G,eAAgB,SAAWh6G,GAE1BzK,KAAK06D,YAAcjwD,GAIpB65I,WAAY,SAAW75I,GAEtBhK,QAAQqa,KAAM,iJAEd9a,KAAKykH,eAAgBh6G,IAItBqvG,eAAgB,SAAW53G,GAE1BlC,KAAK25G,YAAcz3G,GAIpBqiJ,mBAAoB,SAAWriJ,GAE9BlC,KAAKwkJ,gBAAkBtiJ,GAexB0yF,MAAO,SAAW7kC,GAOjB,IAAM,GALFn8B,GAAQm8B,EAAKl8B,MAAO,MACpBtoB,KACAk5I,EAAoB,MACpBC,KAEM1+I,EAAI,EAAGA,EAAI4tB,EAAMpzB,OAAQwF,IAAO,CAEzC,GAAIihE,GAAOrzC,EAAO5tB,EAGlB,IAFAihE,EAAOA,EAAK82C,OAES,IAAhB92C,EAAKzmE,QAAqC,MAArBymE,EAAK8iB,OAAQ,GAAvC,CAOA,GAAIigB,GAAM/iC,EAAK9oC,QAAS,KAEpBurB,EAAQsgD,GAAO,EAAM/iC,EAAK++C,UAAW,EAAGhc,GAAQ/iC,CACpDvd,GAAMA,EAAIuuD,aAEV,IAAI/1G,GAAU8nG,GAAO,EAAM/iC,EAAK++C,UAAWhc,EAAM,GAAM,EAGvD,IAFA9nG,EAAQA,EAAM67G,OAED,WAARr0D,EAIJn+C,GAAShJ,KAAML,GACfwiJ,EAAexiJ,GAAUqJ,MAEnB,IAAKA,EAEX,GAAa,OAARm+C,GAAwB,OAARA,GAAwB,OAARA,EAAe,CAEnD,GAAIi7F,GAAKziJ,EAAM2xB,MAAO4wH,EAAmB,EACzCl5I,GAAMm+C,IAAUxc,WAAYy3G,EAAI,IAAOz3G,WAAYy3G,EAAI,IAAOz3G,WAAYy3G,EAAI,SAI9Ep5I,GAAMm+C,GAAQxnD,GAQjB,GAAI0iJ,GAAkB,GAAI7kJ,OAAMskJ,UAAUQ,gBAAiB7kJ,KAAK06D,aAAe16D,KAAKyK,KAAMzK,KAAKwkJ,gBAI/F,OAHAI,GAAgB9qC,eAAgB95G,KAAK25G,aACrCirC,EAAgBE,WAAY9kJ,KAAKs2D,SACjCsuF,EAAgBG,aAAcL,GACvBE,IAqBT7kJ,MAAMskJ,UAAUQ,gBAAkB,SAAWG,EAAS/gJ,GAErDjE,KAAKglJ,QAAUA,GAAW,GAC1BhlJ,KAAKiE,QAAUA,EACfjE,KAAK0kJ,iBACL1kJ,KAAKkrE,aACLlrE,KAAKilJ,kBACLjlJ,KAAKklJ,cAELllJ,KAAKoW,KAASpW,KAAKiE,SAAWjE,KAAKiE,QAAQmS,KAASpW,KAAKiE,QAAQmS,KAAOrW,MAAMsW,UAC9ErW,KAAK0/E,KAAS1/E,KAAKiE,SAAWjE,KAAKiE,QAAQy7E,KAAS1/E,KAAKiE,QAAQy7E,KAAO3/E,MAAMyzC,gBAI/EzzC,MAAMskJ,UAAUQ,gBAAgB1jF,WAE/BnJ,YAAaj4D,MAAMskJ,UAAUQ,gBAE7BlrC,YAAa,YAEbG,eAAgB,SAAW53G,GAE1BlC,KAAK25G,YAAcz3G,GAIpB4iJ,WAAY,SAAW5iJ,GAEtBlC,KAAKs2D,QAAUp0D,GAIhB6iJ,aAAc,SAAWL,GAExB1kJ,KAAK0kJ,cAAgB1kJ,KAAKshC,QAASojH,GACnC1kJ,KAAKkrE,aACLlrE,KAAKilJ,kBACLjlJ,KAAKklJ,eAIN5jH,QAAS,SAAWojH,GAEnB,IAAO1kJ,KAAKiE,QAAU,MAAOygJ,EAE7B,IAAIS,KAEJ,KAAM,GAAIC,KAAMV,GAAgB,CAI/B,GAAIv8B,GAAMu8B,EAAeU,GAErBC,IAEJF,GAAWC,GAAOC,CAElB,KAAM,GAAIC,KAAQn9B,GAAM,CAEvB,GAAIo9B,IAAO,EACPrjJ,EAAQimH,EAAKm9B,GACbE,EAAQF,EAAKrtC,aAEjB,QAASutC,GAER,IAAK,KACL,IAAK,KACL,IAAK,KAICxlJ,KAAKiE,SAAWjE,KAAKiE,QAAQwhJ,eAEjCvjJ,GAAUA,EAAO,GAAM,IAAKA,EAAO,GAAM,IAAKA,EAAO,GAAM,MAIvDlC,KAAKiE,SAAWjE,KAAKiE,QAAQyhJ,gBAEb,IAAfxjJ,EAAO,IAA4B,IAAfA,EAAO,IAA4B,IAAfA,EAAO,KAInDqjJ,GAAO,GAcNA,IAEJF,EAAQG,GAAUtjJ,IAQrB,MAAOijJ,IAIRQ,QAAS,WAER,IAAM,GAAIP,KAAMplJ,MAAK0kJ,cAEpB1kJ,KAAKogF,OAAQglE,IAMf5jD,SAAU,SAAWokD,GAEpB,MAAO5lJ,MAAKklJ,WAAYU,IAIzBC,WAAY,WAEX,GAAIp/H,GAAQ,CAEZ,KAAM,GAAI2+H,KAAMplJ,MAAK0kJ,cAEpB1kJ,KAAKilJ,eAAgBx+H,GAAUzmB,KAAKogF,OAAQglE,GAC5CplJ,KAAKklJ,WAAYE,GAAO3+H,EACxBA,GAID,OAAOzmB,MAAKilJ,gBAIb7kE,OAAQ,SAAWwlE,GAQlB,WANwC1kJ,KAAnClB,KAAKkrE,UAAW06E,IAEpB5lJ,KAAK8lJ,gBAAiBF,GAIhB5lJ,KAAKkrE,UAAW06E,IAIxBE,gBAAiB,SAAWF,GAa3B,QAAS1vF,GAAY8uF,EAASjvF,GAE7B,MAAoB,gBAARA,IAA4B,KAARA,EACxB,GAGH,gBAAgB35C,KAAM25C,GAAeA,EAEnCivF,EAAUjvF,EAIlB,QAASgwF,GAAeC,EAAS9jJ,GAEhC,IAAK4iE,EAAQkhF,GAAb,CAEA,GAAIC,GAAYvqI,EAAMwqI,iBAAkBhkJ,EAAO4iE,GAC3Cz/D,EAAMqW,EAAMqmG,YAAa7rD,EAAYx6C,EAAMspI,QAASiB,EAAUlwF,KAElE1wD,GAAIpC,OAAOmO,KAAM60I,EAAUn3I,OAC3BzJ,EAAIrC,OAAOoO,KAAM60I,EAAUjjJ,QAE3BqC,EAAI7D,MAAQka,EAAMgkE,KAClBr6E,EAAI5D,MAAQia,EAAMgkE,KAElB5a,EAAQkhF,GAAY3gJ,GAlCrB,GAAIqW,GAAQ1b,KACRmoH,EAAMnoH,KAAK0kJ,cAAekB,GAC1B9gF,GAEHviE,KAAMqjJ,EACNxvI,KAAMpW,KAAKoW,KAiCZ,KAAM,GAAIkvI,KAAQn9B,GAAM,CAEvB,GACIxiH,GADAzD,EAAQimH,EAAKm9B,EAGjB,IAAe,KAAVpjJ,EAEL,OAASojJ,EAAKrtC,eAIb,IAAK,KAIJnzC,EAAOj2D,OAAQ,GAAI9O,OAAM2L,OAAQklC,UAAW1uC,EAE5C,MAED,KAAK,KAGJ4iE,EAAO3jB,UAAW,GAAIphD,OAAM2L,OAAQklC,UAAW1uC,EAE/C,MAED,KAAK,SAIJ6jJ,EAAe,MAAO7jJ,EAEtB,MAED,KAAK,SAIJ6jJ,EAAe,cAAe7jJ,EAE9B,MAED,KAAK,OAEJ6jJ,EAAe,YAAa7jJ,EAE5B,MAED,KAAK,WACL,IAAK,OAIJ6jJ,EAAe,UAAW7jJ,EAE1B,MAED,KAAK,KAKJ4iE,EAAO1jB,UAAYlU,WAAYhrC,EAE/B,MAED,KAAK,IACJyD,EAAIunC,WAAYhrC,GAEXyD,EAAI,IAERm/D,EAAOl2D,QAAUjJ,EACjBm/D,EAAOruD,aAAc,EAItB,MAED,KAAK,KACJ9Q,EAAIunC,WAAYhrC,GAEXyD,EAAI,IAERm/D,EAAOl2D,QAAU,EAAIjJ,EACrBm/D,EAAOruD,aAAc,IAczB,MADAzW,MAAKkrE,UAAW06E,GAAiB,GAAI7lJ,OAAMs8B,kBAAmByoC,GACvD9kE,KAAKkrE,UAAW06E,IAIxBM,iBAAkB,SAAWhkJ,EAAOikJ,GAEnC,GAQIn8C,GARAi8C,GAEHn3I,MAAO,GAAI/O,OAAMG,QAAS,EAAG,GAC7B8C,OAAQ,GAAIjD,OAAMG,QAAS,EAAG,IAI3BkmJ,EAAQlkJ,EAAM2xB,MAAO,MA+BzB,OA5BAm2E,GAAMo8C,EAAMjoH,QAAS,OAEhB6rE,GAAO,IAEXm8C,EAAU9kG,UAAYnU,WAAYk5G,EAAOp8C,EAAM,IAC/Co8C,EAAMh4E,OAAQ47B,EAAK,IAIpBA,EAAMo8C,EAAMjoH,QAAS,MAEhB6rE,GAAO,IAEXi8C,EAAUn3I,MAAMjH,IAAKqlC,WAAYk5G,EAAOp8C,EAAM,IAAO98D,WAAYk5G,EAAOp8C,EAAM,KAC9Eo8C,EAAMh4E,OAAQ47B,EAAK,IAIpBA,EAAMo8C,EAAMjoH,QAAS,MAEhB6rE,GAAO,IAEXi8C,EAAUjjJ,OAAO6E,IAAKqlC,WAAYk5G,EAAOp8C,EAAM,IAAO98D,WAAYk5G,EAAOp8C,EAAM,KAC/Eo8C,EAAMh4E,OAAQ47B,EAAK,IAIpBi8C,EAAUlwF,IAAMqwF,EAAMl4I,KAAM,KAAM6vG,OAC3BkoC,GAIRlkC,YAAa,SAAWhsD,EAAKx0D,EAAS+zD,EAAQC,EAAYC,GAEzD,GAAInxD,GACAg1G,EAASt5G,MAAMo6D,OAAOmnD,SAAS3/F,IAAKo0C,GACpCO,MAA6Bp1D,KAAjBlB,KAAKs2D,QAA0Bt2D,KAAKs2D,QAAUv2D,MAAMw2D,qBAapE,OAXgB,QAAX8iD,IAEJA,EAAS,GAAIt5G,OAAM82D,cAAeP,IAI9B+iD,EAAOS,gBAAiBT,EAAOS,eAAgB95G,KAAK25G,aACzDt1G,EAAUg1G,EAAO/B,KAAMvhD,EAAKT,EAAQC,EAAYC,OAE/Bt0D,KAAZK,IAAwB8C,EAAQ9C,QAAUA,GAExC8C;;AC9hBTtE,MAAMsmJ,UAAY,WASjB,QAASC,KAER,GAAIr6I,IACHmsC,WACAx+B,UAEAvN,YACA8Z,WACA/B,UACAgC,OAEAmgI,qBAEAC,YAAa,SAAWjkJ,EAAMkkJ,GAI7B,GAAKzmJ,KAAK4Z,SAA0C,IAAhC5Z,KAAK4Z,OAAO6sI,gBAI/B,MAFAzmJ,MAAK4Z,OAAOrX,KAAOA,OACnBvC,KAAK4Z,OAAO6sI,iBAAwC,IAApBA,EAKjC,IAAIC,GAAqB1mJ,KAAK4Z,QAAiD,kBAAhC5Z,MAAK4Z,OAAO+sI,gBAAiC3mJ,KAAK4Z,OAAO+sI,sBAAoBzlJ,EA8H5H,IA5HKlB,KAAK4Z,QAA2C,kBAA1B5Z,MAAK4Z,OAAOgtI,WAEtC5mJ,KAAK4Z,OAAOgtI,WAAW,GAIxB5mJ,KAAK4Z,QACJrX,KAAMA,GAAQ,GACdkkJ,iBAAuC,IAApBA,EAEnBxsI,UACC5N,YACA8Z,WACA/B,UACAgC,QAED8kD,aACA27E,QAAQ,EAERC,cAAe,SAAWvkJ,EAAMwkJ,GAE/B,GAAIC,GAAWhnJ,KAAK4mJ,WAAW,EAI1BI,KAAcA,EAASC,WAAaD,EAAS7+H,YAAc,IAE/DnoB,KAAKkrE,UAAUkD,OAAQ44E,EAASvgI,MAAO,EAIxC,IAAItR,IACHsR,MAAOzmB,KAAKkrE,UAAU1qE,OACtB+B,KAAMA,GAAQ,GACd2kJ,OAAUrqI,MAAMC,QAASiqI,IAAeA,EAAUvmJ,OAAS,EAAIumJ,EAAWA,EAAUvmJ,OAAS,GAAM,GACnGqmJ,WAAuB3lJ,KAAb8lJ,EAAyBA,EAASH,OAAS7mJ,KAAK6mJ,OAC1Dr+H,eAA2BtnB,KAAb8lJ,EAAyBA,EAASG,SAAW,EAC3DA,UAAY,EACZh/H,YAAc,EACd8+H,WAAW,EAEXxrI,MAAO,SAAWgL,GAEjB,GAAI2gI,IACH3gI,MAA0B,gBAAVA,GAAqBA,EAAQzmB,KAAKymB,MAClDlkB,KAAMvC,KAAKuC,KACX2kJ,OAAQlnJ,KAAKknJ,OACbL,OAAQ7mJ,KAAK6mJ,OACbr+H,WAAY,EACZ2+H,UAAY,EACZh/H,YAAc,EACd8+H,WAAW,EAGZ,OADAG,GAAO3rI,MAAQzb,KAAKyb,MAAM4sC,KAAM++F,GACzBA,GAOT,OAFApnJ,MAAKkrE,UAAU3gE,KAAM4K,GAEdA,GAIRwxI,gBAAiB,WAEhB,GAAK3mJ,KAAKkrE,UAAU1qE,OAAS,EAE5B,MAAOR,MAAKkrE,UAAWlrE,KAAKkrE,UAAU1qE,OAAS,IAQjDomJ,UAAW,SAAW77H,GAErB,GAAIs8H,GAAoBrnJ,KAAK2mJ,iBAU7B,IATKU,IAAsD,IAAjCA,EAAkBF,WAE3CE,EAAkBF,SAAWnnJ,KAAKia,SAAS5N,SAAS7L,OAAS,EAC7D6mJ,EAAkBl/H,WAAak/H,EAAkBF,SAAWE,EAAkB7+H,WAC9E6+H,EAAkBJ,WAAY,GAK1Bl8H,GAAO/qB,KAAKkrE,UAAU1qE,OAAS,EAEnC,IAAM,GAAI8mJ,GAAKtnJ,KAAKkrE,UAAU1qE,OAAS,EAAG8mJ,GAAM,EAAGA,IAE7CtnJ,KAAKkrE,UAAWo8E,GAAKn/H,YAAc,GAEvCnoB,KAAKkrE,UAAUkD,OAAQk5E,EAAI,EAkB9B,OATKv8H,IAAiC,IAA1B/qB,KAAKkrE,UAAU1qE,QAE1BR,KAAKkrE,UAAU3gE,MACdhI,KAAM,GACNskJ,OAAQ7mJ,KAAK6mJ,SAKRQ,IAWJX,GAAoBA,EAAiBnkJ,MAA0C,kBAA3BmkJ,GAAiBjrI,MAAuB,CAEhG,GAAI8rI,GAAWb,EAAiBjrI,MAAO,EACvC8rI,GAASN,WAAY,EACrBjnJ,KAAK4Z,OAAOsxD,UAAU3gE,KAAMg9I,GAI7BvnJ,KAAKo4C,QAAQ7tC,KAAMvK,KAAK4Z,SAIzB4tI,SAAU,WAEJxnJ,KAAK4Z,QAA2C,kBAA1B5Z,MAAK4Z,OAAOgtI,WAEtC5mJ,KAAK4Z,OAAOgtI,WAAW,IAMzBa,iBAAkB,SAAWvlJ,EAAO64E,GAEnC,GAAIt0D,GAAQuQ,SAAU90B,EAAO,GAC7B,OAAsD,IAA7CukB,GAAS,EAAIA,EAAQ,EAAIA,EAAQs0D,EAAM,IAIjD2sE,iBAAkB,SAAWxlJ,EAAO64E,GAEnC,GAAIt0D,GAAQuQ,SAAU90B,EAAO,GAC7B,OAAsD,IAA7CukB,GAAS,EAAIA,EAAQ,EAAIA,EAAQs0D,EAAM,IAIjD4sE,aAAc,SAAWzlJ,EAAO64E,GAE/B,GAAIt0D,GAAQuQ,SAAU90B,EAAO,GAC7B,OAAsD,IAA7CukB,GAAS,EAAIA,EAAQ,EAAIA,EAAQs0D,EAAM,IAIjDq5B,UAAW,SAAWjgG,EAAGhN,EAAG2c,GAE3B,GAAI+1F,GAAM75G,KAAKqM,SACX8tE,EAAMn6E,KAAK4Z,OAAOK,SAAS5N,QAE/B8tE,GAAI5vE,KAAMsvG,EAAK1lG,EAAI,GAAK0lG,EAAK1lG,EAAI,GAAK0lG,EAAK1lG,EAAI,IAC/CgmE,EAAI5vE,KAAMsvG,EAAK1yG,EAAI,GAAK0yG,EAAK1yG,EAAI,GAAK0yG,EAAK1yG,EAAI,IAC/CgzE,EAAI5vE,KAAMsvG,EAAK/1F,EAAI,GAAK+1F,EAAK/1F,EAAI,GAAK+1F,EAAK/1F,EAAI,KAIhD8jI,cAAe,SAAWzzI,GAEzB,GAAI0lG,GAAM75G,KAAKqM,QACLrM,MAAK4Z,OAAOK,SAAS5N,SAE3B9B,KAAMsvG,EAAK1lG,EAAI,GAAK0lG,EAAK1lG,EAAI,GAAK0lG,EAAK1lG,EAAI,KAIhD0zI,UAAW,SAAW1zI,EAAGhN,EAAG2c,GAE3B,GAAI+1F,GAAM75G,KAAKmmB,QACXg0D,EAAMn6E,KAAK4Z,OAAOK,SAASkM,OAE/Bg0D,GAAI5vE,KAAMsvG,EAAK1lG,EAAI,GAAK0lG,EAAK1lG,EAAI,GAAK0lG,EAAK1lG,EAAI,IAC/CgmE,EAAI5vE,KAAMsvG,EAAK1yG,EAAI,GAAK0yG,EAAK1yG,EAAI,GAAK0yG,EAAK1yG,EAAI,IAC/CgzE,EAAI5vE,KAAMsvG,EAAK/1F,EAAI,GAAK+1F,EAAK/1F,EAAI,GAAK+1F,EAAK/1F,EAAI,KAIhDgkI,SAAU,SAAW3zI,EAAGhN,EAAG2c,GAE1B,GAAI+1F,GAAM75G,KAAKokB,OACX+1D,EAAMn6E,KAAK4Z,OAAOK,SAASmK,MAE/B+1D,GAAI5vE,KAAMsvG,EAAK1lG,EAAI,GAAK0lG,EAAK1lG,EAAI,GAAK0lG,EAAK1lG,EAAI,IAC/CgmE,EAAI5vE,KAAMsvG,EAAK1yG,EAAI,GAAK0yG,EAAK1yG,EAAI,GAAK0yG,EAAK1yG,EAAI,IAC/CgzE,EAAI5vE,KAAMsvG,EAAK/1F,EAAI,GAAK+1F,EAAK/1F,EAAI,GAAK+1F,EAAK/1F,EAAI,KAIhD0wF,MAAO,SAAWrgG,EAAGhN,EAAG2c,GAEvB,GAAI+1F,GAAM75G,KAAKomB,IACX+zD,EAAMn6E,KAAK4Z,OAAOK,SAASmM,GAE/B+zD,GAAI5vE,KAAMsvG,EAAK1lG,EAAI,GAAK0lG,EAAK1lG,EAAI,IACjCgmE,EAAI5vE,KAAMsvG,EAAK1yG,EAAI,GAAK0yG,EAAK1yG,EAAI,IACjCgzE,EAAI5vE,KAAMsvG,EAAK/1F,EAAI,GAAK+1F,EAAK/1F,EAAI,KAIlCikI,UAAW,SAAW5zI,GAErB,GAAI0lG,GAAM75G,KAAKomB,GACLpmB,MAAK4Z,OAAOK,SAASmM,IAE3B7b,KAAMsvG,EAAK1lG,EAAI,GAAK0lG,EAAK1lG,EAAI,KAIlC2nF,QAAS,SAAW3nF,EAAGhN,EAAG2c,EAAGkkI,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,GAEhD,GAAIC,GAAOtoJ,KAAKqM,SAAS7L,OAErB+nJ,EAAKvoJ,KAAKynJ,iBAAkBtzI,EAAGm0I,GAC/B1I,EAAK5/I,KAAKynJ,iBAAkBtgJ,EAAGmhJ,GAC/BE,EAAKxoJ,KAAKynJ,iBAAkB3jI,EAAGwkI,EAInC,IAFAtoJ,KAAKo0G,UAAWm0C,EAAI3I,EAAI4I,OAEZtnJ,KAAP8mJ,EAAmB,CAEvB,GAAIS,GAAQzoJ,KAAKomB,IAAI5lB,MAErB+nJ,GAAKvoJ,KAAK2nJ,aAAcK,EAAIS,GAC5B7I,EAAK5/I,KAAK2nJ,aAAcM,EAAIQ,GAC5BD,EAAKxoJ,KAAK2nJ,aAAcO,EAAIO,GAE5BzoJ,KAAKw0G,MAAO+zC,EAAI3I,EAAI4I,GAIrB,OAAYtnJ,KAAPinJ,EAAmB,CAGvB,GAAIO,GAAO1oJ,KAAKmmB,QAAQ3lB,MACxB+nJ,GAAKvoJ,KAAK0nJ,iBAAkBS,EAAIO,GAEhC9I,EAAKuI,IAAOC,EAAKG,EAAKvoJ,KAAK0nJ,iBAAkBU,EAAIM,GACjDF,EAAKL,IAAOE,EAAKE,EAAKvoJ,KAAK0nJ,iBAAkBW,EAAIK,GAEjD1oJ,KAAK6nJ,UAAWU,EAAI3I,EAAI4I,GAIpBxoJ,KAAKokB,OAAO5jB,OAAS,GAEzBR,KAAK8nJ,SAAUS,EAAI3I,EAAI4I,IAMzBG,gBAAiB,SAAWt8I,EAAU+Z,GAErCpmB,KAAK4Z,OAAOK,SAASpY,KAAO,MAK5B,KAAM,GAHFymJ,GAAOtoJ,KAAKqM,SAAS7L,OACrBioJ,EAAQzoJ,KAAKomB,IAAI5lB,OAEXooJ,EAAK,EAAG93I,EAAIzE,EAAS7L,OAAQooJ,EAAK93I,EAAG83I,IAE9C5oJ,KAAK4nJ,cAAe5nJ,KAAKynJ,iBAAkBp7I,EAAUu8I,GAAMN,GAI5D,KAAM,GAAIO,GAAM,EAAG/3I,EAAIsV,EAAI5lB,OAAQqoJ,EAAM/3I,EAAG+3I,IAE3C7oJ,KAAK+nJ,UAAW/nJ,KAAK2nJ,aAAcvhI,EAAKyiI,GAAOJ,KAUlD,OAFAx8I,GAAMu6I,YAAa,IAAI,GAEhBv6I,EAMR,QAASo6I,GAAW/vF,GAEnBt2D,KAAKs2D,YAAwBp1D,KAAZo1D,EAA0BA,EAAUv2D,MAAMw2D,sBAE3Dv2D,KAAKkrE,UAAY,KApVlB,GAAI49E,GAAiB,gBAEjBC,EAA2B,WAE3BC,EAAuB,UA6rB3B,OAzWA3C,GAAUllF,WAETnJ,YAAaquF,EAEb/uC,KAAM,SAAWvhD,EAAKT,EAAQC,EAAYC,GAEzC,GAAI95C,GAAQ1b,KAERq5G,EAAS,GAAIt5G,OAAMs2D,WAAY36C,EAAM46C,QACzC+iD,GAAOJ,QAASj5G,KAAKyK,MACrB4uG,EAAO/B,KAAMvhD,EAAK,SAAWhG,GAE5BuF,EAAQ55C,EAAMk5E,MAAO7kC,KAEnBwF,EAAYC,IAIhByjD,QAAS,SAAW/2G,GAEnBlC,KAAKyK,KAAOvI,GAIb6iJ,aAAc,SAAW75E,GAIxB,MAFAlrE,MAAKkrE,UAAYA,EAEVlrE,MAIR40F,MAAO,SAAW7kC,GAEjBtvD,QAAQi6C,KAAM,YAEd,IAAIzuC,GAAQ,GAAIq6I,IAEkB,IAA7Bv2F,EAAK5xB,QAAS,UAGlB4xB,EAAOA,EAAK55B,QAAS,QAAS,QAIG,IAA7B45B,EAAK5xB,QAAS,UAGlB4xB,EAAOA,EAAK55B,QAAS,QAAS,IAY/B,KAAM,GARFvC,GAAQm8B,EAAKl8B,MAAO,MACpBozC,EAAO,GAAIgiF,EAAgB,GAE3B/uI,KAGAgvI,EAAoC,kBAAhB,GAAGA,SAEjBljJ,EAAI,EAAG8K,EAAI8iB,EAAMpzB,OAAQwF,EAAI8K,EAAG9K,IAQzC,GANAihE,EAAOrzC,EAAO5tB,GAEdihE,EAAOiiF,EAAWjiF,EAAKiiF,WAAajiF,EAAK82C,OAIrB,IAFP92C,EAAKzmE,QAOK,OAHvByoJ,EAAgBhiF,EAAK8iB,OAAQ,IAK7B,GAAuB,MAAlBk/D,EAAwB,CAE5B,GAAInkJ,GAAOmiE,EAAKpzC,MAAO,MAEvB,QAAS/uB,EAAM,IAEd,IAAK,IACJmH,EAAMI,SAAS9B,KACd2iC,WAAYpoC,EAAM,IAClBooC,WAAYpoC,EAAM,IAClBooC,WAAYpoC,EAAM,KAEE,IAAhBA,EAAKtE,QAETyL,EAAMmY,OAAO7Z,KACZ2iC,WAAYpoC,EAAM,IAClBooC,WAAYpoC,EAAM,IAClBooC,WAAYpoC,EAAM,IAKpB,MACD,KAAK,KACJmH,EAAMka,QAAQ5b,KACb2iC,WAAYpoC,EAAM,IAClBooC,WAAYpoC,EAAM,IAClBooC,WAAYpoC,EAAM,IAEnB,MACD,KAAK,KACJmH,EAAMma,IAAI7b,KACT2iC,WAAYpoC,EAAM,IAClBooC,WAAYpoC,EAAM,UAMf,IAAuB,MAAlBmkJ,EAAwB,CAQnC,IAAM,GANFE,GAAWliF,EAAK2yC,OAAQ,GAAImE,OAC5BqrC,EAAaD,EAASt1H,MAAO,OAC7Bw1H,KAIMl3I,EAAI,EAAGC,EAAKg3I,EAAW5oJ,OAAQ2R,EAAIC,EAAID,IAAO,CAEvD,GAAI7D,GAAS86I,EAAYj3I,EAEzB,IAAK7D,EAAO9N,OAAS,EAAI,CAExB,GAAI8oJ,GAAch7I,EAAOulB,MAAO,IAChCw1H,GAAa9+I,KAAM++I,IAUrB,IAAM,GAFFzuF,GAAKwuF,EAAc,GAEbl3I,EAAI,EAAGC,EAAKi3I,EAAa7oJ,OAAS,EAAG2R,EAAIC,EAAID,IAAO,CAE7D,GAAIwpD,GAAK0tF,EAAcl3I,GACnBuqD,EAAK2sF,EAAcl3I,EAAI,EAE3BlG,GAAM6vF,QACLjhC,EAAI,GAAKc,EAAI,GAAKe,EAAI,GACtB7B,EAAI,GAAKc,EAAI,GAAKe,EAAI,GACtB7B,EAAI,GAAKc,EAAI,GAAKe,EAAI,SAKlB,IAAuB,MAAlBusF,EAAwB,CAEnC,GAAIM,GAAYtiF,EAAK++C,UAAW,GAAIjI,OAAOlqF,MAAO,KAC9C21H,KAAmBC,IAEvB,KAA+B,IAA1BxiF,EAAK9oC,QAAS,KAElBqrH,EAAeD,MAIf,KAAM,GAAIG,GAAK,EAAGC,EAAOJ,EAAU/oJ,OAAQkpJ,EAAKC,EAAMD,IAAQ,CAE7D,GAAI5pC,GAAQypC,EAAWG,GAAK71H,MAAO,IAEf,MAAfisF,EAAO,IAAa0pC,EAAaj/I,KAAMu1G,EAAO,IAC/B,KAAfA,EAAO,IAAa2pC,EAAQl/I,KAAMu1G,EAAO,IAKhD7zG,EAAM08I,gBAAiBa,EAAcC,OAE/B,IAAkD,QAA3CvvI,EAAS4uI,EAAeh+I,KAAMm8D,IAAoB,CAQ/D,GAAI1kE,IAAS,IAAM2X,EAAQ,GAAI0/F,OAAQ,GAAImE,QAASnE,OAAQ,EAE5D3tG,GAAMu6I,YAAajkJ,OAEb,IAAKymJ,EAAqB5sI,KAAM6qD,GAItCh7D,EAAM2N,OAAOktI,cAAe7/E,EAAK++C,UAAW,GAAIjI,OAAQ9xG,EAAMs6I,uBAExD,IAAKwC,EAAyB3sI,KAAM6qD,GAI1Ch7D,EAAMs6I,kBAAkBh8I,KAAM08D,EAAK++C,UAAW,GAAIjI,YAE5C,CAAA,GAAuB,MAAlBkrC,EAsCL,CAGN,GAAc,OAAThiF,EAAgB,QAErB,MAAM,IAAIxyC,OAAO,sCAAwCwyC,EAAO,KAnBhE,GAtBA/sD,EAAS+sD,EAAKpzC,MAAO,KAsBhB3Z,EAAO1Z,OAAS,EAAI,CAExB,GAAI0B,GAAQgY,EAAQ,GAAI6jG,OAAO9F,aAC/BhsG,GAAM2N,OAAOitI,OAAqB,MAAV3kJ,GAA2B,QAAVA,MAKzC+J,GAAM2N,OAAOitI,QAAS,CAGvB,IAAI1xI,GAAWlJ,EAAM2N,OAAO+sI,iBACvBxxI,KAAWA,EAAS0xI,OAAS56I,EAAM2N,OAAOitI,QAajD56I,EAAMu7I,UAEN,IAAIn9I,GAAY,GAAItK,OAAM8oD,KAC1Bx+C,GAAUk8I,qBAAuBrzF,OAAQjnD,EAAMs6I,kBAE/C,KAAM,GAAIvgJ,GAAI,EAAG8K,EAAI7E,EAAMmsC,QAAQ53C,OAAQwF,EAAI8K,EAAG9K,IAAO,CAExD,GAAI4T,GAAS3N,EAAMmsC,QAASpyC,GACxBiU,EAAWL,EAAOK,SAClBixD,EAAYtxD,EAAOsxD,UACnB5uD,EAA6B,SAAlBrC,EAASpY,IAGxB,IAAkC,IAA7BoY,EAAS5N,SAAS7L,OAAvB,CAEA,GAAI+uB,GAAiB,GAAIxvB,OAAMwmB,cAE/BgJ,GAAe3G,aAAc,WAAY,GAAI7oB,OAAMgmB,uBAAwB9L,EAAS5N,SAAU,IAEzF4N,EAASkM,QAAQ3lB,OAAS,EAE9B+uB,EAAe3G,aAAc,SAAU,GAAI7oB,OAAMgmB,uBAAwB9L,EAASkM,QAAS,IAI3FoJ,EAAek9B,uBAIXxyC,EAASmK,OAAO5jB,OAAS,GAE7B+uB,EAAe3G,aAAc,QAAS,GAAI7oB,OAAMgmB,uBAAwB9L,EAASmK,OAAQ,IAIrFnK,EAASmM,IAAI5lB,OAAS,GAE1B+uB,EAAe3G,aAAc,KAAM,GAAI7oB,OAAMgmB,uBAAwB9L,EAASmM,IAAK,GAQpF,KAAM,GAFFwjI,MAEMtC,EAAK,EAAGuC,EAAQ3+E,EAAU1qE,OAAQ8mJ,EAAKuC,EAAOvC,IAAQ,CAE/D,GAAIwC,GAAiB5+E,EAAWo8E,GAC5BnyI,MAAWjU,EAEf,IAAwB,OAAnBlB,KAAKkrE,YAET/1D,EAAWnV,KAAKkrE,UAAUkV,OAAQ0pE,EAAevnJ,MAG5C+Z,GAAUnH,KAAgBA,YAAoBpV,OAAM08B,oBAAsB,CAE9E,GAAIstH,GAAe,GAAIhqJ,OAAM08B,iBAC7BstH,GAAa34I,KAAM+D,GACnBA,EAAW40I,EAMN50I,IAENA,EAAemH,EAAyC,GAAIvc,OAAM08B,kBAA1C,GAAI18B,OAAMs8B,kBAClClnB,EAAS5S,KAAOunJ,EAAevnJ,MAIhC4S,EAASmB,aAAcwzI,EAAejD,OAEtC+C,EAAiBr/I,KAAM4K,GAMxB,GAAIgpF,EAEJ,IAAKyrD,EAAiBppJ,OAAS,EAAI,CAElC,IAAM,GAAI8mJ,GAAK,EAAGuC,EAAQ3+E,EAAU1qE,OAAQ8mJ,EAAKuC,EAAOvC,IAAQ,CAE/D,GAAIwC,GAAiB5+E,EAAWo8E,EAChC/3H,GAAehH,SAAUuhI,EAAethI,WAAYshI,EAAe3hI,WAAYm/H,GAIhFnpD,EAAW7hF,EAA8D,GAAIvc,OAAM2oD,aAAcn5B,EAAgBq6H,GAA7F,GAAI7pJ,OAAMkrB,KAAMsE,EAAgBq6H,OAIpDzrD,GAAW7hF,EAAmE,GAAIvc,OAAM2oD,aAAcn5B,EAAgBq6H,EAAkB,IAApH,GAAI7pJ,OAAMkrB,KAAMsE,EAAgBq6H,EAAkB,GAIvEzrD,GAAK57F,KAAOqX,EAAOrX,KAEnB8H,EAAU0V,IAAKo+E,IAMhB,MAFA19F,SAAQuzI,QAAS,aAEV3pI,IAMFg8I","file":"bundle.js","sourcesContent":["(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o\",\"Brandon Jones \",\"Jordan Santell \"],\"bugs\":{\"url\":\"https://github.com/googlevr/webvr-polyfill/issues\"},\"bundleDependencies\":false,\"deprecated\":false,\"description\":\"Use WebVR today, on mobile or desktop, without requiring a special browser build.\",\"devDependencies\":{\"chai\":\"^3.5.0\",\"jsdom\":\"^9.12.0\",\"mocha\":\"^3.2.0\",\"semver\":\"^5.3.0\",\"webpack\":\"^2.6.1\",\"webpack-dev-server\":\"2.7.1\"},\"homepage\":\"https://github.com/googlevr/webvr-polyfill\",\"keywords\":[\"vr\",\"webvr\"],\"license\":\"Apache-2.0\",\"main\":\"src/node-entry\",\"name\":\"webvr-polyfill\",\"repository\":{\"type\":\"git\",\"url\":\"git+https://github.com/googlevr/webvr-polyfill.git\"},\"scripts\":{\"build\":\"webpack\",\"start\":\"npm run watch\",\"test\":\"mocha\",\"watch\":\"webpack-dev-server\"},\"version\":\"0.9.41\"}","module.exports={\"format\":1,\"last_updated\":\"2017-08-27T14:39:31Z\",\"devices\":[{\"type\":\"android\",\"rules\":[{\"mdmh\":\"asus/*/Nexus 7/*\"},{\"ua\":\"Nexus 7\"}],\"dpi\":[320.8,323],\"bw\":3,\"ac\":500},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"asus/*/ASUS_Z00AD/*\"},{\"ua\":\"ASUS_Z00AD\"}],\"dpi\":[403,404.6],\"bw\":3,\"ac\":1000},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"Google/*/Pixel XL/*\"},{\"ua\":\"Pixel XL\"}],\"dpi\":[537.9,533],\"bw\":3,\"ac\":1000},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"Google/*/Pixel/*\"},{\"ua\":\"Pixel\"}],\"dpi\":[432.6,436.7],\"bw\":3,\"ac\":1000},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"HTC/*/HTC6435LVW/*\"},{\"ua\":\"HTC6435LVW\"}],\"dpi\":[449.7,443.3],\"bw\":3,\"ac\":1000},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"HTC/*/HTC One XL/*\"},{\"ua\":\"HTC One XL\"}],\"dpi\":[315.3,314.6],\"bw\":3,\"ac\":1000},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"htc/*/Nexus 9/*\"},{\"ua\":\"Nexus 9\"}],\"dpi\":289,\"bw\":3,\"ac\":500},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"HTC/*/HTC One M9/*\"},{\"ua\":\"HTC One M9\"}],\"dpi\":[442.5,443.3],\"bw\":3,\"ac\":500},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"HTC/*/HTC One_M8/*\"},{\"ua\":\"HTC One_M8\"}],\"dpi\":[449.7,447.4],\"bw\":3,\"ac\":500},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"HTC/*/HTC One/*\"},{\"ua\":\"HTC One\"}],\"dpi\":472.8,\"bw\":3,\"ac\":1000},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"Huawei/*/Nexus 6P/*\"},{\"ua\":\"Nexus 6P\"}],\"dpi\":[515.1,518],\"bw\":3,\"ac\":1000},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"LENOVO/*/Lenovo PB2-690Y/*\"},{\"ua\":\"Lenovo PB2-690Y\"}],\"dpi\":[457.2,454.713],\"bw\":3,\"ac\":500},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"LGE/*/Nexus 5X/*\"},{\"ua\":\"Nexus 5X\"}],\"dpi\":[422,419.9],\"bw\":3,\"ac\":1000},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"LGE/*/LGMS345/*\"},{\"ua\":\"LGMS345\"}],\"dpi\":[221.7,219.1],\"bw\":3,\"ac\":500},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"LGE/*/LG-D800/*\"},{\"ua\":\"LG-D800\"}],\"dpi\":[422,424.1],\"bw\":3,\"ac\":500},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"LGE/*/LG-D850/*\"},{\"ua\":\"LG-D850\"}],\"dpi\":[537.9,541.9],\"bw\":3,\"ac\":500},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"LGE/*/VS985 4G/*\"},{\"ua\":\"VS985 4G\"}],\"dpi\":[537.9,535.6],\"bw\":3,\"ac\":1000},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"LGE/*/Nexus 5/*\"},{\"ua\":\"Nexus 5 B\"}],\"dpi\":[442.4,444.8],\"bw\":3,\"ac\":1000},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"LGE/*/Nexus 4/*\"},{\"ua\":\"Nexus 4\"}],\"dpi\":[319.8,318.4],\"bw\":3,\"ac\":1000},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"LGE/*/LG-P769/*\"},{\"ua\":\"LG-P769\"}],\"dpi\":[240.6,247.5],\"bw\":3,\"ac\":1000},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"LGE/*/LGMS323/*\"},{\"ua\":\"LGMS323\"}],\"dpi\":[206.6,204.6],\"bw\":3,\"ac\":1000},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"LGE/*/LGLS996/*\"},{\"ua\":\"LGLS996\"}],\"dpi\":[403.4,401.5],\"bw\":3,\"ac\":1000},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"Micromax/*/4560MMX/*\"},{\"ua\":\"4560MMX\"}],\"dpi\":[240,219.4],\"bw\":3,\"ac\":1000},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"Micromax/*/A250/*\"},{\"ua\":\"Micromax A250\"}],\"dpi\":[480,446.4],\"bw\":3,\"ac\":1000},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"Micromax/*/Micromax AQ4501/*\"},{\"ua\":\"Micromax AQ4501\"}],\"dpi\":240,\"bw\":3,\"ac\":500},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"motorola/*/DROID RAZR/*\"},{\"ua\":\"DROID RAZR\"}],\"dpi\":[368.1,256.7],\"bw\":3,\"ac\":1000},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"motorola/*/XT830C/*\"},{\"ua\":\"XT830C\"}],\"dpi\":[254,255.9],\"bw\":3,\"ac\":1000},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"motorola/*/XT1021/*\"},{\"ua\":\"XT1021\"}],\"dpi\":[254,256.7],\"bw\":3,\"ac\":500},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"motorola/*/XT1023/*\"},{\"ua\":\"XT1023\"}],\"dpi\":[254,256.7],\"bw\":3,\"ac\":500},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"motorola/*/XT1028/*\"},{\"ua\":\"XT1028\"}],\"dpi\":[326.6,327.6],\"bw\":3,\"ac\":1000},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"motorola/*/XT1034/*\"},{\"ua\":\"XT1034\"}],\"dpi\":[326.6,328.4],\"bw\":3,\"ac\":500},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"motorola/*/XT1053/*\"},{\"ua\":\"XT1053\"}],\"dpi\":[315.3,316.1],\"bw\":3,\"ac\":1000},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"motorola/*/XT1562/*\"},{\"ua\":\"XT1562\"}],\"dpi\":[403.4,402.7],\"bw\":3,\"ac\":1000},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"motorola/*/Nexus 6/*\"},{\"ua\":\"Nexus 6 B\"}],\"dpi\":[494.3,489.7],\"bw\":3,\"ac\":1000},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"motorola/*/XT1063/*\"},{\"ua\":\"XT1063\"}],\"dpi\":[295,296.6],\"bw\":3,\"ac\":1000},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"motorola/*/XT1064/*\"},{\"ua\":\"XT1064\"}],\"dpi\":[295,295.6],\"bw\":3,\"ac\":500},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"motorola/*/XT1092/*\"},{\"ua\":\"XT1092\"}],\"dpi\":[422,424.1],\"bw\":3,\"ac\":500},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"motorola/*/XT1095/*\"},{\"ua\":\"XT1095\"}],\"dpi\":[422,423.4],\"bw\":3,\"ac\":1000},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"motorola/*/G4/*\"},{\"ua\":\"Moto G (4)\"}],\"dpi\":401,\"bw\":4,\"ac\":1000},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"OnePlus/*/A0001/*\"},{\"ua\":\"A0001\"}],\"dpi\":[403.4,401],\"bw\":3,\"ac\":1000},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"OnePlus/*/ONE E1005/*\"},{\"ua\":\"ONE E1005\"}],\"dpi\":[442.4,441.4],\"bw\":3,\"ac\":1000},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"OnePlus/*/ONE A2005/*\"},{\"ua\":\"ONE A2005\"}],\"dpi\":[391.9,405.4],\"bw\":3,\"ac\":1000},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"OPPO/*/X909/*\"},{\"ua\":\"X909\"}],\"dpi\":[442.4,444.1],\"bw\":3,\"ac\":1000},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"samsung/*/GT-I9082/*\"},{\"ua\":\"GT-I9082\"}],\"dpi\":[184.7,185.4],\"bw\":3,\"ac\":1000},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"samsung/*/SM-G360P/*\"},{\"ua\":\"SM-G360P\"}],\"dpi\":[196.7,205.4],\"bw\":3,\"ac\":1000},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"samsung/*/Nexus S/*\"},{\"ua\":\"Nexus S\"}],\"dpi\":[234.5,229.8],\"bw\":3,\"ac\":1000},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"samsung/*/GT-I9300/*\"},{\"ua\":\"GT-I9300\"}],\"dpi\":[304.8,303.9],\"bw\":5,\"ac\":500},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"samsung/*/SM-T230NU/*\"},{\"ua\":\"SM-T230NU\"}],\"dpi\":216,\"bw\":3,\"ac\":500},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"samsung/*/SGH-T399/*\"},{\"ua\":\"SGH-T399\"}],\"dpi\":[217.7,231.4],\"bw\":3,\"ac\":1000},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"samsung/*/SGH-M919/*\"},{\"ua\":\"SGH-M919\"}],\"dpi\":[440.8,437.7],\"bw\":3,\"ac\":1000},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"samsung/*/SM-N9005/*\"},{\"ua\":\"SM-N9005\"}],\"dpi\":[386.4,387],\"bw\":3,\"ac\":500},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"samsung/*/SAMSUNG-SM-N900A/*\"},{\"ua\":\"SAMSUNG-SM-N900A\"}],\"dpi\":[386.4,387.7],\"bw\":3,\"ac\":1000},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"samsung/*/GT-I9500/*\"},{\"ua\":\"GT-I9500\"}],\"dpi\":[442.5,443.3],\"bw\":3,\"ac\":500},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"samsung/*/GT-I9505/*\"},{\"ua\":\"GT-I9505\"}],\"dpi\":439.4,\"bw\":4,\"ac\":1000},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"samsung/*/SM-G900F/*\"},{\"ua\":\"SM-G900F\"}],\"dpi\":[415.6,431.6],\"bw\":5,\"ac\":1000},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"samsung/*/SM-G900M/*\"},{\"ua\":\"SM-G900M\"}],\"dpi\":[415.6,431.6],\"bw\":5,\"ac\":1000},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"samsung/*/SM-G800F/*\"},{\"ua\":\"SM-G800F\"}],\"dpi\":326.8,\"bw\":3,\"ac\":1000},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"samsung/*/SM-G906S/*\"},{\"ua\":\"SM-G906S\"}],\"dpi\":[562.7,572.4],\"bw\":3,\"ac\":1000},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"samsung/*/GT-I9300/*\"},{\"ua\":\"GT-I9300\"}],\"dpi\":[306.7,304.8],\"bw\":5,\"ac\":1000},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"samsung/*/SM-T535/*\"},{\"ua\":\"SM-T535\"}],\"dpi\":[142.6,136.4],\"bw\":3,\"ac\":500},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"samsung/*/SM-N920C/*\"},{\"ua\":\"SM-N920C\"}],\"dpi\":[515.1,518.4],\"bw\":3,\"ac\":1000},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"samsung/*/SM-N920W8/*\"},{\"ua\":\"SM-N920W8\"}],\"dpi\":[515.1,518.4],\"bw\":3,\"ac\":1000},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"samsung/*/GT-I9300I/*\"},{\"ua\":\"GT-I9300I\"}],\"dpi\":[304.8,305.8],\"bw\":3,\"ac\":1000},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"samsung/*/GT-I9195/*\"},{\"ua\":\"GT-I9195\"}],\"dpi\":[249.4,256.7],\"bw\":3,\"ac\":500},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"samsung/*/SPH-L520/*\"},{\"ua\":\"SPH-L520\"}],\"dpi\":[249.4,255.9],\"bw\":3,\"ac\":1000},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"samsung/*/SAMSUNG-SGH-I717/*\"},{\"ua\":\"SAMSUNG-SGH-I717\"}],\"dpi\":285.8,\"bw\":3,\"ac\":1000},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"samsung/*/SPH-D710/*\"},{\"ua\":\"SPH-D710\"}],\"dpi\":[217.7,204.2],\"bw\":3,\"ac\":1000},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"samsung/*/GT-N7100/*\"},{\"ua\":\"GT-N7100\"}],\"dpi\":265.1,\"bw\":3,\"ac\":1000},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"samsung/*/SCH-I605/*\"},{\"ua\":\"SCH-I605\"}],\"dpi\":265.1,\"bw\":3,\"ac\":1000},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"samsung/*/Galaxy Nexus/*\"},{\"ua\":\"Galaxy Nexus\"}],\"dpi\":[315.3,314.2],\"bw\":3,\"ac\":1000},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"samsung/*/SM-N910H/*\"},{\"ua\":\"SM-N910H\"}],\"dpi\":[515.1,518],\"bw\":3,\"ac\":1000},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"samsung/*/SM-N910C/*\"},{\"ua\":\"SM-N910C\"}],\"dpi\":[515.2,520.2],\"bw\":3,\"ac\":500},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"samsung/*/SM-G130M/*\"},{\"ua\":\"SM-G130M\"}],\"dpi\":[165.9,164.8],\"bw\":3,\"ac\":500},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"samsung/*/SM-G928I/*\"},{\"ua\":\"SM-G928I\"}],\"dpi\":[515.1,518.4],\"bw\":3,\"ac\":1000},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"samsung/*/SM-G920F/*\"},{\"ua\":\"SM-G920F\"}],\"dpi\":580.6,\"bw\":3,\"ac\":500},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"samsung/*/SM-G920P/*\"},{\"ua\":\"SM-G920P\"}],\"dpi\":[522.5,577],\"bw\":3,\"ac\":1000},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"samsung/*/SM-G925F/*\"},{\"ua\":\"SM-G925F\"}],\"dpi\":580.6,\"bw\":3,\"ac\":500},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"samsung/*/SM-G925V/*\"},{\"ua\":\"SM-G925V\"}],\"dpi\":[522.5,576.6],\"bw\":3,\"ac\":1000},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"samsung/*/SM-G930F/*\"},{\"ua\":\"SM-G930F\"}],\"dpi\":576.6,\"bw\":3,\"ac\":1000},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"samsung/*/SM-G935F/*\"},{\"ua\":\"SM-G935F\"}],\"dpi\":533,\"bw\":3,\"ac\":500},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"samsung/*/SM-G950F/*\"},{\"ua\":\"SM-G950F\"}],\"dpi\":[562.707,565.293],\"bw\":3,\"ac\":500},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"samsung/*/SM-G955U/*\"},{\"ua\":\"SM-G955U\"}],\"dpi\":[522.514,525.762],\"bw\":3,\"ac\":500},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"Sony/*/C6903/*\"},{\"ua\":\"C6903\"}],\"dpi\":[442.5,443.3],\"bw\":3,\"ac\":500},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"Sony/*/D6653/*\"},{\"ua\":\"D6653\"}],\"dpi\":[428.6,427.6],\"bw\":3,\"ac\":1000},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"Sony/*/E6653/*\"},{\"ua\":\"E6653\"}],\"dpi\":[428.6,425.7],\"bw\":3,\"ac\":1000},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"Sony/*/E6853/*\"},{\"ua\":\"E6853\"}],\"dpi\":[403.4,401.9],\"bw\":3,\"ac\":1000},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"Sony/*/SGP321/*\"},{\"ua\":\"SGP321\"}],\"dpi\":[224.7,224.1],\"bw\":3,\"ac\":500},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"TCT/*/ALCATEL ONE TOUCH Fierce/*\"},{\"ua\":\"ALCATEL ONE TOUCH Fierce\"}],\"dpi\":[240,247.5],\"bw\":3,\"ac\":1000},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"THL/*/thl 5000/*\"},{\"ua\":\"thl 5000\"}],\"dpi\":[480,443.3],\"bw\":3,\"ac\":1000},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"ZTE/*/ZTE Blade L2/*\"},{\"ua\":\"ZTE Blade L2\"}],\"dpi\":240,\"bw\":3,\"ac\":500},{\"type\":\"ios\",\"rules\":[{\"res\":[640,960]}],\"dpi\":[325.1,328.4],\"bw\":4,\"ac\":1000},{\"type\":\"ios\",\"rules\":[{\"res\":[640,1136]}],\"dpi\":[317.1,320.2],\"bw\":3,\"ac\":1000},{\"type\":\"ios\",\"rules\":[{\"res\":[750,1334]}],\"dpi\":326.4,\"bw\":4,\"ac\":1000},{\"type\":\"ios\",\"rules\":[{\"res\":[1242,2208]}],\"dpi\":[453.6,458.4],\"bw\":4,\"ac\":1000},{\"type\":\"ios\",\"rules\":[{\"res\":[1125,2001]}],\"dpi\":[410.9,415.4],\"bw\":4,\"ac\":1000}]}","module.exports={\"name\":\"aframe\",\"version\":\"0.7.0\",\"description\":\"A web framework for building virtual reality experiences.\",\"homepage\":\"https://aframe.io/\",\"main\":\"dist/aframe-master.js\",\"scripts\":{\"browserify\":\"browserify src/index.js -s 'AFRAME' -p browserify-derequire\",\"build\":\"shx mkdir -p build/ && npm run browserify -- --debug -t [envify --INSPECTOR_VERSION dev] -o build/aframe.js\",\"codecov\":\"codecov\",\"dev\":\"npm run build && cross-env INSPECTOR_VERSION=dev node ./scripts/budo -t envify\",\"dist\":\"node scripts/updateVersionLog.js && npm run dist:min && npm run dist:max\",\"dist:max\":\"npm run browserify -s -- --debug | exorcist dist/aframe-master.js.map > dist/aframe-master.js\",\"dist:min\":\"npm run browserify -s -- --debug -p [minifyify --map aframe-master.min.js.map --output dist/aframe-master.min.js.map] -o dist/aframe-master.min.js\",\"docs\":\"markserv --dir docs --port 9001\",\"preghpages\":\"node ./scripts/preghpages.js\",\"ghpages\":\"ghpages -p gh-pages/\",\"lint\":\"semistandard -v | snazzy\",\"lint:fix\":\"semistandard --fix\",\"precommit\":\"npm run lint\",\"prepush\":\"node scripts/testOnlyCheck.js\",\"prerelease\":\"node scripts/release.js 0.6.1 0.7.0\",\"start\":\"npm run dev\",\"test\":\"karma start ./tests/karma.conf.js\",\"test:docs\":\"node scripts/docsLint.js\",\"test:firefox\":\"npm test -- --browsers Firefox\",\"test:chrome\":\"npm test -- --browsers Chrome\",\"test:node\":\"mocha --ui tdd tests/node\"},\"repository\":\"aframevr/aframe\",\"license\":\"MIT\",\"dependencies\":{\"@tweenjs/tween.js\":\"^16.8.0\",\"browserify-css\":\"^0.8.2\",\"debug\":\"ngokevin/debug#noTimestamp\",\"deep-assign\":\"^2.0.0\",\"document-register-element\":\"dmarcos/document-register-element#8ccc532b7\",\"envify\":\"^3.4.1\",\"load-bmfont\":\"^1.2.3\",\"object-assign\":\"^4.0.1\",\"present\":\"0.0.6\",\"promise-polyfill\":\"^3.1.0\",\"style-attr\":\"^1.0.2\",\"three\":\"github:dmarcos/three.js#r90vrfix\",\"three-bmfont-text\":\"^2.1.0\",\"webvr-polyfill\":\"^0.9.40\"},\"devDependencies\":{\"browserify\":\"^13.1.0\",\"browserify-derequire\":\"^0.9.4\",\"browserify-istanbul\":\"^2.0.0\",\"budo\":\"^9.2.0\",\"chai\":\"^3.5.0\",\"chai-shallow-deep-equal\":\"^1.4.0\",\"chalk\":\"^1.1.3\",\"codecov\":\"^1.0.1\",\"cross-env\":\"^5.0.1\",\"exorcist\":\"^0.4.0\",\"ghpages\":\"0.0.8\",\"git-rev\":\"^0.2.1\",\"glob\":\"^7.1.1\",\"husky\":\"^0.11.7\",\"istanbul\":\"^0.4.5\",\"jsdom\":\"^9.11.0\",\"karma\":\"1.4.1\",\"karma-browserify\":\"^5.1.0\",\"karma-chai-shallow-deep-equal\":\"0.0.4\",\"karma-chrome-launcher\":\"^2.0.0\",\"karma-coverage\":\"^1.1.1\",\"karma-env-preprocessor\":\"^0.1.1\",\"karma-firefox-launcher\":\"^1.0.0\",\"karma-mocha\":\"^1.1.1\",\"karma-mocha-reporter\":\"^2.1.0\",\"karma-sinon-chai\":\"1.2.4\",\"lolex\":\"^1.5.1\",\"markserv\":\"github:sukima/markserv#feature/fix-broken-websoketio-link\",\"minifyify\":\"^7.3.3\",\"mocha\":\"^3.0.2\",\"mozilla-download\":\"^1.1.1\",\"replace-in-file\":\"^2.5.3\",\"semistandard\":\"^9.0.0\",\"shelljs\":\"^0.7.7\",\"shx\":\"^0.2.2\",\"sinon\":\"^1.17.5\",\"sinon-chai\":\"2.8.0\",\"snazzy\":\"^5.0.0\",\"too-wordy\":\"ngokevin/too-wordy\",\"uglifyjs\":\"^2.4.10\",\"write-good\":\"^0.9.1\"},\"link\":true,\"browserify\":{\"transform\":[\"browserify-css\",\"envify\"]},\"semistandard\":{\"ignore\":[\"build/**\",\"dist/**\",\"examples/**/shaders/*.js\",\"**/vendor/**\"]},\"keywords\":[\"3d\",\"aframe\",\"cardboard\",\"components\",\"oculus\",\"three\",\"three.js\",\"rift\",\"vive\",\"vr\",\"web-components\",\"webvr\"],\"browserify-css\":{\"minify\":true},\"engines\":{\"node\":\">= 4.6.0\",\"npm\":\"^2.15.9\"}}","/*\n ------------------------------------------------------------\n ------------- WARNING WARNING WARNING WARNING --------------\n ------------------------------------------------------------\n\n This module wraps registerElement to deal with components that inherit from\n `ANode` and `AEntity`. It's a pass through in any other case.\n\n It wraps some of the prototype methods of the created element to make sure\n that the corresponding functions in the base prototypes (`AEntity` and `ANode`)\n are also invoked. The method in the base prototype is always called before the one\n in the derived prototype.\n*/\n\n// Polyfill `document.registerElement`.\nrequire('document-register-element');\n\nvar ANode; // Must declare before AEntity. Initialized at the bottom.\nvar AEntity;\nvar knownTags = module.exports.knownTags = {};\n\nfunction addTagName (tagName) {\n knownTags[tagName.toLowerCase()] = true;\n}\n\n/**\n * Return whether the element type is one of our known registered ones.\n *\n * @param {string} node - The name of the tag to register.\n * @returns {boolean} Whether the tag name matches that of our registered custom elements.\n */\nmodule.exports.isNode = function (node) {\n return node.tagName.toLowerCase() in knownTags || node.isNode;\n};\n\n/**\n * @param {string} tagName - The name of the tag to register.\n * @param {object} obj - The prototype of the new element.\n * @returns {object} The prototype of the new element.\n */\nmodule.exports.registerElement = function (tagName, obj) {\n var proto = Object.getPrototypeOf(obj.prototype);\n var newObj = obj;\n var isANode = ANode && proto === ANode.prototype;\n var isAEntity = AEntity && proto === AEntity.prototype;\n\n if (isANode || isAEntity) { addTagName(tagName); }\n\n // Wrap if element inherits from `ANode`.\n if (isANode) {\n newObj = wrapANodeMethods(obj.prototype);\n newObj = {prototype: Object.create(proto, newObj)};\n }\n\n // Wrap if element inherits from `AEntity`.\n if (isAEntity) {\n newObj = wrapAEntityMethods(obj.prototype);\n newObj = {prototype: Object.create(proto, newObj)};\n }\n\n // Give all functions their proper name.\n for (var propName of Object.getOwnPropertyNames(newObj.prototype)) {\n var propVal = newObj.prototype[propName];\n if (typeof propVal === 'function') {\n propVal.displayName = propName;\n }\n }\n\n return document.registerElement(tagName, newObj);\n};\n\n/**\n * Wrap some obj methods to call those on `ANode` base prototype.\n *\n * @param {object} obj - Object that contains the methods that will be wrapped.\n * @return {object} An object with the same properties as the input parameter but\n * with some of methods wrapped.\n */\nfunction wrapANodeMethods (obj) {\n var newObj = {};\n var ANodeMethods = [\n 'attachedCallback',\n 'attributeChangedCallback',\n 'createdCallback'\n ];\n wrapMethods(newObj, ANodeMethods, obj, ANode.prototype);\n copyProperties(obj, newObj);\n return newObj;\n}\n\n/**\n * This wraps some of the obj methods to call those on `AEntity` base prototype.\n *\n * @param {object} obj - The objects that contains the methods that will be wrapped.\n * @return {object} - An object with the same properties as the input parameter but\n * with some of methods wrapped.\n */\nfunction wrapAEntityMethods (obj) {\n var newObj = {};\n var ANodeMethods = [\n 'attachedCallback',\n 'attributeChangedCallback',\n 'createdCallback'\n ];\n var AEntityMethods = [\n 'attachedCallback',\n 'attributeChangedCallback',\n 'createdCallback',\n 'detachedCallback'\n ];\n\n wrapMethods(newObj, ANodeMethods, obj, ANode.prototype);\n wrapMethods(newObj, AEntityMethods, obj, AEntity.prototype);\n // Copies the remaining properties into the new object.\n copyProperties(obj, newObj);\n return newObj;\n}\n\n/**\n * Wrap a list a methods to ensure that those in the base prototype are called\n * before the derived one.\n *\n * @param {object} targetObj - Object that will contain the wrapped methods.\n * @param {array} methodList - List of methods from the derivedObj that will be wrapped.\n * @param {object} derivedObject - Object that inherits from the baseObj.\n * @param {object} baseObj - Object that derivedObj inherits from.\n */\nfunction wrapMethods (targetObj, methodList, derivedObj, baseObj) {\n methodList.forEach(function (methodName) {\n wrapMethod(targetObj, methodName, derivedObj, baseObj);\n });\n}\nmodule.exports.wrapMethods = wrapMethods;\n\n/**\n * Wrap one method to ensure that the one in the base prototype is called before\n * the one in the derived one.\n *\n * @param {object} obj - Object that will contain the wrapped method.\n * @param {string} methodName - The name of the method that will be wrapped.\n * @param {object} derivedObject - Object that inherits from the baseObj.\n * @param {object} baseObj - Object that derivedObj inherits from.\n */\nfunction wrapMethod (obj, methodName, derivedObj, baseObj) {\n var derivedMethod = derivedObj[methodName];\n var baseMethod = baseObj[methodName];\n\n // Derived prototype does not define method, no need to wrap.\n if (!derivedMethod || !baseMethod) { return; }\n\n // Derived prototype doesn't override the one in the base one, no need to wrap.\n if (derivedMethod === baseMethod) { return; }\n\n // Wrap to ensure the base method is called before the one in the derived prototype.\n obj[methodName] = {\n value: function wrappedMethod () {\n baseMethod.apply(this, arguments);\n return derivedMethod.apply(this, arguments);\n },\n writable: window.debug\n };\n}\n\n/**\n * It copies the properties from source to destination object if they don't\n * exist already.\n *\n * @param {object} source - The object where properties are copied from.\n * @param {type} destination - The object where properties are copied to.\n */\nfunction copyProperties (source, destination) {\n var props = Object.getOwnPropertyNames(source);\n props.forEach(function (prop) {\n var desc;\n if (!destination[prop]) {\n desc = Object.getOwnPropertyDescriptor(source, prop);\n destination[prop] = {value: source[prop], writable: desc.writable};\n }\n });\n}\n\nANode = require('./a-node');\nAEntity = require('./a-entity');\n","var css = \".a-html{bottom:0;left:0;position:fixed;right:0;top:0}.a-body{height:100%;margin:0;overflow:hidden;padding:0;width:100%}:-webkit-full-screen{background-color:transparent}.a-hidden{display:none!important}.a-canvas{height:100%;left:0;position:absolute;top:0;width:100%}.a-canvas.a-grab-cursor:hover{cursor:grab;cursor:-moz-grab;cursor:-webkit-grab}.a-canvas.a-grab-cursor:active,.a-grabbing{cursor:grabbing;cursor:-moz-grabbing;cursor:-webkit-grabbing}a-scene.fullscreen .a-canvas{width:100%!important;height:100%!important;top:0!important;left:0!important;right:0!important;bottom:0!important;position:fixed!important}.a-inspector-loader{background-color:#ed3160;position:fixed;left:3px;top:3px;padding:6px 10px;color:#fff;text-decoration:none;font-size:12px;font-family:Roboto,sans-serif;text-align:center;z-index:99999;width:204px}@keyframes dots-1{from{opacity:0}25%{opacity:1}}@keyframes dots-2{from{opacity:0}50%{opacity:1}}@keyframes dots-3{from{opacity:0}75%{opacity:1}}@-webkit-keyframes dots-1{from{opacity:0}25%{opacity:1}}@-webkit-keyframes dots-2{from{opacity:0}50%{opacity:1}}@-webkit-keyframes dots-3{from{opacity:0}75%{opacity:1}}.a-inspector-loader .dots span{animation:dots-1 2s infinite steps(1);-webkit-animation:dots-1 2s infinite steps(1)}.a-inspector-loader .dots span:first-child+span{animation-name:dots-2;-webkit-animation-name:dots-2}.a-inspector-loader .dots span:first-child+span+span{animation-name:dots-3;-webkit-animation-name:dots-3}a-scene{display:block;position:relative;height:100%;width:100%}a-assets,a-scene audio,a-scene img,a-scene video{display:none}.a-enter-vr-modal,.a-orientation-modal{font-family:Consolas,Andale Mono,Courier New,monospace}.a-enter-vr-modal a{border-bottom:1px solid #fff;padding:2px 0;text-decoration:none;transition:.1s color ease-in}.a-enter-vr-modal a:hover{background-color:#fff;color:#111;padding:2px 4px;position:relative;left:-4px}.a-enter-vr{font-family:sans-serif,monospace;font-size:13px;width:100%;font-weight:200;line-height:16px;position:absolute;right:20px;bottom:20px}.a-enter-vr.embedded{right:5px;bottom:5px}.a-enter-vr-button,.a-enter-vr-modal,.a-enter-vr-modal a{color:#fff}.a-enter-vr-button{background:url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20245.82%20141.73%22%3E%3Cdefs%3E%3Cstyle%3E.a%7Bfill%3A%23fff%3Bfill-rule%3Aevenodd%3B%7D%3C%2Fstyle%3E%3C%2Fdefs%3E%3Ctitle%3Emask%3C%2Ftitle%3E%3Cpath%20class%3D%22a%22%20d%3D%22M175.56%2C111.37c-22.52%2C0-40.77-18.84-40.77-42.07S153%2C27.24%2C175.56%2C27.24s40.77%2C18.84%2C40.77%2C42.07S198.08%2C111.37%2C175.56%2C111.37ZM26.84%2C69.31c0-23.23%2C18.25-42.07%2C40.77-42.07s40.77%2C18.84%2C40.77%2C42.07-18.26%2C42.07-40.77%2C42.07S26.84%2C92.54%2C26.84%2C69.31ZM27.27%2C0C11.54%2C0%2C0%2C12.34%2C0%2C28.58V110.9c0%2C16.24%2C11.54%2C30.83%2C27.27%2C30.83H99.57c2.17%2C0%2C4.19-1.83%2C5.4-3.7L116.47%2C118a8%2C8%2C0%2C0%2C1%2C12.52-.18l11.51%2C20.34c1.2%2C1.86%2C3.22%2C3.61%2C5.39%2C3.61h72.29c15.74%2C0%2C27.63-14.6%2C27.63-30.83V28.58C245.82%2C12.34%2C233.93%2C0%2C218.19%2C0H27.27Z%22%2F%3E%3C%2Fsvg%3E) 50% 50%/70% 70% no-repeat rgba(0,0,0,.35);border:0;bottom:0;cursor:pointer;min-width:50px;min-height:30px;padding-right:5%;padding-top:4%;position:absolute;right:0;transition:background-color .05s ease;-webkit-transition:background-color .05s ease;z-index:9999}.a-enter-vr-button:active,.a-enter-vr-button:hover{background-color:#666}[data-a-enter-vr-no-webvr] .a-enter-vr-button{border-color:#666;opacity:.65}[data-a-enter-vr-no-webvr] .a-enter-vr-button:active,[data-a-enter-vr-no-webvr] .a-enter-vr-button:hover{background-color:rgba(0,0,0,.35);cursor:not-allowed}.a-enter-vr-modal{background-color:#666;border-radius:0;display:none;min-height:32px;margin-right:70px;padding:9px;width:280px;right:2%;position:absolute}.a-enter-vr-modal:after{border-bottom:10px solid transparent;border-left:10px solid #666;border-top:10px solid transparent;display:inline-block;content:'';position:absolute;right:-5px;top:5px;width:0;height:0}.a-enter-vr-modal a,.a-enter-vr-modal p{display:inline}.a-enter-vr-modal p{margin:0}.a-enter-vr-modal p:after{content:' '}[data-a-enter-vr-no-headset].a-enter-vr:hover .a-enter-vr-modal,[data-a-enter-vr-no-webvr].a-enter-vr:hover .a-enter-vr-modal{display:block}.a-orientation-modal{background:url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20xmlns%3Axlink%3D%22http%3A//www.w3.org/1999/xlink%22%20version%3D%221.1%22%20x%3D%220px%22%20y%3D%220px%22%20viewBox%3D%220%200%2090%2090%22%20enable-background%3D%22new%200%200%2090%2090%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpolygon%20points%3D%220%2C0%200%2C0%200%2C0%20%22%3E%3C/polygon%3E%3Cg%3E%3Cpath%20d%3D%22M71.545%2C48.145h-31.98V20.743c0-2.627-2.138-4.765-4.765-4.765H18.456c-2.628%2C0-4.767%2C2.138-4.767%2C4.765v42.789%20%20%20c0%2C2.628%2C2.138%2C4.766%2C4.767%2C4.766h5.535v0.959c0%2C2.628%2C2.138%2C4.765%2C4.766%2C4.765h42.788c2.628%2C0%2C4.766-2.137%2C4.766-4.765V52.914%20%20%20C76.311%2C50.284%2C74.173%2C48.145%2C71.545%2C48.145z%20M18.455%2C16.935h16.344c2.1%2C0%2C3.808%2C1.708%2C3.808%2C3.808v27.401H37.25V22.636%20%20%20c0-0.264-0.215-0.478-0.479-0.478H16.482c-0.264%2C0-0.479%2C0.214-0.479%2C0.478v36.585c0%2C0.264%2C0.215%2C0.478%2C0.479%2C0.478h7.507v7.644%20%20%20h-5.534c-2.101%2C0-3.81-1.709-3.81-3.81V20.743C14.645%2C18.643%2C16.354%2C16.935%2C18.455%2C16.935z%20M16.96%2C23.116h19.331v25.031h-7.535%20%20%20c-2.628%2C0-4.766%2C2.139-4.766%2C4.768v5.828h-7.03V23.116z%20M71.545%2C73.064H28.757c-2.101%2C0-3.81-1.708-3.81-3.808V52.914%20%20%20c0-2.102%2C1.709-3.812%2C3.81-3.812h42.788c2.1%2C0%2C3.809%2C1.71%2C3.809%2C3.812v16.343C75.354%2C71.356%2C73.645%2C73.064%2C71.545%2C73.064z%22%3E%3C/path%3E%3Cpath%20d%3D%22M28.919%2C58.424c-1.466%2C0-2.659%2C1.193-2.659%2C2.66c0%2C1.466%2C1.193%2C2.658%2C2.659%2C2.658c1.468%2C0%2C2.662-1.192%2C2.662-2.658%20%20%20C31.581%2C59.617%2C30.387%2C58.424%2C28.919%2C58.424z%20M28.919%2C62.786c-0.939%2C0-1.703-0.764-1.703-1.702c0-0.939%2C0.764-1.704%2C1.703-1.704%20%20%20c0.94%2C0%2C1.705%2C0.765%2C1.705%2C1.704C30.623%2C62.022%2C29.858%2C62.786%2C28.919%2C62.786z%22%3E%3C/path%3E%3Cpath%20d%3D%22M69.654%2C50.461H33.069c-0.264%2C0-0.479%2C0.215-0.479%2C0.479v20.288c0%2C0.264%2C0.215%2C0.478%2C0.479%2C0.478h36.585%20%20%20c0.263%2C0%2C0.477-0.214%2C0.477-0.478V50.939C70.131%2C50.676%2C69.917%2C50.461%2C69.654%2C50.461z%20M69.174%2C51.417V70.75H33.548V51.417H69.174z%22%3E%3C/path%3E%3Cpath%20d%3D%22M45.201%2C30.296c6.651%2C0%2C12.233%2C5.351%2C12.551%2C11.977l-3.033-2.638c-0.193-0.165-0.507-0.142-0.675%2C0.048%20%20%20c-0.174%2C0.198-0.153%2C0.501%2C0.045%2C0.676l3.883%2C3.375c0.09%2C0.075%2C0.198%2C0.115%2C0.312%2C0.115c0.141%2C0%2C0.273-0.061%2C0.362-0.166%20%20%20l3.371-3.877c0.173-0.2%2C0.151-0.502-0.047-0.675c-0.194-0.166-0.508-0.144-0.676%2C0.048l-2.592%2C2.979%20%20%20c-0.18-3.417-1.629-6.605-4.099-9.001c-2.538-2.461-5.877-3.817-9.404-3.817c-0.264%2C0-0.479%2C0.215-0.479%2C0.479%20%20%20C44.72%2C30.083%2C44.936%2C30.296%2C45.201%2C30.296z%22%3E%3C/path%3E%3C/g%3E%3C/svg%3E) center/50% 50% no-repeat rgba(244,244,244,1);bottom:0;font-size:14px;font-weight:600;left:0;line-height:20px;right:0;position:fixed;top:0;z-index:9999999}.a-orientation-modal:after{color:#666;content:\\\"Insert phone into Cardboard holder.\\\";display:block;position:absolute;text-align:center;top:70%;transform:translateY(-70%);width:100%}.a-orientation-modal button{background:url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20xmlns%3Axlink%3D%22http%3A//www.w3.org/1999/xlink%22%20version%3D%221.1%22%20x%3D%220px%22%20y%3D%220px%22%20viewBox%3D%220%200%20100%20100%22%20enable-background%3D%22new%200%200%20100%20100%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpath%20fill%3D%22%23000000%22%20d%3D%22M55.209%2C50l17.803-17.803c1.416-1.416%2C1.416-3.713%2C0-5.129c-1.416-1.417-3.713-1.417-5.129%2C0L50.08%2C44.872%20%20L32.278%2C27.069c-1.416-1.417-3.714-1.417-5.129%2C0c-1.417%2C1.416-1.417%2C3.713%2C0%2C5.129L44.951%2C50L27.149%2C67.803%20%20c-1.417%2C1.416-1.417%2C3.713%2C0%2C5.129c0.708%2C0.708%2C1.636%2C1.062%2C2.564%2C1.062c0.928%2C0%2C1.856-0.354%2C2.564-1.062L50.08%2C55.13l17.803%2C17.802%20%20c0.708%2C0.708%2C1.637%2C1.062%2C2.564%2C1.062s1.856-0.354%2C2.564-1.062c1.416-1.416%2C1.416-3.713%2C0-5.129L55.209%2C50z%22%3E%3C/path%3E%3C/svg%3E) no-repeat;border:none;height:50px;text-indent:-9999px;width:50px}\"; (require(\"browserify-css\").createStyle(css, { \"href\": \"src/style/aframe.css\"})); module.exports = css;","var css = \".rs-base{background-color:#333;color:#fafafa;border-radius:0;font:10px monospace;left:5px;line-height:1em;opacity:.85;overflow:hidden;padding:10px;position:fixed;top:5px;width:300px;z-index:10000}.rs-base div.hidden{display:none}.rs-base h1{color:#fff;cursor:pointer;font-size:1.4em;font-weight:300;margin:0 0 5px;padding:0}.rs-group{display:-webkit-box;display:-webkit-flex;display:flex;-webkit-flex-direction:column-reverse;flex-direction:column-reverse;margin-bottom:5px}.rs-group:last-child{margin-bottom:0}.rs-counter-base{align-items:center;display:-webkit-box;display:-webkit-flex;display:flex;height:10px;-webkit-justify-content:space-between;justify-content:space-between;margin:2px 0}.rs-counter-base.alarm{color:#b70000;text-shadow:0 0 0 #b70000,0 0 1px #fff,0 0 1px #fff,0 0 2px #fff,0 0 2px #fff,0 0 3px #fff,0 0 3px #fff,0 0 4px #fff,0 0 4px #fff}.rs-counter-id{font-weight:300;-webkit-box-ordinal-group:0;-webkit-order:0;order:0;width:54px}.rs-counter-value{font-weight:300;-webkit-box-ordinal-group:1;-webkit-order:1;order:1;text-align:right;width:35px}.rs-canvas{-webkit-box-ordinal-group:2;-webkit-order:2;order:2}@media (min-width:480px){.rs-base{left:20px;top:20px}}\"; (require(\"browserify-css\").createStyle(css, { \"href\": \"src/style/rStats.css\"})); module.exports = css;","(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :\n\ttypeof define === 'function' && define.amd ? define(['exports'], factory) :\n\t(factory((global.THREE = global.THREE || {})));\n}(this, (function (exports) { 'use strict';\n\n\t// Polyfills\n\n\tif ( Number.EPSILON === undefined ) {\n\n\t\tNumber.EPSILON = Math.pow( 2, - 52 );\n\n\t}\n\n\tif ( Number.isInteger === undefined ) {\n\n\t\t// Missing in IE\n\t\t// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isInteger\n\n\t\tNumber.isInteger = function ( value ) {\n\n\t\t\treturn typeof value === 'number' && isFinite( value ) && Math.floor( value ) === value;\n\n\t\t};\n\n\t}\n\n\t//\n\n\tif ( Math.sign === undefined ) {\n\n\t\t// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/sign\n\n\t\tMath.sign = function ( x ) {\n\n\t\t\treturn ( x < 0 ) ? - 1 : ( x > 0 ) ? 1 : + x;\n\n\t\t};\n\n\t}\n\n\tif ( 'name' in Function.prototype === false ) {\n\n\t\t// Missing in IE\n\t\t// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/name\n\n\t\tObject.defineProperty( Function.prototype, 'name', {\n\n\t\t\tget: function () {\n\n\t\t\t\treturn this.toString().match( /^\\s*function\\s*([^\\(\\s]*)/ )[ 1 ];\n\n\t\t\t}\n\n\t\t} );\n\n\t}\n\n\tif ( Object.assign === undefined ) {\n\n\t\t// Missing in IE\n\t\t// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign\n\n\t\t( function () {\n\n\t\t\tObject.assign = function ( target ) {\n\n\t\t\t\t'use strict';\n\n\t\t\t\tif ( target === undefined || target === null ) {\n\n\t\t\t\t\tthrow new TypeError( 'Cannot convert undefined or null to object' );\n\n\t\t\t\t}\n\n\t\t\t\tvar output = Object( target );\n\n\t\t\t\tfor ( var index = 1; index < arguments.length; index ++ ) {\n\n\t\t\t\t\tvar source = arguments[ index ];\n\n\t\t\t\t\tif ( source !== undefined && source !== null ) {\n\n\t\t\t\t\t\tfor ( var nextKey in source ) {\n\n\t\t\t\t\t\t\tif ( Object.prototype.hasOwnProperty.call( source, nextKey ) ) {\n\n\t\t\t\t\t\t\t\toutput[ nextKey ] = source[ nextKey ];\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\treturn output;\n\n\t\t\t};\n\n\t\t} )();\n\n\t}\n\n\t/**\n\t * https://github.com/mrdoob/eventdispatcher.js/\n\t */\n\n\tfunction EventDispatcher() {}\n\n\tObject.assign( EventDispatcher.prototype, {\n\n\t\taddEventListener: function ( type, listener ) {\n\n\t\t\tif ( this._listeners === undefined ) this._listeners = {};\n\n\t\t\tvar listeners = this._listeners;\n\n\t\t\tif ( listeners[ type ] === undefined ) {\n\n\t\t\t\tlisteners[ type ] = [];\n\n\t\t\t}\n\n\t\t\tif ( listeners[ type ].indexOf( listener ) === - 1 ) {\n\n\t\t\t\tlisteners[ type ].push( listener );\n\n\t\t\t}\n\n\t\t},\n\n\t\thasEventListener: function ( type, listener ) {\n\n\t\t\tif ( this._listeners === undefined ) return false;\n\n\t\t\tvar listeners = this._listeners;\n\n\t\t\treturn listeners[ type ] !== undefined && listeners[ type ].indexOf( listener ) !== - 1;\n\n\t\t},\n\n\t\tremoveEventListener: function ( type, listener ) {\n\n\t\t\tif ( this._listeners === undefined ) return;\n\n\t\t\tvar listeners = this._listeners;\n\t\t\tvar listenerArray = listeners[ type ];\n\n\t\t\tif ( listenerArray !== undefined ) {\n\n\t\t\t\tvar index = listenerArray.indexOf( listener );\n\n\t\t\t\tif ( index !== - 1 ) {\n\n\t\t\t\t\tlistenerArray.splice( index, 1 );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t},\n\n\t\tdispatchEvent: function ( event ) {\n\n\t\t\tif ( this._listeners === undefined ) return;\n\n\t\t\tvar listeners = this._listeners;\n\t\t\tvar listenerArray = listeners[ event.type ];\n\n\t\t\tif ( listenerArray !== undefined ) {\n\n\t\t\t\tevent.target = this;\n\n\t\t\t\tvar array = listenerArray.slice( 0 );\n\n\t\t\t\tfor ( var i = 0, l = array.length; i < l; i ++ ) {\n\n\t\t\t\t\tarray[ i ].call( this, event );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t} );\n\n\tvar REVISION = '88';\n\tvar MOUSE = { LEFT: 0, MIDDLE: 1, RIGHT: 2 };\n\tvar CullFaceNone = 0;\n\tvar CullFaceBack = 1;\n\tvar CullFaceFront = 2;\n\tvar CullFaceFrontBack = 3;\n\tvar FrontFaceDirectionCW = 0;\n\tvar FrontFaceDirectionCCW = 1;\n\tvar BasicShadowMap = 0;\n\tvar PCFShadowMap = 1;\n\tvar PCFSoftShadowMap = 2;\n\tvar FrontSide = 0;\n\tvar BackSide = 1;\n\tvar DoubleSide = 2;\n\tvar FlatShading = 1;\n\tvar SmoothShading = 2;\n\tvar NoColors = 0;\n\tvar FaceColors = 1;\n\tvar VertexColors = 2;\n\tvar NoBlending = 0;\n\tvar NormalBlending = 1;\n\tvar AdditiveBlending = 2;\n\tvar SubtractiveBlending = 3;\n\tvar MultiplyBlending = 4;\n\tvar CustomBlending = 5;\n\tvar AddEquation = 100;\n\tvar SubtractEquation = 101;\n\tvar ReverseSubtractEquation = 102;\n\tvar MinEquation = 103;\n\tvar MaxEquation = 104;\n\tvar ZeroFactor = 200;\n\tvar OneFactor = 201;\n\tvar SrcColorFactor = 202;\n\tvar OneMinusSrcColorFactor = 203;\n\tvar SrcAlphaFactor = 204;\n\tvar OneMinusSrcAlphaFactor = 205;\n\tvar DstAlphaFactor = 206;\n\tvar OneMinusDstAlphaFactor = 207;\n\tvar DstColorFactor = 208;\n\tvar OneMinusDstColorFactor = 209;\n\tvar SrcAlphaSaturateFactor = 210;\n\tvar NeverDepth = 0;\n\tvar AlwaysDepth = 1;\n\tvar LessDepth = 2;\n\tvar LessEqualDepth = 3;\n\tvar EqualDepth = 4;\n\tvar GreaterEqualDepth = 5;\n\tvar GreaterDepth = 6;\n\tvar NotEqualDepth = 7;\n\tvar MultiplyOperation = 0;\n\tvar MixOperation = 1;\n\tvar AddOperation = 2;\n\tvar NoToneMapping = 0;\n\tvar LinearToneMapping = 1;\n\tvar ReinhardToneMapping = 2;\n\tvar Uncharted2ToneMapping = 3;\n\tvar CineonToneMapping = 4;\n\tvar UVMapping = 300;\n\tvar CubeReflectionMapping = 301;\n\tvar CubeRefractionMapping = 302;\n\tvar EquirectangularReflectionMapping = 303;\n\tvar EquirectangularRefractionMapping = 304;\n\tvar SphericalReflectionMapping = 305;\n\tvar CubeUVReflectionMapping = 306;\n\tvar CubeUVRefractionMapping = 307;\n\tvar RepeatWrapping = 1000;\n\tvar ClampToEdgeWrapping = 1001;\n\tvar MirroredRepeatWrapping = 1002;\n\tvar NearestFilter = 1003;\n\tvar NearestMipMapNearestFilter = 1004;\n\tvar NearestMipMapLinearFilter = 1005;\n\tvar LinearFilter = 1006;\n\tvar LinearMipMapNearestFilter = 1007;\n\tvar LinearMipMapLinearFilter = 1008;\n\tvar UnsignedByteType = 1009;\n\tvar ByteType = 1010;\n\tvar ShortType = 1011;\n\tvar UnsignedShortType = 1012;\n\tvar IntType = 1013;\n\tvar UnsignedIntType = 1014;\n\tvar FloatType = 1015;\n\tvar HalfFloatType = 1016;\n\tvar UnsignedShort4444Type = 1017;\n\tvar UnsignedShort5551Type = 1018;\n\tvar UnsignedShort565Type = 1019;\n\tvar UnsignedInt248Type = 1020;\n\tvar AlphaFormat = 1021;\n\tvar RGBFormat = 1022;\n\tvar RGBAFormat = 1023;\n\tvar LuminanceFormat = 1024;\n\tvar LuminanceAlphaFormat = 1025;\n\tvar RGBEFormat = RGBAFormat;\n\tvar DepthFormat = 1026;\n\tvar DepthStencilFormat = 1027;\n\tvar RGB_S3TC_DXT1_Format = 2001;\n\tvar RGBA_S3TC_DXT1_Format = 2002;\n\tvar RGBA_S3TC_DXT3_Format = 2003;\n\tvar RGBA_S3TC_DXT5_Format = 2004;\n\tvar RGB_PVRTC_4BPPV1_Format = 2100;\n\tvar RGB_PVRTC_2BPPV1_Format = 2101;\n\tvar RGBA_PVRTC_4BPPV1_Format = 2102;\n\tvar RGBA_PVRTC_2BPPV1_Format = 2103;\n\tvar RGB_ETC1_Format = 2151;\n\tvar LoopOnce = 2200;\n\tvar LoopRepeat = 2201;\n\tvar LoopPingPong = 2202;\n\tvar InterpolateDiscrete = 2300;\n\tvar InterpolateLinear = 2301;\n\tvar InterpolateSmooth = 2302;\n\tvar ZeroCurvatureEnding = 2400;\n\tvar ZeroSlopeEnding = 2401;\n\tvar WrapAroundEnding = 2402;\n\tvar TrianglesDrawMode = 0;\n\tvar TriangleStripDrawMode = 1;\n\tvar TriangleFanDrawMode = 2;\n\tvar LinearEncoding = 3000;\n\tvar sRGBEncoding = 3001;\n\tvar GammaEncoding = 3007;\n\tvar RGBEEncoding = 3002;\n\tvar LogLuvEncoding = 3003;\n\tvar RGBM7Encoding = 3004;\n\tvar RGBM16Encoding = 3005;\n\tvar RGBDEncoding = 3006;\n\tvar BasicDepthPacking = 3200;\n\tvar RGBADepthPacking = 3201;\n\n\t/**\n\t * @author alteredq / http://alteredqualia.com/\n\t * @author mrdoob / http://mrdoob.com/\n\t */\n\n\tvar _Math = {\n\n\t\tDEG2RAD: Math.PI / 180,\n\t\tRAD2DEG: 180 / Math.PI,\n\n\t\tgenerateUUID: function () {\n\n\t\t\t// http://www.broofa.com/Tools/Math.uuid.htm\n\t\t\t// Replaced .join with string concatenation (@takahirox)\n\n\t\t\tvar chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.split( '' );\n\t\t\tvar rnd = 0, r;\n\n\t\t\treturn function generateUUID() {\n\n\t\t\t\tvar uuid = '';\n\n\t\t\t\tfor ( var i = 0; i < 36; i ++ ) {\n\n\t\t\t\t\tif ( i === 8 || i === 13 || i === 18 || i === 23 ) {\n\n\t\t\t\t\t\tuuid += '-';\n\n\t\t\t\t\t} else if ( i === 14 ) {\n\n\t\t\t\t\t\tuuid += '4';\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tif ( rnd <= 0x02 ) rnd = 0x2000000 + ( Math.random() * 0x1000000 ) | 0;\n\t\t\t\t\t\tr = rnd & 0xf;\n\t\t\t\t\t\trnd = rnd >> 4;\n\t\t\t\t\t\tuuid += chars[ ( i === 19 ) ? ( r & 0x3 ) | 0x8 : r ];\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\treturn uuid;\n\n\t\t\t};\n\n\t\t}(),\n\n\t\tclamp: function ( value, min, max ) {\n\n\t\t\treturn Math.max( min, Math.min( max, value ) );\n\n\t\t},\n\n\t\t// compute euclidian modulo of m % n\n\t\t// https://en.wikipedia.org/wiki/Modulo_operation\n\n\t\teuclideanModulo: function ( n, m ) {\n\n\t\t\treturn ( ( n % m ) + m ) % m;\n\n\t\t},\n\n\t\t// Linear mapping from range to range \n\n\t\tmapLinear: function ( x, a1, a2, b1, b2 ) {\n\n\t\t\treturn b1 + ( x - a1 ) * ( b2 - b1 ) / ( a2 - a1 );\n\n\t\t},\n\n\t\t// https://en.wikipedia.org/wiki/Linear_interpolation\n\n\t\tlerp: function ( x, y, t ) {\n\n\t\t\treturn ( 1 - t ) * x + t * y;\n\n\t\t},\n\n\t\t// http://en.wikipedia.org/wiki/Smoothstep\n\n\t\tsmoothstep: function ( x, min, max ) {\n\n\t\t\tif ( x <= min ) return 0;\n\t\t\tif ( x >= max ) return 1;\n\n\t\t\tx = ( x - min ) / ( max - min );\n\n\t\t\treturn x * x * ( 3 - 2 * x );\n\n\t\t},\n\n\t\tsmootherstep: function ( x, min, max ) {\n\n\t\t\tif ( x <= min ) return 0;\n\t\t\tif ( x >= max ) return 1;\n\n\t\t\tx = ( x - min ) / ( max - min );\n\n\t\t\treturn x * x * x * ( x * ( x * 6 - 15 ) + 10 );\n\n\t\t},\n\n\t\t// Random integer from interval\n\n\t\trandInt: function ( low, high ) {\n\n\t\t\treturn low + Math.floor( Math.random() * ( high - low + 1 ) );\n\n\t\t},\n\n\t\t// Random float from interval\n\n\t\trandFloat: function ( low, high ) {\n\n\t\t\treturn low + Math.random() * ( high - low );\n\n\t\t},\n\n\t\t// Random float from <-range/2, range/2> interval\n\n\t\trandFloatSpread: function ( range ) {\n\n\t\t\treturn range * ( 0.5 - Math.random() );\n\n\t\t},\n\n\t\tdegToRad: function ( degrees ) {\n\n\t\t\treturn degrees * _Math.DEG2RAD;\n\n\t\t},\n\n\t\tradToDeg: function ( radians ) {\n\n\t\t\treturn radians * _Math.RAD2DEG;\n\n\t\t},\n\n\t\tisPowerOfTwo: function ( value ) {\n\n\t\t\treturn ( value & ( value - 1 ) ) === 0 && value !== 0;\n\n\t\t},\n\n\t\tceilPowerOfTwo: function ( value ) {\n\n\t\t\treturn Math.pow( 2, Math.ceil( Math.log( value ) / Math.LN2 ) );\n\n\t\t},\n\n\t\tfloorPowerOfTwo: function ( value ) {\n\n\t\t\treturn Math.pow( 2, Math.floor( Math.log( value ) / Math.LN2 ) );\n\n\t\t}\n\n\t};\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t * @author philogb / http://blog.thejit.org/\n\t * @author egraether / http://egraether.com/\n\t * @author zz85 / http://www.lab4games.net/zz85/blog\n\t */\n\n\tfunction Vector2( x, y ) {\n\n\t\tthis.x = x || 0;\n\t\tthis.y = y || 0;\n\n\t}\n\n\tObject.defineProperties( Vector2.prototype, {\n\n\t\t\"width\": {\n\n\t\t\tget: function () {\n\n\t\t\t\treturn this.x;\n\n\t\t\t},\n\n\t\t\tset: function ( value ) {\n\n\t\t\t\tthis.x = value;\n\n\t\t\t}\n\n\t\t},\n\n\t\t\"height\": {\n\n\t\t\tget: function () {\n\n\t\t\t\treturn this.y;\n\n\t\t\t},\n\n\t\t\tset: function ( value ) {\n\n\t\t\t\tthis.y = value;\n\n\t\t\t}\n\n\t\t}\n\n\t} );\n\n\tObject.assign( Vector2.prototype, {\n\n\t\tisVector2: true,\n\n\t\tset: function ( x, y ) {\n\n\t\t\tthis.x = x;\n\t\t\tthis.y = y;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetScalar: function ( scalar ) {\n\n\t\t\tthis.x = scalar;\n\t\t\tthis.y = scalar;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetX: function ( x ) {\n\n\t\t\tthis.x = x;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetY: function ( y ) {\n\n\t\t\tthis.y = y;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetComponent: function ( index, value ) {\n\n\t\t\tswitch ( index ) {\n\n\t\t\t\tcase 0: this.x = value; break;\n\t\t\t\tcase 1: this.y = value; break;\n\t\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tgetComponent: function ( index ) {\n\n\t\t\tswitch ( index ) {\n\n\t\t\t\tcase 0: return this.x;\n\t\t\t\tcase 1: return this.y;\n\t\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t\t}\n\n\t\t},\n\n\t\tclone: function () {\n\n\t\t\treturn new this.constructor( this.x, this.y );\n\n\t\t},\n\n\t\tcopy: function ( v ) {\n\n\t\t\tthis.x = v.x;\n\t\t\tthis.y = v.y;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tadd: function ( v, w ) {\n\n\t\t\tif ( w !== undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Vector2: .add() now only accepts one argument. Use .addVectors( a, b ) instead.' );\n\t\t\t\treturn this.addVectors( v, w );\n\n\t\t\t}\n\n\t\t\tthis.x += v.x;\n\t\t\tthis.y += v.y;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\taddScalar: function ( s ) {\n\n\t\t\tthis.x += s;\n\t\t\tthis.y += s;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\taddVectors: function ( a, b ) {\n\n\t\t\tthis.x = a.x + b.x;\n\t\t\tthis.y = a.y + b.y;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\taddScaledVector: function ( v, s ) {\n\n\t\t\tthis.x += v.x * s;\n\t\t\tthis.y += v.y * s;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsub: function ( v, w ) {\n\n\t\t\tif ( w !== undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Vector2: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.' );\n\t\t\t\treturn this.subVectors( v, w );\n\n\t\t\t}\n\n\t\t\tthis.x -= v.x;\n\t\t\tthis.y -= v.y;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsubScalar: function ( s ) {\n\n\t\t\tthis.x -= s;\n\t\t\tthis.y -= s;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsubVectors: function ( a, b ) {\n\n\t\t\tthis.x = a.x - b.x;\n\t\t\tthis.y = a.y - b.y;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tmultiply: function ( v ) {\n\n\t\t\tthis.x *= v.x;\n\t\t\tthis.y *= v.y;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tmultiplyScalar: function ( scalar ) {\n\n\t\t\tthis.x *= scalar;\n\t\t\tthis.y *= scalar;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tdivide: function ( v ) {\n\n\t\t\tthis.x /= v.x;\n\t\t\tthis.y /= v.y;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tdivideScalar: function ( scalar ) {\n\n\t\t\treturn this.multiplyScalar( 1 / scalar );\n\n\t\t},\n\n\t\tapplyMatrix3: function ( m ) {\n\n\t\t\tvar x = this.x, y = this.y;\n\t\t\tvar e = m.elements;\n\n\t\t\tthis.x = e[ 0 ] * x + e[ 3 ] * y + e[ 6 ];\n\t\t\tthis.y = e[ 1 ] * x + e[ 4 ] * y + e[ 7 ];\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tmin: function ( v ) {\n\n\t\t\tthis.x = Math.min( this.x, v.x );\n\t\t\tthis.y = Math.min( this.y, v.y );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tmax: function ( v ) {\n\n\t\t\tthis.x = Math.max( this.x, v.x );\n\t\t\tthis.y = Math.max( this.y, v.y );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tclamp: function ( min, max ) {\n\n\t\t\t// assumes min < max, componentwise\n\n\t\t\tthis.x = Math.max( min.x, Math.min( max.x, this.x ) );\n\t\t\tthis.y = Math.max( min.y, Math.min( max.y, this.y ) );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tclampScalar: function () {\n\n\t\t\tvar min = new Vector2();\n\t\t\tvar max = new Vector2();\n\n\t\t\treturn function clampScalar( minVal, maxVal ) {\n\n\t\t\t\tmin.set( minVal, minVal );\n\t\t\t\tmax.set( maxVal, maxVal );\n\n\t\t\t\treturn this.clamp( min, max );\n\n\t\t\t};\n\n\t\t}(),\n\n\t\tclampLength: function ( min, max ) {\n\n\t\t\tvar length = this.length();\n\n\t\t\treturn this.divideScalar( length || 1 ).multiplyScalar( Math.max( min, Math.min( max, length ) ) );\n\n\t\t},\n\n\t\tfloor: function () {\n\n\t\t\tthis.x = Math.floor( this.x );\n\t\t\tthis.y = Math.floor( this.y );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tceil: function () {\n\n\t\t\tthis.x = Math.ceil( this.x );\n\t\t\tthis.y = Math.ceil( this.y );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tround: function () {\n\n\t\t\tthis.x = Math.round( this.x );\n\t\t\tthis.y = Math.round( this.y );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\troundToZero: function () {\n\n\t\t\tthis.x = ( this.x < 0 ) ? Math.ceil( this.x ) : Math.floor( this.x );\n\t\t\tthis.y = ( this.y < 0 ) ? Math.ceil( this.y ) : Math.floor( this.y );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tnegate: function () {\n\n\t\t\tthis.x = - this.x;\n\t\t\tthis.y = - this.y;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tdot: function ( v ) {\n\n\t\t\treturn this.x * v.x + this.y * v.y;\n\n\t\t},\n\n\t\tlengthSq: function () {\n\n\t\t\treturn this.x * this.x + this.y * this.y;\n\n\t\t},\n\n\t\tlength: function () {\n\n\t\t\treturn Math.sqrt( this.x * this.x + this.y * this.y );\n\n\t\t},\n\n\t\tmanhattanLength: function () {\n\n\t\t\treturn Math.abs( this.x ) + Math.abs( this.y );\n\n\t\t},\n\n\t\tnormalize: function () {\n\n\t\t\treturn this.divideScalar( this.length() || 1 );\n\n\t\t},\n\n\t\tangle: function () {\n\n\t\t\t// computes the angle in radians with respect to the positive x-axis\n\n\t\t\tvar angle = Math.atan2( this.y, this.x );\n\n\t\t\tif ( angle < 0 ) angle += 2 * Math.PI;\n\n\t\t\treturn angle;\n\n\t\t},\n\n\t\tdistanceTo: function ( v ) {\n\n\t\t\treturn Math.sqrt( this.distanceToSquared( v ) );\n\n\t\t},\n\n\t\tdistanceToSquared: function ( v ) {\n\n\t\t\tvar dx = this.x - v.x, dy = this.y - v.y;\n\t\t\treturn dx * dx + dy * dy;\n\n\t\t},\n\n\t\tmanhattanDistanceTo: function ( v ) {\n\n\t\t\treturn Math.abs( this.x - v.x ) + Math.abs( this.y - v.y );\n\n\t\t},\n\n\t\tsetLength: function ( length ) {\n\n\t\t\treturn this.normalize().multiplyScalar( length );\n\n\t\t},\n\n\t\tlerp: function ( v, alpha ) {\n\n\t\t\tthis.x += ( v.x - this.x ) * alpha;\n\t\t\tthis.y += ( v.y - this.y ) * alpha;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tlerpVectors: function ( v1, v2, alpha ) {\n\n\t\t\treturn this.subVectors( v2, v1 ).multiplyScalar( alpha ).add( v1 );\n\n\t\t},\n\n\t\tequals: function ( v ) {\n\n\t\t\treturn ( ( v.x === this.x ) && ( v.y === this.y ) );\n\n\t\t},\n\n\t\tfromArray: function ( array, offset ) {\n\n\t\t\tif ( offset === undefined ) offset = 0;\n\n\t\t\tthis.x = array[ offset ];\n\t\t\tthis.y = array[ offset + 1 ];\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\ttoArray: function ( array, offset ) {\n\n\t\t\tif ( array === undefined ) array = [];\n\t\t\tif ( offset === undefined ) offset = 0;\n\n\t\t\tarray[ offset ] = this.x;\n\t\t\tarray[ offset + 1 ] = this.y;\n\n\t\t\treturn array;\n\n\t\t},\n\n\t\tfromBufferAttribute: function ( attribute, index, offset ) {\n\n\t\t\tif ( offset !== undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Vector2: offset has been removed from .fromBufferAttribute().' );\n\n\t\t\t}\n\n\t\t\tthis.x = attribute.getX( index );\n\t\t\tthis.y = attribute.getY( index );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\trotateAround: function ( center, angle ) {\n\n\t\t\tvar c = Math.cos( angle ), s = Math.sin( angle );\n\n\t\t\tvar x = this.x - center.x;\n\t\t\tvar y = this.y - center.y;\n\n\t\t\tthis.x = x * c - y * s + center.x;\n\t\t\tthis.y = x * s + y * c + center.y;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t} );\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t * @author supereggbert / http://www.paulbrunt.co.uk/\n\t * @author philogb / http://blog.thejit.org/\n\t * @author jordi_ros / http://plattsoft.com\n\t * @author D1plo1d / http://github.com/D1plo1d\n\t * @author alteredq / http://alteredqualia.com/\n\t * @author mikael emtinger / http://gomo.se/\n\t * @author timknip / http://www.floorplanner.com/\n\t * @author bhouston / http://clara.io\n\t * @author WestLangley / http://github.com/WestLangley\n\t */\n\n\tfunction Matrix4() {\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\tObject.assign( Matrix4.prototype, {\n\n\t\tisMatrix4: true,\n\n\t\tset: function ( n11, n12, n13, n14, n21, n22, n23, n24, n31, n32, n33, n34, n41, n42, n43, n44 ) {\n\n\t\t\tvar te = this.elements;\n\n\t\t\tte[ 0 ] = n11; te[ 4 ] = n12; te[ 8 ] = n13; te[ 12 ] = n14;\n\t\t\tte[ 1 ] = n21; te[ 5 ] = n22; te[ 9 ] = n23; te[ 13 ] = n24;\n\t\t\tte[ 2 ] = n31; te[ 6 ] = n32; te[ 10 ] = n33; te[ 14 ] = n34;\n\t\t\tte[ 3 ] = n41; te[ 7 ] = n42; te[ 11 ] = n43; te[ 15 ] = n44;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tidentity: function () {\n\n\t\t\tthis.set(\n\n\t\t\t\t1, 0, 0, 0,\n\t\t\t\t0, 1, 0, 0,\n\t\t\t\t0, 0, 1, 0,\n\t\t\t\t0, 0, 0, 1\n\n\t\t\t);\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tclone: function () {\n\n\t\t\treturn new Matrix4().fromArray( this.elements );\n\n\t\t},\n\n\t\tcopy: function ( m ) {\n\n\t\t\tvar te = this.elements;\n\t\t\tvar me = m.elements;\n\n\t\t\tte[ 0 ] = me[ 0 ]; te[ 1 ] = me[ 1 ]; te[ 2 ] = me[ 2 ]; te[ 3 ] = me[ 3 ];\n\t\t\tte[ 4 ] = me[ 4 ]; te[ 5 ] = me[ 5 ]; te[ 6 ] = me[ 6 ]; te[ 7 ] = me[ 7 ];\n\t\t\tte[ 8 ] = me[ 8 ]; te[ 9 ] = me[ 9 ]; te[ 10 ] = me[ 10 ]; te[ 11 ] = me[ 11 ];\n\t\t\tte[ 12 ] = me[ 12 ]; te[ 13 ] = me[ 13 ]; te[ 14 ] = me[ 14 ]; te[ 15 ] = me[ 15 ];\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tcopyPosition: function ( m ) {\n\n\t\t\tvar te = this.elements, me = m.elements;\n\n\t\t\tte[ 12 ] = me[ 12 ];\n\t\t\tte[ 13 ] = me[ 13 ];\n\t\t\tte[ 14 ] = me[ 14 ];\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\textractBasis: function ( xAxis, yAxis, zAxis ) {\n\n\t\t\txAxis.setFromMatrixColumn( this, 0 );\n\t\t\tyAxis.setFromMatrixColumn( this, 1 );\n\t\t\tzAxis.setFromMatrixColumn( this, 2 );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tmakeBasis: function ( xAxis, yAxis, zAxis ) {\n\n\t\t\tthis.set(\n\t\t\t\txAxis.x, yAxis.x, zAxis.x, 0,\n\t\t\t\txAxis.y, yAxis.y, zAxis.y, 0,\n\t\t\t\txAxis.z, yAxis.z, zAxis.z, 0,\n\t\t\t\t0, 0, 0, 1\n\t\t\t);\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\textractRotation: function () {\n\n\t\t\tvar v1 = new Vector3();\n\n\t\t\treturn function extractRotation( m ) {\n\n\t\t\t\tvar te = this.elements;\n\t\t\t\tvar me = m.elements;\n\n\t\t\t\tvar scaleX = 1 / v1.setFromMatrixColumn( m, 0 ).length();\n\t\t\t\tvar scaleY = 1 / v1.setFromMatrixColumn( m, 1 ).length();\n\t\t\t\tvar scaleZ = 1 / v1.setFromMatrixColumn( m, 2 ).length();\n\n\t\t\t\tte[ 0 ] = me[ 0 ] * scaleX;\n\t\t\t\tte[ 1 ] = me[ 1 ] * scaleX;\n\t\t\t\tte[ 2 ] = me[ 2 ] * scaleX;\n\n\t\t\t\tte[ 4 ] = me[ 4 ] * scaleY;\n\t\t\t\tte[ 5 ] = me[ 5 ] * scaleY;\n\t\t\t\tte[ 6 ] = me[ 6 ] * scaleY;\n\n\t\t\t\tte[ 8 ] = me[ 8 ] * scaleZ;\n\t\t\t\tte[ 9 ] = me[ 9 ] * scaleZ;\n\t\t\t\tte[ 10 ] = me[ 10 ] * scaleZ;\n\n\t\t\t\treturn this;\n\n\t\t\t};\n\n\t\t}(),\n\n\t\tmakeRotationFromEuler: function ( euler ) {\n\n\t\t\tif ( ! ( euler && euler.isEuler ) ) {\n\n\t\t\t\tconsole.error( 'THREE.Matrix4: .makeRotationFromEuler() now expects a Euler rotation rather than a Vector3 and order.' );\n\n\t\t\t}\n\n\t\t\tvar te = this.elements;\n\n\t\t\tvar x = euler.x, y = euler.y, z = euler.z;\n\t\t\tvar a = Math.cos( x ), b = Math.sin( x );\n\t\t\tvar c = Math.cos( y ), d = Math.sin( y );\n\t\t\tvar e = Math.cos( z ), f = Math.sin( z );\n\n\t\t\tif ( euler.order === 'XYZ' ) {\n\n\t\t\t\tvar ae = a * e, af = a * f, be = b * e, bf = b * f;\n\n\t\t\t\tte[ 0 ] = c * e;\n\t\t\t\tte[ 4 ] = - c * f;\n\t\t\t\tte[ 8 ] = d;\n\n\t\t\t\tte[ 1 ] = af + be * d;\n\t\t\t\tte[ 5 ] = ae - bf * d;\n\t\t\t\tte[ 9 ] = - b * c;\n\n\t\t\t\tte[ 2 ] = bf - ae * d;\n\t\t\t\tte[ 6 ] = be + af * d;\n\t\t\t\tte[ 10 ] = a * c;\n\n\t\t\t} else if ( euler.order === 'YXZ' ) {\n\n\t\t\t\tvar ce = c * e, cf = c * f, de = d * e, df = d * f;\n\n\t\t\t\tte[ 0 ] = ce + df * b;\n\t\t\t\tte[ 4 ] = de * b - cf;\n\t\t\t\tte[ 8 ] = a * d;\n\n\t\t\t\tte[ 1 ] = a * f;\n\t\t\t\tte[ 5 ] = a * e;\n\t\t\t\tte[ 9 ] = - b;\n\n\t\t\t\tte[ 2 ] = cf * b - de;\n\t\t\t\tte[ 6 ] = df + ce * b;\n\t\t\t\tte[ 10 ] = a * c;\n\n\t\t\t} else if ( euler.order === 'ZXY' ) {\n\n\t\t\t\tvar ce = c * e, cf = c * f, de = d * e, df = d * f;\n\n\t\t\t\tte[ 0 ] = ce - df * b;\n\t\t\t\tte[ 4 ] = - a * f;\n\t\t\t\tte[ 8 ] = de + cf * b;\n\n\t\t\t\tte[ 1 ] = cf + de * b;\n\t\t\t\tte[ 5 ] = a * e;\n\t\t\t\tte[ 9 ] = df - ce * b;\n\n\t\t\t\tte[ 2 ] = - a * d;\n\t\t\t\tte[ 6 ] = b;\n\t\t\t\tte[ 10 ] = a * c;\n\n\t\t\t} else if ( euler.order === 'ZYX' ) {\n\n\t\t\t\tvar ae = a * e, af = a * f, be = b * e, bf = b * f;\n\n\t\t\t\tte[ 0 ] = c * e;\n\t\t\t\tte[ 4 ] = be * d - af;\n\t\t\t\tte[ 8 ] = ae * d + bf;\n\n\t\t\t\tte[ 1 ] = c * f;\n\t\t\t\tte[ 5 ] = bf * d + ae;\n\t\t\t\tte[ 9 ] = af * d - be;\n\n\t\t\t\tte[ 2 ] = - d;\n\t\t\t\tte[ 6 ] = b * c;\n\t\t\t\tte[ 10 ] = a * c;\n\n\t\t\t} else if ( euler.order === 'YZX' ) {\n\n\t\t\t\tvar ac = a * c, ad = a * d, bc = b * c, bd = b * d;\n\n\t\t\t\tte[ 0 ] = c * e;\n\t\t\t\tte[ 4 ] = bd - ac * f;\n\t\t\t\tte[ 8 ] = bc * f + ad;\n\n\t\t\t\tte[ 1 ] = f;\n\t\t\t\tte[ 5 ] = a * e;\n\t\t\t\tte[ 9 ] = - b * e;\n\n\t\t\t\tte[ 2 ] = - d * e;\n\t\t\t\tte[ 6 ] = ad * f + bc;\n\t\t\t\tte[ 10 ] = ac - bd * f;\n\n\t\t\t} else if ( euler.order === 'XZY' ) {\n\n\t\t\t\tvar ac = a * c, ad = a * d, bc = b * c, bd = b * d;\n\n\t\t\t\tte[ 0 ] = c * e;\n\t\t\t\tte[ 4 ] = - f;\n\t\t\t\tte[ 8 ] = d * e;\n\n\t\t\t\tte[ 1 ] = ac * f + bd;\n\t\t\t\tte[ 5 ] = a * e;\n\t\t\t\tte[ 9 ] = ad * f - bc;\n\n\t\t\t\tte[ 2 ] = bc * f - ad;\n\t\t\t\tte[ 6 ] = b * e;\n\t\t\t\tte[ 10 ] = bd * f + ac;\n\n\t\t\t}\n\n\t\t\t// last column\n\t\t\tte[ 3 ] = 0;\n\t\t\tte[ 7 ] = 0;\n\t\t\tte[ 11 ] = 0;\n\n\t\t\t// bottom row\n\t\t\tte[ 12 ] = 0;\n\t\t\tte[ 13 ] = 0;\n\t\t\tte[ 14 ] = 0;\n\t\t\tte[ 15 ] = 1;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tmakeRotationFromQuaternion: function ( q ) {\n\n\t\t\tvar te = this.elements;\n\n\t\t\tvar x = q._x, y = q._y, z = q._z, w = q._w;\n\t\t\tvar x2 = x + x, y2 = y + y, z2 = z + z;\n\t\t\tvar xx = x * x2, xy = x * y2, xz = x * z2;\n\t\t\tvar yy = y * y2, yz = y * z2, zz = z * z2;\n\t\t\tvar wx = w * x2, wy = w * y2, wz = w * z2;\n\n\t\t\tte[ 0 ] = 1 - ( yy + zz );\n\t\t\tte[ 4 ] = xy - wz;\n\t\t\tte[ 8 ] = xz + wy;\n\n\t\t\tte[ 1 ] = xy + wz;\n\t\t\tte[ 5 ] = 1 - ( xx + zz );\n\t\t\tte[ 9 ] = yz - wx;\n\n\t\t\tte[ 2 ] = xz - wy;\n\t\t\tte[ 6 ] = yz + wx;\n\t\t\tte[ 10 ] = 1 - ( xx + yy );\n\n\t\t\t// last column\n\t\t\tte[ 3 ] = 0;\n\t\t\tte[ 7 ] = 0;\n\t\t\tte[ 11 ] = 0;\n\n\t\t\t// bottom row\n\t\t\tte[ 12 ] = 0;\n\t\t\tte[ 13 ] = 0;\n\t\t\tte[ 14 ] = 0;\n\t\t\tte[ 15 ] = 1;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tlookAt: function () {\n\n\t\t\tvar x = new Vector3();\n\t\t\tvar y = new Vector3();\n\t\t\tvar z = new Vector3();\n\n\t\t\treturn function lookAt( eye, target, up ) {\n\n\t\t\t\tvar te = this.elements;\n\n\t\t\t\tz.subVectors( eye, target );\n\n\t\t\t\tif ( z.lengthSq() === 0 ) {\n\n\t\t\t\t\t// eye and target are in the same position\n\n\t\t\t\t\tz.z = 1;\n\n\t\t\t\t}\n\n\t\t\t\tz.normalize();\n\t\t\t\tx.crossVectors( up, z );\n\n\t\t\t\tif ( x.lengthSq() === 0 ) {\n\n\t\t\t\t\t// up and z are parallel\n\n\t\t\t\t\tif ( Math.abs( up.z ) === 1 ) {\n\n\t\t\t\t\t\tz.x += 0.0001;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tz.z += 0.0001;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tz.normalize();\n\t\t\t\t\tx.crossVectors( up, z );\n\n\t\t\t\t}\n\n\t\t\t\tx.normalize();\n\t\t\t\ty.crossVectors( z, x );\n\n\t\t\t\tte[ 0 ] = x.x; te[ 4 ] = y.x; te[ 8 ] = z.x;\n\t\t\t\tte[ 1 ] = x.y; te[ 5 ] = y.y; te[ 9 ] = z.y;\n\t\t\t\tte[ 2 ] = x.z; te[ 6 ] = y.z; te[ 10 ] = z.z;\n\n\t\t\t\treturn this;\n\n\t\t\t};\n\n\t\t}(),\n\n\t\tmultiply: function ( m, n ) {\n\n\t\t\tif ( n !== undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Matrix4: .multiply() now only accepts one argument. Use .multiplyMatrices( a, b ) instead.' );\n\t\t\t\treturn this.multiplyMatrices( m, n );\n\n\t\t\t}\n\n\t\t\treturn this.multiplyMatrices( this, m );\n\n\t\t},\n\n\t\tpremultiply: function ( m ) {\n\n\t\t\treturn this.multiplyMatrices( m, this );\n\n\t\t},\n\n\t\tmultiplyMatrices: function ( a, b ) {\n\n\t\t\tvar ae = a.elements;\n\t\t\tvar be = b.elements;\n\t\t\tvar te = this.elements;\n\n\t\t\tvar a11 = ae[ 0 ], a12 = ae[ 4 ], a13 = ae[ 8 ], a14 = ae[ 12 ];\n\t\t\tvar a21 = ae[ 1 ], a22 = ae[ 5 ], a23 = ae[ 9 ], a24 = ae[ 13 ];\n\t\t\tvar a31 = ae[ 2 ], a32 = ae[ 6 ], a33 = ae[ 10 ], a34 = ae[ 14 ];\n\t\t\tvar a41 = ae[ 3 ], a42 = ae[ 7 ], a43 = ae[ 11 ], a44 = ae[ 15 ];\n\n\t\t\tvar b11 = be[ 0 ], b12 = be[ 4 ], b13 = be[ 8 ], b14 = be[ 12 ];\n\t\t\tvar b21 = be[ 1 ], b22 = be[ 5 ], b23 = be[ 9 ], b24 = be[ 13 ];\n\t\t\tvar b31 = be[ 2 ], b32 = be[ 6 ], b33 = be[ 10 ], b34 = be[ 14 ];\n\t\t\tvar b41 = be[ 3 ], b42 = be[ 7 ], b43 = be[ 11 ], b44 = be[ 15 ];\n\n\t\t\tte[ 0 ] = a11 * b11 + a12 * b21 + a13 * b31 + a14 * b41;\n\t\t\tte[ 4 ] = a11 * b12 + a12 * b22 + a13 * b32 + a14 * b42;\n\t\t\tte[ 8 ] = a11 * b13 + a12 * b23 + a13 * b33 + a14 * b43;\n\t\t\tte[ 12 ] = a11 * b14 + a12 * b24 + a13 * b34 + a14 * b44;\n\n\t\t\tte[ 1 ] = a21 * b11 + a22 * b21 + a23 * b31 + a24 * b41;\n\t\t\tte[ 5 ] = a21 * b12 + a22 * b22 + a23 * b32 + a24 * b42;\n\t\t\tte[ 9 ] = a21 * b13 + a22 * b23 + a23 * b33 + a24 * b43;\n\t\t\tte[ 13 ] = a21 * b14 + a22 * b24 + a23 * b34 + a24 * b44;\n\n\t\t\tte[ 2 ] = a31 * b11 + a32 * b21 + a33 * b31 + a34 * b41;\n\t\t\tte[ 6 ] = a31 * b12 + a32 * b22 + a33 * b32 + a34 * b42;\n\t\t\tte[ 10 ] = a31 * b13 + a32 * b23 + a33 * b33 + a34 * b43;\n\t\t\tte[ 14 ] = a31 * b14 + a32 * b24 + a33 * b34 + a34 * b44;\n\n\t\t\tte[ 3 ] = a41 * b11 + a42 * b21 + a43 * b31 + a44 * b41;\n\t\t\tte[ 7 ] = a41 * b12 + a42 * b22 + a43 * b32 + a44 * b42;\n\t\t\tte[ 11 ] = a41 * b13 + a42 * b23 + a43 * b33 + a44 * b43;\n\t\t\tte[ 15 ] = a41 * b14 + a42 * b24 + a43 * b34 + a44 * b44;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tmultiplyScalar: function ( s ) {\n\n\t\t\tvar te = this.elements;\n\n\t\t\tte[ 0 ] *= s; te[ 4 ] *= s; te[ 8 ] *= s; te[ 12 ] *= s;\n\t\t\tte[ 1 ] *= s; te[ 5 ] *= s; te[ 9 ] *= s; te[ 13 ] *= s;\n\t\t\tte[ 2 ] *= s; te[ 6 ] *= s; te[ 10 ] *= s; te[ 14 ] *= s;\n\t\t\tte[ 3 ] *= s; te[ 7 ] *= s; te[ 11 ] *= s; te[ 15 ] *= s;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tapplyToBufferAttribute: function () {\n\n\t\t\tvar v1 = new Vector3();\n\n\t\t\treturn function applyToBufferAttribute( attribute ) {\n\n\t\t\t\tfor ( var i = 0, l = attribute.count; i < l; i ++ ) {\n\n\t\t\t\t\tv1.x = attribute.getX( i );\n\t\t\t\t\tv1.y = attribute.getY( i );\n\t\t\t\t\tv1.z = attribute.getZ( i );\n\n\t\t\t\t\tv1.applyMatrix4( this );\n\n\t\t\t\t\tattribute.setXYZ( i, v1.x, v1.y, v1.z );\n\n\t\t\t\t}\n\n\t\t\t\treturn attribute;\n\n\t\t\t};\n\n\t\t}(),\n\n\t\tdeterminant: function () {\n\n\t\t\tvar te = this.elements;\n\n\t\t\tvar n11 = te[ 0 ], n12 = te[ 4 ], n13 = te[ 8 ], n14 = te[ 12 ];\n\t\t\tvar n21 = te[ 1 ], n22 = te[ 5 ], n23 = te[ 9 ], n24 = te[ 13 ];\n\t\t\tvar n31 = te[ 2 ], n32 = te[ 6 ], n33 = te[ 10 ], n34 = te[ 14 ];\n\t\t\tvar n41 = te[ 3 ], n42 = te[ 7 ], n43 = te[ 11 ], n44 = te[ 15 ];\n\n\t\t\t//TODO: make this more efficient\n\t\t\t//( based on http://www.euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/index.htm )\n\n\t\t\treturn (\n\t\t\t\tn41 * (\n\t\t\t\t\t+ n14 * n23 * n32\n\t\t\t\t\t - n13 * n24 * n32\n\t\t\t\t\t - n14 * n22 * n33\n\t\t\t\t\t + n12 * n24 * n33\n\t\t\t\t\t + n13 * n22 * n34\n\t\t\t\t\t - n12 * n23 * n34\n\t\t\t\t) +\n\t\t\t\tn42 * (\n\t\t\t\t\t+ n11 * n23 * n34\n\t\t\t\t\t - n11 * n24 * n33\n\t\t\t\t\t + n14 * n21 * n33\n\t\t\t\t\t - n13 * n21 * n34\n\t\t\t\t\t + n13 * n24 * n31\n\t\t\t\t\t - n14 * n23 * n31\n\t\t\t\t) +\n\t\t\t\tn43 * (\n\t\t\t\t\t+ n11 * n24 * n32\n\t\t\t\t\t - n11 * n22 * n34\n\t\t\t\t\t - n14 * n21 * n32\n\t\t\t\t\t + n12 * n21 * n34\n\t\t\t\t\t + n14 * n22 * n31\n\t\t\t\t\t - n12 * n24 * n31\n\t\t\t\t) +\n\t\t\t\tn44 * (\n\t\t\t\t\t- n13 * n22 * n31\n\t\t\t\t\t - n11 * n23 * n32\n\t\t\t\t\t + n11 * n22 * n33\n\t\t\t\t\t + n13 * n21 * n32\n\t\t\t\t\t - n12 * n21 * n33\n\t\t\t\t\t + n12 * n23 * n31\n\t\t\t\t)\n\n\t\t\t);\n\n\t\t},\n\n\t\ttranspose: function () {\n\n\t\t\tvar te = this.elements;\n\t\t\tvar tmp;\n\n\t\t\ttmp = te[ 1 ]; te[ 1 ] = te[ 4 ]; te[ 4 ] = tmp;\n\t\t\ttmp = te[ 2 ]; te[ 2 ] = te[ 8 ]; te[ 8 ] = tmp;\n\t\t\ttmp = te[ 6 ]; te[ 6 ] = te[ 9 ]; te[ 9 ] = tmp;\n\n\t\t\ttmp = te[ 3 ]; te[ 3 ] = te[ 12 ]; te[ 12 ] = tmp;\n\t\t\ttmp = te[ 7 ]; te[ 7 ] = te[ 13 ]; te[ 13 ] = tmp;\n\t\t\ttmp = te[ 11 ]; te[ 11 ] = te[ 14 ]; te[ 14 ] = tmp;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetPosition: function ( v ) {\n\n\t\t\tvar te = this.elements;\n\n\t\t\tte[ 12 ] = v.x;\n\t\t\tte[ 13 ] = v.y;\n\t\t\tte[ 14 ] = v.z;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tgetInverse: function ( m, throwOnDegenerate ) {\n\n\t\t\t// based on http://www.euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/index.htm\n\t\t\tvar te = this.elements,\n\t\t\t\tme = m.elements,\n\n\t\t\t\tn11 = me[ 0 ], n21 = me[ 1 ], n31 = me[ 2 ], n41 = me[ 3 ],\n\t\t\t\tn12 = me[ 4 ], n22 = me[ 5 ], n32 = me[ 6 ], n42 = me[ 7 ],\n\t\t\t\tn13 = me[ 8 ], n23 = me[ 9 ], n33 = me[ 10 ], n43 = me[ 11 ],\n\t\t\t\tn14 = me[ 12 ], n24 = me[ 13 ], n34 = me[ 14 ], n44 = me[ 15 ],\n\n\t\t\t\tt11 = n23 * n34 * n42 - n24 * n33 * n42 + n24 * n32 * n43 - n22 * n34 * n43 - n23 * n32 * n44 + n22 * n33 * n44,\n\t\t\t\tt12 = n14 * n33 * n42 - n13 * n34 * n42 - n14 * n32 * n43 + n12 * n34 * n43 + n13 * n32 * n44 - n12 * n33 * n44,\n\t\t\t\tt13 = n13 * n24 * n42 - n14 * n23 * n42 + n14 * n22 * n43 - n12 * n24 * n43 - n13 * n22 * n44 + n12 * n23 * n44,\n\t\t\t\tt14 = n14 * n23 * n32 - n13 * n24 * n32 - n14 * n22 * n33 + n12 * n24 * n33 + n13 * n22 * n34 - n12 * n23 * n34;\n\n\t\t\tvar det = n11 * t11 + n21 * t12 + n31 * t13 + n41 * t14;\n\n\t\t\tif ( det === 0 ) {\n\n\t\t\t\tvar msg = \"THREE.Matrix4: .getInverse() can't invert matrix, determinant is 0\";\n\n\t\t\t\tif ( throwOnDegenerate === true ) {\n\n\t\t\t\t\tthrow new Error( msg );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.warn( msg );\n\n\t\t\t\t}\n\n\t\t\t\treturn this.identity();\n\n\t\t\t}\n\n\t\t\tvar detInv = 1 / det;\n\n\t\t\tte[ 0 ] = t11 * detInv;\n\t\t\tte[ 1 ] = ( n24 * n33 * n41 - n23 * n34 * n41 - n24 * n31 * n43 + n21 * n34 * n43 + n23 * n31 * n44 - n21 * n33 * n44 ) * detInv;\n\t\t\tte[ 2 ] = ( n22 * n34 * n41 - n24 * n32 * n41 + n24 * n31 * n42 - n21 * n34 * n42 - n22 * n31 * n44 + n21 * n32 * n44 ) * detInv;\n\t\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\t\tte[ 4 ] = t12 * detInv;\n\t\t\tte[ 5 ] = ( n13 * n34 * n41 - n14 * n33 * n41 + n14 * n31 * n43 - n11 * n34 * n43 - n13 * n31 * n44 + n11 * n33 * n44 ) * detInv;\n\t\t\tte[ 6 ] = ( n14 * n32 * n41 - n12 * n34 * n41 - n14 * n31 * n42 + n11 * n34 * n42 + n12 * n31 * n44 - n11 * n32 * n44 ) * detInv;\n\t\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\t\tte[ 8 ] = t13 * detInv;\n\t\t\tte[ 9 ] = ( n14 * n23 * n41 - n13 * n24 * n41 - n14 * n21 * n43 + n11 * n24 * n43 + n13 * n21 * n44 - n11 * n23 * n44 ) * detInv;\n\t\t\tte[ 10 ] = ( n12 * n24 * n41 - n14 * n22 * n41 + n14 * n21 * n42 - n11 * n24 * n42 - n12 * n21 * n44 + n11 * n22 * n44 ) * detInv;\n\t\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\t\tte[ 12 ] = t14 * detInv;\n\t\t\tte[ 13 ] = ( n13 * n24 * n31 - n14 * n23 * n31 + n14 * n21 * n33 - n11 * n24 * n33 - n13 * n21 * n34 + n11 * n23 * n34 ) * detInv;\n\t\t\tte[ 14 ] = ( n14 * n22 * n31 - n12 * n24 * n31 - n14 * n21 * n32 + n11 * n24 * n32 + n12 * n21 * n34 - n11 * n22 * n34 ) * detInv;\n\t\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\t\treturn this;\n\n\t\t},\n\n\t\tscale: function ( v ) {\n\n\t\t\tvar te = this.elements;\n\t\t\tvar x = v.x, y = v.y, z = v.z;\n\n\t\t\tte[ 0 ] *= x; te[ 4 ] *= y; te[ 8 ] *= z;\n\t\t\tte[ 1 ] *= x; te[ 5 ] *= y; te[ 9 ] *= z;\n\t\t\tte[ 2 ] *= x; te[ 6 ] *= y; te[ 10 ] *= z;\n\t\t\tte[ 3 ] *= x; te[ 7 ] *= y; te[ 11 ] *= z;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tgetMaxScaleOnAxis: function () {\n\n\t\t\tvar te = this.elements;\n\n\t\t\tvar scaleXSq = te[ 0 ] * te[ 0 ] + te[ 1 ] * te[ 1 ] + te[ 2 ] * te[ 2 ];\n\t\t\tvar scaleYSq = te[ 4 ] * te[ 4 ] + te[ 5 ] * te[ 5 ] + te[ 6 ] * te[ 6 ];\n\t\t\tvar scaleZSq = te[ 8 ] * te[ 8 ] + te[ 9 ] * te[ 9 ] + te[ 10 ] * te[ 10 ];\n\n\t\t\treturn Math.sqrt( Math.max( scaleXSq, scaleYSq, scaleZSq ) );\n\n\t\t},\n\n\t\tmakeTranslation: function ( x, y, z ) {\n\n\t\t\tthis.set(\n\n\t\t\t\t1, 0, 0, x,\n\t\t\t\t0, 1, 0, y,\n\t\t\t\t0, 0, 1, z,\n\t\t\t\t0, 0, 0, 1\n\n\t\t\t);\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tmakeRotationX: function ( theta ) {\n\n\t\t\tvar c = Math.cos( theta ), s = Math.sin( theta );\n\n\t\t\tthis.set(\n\n\t\t\t\t1, 0, 0, 0,\n\t\t\t\t0, c, - s, 0,\n\t\t\t\t0, s, c, 0,\n\t\t\t\t0, 0, 0, 1\n\n\t\t\t);\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tmakeRotationY: function ( theta ) {\n\n\t\t\tvar c = Math.cos( theta ), s = Math.sin( theta );\n\n\t\t\tthis.set(\n\n\t\t\t\t c, 0, s, 0,\n\t\t\t\t 0, 1, 0, 0,\n\t\t\t\t- s, 0, c, 0,\n\t\t\t\t 0, 0, 0, 1\n\n\t\t\t);\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tmakeRotationZ: function ( theta ) {\n\n\t\t\tvar c = Math.cos( theta ), s = Math.sin( theta );\n\n\t\t\tthis.set(\n\n\t\t\t\tc, - s, 0, 0,\n\t\t\t\ts, c, 0, 0,\n\t\t\t\t0, 0, 1, 0,\n\t\t\t\t0, 0, 0, 1\n\n\t\t\t);\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tmakeRotationAxis: function ( axis, angle ) {\n\n\t\t\t// Based on http://www.gamedev.net/reference/articles/article1199.asp\n\n\t\t\tvar c = Math.cos( angle );\n\t\t\tvar s = Math.sin( angle );\n\t\t\tvar t = 1 - c;\n\t\t\tvar x = axis.x, y = axis.y, z = axis.z;\n\t\t\tvar tx = t * x, ty = t * y;\n\n\t\t\tthis.set(\n\n\t\t\t\ttx * x + c, tx * y - s * z, tx * z + s * y, 0,\n\t\t\t\ttx * y + s * z, ty * y + c, ty * z - s * x, 0,\n\t\t\t\ttx * z - s * y, ty * z + s * x, t * z * z + c, 0,\n\t\t\t\t0, 0, 0, 1\n\n\t\t\t);\n\n\t\t\t return this;\n\n\t\t},\n\n\t\tmakeScale: function ( x, y, z ) {\n\n\t\t\tthis.set(\n\n\t\t\t\tx, 0, 0, 0,\n\t\t\t\t0, y, 0, 0,\n\t\t\t\t0, 0, z, 0,\n\t\t\t\t0, 0, 0, 1\n\n\t\t\t);\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tmakeShear: function ( x, y, z ) {\n\n\t\t\tthis.set(\n\n\t\t\t\t1, y, z, 0,\n\t\t\t\tx, 1, z, 0,\n\t\t\t\tx, y, 1, 0,\n\t\t\t\t0, 0, 0, 1\n\n\t\t\t);\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tcompose: function ( position, quaternion, scale ) {\n\n\t\t\tthis.makeRotationFromQuaternion( quaternion );\n\t\t\tthis.scale( scale );\n\t\t\tthis.setPosition( position );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tdecompose: function () {\n\n\t\t\tvar vector = new Vector3();\n\t\t\tvar matrix = new Matrix4();\n\n\t\t\treturn function decompose( position, quaternion, scale ) {\n\n\t\t\t\tvar te = this.elements;\n\n\t\t\t\tvar sx = vector.set( te[ 0 ], te[ 1 ], te[ 2 ] ).length();\n\t\t\t\tvar sy = vector.set( te[ 4 ], te[ 5 ], te[ 6 ] ).length();\n\t\t\t\tvar sz = vector.set( te[ 8 ], te[ 9 ], te[ 10 ] ).length();\n\n\t\t\t\t// if determine is negative, we need to invert one scale\n\t\t\t\tvar det = this.determinant();\n\t\t\t\tif ( det < 0 ) sx = - sx;\n\n\t\t\t\tposition.x = te[ 12 ];\n\t\t\t\tposition.y = te[ 13 ];\n\t\t\t\tposition.z = te[ 14 ];\n\n\t\t\t\t// scale the rotation part\n\t\t\t\tmatrix.copy( this );\n\n\t\t\t\tvar invSX = 1 / sx;\n\t\t\t\tvar invSY = 1 / sy;\n\t\t\t\tvar invSZ = 1 / sz;\n\n\t\t\t\tmatrix.elements[ 0 ] *= invSX;\n\t\t\t\tmatrix.elements[ 1 ] *= invSX;\n\t\t\t\tmatrix.elements[ 2 ] *= invSX;\n\n\t\t\t\tmatrix.elements[ 4 ] *= invSY;\n\t\t\t\tmatrix.elements[ 5 ] *= invSY;\n\t\t\t\tmatrix.elements[ 6 ] *= invSY;\n\n\t\t\t\tmatrix.elements[ 8 ] *= invSZ;\n\t\t\t\tmatrix.elements[ 9 ] *= invSZ;\n\t\t\t\tmatrix.elements[ 10 ] *= invSZ;\n\n\t\t\t\tquaternion.setFromRotationMatrix( matrix );\n\n\t\t\t\tscale.x = sx;\n\t\t\t\tscale.y = sy;\n\t\t\t\tscale.z = sz;\n\n\t\t\t\treturn this;\n\n\t\t\t};\n\n\t\t}(),\n\n\t\tmakePerspective: function ( left, right, top, bottom, near, far ) {\n\n\t\t\tif ( far === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Matrix4: .makePerspective() has been redefined and has a new signature. Please check the docs.' );\n\n\t\t\t}\n\n\t\t\tvar te = this.elements;\n\t\t\tvar x = 2 * near / ( right - left );\n\t\t\tvar y = 2 * near / ( top - bottom );\n\n\t\t\tvar a = ( right + left ) / ( right - left );\n\t\t\tvar b = ( top + bottom ) / ( top - bottom );\n\t\t\tvar c = - ( far + near ) / ( far - near );\n\t\t\tvar d = - 2 * far * near / ( far - near );\n\n\t\t\tte[ 0 ] = x;\tte[ 4 ] = 0;\tte[ 8 ] = a;\tte[ 12 ] = 0;\n\t\t\tte[ 1 ] = 0;\tte[ 5 ] = y;\tte[ 9 ] = b;\tte[ 13 ] = 0;\n\t\t\tte[ 2 ] = 0;\tte[ 6 ] = 0;\tte[ 10 ] = c;\tte[ 14 ] = d;\n\t\t\tte[ 3 ] = 0;\tte[ 7 ] = 0;\tte[ 11 ] = - 1;\tte[ 15 ] = 0;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tmakeOrthographic: function ( left, right, top, bottom, near, far ) {\n\n\t\t\tvar te = this.elements;\n\t\t\tvar w = 1.0 / ( right - left );\n\t\t\tvar h = 1.0 / ( top - bottom );\n\t\t\tvar p = 1.0 / ( far - near );\n\n\t\t\tvar x = ( right + left ) * w;\n\t\t\tvar y = ( top + bottom ) * h;\n\t\t\tvar z = ( far + near ) * p;\n\n\t\t\tte[ 0 ] = 2 * w;\tte[ 4 ] = 0;\tte[ 8 ] = 0;\tte[ 12 ] = - x;\n\t\t\tte[ 1 ] = 0;\tte[ 5 ] = 2 * h;\tte[ 9 ] = 0;\tte[ 13 ] = - y;\n\t\t\tte[ 2 ] = 0;\tte[ 6 ] = 0;\tte[ 10 ] = - 2 * p;\tte[ 14 ] = - z;\n\t\t\tte[ 3 ] = 0;\tte[ 7 ] = 0;\tte[ 11 ] = 0;\tte[ 15 ] = 1;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tequals: function ( matrix ) {\n\n\t\t\tvar te = this.elements;\n\t\t\tvar me = matrix.elements;\n\n\t\t\tfor ( var i = 0; i < 16; i ++ ) {\n\n\t\t\t\tif ( te[ i ] !== me[ i ] ) return false;\n\n\t\t\t}\n\n\t\t\treturn true;\n\n\t\t},\n\n\t\tfromArray: function ( array, offset ) {\n\n\t\t\tif ( offset === undefined ) offset = 0;\n\n\t\t\tfor ( var i = 0; i < 16; i ++ ) {\n\n\t\t\t\tthis.elements[ i ] = array[ i + offset ];\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\ttoArray: function ( array, offset ) {\n\n\t\t\tif ( array === undefined ) array = [];\n\t\t\tif ( offset === undefined ) offset = 0;\n\n\t\t\tvar te = this.elements;\n\n\t\t\tarray[ offset ] = te[ 0 ];\n\t\t\tarray[ offset + 1 ] = te[ 1 ];\n\t\t\tarray[ offset + 2 ] = te[ 2 ];\n\t\t\tarray[ offset + 3 ] = te[ 3 ];\n\n\t\t\tarray[ offset + 4 ] = te[ 4 ];\n\t\t\tarray[ offset + 5 ] = te[ 5 ];\n\t\t\tarray[ offset + 6 ] = te[ 6 ];\n\t\t\tarray[ offset + 7 ] = te[ 7 ];\n\n\t\t\tarray[ offset + 8 ] = te[ 8 ];\n\t\t\tarray[ offset + 9 ] = te[ 9 ];\n\t\t\tarray[ offset + 10 ] = te[ 10 ];\n\t\t\tarray[ offset + 11 ] = te[ 11 ];\n\n\t\t\tarray[ offset + 12 ] = te[ 12 ];\n\t\t\tarray[ offset + 13 ] = te[ 13 ];\n\t\t\tarray[ offset + 14 ] = te[ 14 ];\n\t\t\tarray[ offset + 15 ] = te[ 15 ];\n\n\t\t\treturn array;\n\n\t\t}\n\n\t} );\n\n\t/**\n\t * @author mikael emtinger / http://gomo.se/\n\t * @author alteredq / http://alteredqualia.com/\n\t * @author WestLangley / http://github.com/WestLangley\n\t * @author bhouston / http://clara.io\n\t */\n\n\tfunction Quaternion( x, y, z, w ) {\n\n\t\tthis._x = x || 0;\n\t\tthis._y = y || 0;\n\t\tthis._z = z || 0;\n\t\tthis._w = ( w !== undefined ) ? w : 1;\n\n\t}\n\n\tObject.assign( Quaternion, {\n\n\t\tslerp: function ( qa, qb, qm, t ) {\n\n\t\t\treturn qm.copy( qa ).slerp( qb, t );\n\n\t\t},\n\n\t\tslerpFlat: function ( dst, dstOffset, src0, srcOffset0, src1, srcOffset1, t ) {\n\n\t\t\t// fuzz-free, array-based Quaternion SLERP operation\n\n\t\t\tvar x0 = src0[ srcOffset0 + 0 ],\n\t\t\t\ty0 = src0[ srcOffset0 + 1 ],\n\t\t\t\tz0 = src0[ srcOffset0 + 2 ],\n\t\t\t\tw0 = src0[ srcOffset0 + 3 ],\n\n\t\t\t\tx1 = src1[ srcOffset1 + 0 ],\n\t\t\t\ty1 = src1[ srcOffset1 + 1 ],\n\t\t\t\tz1 = src1[ srcOffset1 + 2 ],\n\t\t\t\tw1 = src1[ srcOffset1 + 3 ];\n\n\t\t\tif ( w0 !== w1 || x0 !== x1 || y0 !== y1 || z0 !== z1 ) {\n\n\t\t\t\tvar s = 1 - t,\n\n\t\t\t\t\tcos = x0 * x1 + y0 * y1 + z0 * z1 + w0 * w1,\n\n\t\t\t\t\tdir = ( cos >= 0 ? 1 : - 1 ),\n\t\t\t\t\tsqrSin = 1 - cos * cos;\n\n\t\t\t\t// Skip the Slerp for tiny steps to avoid numeric problems:\n\t\t\t\tif ( sqrSin > Number.EPSILON ) {\n\n\t\t\t\t\tvar sin = Math.sqrt( sqrSin ),\n\t\t\t\t\t\tlen = Math.atan2( sin, cos * dir );\n\n\t\t\t\t\ts = Math.sin( s * len ) / sin;\n\t\t\t\t\tt = Math.sin( t * len ) / sin;\n\n\t\t\t\t}\n\n\t\t\t\tvar tDir = t * dir;\n\n\t\t\t\tx0 = x0 * s + x1 * tDir;\n\t\t\t\ty0 = y0 * s + y1 * tDir;\n\t\t\t\tz0 = z0 * s + z1 * tDir;\n\t\t\t\tw0 = w0 * s + w1 * tDir;\n\n\t\t\t\t// Normalize in case we just did a lerp:\n\t\t\t\tif ( s === 1 - t ) {\n\n\t\t\t\t\tvar f = 1 / Math.sqrt( x0 * x0 + y0 * y0 + z0 * z0 + w0 * w0 );\n\n\t\t\t\t\tx0 *= f;\n\t\t\t\t\ty0 *= f;\n\t\t\t\t\tz0 *= f;\n\t\t\t\t\tw0 *= f;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tdst[ dstOffset ] = x0;\n\t\t\tdst[ dstOffset + 1 ] = y0;\n\t\t\tdst[ dstOffset + 2 ] = z0;\n\t\t\tdst[ dstOffset + 3 ] = w0;\n\n\t\t}\n\n\t} );\n\n\tObject.defineProperties( Quaternion.prototype, {\n\n\t\tx: {\n\n\t\t\tget: function () {\n\n\t\t\t\treturn this._x;\n\n\t\t\t},\n\n\t\t\tset: function ( value ) {\n\n\t\t\t\tthis._x = value;\n\t\t\t\tthis.onChangeCallback();\n\n\t\t\t}\n\n\t\t},\n\n\t\ty: {\n\n\t\t\tget: function () {\n\n\t\t\t\treturn this._y;\n\n\t\t\t},\n\n\t\t\tset: function ( value ) {\n\n\t\t\t\tthis._y = value;\n\t\t\t\tthis.onChangeCallback();\n\n\t\t\t}\n\n\t\t},\n\n\t\tz: {\n\n\t\t\tget: function () {\n\n\t\t\t\treturn this._z;\n\n\t\t\t},\n\n\t\t\tset: function ( value ) {\n\n\t\t\t\tthis._z = value;\n\t\t\t\tthis.onChangeCallback();\n\n\t\t\t}\n\n\t\t},\n\n\t\tw: {\n\n\t\t\tget: function () {\n\n\t\t\t\treturn this._w;\n\n\t\t\t},\n\n\t\t\tset: function ( value ) {\n\n\t\t\t\tthis._w = value;\n\t\t\t\tthis.onChangeCallback();\n\n\t\t\t}\n\n\t\t}\n\n\t} );\n\n\tObject.assign( Quaternion.prototype, {\n\n\t\tset: function ( x, y, z, w ) {\n\n\t\t\tthis._x = x;\n\t\t\tthis._y = y;\n\t\t\tthis._z = z;\n\t\t\tthis._w = w;\n\n\t\t\tthis.onChangeCallback();\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tclone: function () {\n\n\t\t\treturn new this.constructor( this._x, this._y, this._z, this._w );\n\n\t\t},\n\n\t\tcopy: function ( quaternion ) {\n\n\t\t\tthis._x = quaternion.x;\n\t\t\tthis._y = quaternion.y;\n\t\t\tthis._z = quaternion.z;\n\t\t\tthis._w = quaternion.w;\n\n\t\t\tthis.onChangeCallback();\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetFromEuler: function ( euler, update ) {\n\n\t\t\tif ( ! ( euler && euler.isEuler ) ) {\n\n\t\t\t\tthrow new Error( 'THREE.Quaternion: .setFromEuler() now expects an Euler rotation rather than a Vector3 and order.' );\n\n\t\t\t}\n\n\t\t\tvar x = euler._x, y = euler._y, z = euler._z, order = euler.order;\n\n\t\t\t// http://www.mathworks.com/matlabcentral/fileexchange/\n\t\t\t// \t20696-function-to-convert-between-dcm-euler-angles-quaternions-and-euler-vectors/\n\t\t\t//\tcontent/SpinCalc.m\n\n\t\t\tvar cos = Math.cos;\n\t\t\tvar sin = Math.sin;\n\n\t\t\tvar c1 = cos( x / 2 );\n\t\t\tvar c2 = cos( y / 2 );\n\t\t\tvar c3 = cos( z / 2 );\n\n\t\t\tvar s1 = sin( x / 2 );\n\t\t\tvar s2 = sin( y / 2 );\n\t\t\tvar s3 = sin( z / 2 );\n\n\t\t\tif ( order === 'XYZ' ) {\n\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\n\t\t\t} else if ( order === 'YXZ' ) {\n\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\n\t\t\t} else if ( order === 'ZXY' ) {\n\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\n\t\t\t} else if ( order === 'ZYX' ) {\n\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\n\t\t\t} else if ( order === 'YZX' ) {\n\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\n\t\t\t} else if ( order === 'XZY' ) {\n\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\n\t\t\t}\n\n\t\t\tif ( update !== false ) this.onChangeCallback();\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetFromAxisAngle: function ( axis, angle ) {\n\n\t\t\t// http://www.euclideanspace.com/maths/geometry/rotations/conversions/angleToQuaternion/index.htm\n\n\t\t\t// assumes axis is normalized\n\n\t\t\tvar halfAngle = angle / 2, s = Math.sin( halfAngle );\n\n\t\t\tthis._x = axis.x * s;\n\t\t\tthis._y = axis.y * s;\n\t\t\tthis._z = axis.z * s;\n\t\t\tthis._w = Math.cos( halfAngle );\n\n\t\t\tthis.onChangeCallback();\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetFromRotationMatrix: function ( m ) {\n\n\t\t\t// http://www.euclideanspace.com/maths/geometry/rotations/conversions/matrixToQuaternion/index.htm\n\n\t\t\t// assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)\n\n\t\t\tvar te = m.elements,\n\n\t\t\t\tm11 = te[ 0 ], m12 = te[ 4 ], m13 = te[ 8 ],\n\t\t\t\tm21 = te[ 1 ], m22 = te[ 5 ], m23 = te[ 9 ],\n\t\t\t\tm31 = te[ 2 ], m32 = te[ 6 ], m33 = te[ 10 ],\n\n\t\t\t\ttrace = m11 + m22 + m33,\n\t\t\t\ts;\n\n\t\t\tif ( trace > 0 ) {\n\n\t\t\t\ts = 0.5 / Math.sqrt( trace + 1.0 );\n\n\t\t\t\tthis._w = 0.25 / s;\n\t\t\t\tthis._x = ( m32 - m23 ) * s;\n\t\t\t\tthis._y = ( m13 - m31 ) * s;\n\t\t\t\tthis._z = ( m21 - m12 ) * s;\n\n\t\t\t} else if ( m11 > m22 && m11 > m33 ) {\n\n\t\t\t\ts = 2.0 * Math.sqrt( 1.0 + m11 - m22 - m33 );\n\n\t\t\t\tthis._w = ( m32 - m23 ) / s;\n\t\t\t\tthis._x = 0.25 * s;\n\t\t\t\tthis._y = ( m12 + m21 ) / s;\n\t\t\t\tthis._z = ( m13 + m31 ) / s;\n\n\t\t\t} else if ( m22 > m33 ) {\n\n\t\t\t\ts = 2.0 * Math.sqrt( 1.0 + m22 - m11 - m33 );\n\n\t\t\t\tthis._w = ( m13 - m31 ) / s;\n\t\t\t\tthis._x = ( m12 + m21 ) / s;\n\t\t\t\tthis._y = 0.25 * s;\n\t\t\t\tthis._z = ( m23 + m32 ) / s;\n\n\t\t\t} else {\n\n\t\t\t\ts = 2.0 * Math.sqrt( 1.0 + m33 - m11 - m22 );\n\n\t\t\t\tthis._w = ( m21 - m12 ) / s;\n\t\t\t\tthis._x = ( m13 + m31 ) / s;\n\t\t\t\tthis._y = ( m23 + m32 ) / s;\n\t\t\t\tthis._z = 0.25 * s;\n\n\t\t\t}\n\n\t\t\tthis.onChangeCallback();\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetFromUnitVectors: function () {\n\n\t\t\t// assumes direction vectors vFrom and vTo are normalized\n\n\t\t\tvar v1 = new Vector3();\n\t\t\tvar r;\n\n\t\t\tvar EPS = 0.000001;\n\n\t\t\treturn function setFromUnitVectors( vFrom, vTo ) {\n\n\t\t\t\tif ( v1 === undefined ) v1 = new Vector3();\n\n\t\t\t\tr = vFrom.dot( vTo ) + 1;\n\n\t\t\t\tif ( r < EPS ) {\n\n\t\t\t\t\tr = 0;\n\n\t\t\t\t\tif ( Math.abs( vFrom.x ) > Math.abs( vFrom.z ) ) {\n\n\t\t\t\t\t\tv1.set( - vFrom.y, vFrom.x, 0 );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tv1.set( 0, - vFrom.z, vFrom.y );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tv1.crossVectors( vFrom, vTo );\n\n\t\t\t\t}\n\n\t\t\t\tthis._x = v1.x;\n\t\t\t\tthis._y = v1.y;\n\t\t\t\tthis._z = v1.z;\n\t\t\t\tthis._w = r;\n\n\t\t\t\treturn this.normalize();\n\n\t\t\t};\n\n\t\t}(),\n\n\t\tinverse: function () {\n\n\t\t\treturn this.conjugate().normalize();\n\n\t\t},\n\n\t\tconjugate: function () {\n\n\t\t\tthis._x *= - 1;\n\t\t\tthis._y *= - 1;\n\t\t\tthis._z *= - 1;\n\n\t\t\tthis.onChangeCallback();\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tdot: function ( v ) {\n\n\t\t\treturn this._x * v._x + this._y * v._y + this._z * v._z + this._w * v._w;\n\n\t\t},\n\n\t\tlengthSq: function () {\n\n\t\t\treturn this._x * this._x + this._y * this._y + this._z * this._z + this._w * this._w;\n\n\t\t},\n\n\t\tlength: function () {\n\n\t\t\treturn Math.sqrt( this._x * this._x + this._y * this._y + this._z * this._z + this._w * this._w );\n\n\t\t},\n\n\t\tnormalize: function () {\n\n\t\t\tvar l = this.length();\n\n\t\t\tif ( l === 0 ) {\n\n\t\t\t\tthis._x = 0;\n\t\t\t\tthis._y = 0;\n\t\t\t\tthis._z = 0;\n\t\t\t\tthis._w = 1;\n\n\t\t\t} else {\n\n\t\t\t\tl = 1 / l;\n\n\t\t\t\tthis._x = this._x * l;\n\t\t\t\tthis._y = this._y * l;\n\t\t\t\tthis._z = this._z * l;\n\t\t\t\tthis._w = this._w * l;\n\n\t\t\t}\n\n\t\t\tthis.onChangeCallback();\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tmultiply: function ( q, p ) {\n\n\t\t\tif ( p !== undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Quaternion: .multiply() now only accepts one argument. Use .multiplyQuaternions( a, b ) instead.' );\n\t\t\t\treturn this.multiplyQuaternions( q, p );\n\n\t\t\t}\n\n\t\t\treturn this.multiplyQuaternions( this, q );\n\n\t\t},\n\n\t\tpremultiply: function ( q ) {\n\n\t\t\treturn this.multiplyQuaternions( q, this );\n\n\t\t},\n\n\t\tmultiplyQuaternions: function ( a, b ) {\n\n\t\t\t// from http://www.euclideanspace.com/maths/algebra/realNormedAlgebra/quaternions/code/index.htm\n\n\t\t\tvar qax = a._x, qay = a._y, qaz = a._z, qaw = a._w;\n\t\t\tvar qbx = b._x, qby = b._y, qbz = b._z, qbw = b._w;\n\n\t\t\tthis._x = qax * qbw + qaw * qbx + qay * qbz - qaz * qby;\n\t\t\tthis._y = qay * qbw + qaw * qby + qaz * qbx - qax * qbz;\n\t\t\tthis._z = qaz * qbw + qaw * qbz + qax * qby - qay * qbx;\n\t\t\tthis._w = qaw * qbw - qax * qbx - qay * qby - qaz * qbz;\n\n\t\t\tthis.onChangeCallback();\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tslerp: function ( qb, t ) {\n\n\t\t\tif ( t === 0 ) return this;\n\t\t\tif ( t === 1 ) return this.copy( qb );\n\n\t\t\tvar x = this._x, y = this._y, z = this._z, w = this._w;\n\n\t\t\t// http://www.euclideanspace.com/maths/algebra/realNormedAlgebra/quaternions/slerp/\n\n\t\t\tvar cosHalfTheta = w * qb._w + x * qb._x + y * qb._y + z * qb._z;\n\n\t\t\tif ( cosHalfTheta < 0 ) {\n\n\t\t\t\tthis._w = - qb._w;\n\t\t\t\tthis._x = - qb._x;\n\t\t\t\tthis._y = - qb._y;\n\t\t\t\tthis._z = - qb._z;\n\n\t\t\t\tcosHalfTheta = - cosHalfTheta;\n\n\t\t\t} else {\n\n\t\t\t\tthis.copy( qb );\n\n\t\t\t}\n\n\t\t\tif ( cosHalfTheta >= 1.0 ) {\n\n\t\t\t\tthis._w = w;\n\t\t\t\tthis._x = x;\n\t\t\t\tthis._y = y;\n\t\t\t\tthis._z = z;\n\n\t\t\t\treturn this;\n\n\t\t\t}\n\n\t\t\tvar sinHalfTheta = Math.sqrt( 1.0 - cosHalfTheta * cosHalfTheta );\n\n\t\t\tif ( Math.abs( sinHalfTheta ) < 0.001 ) {\n\n\t\t\t\tthis._w = 0.5 * ( w + this._w );\n\t\t\t\tthis._x = 0.5 * ( x + this._x );\n\t\t\t\tthis._y = 0.5 * ( y + this._y );\n\t\t\t\tthis._z = 0.5 * ( z + this._z );\n\n\t\t\t\treturn this;\n\n\t\t\t}\n\n\t\t\tvar halfTheta = Math.atan2( sinHalfTheta, cosHalfTheta );\n\t\t\tvar ratioA = Math.sin( ( 1 - t ) * halfTheta ) / sinHalfTheta,\n\t\t\t\tratioB = Math.sin( t * halfTheta ) / sinHalfTheta;\n\n\t\t\tthis._w = ( w * ratioA + this._w * ratioB );\n\t\t\tthis._x = ( x * ratioA + this._x * ratioB );\n\t\t\tthis._y = ( y * ratioA + this._y * ratioB );\n\t\t\tthis._z = ( z * ratioA + this._z * ratioB );\n\n\t\t\tthis.onChangeCallback();\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tequals: function ( quaternion ) {\n\n\t\t\treturn ( quaternion._x === this._x ) && ( quaternion._y === this._y ) && ( quaternion._z === this._z ) && ( quaternion._w === this._w );\n\n\t\t},\n\n\t\tfromArray: function ( array, offset ) {\n\n\t\t\tif ( offset === undefined ) offset = 0;\n\n\t\t\tthis._x = array[ offset ];\n\t\t\tthis._y = array[ offset + 1 ];\n\t\t\tthis._z = array[ offset + 2 ];\n\t\t\tthis._w = array[ offset + 3 ];\n\n\t\t\tthis.onChangeCallback();\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\ttoArray: function ( array, offset ) {\n\n\t\t\tif ( array === undefined ) array = [];\n\t\t\tif ( offset === undefined ) offset = 0;\n\n\t\t\tarray[ offset ] = this._x;\n\t\t\tarray[ offset + 1 ] = this._y;\n\t\t\tarray[ offset + 2 ] = this._z;\n\t\t\tarray[ offset + 3 ] = this._w;\n\n\t\t\treturn array;\n\n\t\t},\n\n\t\tonChange: function ( callback ) {\n\n\t\t\tthis.onChangeCallback = callback;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tonChangeCallback: function () {}\n\n\t} );\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t * @author kile / http://kile.stravaganza.org/\n\t * @author philogb / http://blog.thejit.org/\n\t * @author mikael emtinger / http://gomo.se/\n\t * @author egraether / http://egraether.com/\n\t * @author WestLangley / http://github.com/WestLangley\n\t */\n\n\tfunction Vector3( x, y, z ) {\n\n\t\tthis.x = x || 0;\n\t\tthis.y = y || 0;\n\t\tthis.z = z || 0;\n\n\t}\n\n\tObject.assign( Vector3.prototype, {\n\n\t\tisVector3: true,\n\n\t\tset: function ( x, y, z ) {\n\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\tsetScalar: function ( scalar ) {\n\n\t\t\tthis.x = scalar;\n\t\t\tthis.y = scalar;\n\t\t\tthis.z = scalar;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetX: function ( x ) {\n\n\t\t\tthis.x = x;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetY: function ( y ) {\n\n\t\t\tthis.y = y;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetZ: function ( z ) {\n\n\t\t\tthis.z = z;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetComponent: function ( index, value ) {\n\n\t\t\tswitch ( index ) {\n\n\t\t\t\tcase 0: this.x = value; break;\n\t\t\t\tcase 1: this.y = value; break;\n\t\t\t\tcase 2: this.z = value; break;\n\t\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tgetComponent: function ( index ) {\n\n\t\t\tswitch ( index ) {\n\n\t\t\t\tcase 0: return this.x;\n\t\t\t\tcase 1: return this.y;\n\t\t\t\tcase 2: return this.z;\n\t\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t\t}\n\n\t\t},\n\n\t\tclone: function () {\n\n\t\t\treturn new this.constructor( this.x, this.y, this.z );\n\n\t\t},\n\n\t\tcopy: function ( v ) {\n\n\t\t\tthis.x = v.x;\n\t\t\tthis.y = v.y;\n\t\t\tthis.z = v.z;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tadd: function ( v, w ) {\n\n\t\t\tif ( w !== undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Vector3: .add() now only accepts one argument. Use .addVectors( a, b ) instead.' );\n\t\t\t\treturn this.addVectors( v, w );\n\n\t\t\t}\n\n\t\t\tthis.x += v.x;\n\t\t\tthis.y += v.y;\n\t\t\tthis.z += v.z;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\taddScalar: function ( s ) {\n\n\t\t\tthis.x += s;\n\t\t\tthis.y += s;\n\t\t\tthis.z += s;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\taddVectors: function ( a, b ) {\n\n\t\t\tthis.x = a.x + b.x;\n\t\t\tthis.y = a.y + b.y;\n\t\t\tthis.z = a.z + b.z;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\taddScaledVector: function ( v, s ) {\n\n\t\t\tthis.x += v.x * s;\n\t\t\tthis.y += v.y * s;\n\t\t\tthis.z += v.z * s;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsub: function ( v, w ) {\n\n\t\t\tif ( w !== undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Vector3: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.' );\n\t\t\t\treturn this.subVectors( v, w );\n\n\t\t\t}\n\n\t\t\tthis.x -= v.x;\n\t\t\tthis.y -= v.y;\n\t\t\tthis.z -= v.z;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsubScalar: function ( s ) {\n\n\t\t\tthis.x -= s;\n\t\t\tthis.y -= s;\n\t\t\tthis.z -= s;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsubVectors: function ( a, b ) {\n\n\t\t\tthis.x = a.x - b.x;\n\t\t\tthis.y = a.y - b.y;\n\t\t\tthis.z = a.z - b.z;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tmultiply: function ( v, w ) {\n\n\t\t\tif ( w !== undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Vector3: .multiply() now only accepts one argument. Use .multiplyVectors( a, b ) instead.' );\n\t\t\t\treturn this.multiplyVectors( v, w );\n\n\t\t\t}\n\n\t\t\tthis.x *= v.x;\n\t\t\tthis.y *= v.y;\n\t\t\tthis.z *= v.z;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tmultiplyScalar: function ( scalar ) {\n\n\t\t\tthis.x *= scalar;\n\t\t\tthis.y *= scalar;\n\t\t\tthis.z *= scalar;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tmultiplyVectors: function ( a, b ) {\n\n\t\t\tthis.x = a.x * b.x;\n\t\t\tthis.y = a.y * b.y;\n\t\t\tthis.z = a.z * b.z;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tapplyEuler: function () {\n\n\t\t\tvar quaternion = new Quaternion();\n\n\t\t\treturn function applyEuler( euler ) {\n\n\t\t\t\tif ( ! ( euler && euler.isEuler ) ) {\n\n\t\t\t\t\tconsole.error( 'THREE.Vector3: .applyEuler() now expects an Euler rotation rather than a Vector3 and order.' );\n\n\t\t\t\t}\n\n\t\t\t\treturn this.applyQuaternion( quaternion.setFromEuler( euler ) );\n\n\t\t\t};\n\n\t\t}(),\n\n\t\tapplyAxisAngle: function () {\n\n\t\t\tvar quaternion = new Quaternion();\n\n\t\t\treturn function applyAxisAngle( axis, angle ) {\n\n\t\t\t\treturn this.applyQuaternion( quaternion.setFromAxisAngle( axis, angle ) );\n\n\t\t\t};\n\n\t\t}(),\n\n\t\tapplyMatrix3: function ( m ) {\n\n\t\t\tvar x = this.x, y = this.y, z = this.z;\n\t\t\tvar e = m.elements;\n\n\t\t\tthis.x = e[ 0 ] * x + e[ 3 ] * y + e[ 6 ] * z;\n\t\t\tthis.y = e[ 1 ] * x + e[ 4 ] * y + e[ 7 ] * z;\n\t\t\tthis.z = e[ 2 ] * x + e[ 5 ] * y + e[ 8 ] * z;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tapplyMatrix4: function ( m ) {\n\n\t\t\tvar x = this.x, y = this.y, z = this.z;\n\t\t\tvar e = m.elements;\n\n\t\t\tvar w = 1 / ( e[ 3 ] * x + e[ 7 ] * y + e[ 11 ] * z + e[ 15 ] );\n\n\t\t\tthis.x = ( e[ 0 ] * x + e[ 4 ] * y + e[ 8 ] * z + e[ 12 ] ) * w;\n\t\t\tthis.y = ( e[ 1 ] * x + e[ 5 ] * y + e[ 9 ] * z + e[ 13 ] ) * w;\n\t\t\tthis.z = ( e[ 2 ] * x + e[ 6 ] * y + e[ 10 ] * z + e[ 14 ] ) * w;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tapplyQuaternion: function ( q ) {\n\n\t\t\tvar x = this.x, y = this.y, z = this.z;\n\t\t\tvar qx = q.x, qy = q.y, qz = q.z, qw = q.w;\n\n\t\t\t// calculate quat * vector\n\n\t\t\tvar ix = qw * x + qy * z - qz * y;\n\t\t\tvar iy = qw * y + qz * x - qx * z;\n\t\t\tvar iz = qw * z + qx * y - qy * x;\n\t\t\tvar iw = - qx * x - qy * y - qz * z;\n\n\t\t\t// calculate result * inverse quat\n\n\t\t\tthis.x = ix * qw + iw * - qx + iy * - qz - iz * - qy;\n\t\t\tthis.y = iy * qw + iw * - qy + iz * - qx - ix * - qz;\n\t\t\tthis.z = iz * qw + iw * - qz + ix * - qy - iy * - qx;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tproject: function () {\n\n\t\t\tvar matrix = new Matrix4();\n\n\t\t\treturn function project( camera ) {\n\n\t\t\t\tmatrix.multiplyMatrices( camera.projectionMatrix, matrix.getInverse( camera.matrixWorld ) );\n\t\t\t\treturn this.applyMatrix4( matrix );\n\n\t\t\t};\n\n\t\t}(),\n\n\t\tunproject: function () {\n\n\t\t\tvar matrix = new Matrix4();\n\n\t\t\treturn function unproject( camera ) {\n\n\t\t\t\tmatrix.multiplyMatrices( camera.matrixWorld, matrix.getInverse( camera.projectionMatrix ) );\n\t\t\t\treturn this.applyMatrix4( matrix );\n\n\t\t\t};\n\n\t\t}(),\n\n\t\ttransformDirection: function ( m ) {\n\n\t\t\t// input: THREE.Matrix4 affine matrix\n\t\t\t// vector interpreted as a direction\n\n\t\t\tvar x = this.x, y = this.y, z = this.z;\n\t\t\tvar e = m.elements;\n\n\t\t\tthis.x = e[ 0 ] * x + e[ 4 ] * y + e[ 8 ] * z;\n\t\t\tthis.y = e[ 1 ] * x + e[ 5 ] * y + e[ 9 ] * z;\n\t\t\tthis.z = e[ 2 ] * x + e[ 6 ] * y + e[ 10 ] * z;\n\n\t\t\treturn this.normalize();\n\n\t\t},\n\n\t\tdivide: function ( v ) {\n\n\t\t\tthis.x /= v.x;\n\t\t\tthis.y /= v.y;\n\t\t\tthis.z /= v.z;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tdivideScalar: function ( scalar ) {\n\n\t\t\treturn this.multiplyScalar( 1 / scalar );\n\n\t\t},\n\n\t\tmin: function ( v ) {\n\n\t\t\tthis.x = Math.min( this.x, v.x );\n\t\t\tthis.y = Math.min( this.y, v.y );\n\t\t\tthis.z = Math.min( this.z, v.z );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tmax: function ( v ) {\n\n\t\t\tthis.x = Math.max( this.x, v.x );\n\t\t\tthis.y = Math.max( this.y, v.y );\n\t\t\tthis.z = Math.max( this.z, v.z );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tclamp: function ( min, max ) {\n\n\t\t\t// assumes min < max, componentwise\n\n\t\t\tthis.x = Math.max( min.x, Math.min( max.x, this.x ) );\n\t\t\tthis.y = Math.max( min.y, Math.min( max.y, this.y ) );\n\t\t\tthis.z = Math.max( min.z, Math.min( max.z, this.z ) );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tclampScalar: function () {\n\n\t\t\tvar min = new Vector3();\n\t\t\tvar max = new Vector3();\n\n\t\t\treturn function clampScalar( minVal, maxVal ) {\n\n\t\t\t\tmin.set( minVal, minVal, minVal );\n\t\t\t\tmax.set( maxVal, maxVal, maxVal );\n\n\t\t\t\treturn this.clamp( min, max );\n\n\t\t\t};\n\n\t\t}(),\n\n\t\tclampLength: function ( min, max ) {\n\n\t\t\tvar length = this.length();\n\n\t\t\treturn this.divideScalar( length || 1 ).multiplyScalar( Math.max( min, Math.min( max, length ) ) );\n\n\t\t},\n\n\t\tfloor: function () {\n\n\t\t\tthis.x = Math.floor( this.x );\n\t\t\tthis.y = Math.floor( this.y );\n\t\t\tthis.z = Math.floor( this.z );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tceil: function () {\n\n\t\t\tthis.x = Math.ceil( this.x );\n\t\t\tthis.y = Math.ceil( this.y );\n\t\t\tthis.z = Math.ceil( this.z );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tround: function () {\n\n\t\t\tthis.x = Math.round( this.x );\n\t\t\tthis.y = Math.round( this.y );\n\t\t\tthis.z = Math.round( this.z );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\troundToZero: function () {\n\n\t\t\tthis.x = ( this.x < 0 ) ? Math.ceil( this.x ) : Math.floor( this.x );\n\t\t\tthis.y = ( this.y < 0 ) ? Math.ceil( this.y ) : Math.floor( this.y );\n\t\t\tthis.z = ( this.z < 0 ) ? Math.ceil( this.z ) : Math.floor( this.z );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tnegate: function () {\n\n\t\t\tthis.x = - this.x;\n\t\t\tthis.y = - this.y;\n\t\t\tthis.z = - this.z;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tdot: function ( v ) {\n\n\t\t\treturn this.x * v.x + this.y * v.y + this.z * v.z;\n\n\t\t},\n\n\t\t// TODO lengthSquared?\n\n\t\tlengthSq: function () {\n\n\t\t\treturn this.x * this.x + this.y * this.y + this.z * this.z;\n\n\t\t},\n\n\t\tlength: function () {\n\n\t\t\treturn Math.sqrt( this.x * this.x + this.y * this.y + this.z * this.z );\n\n\t\t},\n\n\t\tmanhattanLength: function () {\n\n\t\t\treturn Math.abs( this.x ) + Math.abs( this.y ) + Math.abs( this.z );\n\n\t\t},\n\n\t\tnormalize: function () {\n\n\t\t\treturn this.divideScalar( this.length() || 1 );\n\n\t\t},\n\n\t\tsetLength: function ( length ) {\n\n\t\t\treturn this.normalize().multiplyScalar( length );\n\n\t\t},\n\n\t\tlerp: function ( v, alpha ) {\n\n\t\t\tthis.x += ( v.x - this.x ) * alpha;\n\t\t\tthis.y += ( v.y - this.y ) * alpha;\n\t\t\tthis.z += ( v.z - this.z ) * alpha;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tlerpVectors: function ( v1, v2, alpha ) {\n\n\t\t\treturn this.subVectors( v2, v1 ).multiplyScalar( alpha ).add( v1 );\n\n\t\t},\n\n\t\tcross: function ( v, w ) {\n\n\t\t\tif ( w !== undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Vector3: .cross() now only accepts one argument. Use .crossVectors( a, b ) instead.' );\n\t\t\t\treturn this.crossVectors( v, w );\n\n\t\t\t}\n\n\t\t\treturn this.crossVectors( this, v );\n\n\t\t},\n\n\t\tcrossVectors: function ( a, b ) {\n\n\t\t\tvar ax = a.x, ay = a.y, az = a.z;\n\t\t\tvar bx = b.x, by = b.y, bz = b.z;\n\n\t\t\tthis.x = ay * bz - az * by;\n\t\t\tthis.y = az * bx - ax * bz;\n\t\t\tthis.z = ax * by - ay * bx;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tprojectOnVector: function ( vector ) {\n\n\t\t\tvar scalar = vector.dot( this ) / vector.lengthSq();\n\n\t\t\treturn this.copy( vector ).multiplyScalar( scalar );\n\n\t\t},\n\n\t\tprojectOnPlane: function () {\n\n\t\t\tvar v1 = new Vector3();\n\n\t\t\treturn function projectOnPlane( planeNormal ) {\n\n\t\t\t\tv1.copy( this ).projectOnVector( planeNormal );\n\n\t\t\t\treturn this.sub( v1 );\n\n\t\t\t};\n\n\t\t}(),\n\n\t\treflect: function () {\n\n\t\t\t// reflect incident vector off plane orthogonal to normal\n\t\t\t// normal is assumed to have unit length\n\n\t\t\tvar v1 = new Vector3();\n\n\t\t\treturn function reflect( normal ) {\n\n\t\t\t\treturn this.sub( v1.copy( normal ).multiplyScalar( 2 * this.dot( normal ) ) );\n\n\t\t\t};\n\n\t\t}(),\n\n\t\tangleTo: function ( v ) {\n\n\t\t\tvar theta = this.dot( v ) / ( Math.sqrt( this.lengthSq() * v.lengthSq() ) );\n\n\t\t\t// clamp, to handle numerical problems\n\n\t\t\treturn Math.acos( _Math.clamp( theta, - 1, 1 ) );\n\n\t\t},\n\n\t\tdistanceTo: function ( v ) {\n\n\t\t\treturn Math.sqrt( this.distanceToSquared( v ) );\n\n\t\t},\n\n\t\tdistanceToSquared: function ( v ) {\n\n\t\t\tvar dx = this.x - v.x, dy = this.y - v.y, dz = this.z - v.z;\n\n\t\t\treturn dx * dx + dy * dy + dz * dz;\n\n\t\t},\n\n\t\tmanhattanDistanceTo: function ( v ) {\n\n\t\t\treturn Math.abs( this.x - v.x ) + Math.abs( this.y - v.y ) + Math.abs( this.z - v.z );\n\n\t\t},\n\n\t\tsetFromSpherical: function ( s ) {\n\n\t\t\tvar sinPhiRadius = Math.sin( s.phi ) * s.radius;\n\n\t\t\tthis.x = sinPhiRadius * Math.sin( s.theta );\n\t\t\tthis.y = Math.cos( s.phi ) * s.radius;\n\t\t\tthis.z = sinPhiRadius * Math.cos( s.theta );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetFromCylindrical: function ( c ) {\n\n\t\t\tthis.x = c.radius * Math.sin( c.theta );\n\t\t\tthis.y = c.y;\n\t\t\tthis.z = c.radius * Math.cos( c.theta );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetFromMatrixPosition: function ( m ) {\n\n\t\t\tvar e = m.elements;\n\n\t\t\tthis.x = e[ 12 ];\n\t\t\tthis.y = e[ 13 ];\n\t\t\tthis.z = e[ 14 ];\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetFromMatrixScale: function ( m ) {\n\n\t\t\tvar sx = this.setFromMatrixColumn( m, 0 ).length();\n\t\t\tvar sy = this.setFromMatrixColumn( m, 1 ).length();\n\t\t\tvar sz = this.setFromMatrixColumn( m, 2 ).length();\n\n\t\t\tthis.x = sx;\n\t\t\tthis.y = sy;\n\t\t\tthis.z = sz;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetFromMatrixColumn: function ( m, index ) {\n\n\t\t\treturn this.fromArray( m.elements, index * 4 );\n\n\t\t},\n\n\t\tequals: function ( v ) {\n\n\t\t\treturn ( ( v.x === this.x ) && ( v.y === this.y ) && ( v.z === this.z ) );\n\n\t\t},\n\n\t\tfromArray: function ( array, offset ) {\n\n\t\t\tif ( offset === undefined ) offset = 0;\n\n\t\t\tthis.x = array[ offset ];\n\t\t\tthis.y = array[ offset + 1 ];\n\t\t\tthis.z = array[ offset + 2 ];\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\ttoArray: function ( array, offset ) {\n\n\t\t\tif ( array === undefined ) array = [];\n\t\t\tif ( offset === undefined ) offset = 0;\n\n\t\t\tarray[ offset ] = this.x;\n\t\t\tarray[ offset + 1 ] = this.y;\n\t\t\tarray[ offset + 2 ] = this.z;\n\n\t\t\treturn array;\n\n\t\t},\n\n\t\tfromBufferAttribute: function ( attribute, index, offset ) {\n\n\t\t\tif ( offset !== undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Vector3: offset has been removed from .fromBufferAttribute().' );\n\n\t\t\t}\n\n\t\t\tthis.x = attribute.getX( index );\n\t\t\tthis.y = attribute.getY( index );\n\t\t\tthis.z = attribute.getZ( index );\n\n\t\t\treturn this;\n\n\t\t}\n\n\t} );\n\n\t/**\n\t * @author alteredq / http://alteredqualia.com/\n\t * @author WestLangley / http://github.com/WestLangley\n\t * @author bhouston / http://clara.io\n\t * @author tschw\n\t */\n\n\tfunction Matrix3() {\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\tObject.assign( Matrix3.prototype, {\n\n\t\tisMatrix3: true,\n\n\t\tset: function ( n11, n12, n13, n21, n22, n23, n31, n32, n33 ) {\n\n\t\t\tvar te = this.elements;\n\n\t\t\tte[ 0 ] = n11; te[ 1 ] = n21; te[ 2 ] = n31;\n\t\t\tte[ 3 ] = n12; te[ 4 ] = n22; te[ 5 ] = n32;\n\t\t\tte[ 6 ] = n13; te[ 7 ] = n23; te[ 8 ] = n33;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tidentity: function () {\n\n\t\t\tthis.set(\n\n\t\t\t\t1, 0, 0,\n\t\t\t\t0, 1, 0,\n\t\t\t\t0, 0, 1\n\n\t\t\t);\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tclone: function () {\n\n\t\t\treturn new this.constructor().fromArray( this.elements );\n\n\t\t},\n\n\t\tcopy: function ( m ) {\n\n\t\t\tvar te = this.elements;\n\t\t\tvar me = m.elements;\n\n\t\t\tte[ 0 ] = me[ 0 ]; te[ 1 ] = me[ 1 ]; te[ 2 ] = me[ 2 ];\n\t\t\tte[ 3 ] = me[ 3 ]; te[ 4 ] = me[ 4 ]; te[ 5 ] = me[ 5 ];\n\t\t\tte[ 6 ] = me[ 6 ]; te[ 7 ] = me[ 7 ]; te[ 8 ] = me[ 8 ];\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetFromMatrix4: function ( m ) {\n\n\t\t\tvar me = m.elements;\n\n\t\t\tthis.set(\n\n\t\t\t\tme[ 0 ], me[ 4 ], me[ 8 ],\n\t\t\t\tme[ 1 ], me[ 5 ], me[ 9 ],\n\t\t\t\tme[ 2 ], me[ 6 ], me[ 10 ]\n\n\t\t\t);\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tapplyToBufferAttribute: function () {\n\n\t\t\tvar v1 = new Vector3();\n\n\t\t\treturn function applyToBufferAttribute( attribute ) {\n\n\t\t\t\tfor ( var i = 0, l = attribute.count; i < l; i ++ ) {\n\n\t\t\t\t\tv1.x = attribute.getX( i );\n\t\t\t\t\tv1.y = attribute.getY( i );\n\t\t\t\t\tv1.z = attribute.getZ( i );\n\n\t\t\t\t\tv1.applyMatrix3( this );\n\n\t\t\t\t\tattribute.setXYZ( i, v1.x, v1.y, v1.z );\n\n\t\t\t\t}\n\n\t\t\t\treturn attribute;\n\n\t\t\t};\n\n\t\t}(),\n\n\t\tmultiply: function ( m ) {\n\n\t\t\treturn this.multiplyMatrices( this, m );\n\n\t\t},\n\n\t\tpremultiply: function ( m ) {\n\n\t\t\treturn this.multiplyMatrices( m, this );\n\n\t\t},\n\n\t\tmultiplyMatrices: function ( a, b ) {\n\n\t\t\tvar ae = a.elements;\n\t\t\tvar be = b.elements;\n\t\t\tvar te = this.elements;\n\n\t\t\tvar a11 = ae[ 0 ], a12 = ae[ 3 ], a13 = ae[ 6 ];\n\t\t\tvar a21 = ae[ 1 ], a22 = ae[ 4 ], a23 = ae[ 7 ];\n\t\t\tvar a31 = ae[ 2 ], a32 = ae[ 5 ], a33 = ae[ 8 ];\n\n\t\t\tvar b11 = be[ 0 ], b12 = be[ 3 ], b13 = be[ 6 ];\n\t\t\tvar b21 = be[ 1 ], b22 = be[ 4 ], b23 = be[ 7 ];\n\t\t\tvar b31 = be[ 2 ], b32 = be[ 5 ], b33 = be[ 8 ];\n\n\t\t\tte[ 0 ] = a11 * b11 + a12 * b21 + a13 * b31;\n\t\t\tte[ 3 ] = a11 * b12 + a12 * b22 + a13 * b32;\n\t\t\tte[ 6 ] = a11 * b13 + a12 * b23 + a13 * b33;\n\n\t\t\tte[ 1 ] = a21 * b11 + a22 * b21 + a23 * b31;\n\t\t\tte[ 4 ] = a21 * b12 + a22 * b22 + a23 * b32;\n\t\t\tte[ 7 ] = a21 * b13 + a22 * b23 + a23 * b33;\n\n\t\t\tte[ 2 ] = a31 * b11 + a32 * b21 + a33 * b31;\n\t\t\tte[ 5 ] = a31 * b12 + a32 * b22 + a33 * b32;\n\t\t\tte[ 8 ] = a31 * b13 + a32 * b23 + a33 * b33;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tmultiplyScalar: function ( s ) {\n\n\t\t\tvar te = this.elements;\n\n\t\t\tte[ 0 ] *= s; te[ 3 ] *= s; te[ 6 ] *= s;\n\t\t\tte[ 1 ] *= s; te[ 4 ] *= s; te[ 7 ] *= s;\n\t\t\tte[ 2 ] *= s; te[ 5 ] *= s; te[ 8 ] *= s;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tdeterminant: function () {\n\n\t\t\tvar te = this.elements;\n\n\t\t\tvar a = te[ 0 ], b = te[ 1 ], c = te[ 2 ],\n\t\t\t\td = te[ 3 ], e = te[ 4 ], f = te[ 5 ],\n\t\t\t\tg = te[ 6 ], h = te[ 7 ], i = te[ 8 ];\n\n\t\t\treturn a * e * i - a * f * h - b * d * i + b * f * g + c * d * h - c * e * g;\n\n\t\t},\n\n\t\tgetInverse: function ( matrix, throwOnDegenerate ) {\n\n\t\t\tif ( matrix && matrix.isMatrix4 ) {\n\n\t\t\t\tconsole.error( \"THREE.Matrix3: .getInverse() no longer takes a Matrix4 argument.\" );\n\n\t\t\t}\n\n\t\t\tvar me = matrix.elements,\n\t\t\t\tte = this.elements,\n\n\t\t\t\tn11 = me[ 0 ], n21 = me[ 1 ], n31 = me[ 2 ],\n\t\t\t\tn12 = me[ 3 ], n22 = me[ 4 ], n32 = me[ 5 ],\n\t\t\t\tn13 = me[ 6 ], n23 = me[ 7 ], n33 = me[ 8 ],\n\n\t\t\t\tt11 = n33 * n22 - n32 * n23,\n\t\t\t\tt12 = n32 * n13 - n33 * n12,\n\t\t\t\tt13 = n23 * n12 - n22 * n13,\n\n\t\t\t\tdet = n11 * t11 + n21 * t12 + n31 * t13;\n\n\t\t\tif ( det === 0 ) {\n\n\t\t\t\tvar msg = \"THREE.Matrix3: .getInverse() can't invert matrix, determinant is 0\";\n\n\t\t\t\tif ( throwOnDegenerate === true ) {\n\n\t\t\t\t\tthrow new Error( msg );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.warn( msg );\n\n\t\t\t\t}\n\n\t\t\t\treturn this.identity();\n\n\t\t\t}\n\n\t\t\tvar detInv = 1 / det;\n\n\t\t\tte[ 0 ] = t11 * detInv;\n\t\t\tte[ 1 ] = ( n31 * n23 - n33 * n21 ) * detInv;\n\t\t\tte[ 2 ] = ( n32 * n21 - n31 * n22 ) * detInv;\n\n\t\t\tte[ 3 ] = t12 * detInv;\n\t\t\tte[ 4 ] = ( n33 * n11 - n31 * n13 ) * detInv;\n\t\t\tte[ 5 ] = ( n31 * n12 - n32 * n11 ) * detInv;\n\n\t\t\tte[ 6 ] = t13 * detInv;\n\t\t\tte[ 7 ] = ( n21 * n13 - n23 * n11 ) * detInv;\n\t\t\tte[ 8 ] = ( n22 * n11 - n21 * n12 ) * detInv;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\ttranspose: function () {\n\n\t\t\tvar tmp, m = this.elements;\n\n\t\t\ttmp = m[ 1 ]; m[ 1 ] = m[ 3 ]; m[ 3 ] = tmp;\n\t\t\ttmp = m[ 2 ]; m[ 2 ] = m[ 6 ]; m[ 6 ] = tmp;\n\t\t\ttmp = m[ 5 ]; m[ 5 ] = m[ 7 ]; m[ 7 ] = tmp;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tgetNormalMatrix: function ( matrix4 ) {\n\n\t\t\treturn this.setFromMatrix4( matrix4 ).getInverse( this ).transpose();\n\n\t\t},\n\n\t\ttransposeIntoArray: function ( r ) {\n\n\t\t\tvar m = this.elements;\n\n\t\t\tr[ 0 ] = m[ 0 ];\n\t\t\tr[ 1 ] = m[ 3 ];\n\t\t\tr[ 2 ] = m[ 6 ];\n\t\t\tr[ 3 ] = m[ 1 ];\n\t\t\tr[ 4 ] = m[ 4 ];\n\t\t\tr[ 5 ] = m[ 7 ];\n\t\t\tr[ 6 ] = m[ 2 ];\n\t\t\tr[ 7 ] = m[ 5 ];\n\t\t\tr[ 8 ] = m[ 8 ];\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetUvTransform: function ( tx, ty, sx, sy, rotation, cx, cy ) {\n\n\t\t\tvar c = Math.cos( rotation );\n\t\t\tvar s = Math.sin( rotation );\n\n\t\t\tthis.set(\n\t\t\t\tsx * c, sx * s, - sx * ( c * cx + s * cy ) + cx + tx,\n\t\t\t\t- sy * s, sy * c, - sy * ( - s * cx + c * cy ) + cy + ty,\n\t\t\t\t0, 0, 1\n\t\t\t);\n\n\t\t},\n\n\t\tscale: function ( sx, sy ) {\n\n\t\t\tvar te = this.elements;\n\n\t\t\tte[ 0 ] *= sx; te[ 3 ] *= sx; te[ 6 ] *= sx;\n\t\t\tte[ 1 ] *= sy; te[ 4 ] *= sy; te[ 7 ] *= sy;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\trotate: function ( theta ) {\n\n\t\t\tvar c = Math.cos( theta );\n\t\t\tvar s = Math.sin( theta );\n\n\t\t\tvar te = this.elements;\n\n\t\t\tvar a11 = te[ 0 ], a12 = te[ 3 ], a13 = te[ 6 ];\n\t\t\tvar a21 = te[ 1 ], a22 = te[ 4 ], a23 = te[ 7 ];\n\n\t\t\tte[ 0 ] = c * a11 + s * a21;\n\t\t\tte[ 3 ] = c * a12 + s * a22;\n\t\t\tte[ 6 ] = c * a13 + s * a23;\n\n\t\t\tte[ 1 ] = - s * a11 + c * a21;\n\t\t\tte[ 4 ] = - s * a12 + c * a22;\n\t\t\tte[ 7 ] = - s * a13 + c * a23;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\ttranslate: function ( tx, ty ) {\n\n\t\t\tvar te = this.elements;\n\n\t\t\tte[ 0 ] += tx * te[ 2 ]; te[ 3 ] += tx * te[ 5 ]; te[ 6 ] += tx * te[ 8 ];\n\t\t\tte[ 1 ] += ty * te[ 2 ]; te[ 4 ] += ty * te[ 5 ]; te[ 7 ] += ty * te[ 8 ];\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tequals: function ( matrix ) {\n\n\t\t\tvar te = this.elements;\n\t\t\tvar me = matrix.elements;\n\n\t\t\tfor ( var i = 0; i < 9; i ++ ) {\n\n\t\t\t\tif ( te[ i ] !== me[ i ] ) return false;\n\n\t\t\t}\n\n\t\t\treturn true;\n\n\t\t},\n\n\t\tfromArray: function ( array, offset ) {\n\n\t\t\tif ( offset === undefined ) offset = 0;\n\n\t\t\tfor ( var i = 0; i < 9; i ++ ) {\n\n\t\t\t\tthis.elements[ i ] = array[ i + offset ];\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\ttoArray: function ( array, offset ) {\n\n\t\t\tif ( array === undefined ) array = [];\n\t\t\tif ( offset === undefined ) offset = 0;\n\n\t\t\tvar te = this.elements;\n\n\t\t\tarray[ offset ] = te[ 0 ];\n\t\t\tarray[ offset + 1 ] = te[ 1 ];\n\t\t\tarray[ offset + 2 ] = te[ 2 ];\n\n\t\t\tarray[ offset + 3 ] = te[ 3 ];\n\t\t\tarray[ offset + 4 ] = te[ 4 ];\n\t\t\tarray[ offset + 5 ] = te[ 5 ];\n\n\t\t\tarray[ offset + 6 ] = te[ 6 ];\n\t\t\tarray[ offset + 7 ] = te[ 7 ];\n\t\t\tarray[ offset + 8 ] = te[ 8 ];\n\n\t\t\treturn array;\n\n\t\t}\n\n\t} );\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t * @author alteredq / http://alteredqualia.com/\n\t * @author szimek / https://github.com/szimek/\n\t */\n\n\tvar textureId = 0;\n\n\tfunction Texture( image, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding ) {\n\n\t\tObject.defineProperty( this, 'id', { value: textureId ++ } );\n\n\t\tthis.uuid = _Math.generateUUID();\n\n\t\tthis.name = '';\n\n\t\tthis.image = image !== undefined ? image : Texture.DEFAULT_IMAGE;\n\t\tthis.mipmaps = [];\n\n\t\tthis.mapping = mapping !== undefined ? mapping : Texture.DEFAULT_MAPPING;\n\n\t\tthis.wrapS = wrapS !== undefined ? wrapS : ClampToEdgeWrapping;\n\t\tthis.wrapT = wrapT !== undefined ? wrapT : ClampToEdgeWrapping;\n\n\t\tthis.magFilter = magFilter !== undefined ? magFilter : LinearFilter;\n\t\tthis.minFilter = minFilter !== undefined ? minFilter : LinearMipMapLinearFilter;\n\n\t\tthis.anisotropy = anisotropy !== undefined ? anisotropy : 1;\n\n\t\tthis.format = format !== undefined ? format : RGBAFormat;\n\t\tthis.type = type !== undefined ? type : UnsignedByteType;\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 !== undefined ? encoding : LinearEncoding;\n\n\t\tthis.version = 0;\n\t\tthis.onUpdate = null;\n\n\t}\n\n\tTexture.DEFAULT_IMAGE = undefined;\n\tTexture.DEFAULT_MAPPING = UVMapping;\n\n\tObject.defineProperty( Texture.prototype, \"needsUpdate\", {\n\n\t\tset: function ( value ) {\n\n\t\t\tif ( value === true ) this.version ++;\n\n\t\t}\n\n\t} );\n\n\tObject.assign( Texture.prototype, EventDispatcher.prototype, {\n\n\t\tconstructor: Texture,\n\n\t\tisTexture: true,\n\n\t\tclone: function () {\n\n\t\t\treturn new this.constructor().copy( this );\n\n\t\t},\n\n\t\tcopy: function ( source ) {\n\n\t\t\tthis.name = source.name;\n\n\t\t\tthis.image = source.image;\n\t\t\tthis.mipmaps = source.mipmaps.slice( 0 );\n\n\t\t\tthis.mapping = source.mapping;\n\n\t\t\tthis.wrapS = source.wrapS;\n\t\t\tthis.wrapT = source.wrapT;\n\n\t\t\tthis.magFilter = source.magFilter;\n\t\t\tthis.minFilter = source.minFilter;\n\n\t\t\tthis.anisotropy = source.anisotropy;\n\n\t\t\tthis.format = source.format;\n\t\t\tthis.type = source.type;\n\n\t\t\tthis.offset.copy( source.offset );\n\t\t\tthis.repeat.copy( source.repeat );\n\t\t\tthis.center.copy( source.center );\n\t\t\tthis.rotation = source.rotation;\n\n\t\t\tthis.matrixAutoUpdate = source.matrixAutoUpdate;\n\t\t\tthis.matrix.copy( source.matrix );\n\n\t\t\tthis.generateMipmaps = source.generateMipmaps;\n\t\t\tthis.premultiplyAlpha = source.premultiplyAlpha;\n\t\t\tthis.flipY = source.flipY;\n\t\t\tthis.unpackAlignment = source.unpackAlignment;\n\t\t\tthis.encoding = source.encoding;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\ttoJSON: function ( meta ) {\n\n\t\t\tvar isRootObject = ( meta === undefined || typeof meta === 'string' );\n\n\t\t\tif ( ! isRootObject && meta.textures[ this.uuid ] !== undefined ) {\n\n\t\t\t\treturn meta.textures[ this.uuid ];\n\n\t\t\t}\n\n\t\t\tfunction getDataURL( image ) {\n\n\t\t\t\tvar canvas;\n\n\t\t\t\tif ( image instanceof HTMLCanvasElement ) {\n\n\t\t\t\t\tcanvas = image;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tcanvas = document.createElementNS( 'http://www.w3.org/1999/xhtml', 'canvas' );\n\t\t\t\t\tcanvas.width = image.width;\n\t\t\t\t\tcanvas.height = image.height;\n\n\t\t\t\t\tvar context = canvas.getContext( '2d' );\n\n\t\t\t\t\tif ( image instanceof ImageData ) {\n\n\t\t\t\t\t\tcontext.putImageData( image, 0, 0 );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tcontext.drawImage( image, 0, 0, image.width, image.height );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( canvas.width > 2048 || canvas.height > 2048 ) {\n\n\t\t\t\t\treturn canvas.toDataURL( 'image/jpeg', 0.6 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\treturn canvas.toDataURL( 'image/png' );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tvar output = {\n\t\t\t\tmetadata: {\n\t\t\t\t\tversion: 4.5,\n\t\t\t\t\ttype: 'Texture',\n\t\t\t\t\tgenerator: 'Texture.toJSON'\n\t\t\t\t},\n\n\t\t\t\tuuid: this.uuid,\n\t\t\t\tname: this.name,\n\n\t\t\t\tmapping: this.mapping,\n\n\t\t\t\trepeat: [ this.repeat.x, this.repeat.y ],\n\t\t\t\toffset: [ this.offset.x, this.offset.y ],\n\t\t\t\tcenter: [ this.center.x, this.center.y ],\n\t\t\t\trotation: this.rotation,\n\n\t\t\t\twrap: [ this.wrapS, this.wrapT ],\n\n\t\t\t\tminFilter: this.minFilter,\n\t\t\t\tmagFilter: this.magFilter,\n\t\t\t\tanisotropy: this.anisotropy,\n\n\t\t\t\tflipY: this.flipY\n\t\t\t};\n\n\t\t\tif ( this.image !== undefined ) {\n\n\t\t\t\t// TODO: Move to THREE.Image\n\n\t\t\t\tvar image = this.image;\n\n\t\t\t\tif ( image.uuid === undefined ) {\n\n\t\t\t\t\timage.uuid = _Math.generateUUID(); // UGH\n\n\t\t\t\t}\n\n\t\t\t\tif ( ! isRootObject && meta.images[ image.uuid ] === undefined ) {\n\n\t\t\t\t\tmeta.images[ image.uuid ] = {\n\t\t\t\t\t\tuuid: image.uuid,\n\t\t\t\t\t\turl: getDataURL( image )\n\t\t\t\t\t};\n\n\t\t\t\t}\n\n\t\t\t\toutput.image = image.uuid;\n\n\t\t\t}\n\n\t\t\tif ( ! isRootObject ) {\n\n\t\t\t\tmeta.textures[ this.uuid ] = output;\n\n\t\t\t}\n\n\t\t\treturn output;\n\n\t\t},\n\n\t\tdispose: function () {\n\n\t\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t\t},\n\n\t\ttransformUv: function ( uv ) {\n\n\t\t\tif ( this.mapping !== UVMapping ) return;\n\n\t\t\tuv.applyMatrix3( this.matrix );\n\n\t\t\tif ( uv.x < 0 || uv.x > 1 ) {\n\n\t\t\t\tswitch ( this.wrapS ) {\n\n\t\t\t\t\tcase RepeatWrapping:\n\n\t\t\t\t\t\tuv.x = uv.x - Math.floor( uv.x );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase ClampToEdgeWrapping:\n\n\t\t\t\t\t\tuv.x = uv.x < 0 ? 0 : 1;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase MirroredRepeatWrapping:\n\n\t\t\t\t\t\tif ( Math.abs( Math.floor( uv.x ) % 2 ) === 1 ) {\n\n\t\t\t\t\t\t\tuv.x = Math.ceil( uv.x ) - uv.x;\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tuv.x = uv.x - Math.floor( uv.x );\n\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( uv.y < 0 || uv.y > 1 ) {\n\n\t\t\t\tswitch ( this.wrapT ) {\n\n\t\t\t\t\tcase RepeatWrapping:\n\n\t\t\t\t\t\tuv.y = uv.y - Math.floor( uv.y );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase ClampToEdgeWrapping:\n\n\t\t\t\t\t\tuv.y = uv.y < 0 ? 0 : 1;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase MirroredRepeatWrapping:\n\n\t\t\t\t\t\tif ( Math.abs( Math.floor( uv.y ) % 2 ) === 1 ) {\n\n\t\t\t\t\t\t\tuv.y = Math.ceil( uv.y ) - uv.y;\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tuv.y = uv.y - Math.floor( uv.y );\n\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( this.flipY ) {\n\n\t\t\t\tuv.y = 1 - uv.y;\n\n\t\t\t}\n\n\t\t}\n\n\t} );\n\n\t/**\n\t * @author supereggbert / http://www.paulbrunt.co.uk/\n\t * @author philogb / http://blog.thejit.org/\n\t * @author mikael emtinger / http://gomo.se/\n\t * @author egraether / http://egraether.com/\n\t * @author WestLangley / http://github.com/WestLangley\n\t */\n\n\tfunction Vector4( x, y, z, w ) {\n\n\t\tthis.x = x || 0;\n\t\tthis.y = y || 0;\n\t\tthis.z = z || 0;\n\t\tthis.w = ( w !== undefined ) ? w : 1;\n\n\t}\n\n\tObject.assign( Vector4.prototype, {\n\n\t\tisVector4: true,\n\n\t\tset: function ( x, y, z, w ) {\n\n\t\t\tthis.x = x;\n\t\t\tthis.y = y;\n\t\t\tthis.z = z;\n\t\t\tthis.w = w;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetScalar: function ( scalar ) {\n\n\t\t\tthis.x = scalar;\n\t\t\tthis.y = scalar;\n\t\t\tthis.z = scalar;\n\t\t\tthis.w = scalar;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetX: function ( x ) {\n\n\t\t\tthis.x = x;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetY: function ( y ) {\n\n\t\t\tthis.y = y;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetZ: function ( z ) {\n\n\t\t\tthis.z = z;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetW: function ( w ) {\n\n\t\t\tthis.w = w;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetComponent: function ( index, value ) {\n\n\t\t\tswitch ( index ) {\n\n\t\t\t\tcase 0: this.x = value; break;\n\t\t\t\tcase 1: this.y = value; break;\n\t\t\t\tcase 2: this.z = value; break;\n\t\t\t\tcase 3: this.w = value; break;\n\t\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tgetComponent: function ( index ) {\n\n\t\t\tswitch ( index ) {\n\n\t\t\t\tcase 0: return this.x;\n\t\t\t\tcase 1: return this.y;\n\t\t\t\tcase 2: return this.z;\n\t\t\t\tcase 3: return this.w;\n\t\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t\t}\n\n\t\t},\n\n\t\tclone: function () {\n\n\t\t\treturn new this.constructor( this.x, this.y, this.z, this.w );\n\n\t\t},\n\n\t\tcopy: function ( v ) {\n\n\t\t\tthis.x = v.x;\n\t\t\tthis.y = v.y;\n\t\t\tthis.z = v.z;\n\t\t\tthis.w = ( v.w !== undefined ) ? v.w : 1;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tadd: function ( v, w ) {\n\n\t\t\tif ( w !== undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Vector4: .add() now only accepts one argument. Use .addVectors( a, b ) instead.' );\n\t\t\t\treturn this.addVectors( v, w );\n\n\t\t\t}\n\n\t\t\tthis.x += v.x;\n\t\t\tthis.y += v.y;\n\t\t\tthis.z += v.z;\n\t\t\tthis.w += v.w;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\taddScalar: function ( s ) {\n\n\t\t\tthis.x += s;\n\t\t\tthis.y += s;\n\t\t\tthis.z += s;\n\t\t\tthis.w += s;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\taddVectors: function ( a, b ) {\n\n\t\t\tthis.x = a.x + b.x;\n\t\t\tthis.y = a.y + b.y;\n\t\t\tthis.z = a.z + b.z;\n\t\t\tthis.w = a.w + b.w;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\taddScaledVector: function ( v, s ) {\n\n\t\t\tthis.x += v.x * s;\n\t\t\tthis.y += v.y * s;\n\t\t\tthis.z += v.z * s;\n\t\t\tthis.w += v.w * s;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsub: function ( v, w ) {\n\n\t\t\tif ( w !== undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Vector4: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.' );\n\t\t\t\treturn this.subVectors( v, w );\n\n\t\t\t}\n\n\t\t\tthis.x -= v.x;\n\t\t\tthis.y -= v.y;\n\t\t\tthis.z -= v.z;\n\t\t\tthis.w -= v.w;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsubScalar: function ( s ) {\n\n\t\t\tthis.x -= s;\n\t\t\tthis.y -= s;\n\t\t\tthis.z -= s;\n\t\t\tthis.w -= s;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsubVectors: function ( a, b ) {\n\n\t\t\tthis.x = a.x - b.x;\n\t\t\tthis.y = a.y - b.y;\n\t\t\tthis.z = a.z - b.z;\n\t\t\tthis.w = a.w - b.w;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tmultiplyScalar: function ( scalar ) {\n\n\t\t\tthis.x *= scalar;\n\t\t\tthis.y *= scalar;\n\t\t\tthis.z *= scalar;\n\t\t\tthis.w *= scalar;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tapplyMatrix4: function ( m ) {\n\n\t\t\tvar x = this.x, y = this.y, z = this.z, w = this.w;\n\t\t\tvar e = m.elements;\n\n\t\t\tthis.x = e[ 0 ] * x + e[ 4 ] * y + e[ 8 ] * z + e[ 12 ] * w;\n\t\t\tthis.y = e[ 1 ] * x + e[ 5 ] * y + e[ 9 ] * z + e[ 13 ] * w;\n\t\t\tthis.z = e[ 2 ] * x + e[ 6 ] * y + e[ 10 ] * z + e[ 14 ] * w;\n\t\t\tthis.w = e[ 3 ] * x + e[ 7 ] * y + e[ 11 ] * z + e[ 15 ] * w;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tdivideScalar: function ( scalar ) {\n\n\t\t\treturn this.multiplyScalar( 1 / scalar );\n\n\t\t},\n\n\t\tsetAxisAngleFromQuaternion: function ( q ) {\n\n\t\t\t// http://www.euclideanspace.com/maths/geometry/rotations/conversions/quaternionToAngle/index.htm\n\n\t\t\t// q is assumed to be normalized\n\n\t\t\tthis.w = 2 * Math.acos( q.w );\n\n\t\t\tvar s = Math.sqrt( 1 - q.w * q.w );\n\n\t\t\tif ( s < 0.0001 ) {\n\n\t\t\t\tthis.x = 1;\n\t\t\t\tthis.y = 0;\n\t\t\t\tthis.z = 0;\n\n\t\t\t} else {\n\n\t\t\t\tthis.x = q.x / s;\n\t\t\t\tthis.y = q.y / s;\n\t\t\t\tthis.z = q.z / s;\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetAxisAngleFromRotationMatrix: function ( m ) {\n\n\t\t\t// http://www.euclideanspace.com/maths/geometry/rotations/conversions/matrixToAngle/index.htm\n\n\t\t\t// assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)\n\n\t\t\tvar angle, x, y, z,\t\t// variables for result\n\t\t\t\tepsilon = 0.01,\t\t// margin to allow for rounding errors\n\t\t\t\tepsilon2 = 0.1,\t\t// margin to distinguish between 0 and 180 degrees\n\n\t\t\t\tte = m.elements,\n\n\t\t\t\tm11 = te[ 0 ], m12 = te[ 4 ], m13 = te[ 8 ],\n\t\t\t\tm21 = te[ 1 ], m22 = te[ 5 ], m23 = te[ 9 ],\n\t\t\t\tm31 = te[ 2 ], m32 = te[ 6 ], m33 = te[ 10 ];\n\n\t\t\tif ( ( Math.abs( m12 - m21 ) < epsilon ) &&\n\t\t\t ( Math.abs( m13 - m31 ) < epsilon ) &&\n\t\t\t ( Math.abs( m23 - m32 ) < epsilon ) ) {\n\n\t\t\t\t// singularity found\n\t\t\t\t// first check for identity matrix which must have +1 for all terms\n\t\t\t\t// in leading diagonal and zero in other terms\n\n\t\t\t\tif ( ( Math.abs( m12 + m21 ) < epsilon2 ) &&\n\t\t\t\t ( Math.abs( m13 + m31 ) < epsilon2 ) &&\n\t\t\t\t ( Math.abs( m23 + m32 ) < epsilon2 ) &&\n\t\t\t\t ( Math.abs( m11 + m22 + m33 - 3 ) < epsilon2 ) ) {\n\n\t\t\t\t\t// this singularity is identity matrix so angle = 0\n\n\t\t\t\t\tthis.set( 1, 0, 0, 0 );\n\n\t\t\t\t\treturn this; // zero angle, arbitrary axis\n\n\t\t\t\t}\n\n\t\t\t\t// otherwise this singularity is angle = 180\n\n\t\t\t\tangle = Math.PI;\n\n\t\t\t\tvar xx = ( m11 + 1 ) / 2;\n\t\t\t\tvar yy = ( m22 + 1 ) / 2;\n\t\t\t\tvar zz = ( m33 + 1 ) / 2;\n\t\t\t\tvar xy = ( m12 + m21 ) / 4;\n\t\t\t\tvar xz = ( m13 + m31 ) / 4;\n\t\t\t\tvar yz = ( m23 + m32 ) / 4;\n\n\t\t\t\tif ( ( xx > yy ) && ( xx > zz ) ) {\n\n\t\t\t\t\t// m11 is the largest diagonal term\n\n\t\t\t\t\tif ( xx < epsilon ) {\n\n\t\t\t\t\t\tx = 0;\n\t\t\t\t\t\ty = 0.707106781;\n\t\t\t\t\t\tz = 0.707106781;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tx = Math.sqrt( xx );\n\t\t\t\t\t\ty = xy / x;\n\t\t\t\t\t\tz = xz / x;\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( yy > zz ) {\n\n\t\t\t\t\t// m22 is the largest diagonal term\n\n\t\t\t\t\tif ( yy < epsilon ) {\n\n\t\t\t\t\t\tx = 0.707106781;\n\t\t\t\t\t\ty = 0;\n\t\t\t\t\t\tz = 0.707106781;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\ty = Math.sqrt( yy );\n\t\t\t\t\t\tx = xy / y;\n\t\t\t\t\t\tz = yz / y;\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// m33 is the largest diagonal term so base result on this\n\n\t\t\t\t\tif ( zz < epsilon ) {\n\n\t\t\t\t\t\tx = 0.707106781;\n\t\t\t\t\t\ty = 0.707106781;\n\t\t\t\t\t\tz = 0;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tz = Math.sqrt( zz );\n\t\t\t\t\t\tx = xz / z;\n\t\t\t\t\t\ty = yz / z;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tthis.set( x, y, z, angle );\n\n\t\t\t\treturn this; // return 180 deg rotation\n\n\t\t\t}\n\n\t\t\t// as we have reached here there are no singularities so we can handle normally\n\n\t\t\tvar 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\t\tif ( Math.abs( s ) < 0.001 ) s = 1;\n\n\t\t\t// prevent divide by zero, should not happen if matrix is orthogonal and should be\n\t\t\t// caught by singularity test above, but I've left it in just in case\n\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\t\t\tthis.w = Math.acos( ( m11 + m22 + m33 - 1 ) / 2 );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tmin: function ( v ) {\n\n\t\t\tthis.x = Math.min( this.x, v.x );\n\t\t\tthis.y = Math.min( this.y, v.y );\n\t\t\tthis.z = Math.min( this.z, v.z );\n\t\t\tthis.w = Math.min( this.w, v.w );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tmax: function ( v ) {\n\n\t\t\tthis.x = Math.max( this.x, v.x );\n\t\t\tthis.y = Math.max( this.y, v.y );\n\t\t\tthis.z = Math.max( this.z, v.z );\n\t\t\tthis.w = Math.max( this.w, v.w );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tclamp: function ( min, max ) {\n\n\t\t\t// assumes min < max, componentwise\n\n\t\t\tthis.x = Math.max( min.x, Math.min( max.x, this.x ) );\n\t\t\tthis.y = Math.max( min.y, Math.min( max.y, this.y ) );\n\t\t\tthis.z = Math.max( min.z, Math.min( max.z, this.z ) );\n\t\t\tthis.w = Math.max( min.w, Math.min( max.w, this.w ) );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tclampScalar: function () {\n\n\t\t\tvar min, max;\n\n\t\t\treturn function clampScalar( minVal, maxVal ) {\n\n\t\t\t\tif ( min === undefined ) {\n\n\t\t\t\t\tmin = new Vector4();\n\t\t\t\t\tmax = new Vector4();\n\n\t\t\t\t}\n\n\t\t\t\tmin.set( minVal, minVal, minVal, minVal );\n\t\t\t\tmax.set( maxVal, maxVal, maxVal, maxVal );\n\n\t\t\t\treturn this.clamp( min, max );\n\n\t\t\t};\n\n\t\t}(),\n\n\t\tclampLength: function ( min, max ) {\n\n\t\t\tvar length = this.length();\n\n\t\t\treturn this.divideScalar( length || 1 ).multiplyScalar( Math.max( min, Math.min( max, length ) ) );\n\n\t\t},\n\n\t\tfloor: function () {\n\n\t\t\tthis.x = Math.floor( this.x );\n\t\t\tthis.y = Math.floor( this.y );\n\t\t\tthis.z = Math.floor( this.z );\n\t\t\tthis.w = Math.floor( this.w );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tceil: function () {\n\n\t\t\tthis.x = Math.ceil( this.x );\n\t\t\tthis.y = Math.ceil( this.y );\n\t\t\tthis.z = Math.ceil( this.z );\n\t\t\tthis.w = Math.ceil( this.w );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tround: function () {\n\n\t\t\tthis.x = Math.round( this.x );\n\t\t\tthis.y = Math.round( this.y );\n\t\t\tthis.z = Math.round( this.z );\n\t\t\tthis.w = Math.round( this.w );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\troundToZero: function () {\n\n\t\t\tthis.x = ( this.x < 0 ) ? Math.ceil( this.x ) : Math.floor( this.x );\n\t\t\tthis.y = ( this.y < 0 ) ? Math.ceil( this.y ) : Math.floor( this.y );\n\t\t\tthis.z = ( this.z < 0 ) ? Math.ceil( this.z ) : Math.floor( this.z );\n\t\t\tthis.w = ( this.w < 0 ) ? Math.ceil( this.w ) : Math.floor( this.w );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tnegate: function () {\n\n\t\t\tthis.x = - this.x;\n\t\t\tthis.y = - this.y;\n\t\t\tthis.z = - this.z;\n\t\t\tthis.w = - this.w;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tdot: function ( v ) {\n\n\t\t\treturn this.x * v.x + this.y * v.y + this.z * v.z + this.w * v.w;\n\n\t\t},\n\n\t\tlengthSq: function () {\n\n\t\t\treturn this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w;\n\n\t\t},\n\n\t\tlength: function () {\n\n\t\t\treturn Math.sqrt( this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w );\n\n\t\t},\n\n\t\tmanhattanLength: function () {\n\n\t\t\treturn Math.abs( this.x ) + Math.abs( this.y ) + Math.abs( this.z ) + Math.abs( this.w );\n\n\t\t},\n\n\t\tnormalize: function () {\n\n\t\t\treturn this.divideScalar( this.length() || 1 );\n\n\t\t},\n\n\t\tsetLength: function ( length ) {\n\n\t\t\treturn this.normalize().multiplyScalar( length );\n\n\t\t},\n\n\t\tlerp: function ( v, alpha ) {\n\n\t\t\tthis.x += ( v.x - this.x ) * alpha;\n\t\t\tthis.y += ( v.y - this.y ) * alpha;\n\t\t\tthis.z += ( v.z - this.z ) * alpha;\n\t\t\tthis.w += ( v.w - this.w ) * alpha;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tlerpVectors: function ( v1, v2, alpha ) {\n\n\t\t\treturn this.subVectors( v2, v1 ).multiplyScalar( alpha ).add( v1 );\n\n\t\t},\n\n\t\tequals: function ( v ) {\n\n\t\t\treturn ( ( v.x === this.x ) && ( v.y === this.y ) && ( v.z === this.z ) && ( v.w === this.w ) );\n\n\t\t},\n\n\t\tfromArray: function ( array, offset ) {\n\n\t\t\tif ( offset === undefined ) offset = 0;\n\n\t\t\tthis.x = array[ offset ];\n\t\t\tthis.y = array[ offset + 1 ];\n\t\t\tthis.z = array[ offset + 2 ];\n\t\t\tthis.w = array[ offset + 3 ];\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\ttoArray: function ( array, offset ) {\n\n\t\t\tif ( array === undefined ) array = [];\n\t\t\tif ( offset === undefined ) offset = 0;\n\n\t\t\tarray[ offset ] = this.x;\n\t\t\tarray[ offset + 1 ] = this.y;\n\t\t\tarray[ offset + 2 ] = this.z;\n\t\t\tarray[ offset + 3 ] = this.w;\n\n\t\t\treturn array;\n\n\t\t},\n\n\t\tfromBufferAttribute: function ( attribute, index, offset ) {\n\n\t\t\tif ( offset !== undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Vector4: offset has been removed from .fromBufferAttribute().' );\n\n\t\t\t}\n\n\t\t\tthis.x = attribute.getX( index );\n\t\t\tthis.y = attribute.getY( index );\n\t\t\tthis.z = attribute.getZ( index );\n\t\t\tthis.w = attribute.getW( index );\n\n\t\t\treturn this;\n\n\t\t}\n\n\t} );\n\n\t/**\n\t * @author szimek / https://github.com/szimek/\n\t * @author alteredq / http://alteredqualia.com/\n\t * @author Marius Kintel / https://github.com/kintel\n\t */\n\n\t/*\n\t In options, we can specify:\n\t * Texture parameters for an auto-generated target texture\n\t * depthBuffer/stencilBuffer: Booleans to indicate if we should generate these buffers\n\t*/\n\tfunction WebGLRenderTarget( width, height, options ) {\n\n\t\tthis.uuid = _Math.generateUUID();\n\n\t\tthis.width = width;\n\t\tthis.height = height;\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\tif ( options.minFilter === undefined ) options.minFilter = LinearFilter;\n\n\t\tthis.texture = new Texture( undefined, undefined, options.wrapS, options.wrapT, options.magFilter, options.minFilter, options.format, options.type, options.anisotropy, options.encoding );\n\n\t\tthis.depthBuffer = options.depthBuffer !== undefined ? options.depthBuffer : true;\n\t\tthis.stencilBuffer = options.stencilBuffer !== undefined ? options.stencilBuffer : true;\n\t\tthis.depthTexture = options.depthTexture !== undefined ? options.depthTexture : null;\n\n\t}\n\n\tObject.assign( WebGLRenderTarget.prototype, EventDispatcher.prototype, {\n\n\t\tisWebGLRenderTarget: true,\n\n\t\tsetSize: function ( width, height ) {\n\n\t\t\tif ( this.width !== width || this.height !== height ) {\n\n\t\t\t\tthis.width = width;\n\t\t\t\tthis.height = height;\n\n\t\t\t\tthis.dispose();\n\n\t\t\t}\n\n\t\t\tthis.viewport.set( 0, 0, width, height );\n\t\t\tthis.scissor.set( 0, 0, width, height );\n\n\t\t},\n\n\t\tclone: function () {\n\n\t\t\treturn new this.constructor().copy( this );\n\n\t\t},\n\n\t\tcopy: function ( source ) {\n\n\t\t\tthis.width = source.width;\n\t\t\tthis.height = source.height;\n\n\t\t\tthis.viewport.copy( source.viewport );\n\n\t\t\tthis.texture = source.texture.clone();\n\n\t\t\tthis.depthBuffer = source.depthBuffer;\n\t\t\tthis.stencilBuffer = source.stencilBuffer;\n\t\t\tthis.depthTexture = source.depthTexture;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tdispose: function () {\n\n\t\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t\t}\n\n\t} );\n\n\t/**\n\t * @author alteredq / http://alteredqualia.com\n\t */\n\n\tfunction WebGLRenderTargetCube( width, height, options ) {\n\n\t\tWebGLRenderTarget.call( this, width, height, options );\n\n\t\tthis.activeCubeFace = 0; // PX 0, NX 1, PY 2, NY 3, PZ 4, NZ 5\n\t\tthis.activeMipMapLevel = 0;\n\n\t}\n\n\tWebGLRenderTargetCube.prototype = Object.create( WebGLRenderTarget.prototype );\n\tWebGLRenderTargetCube.prototype.constructor = WebGLRenderTargetCube;\n\n\tWebGLRenderTargetCube.prototype.isWebGLRenderTargetCube = true;\n\n\t/**\n\t * @author alteredq / http://alteredqualia.com/\n\t */\n\n\tfunction DataTexture( data, width, height, format, type, mapping, wrapS, wrapT, magFilter, minFilter, anisotropy, encoding ) {\n\n\t\tTexture.call( this, null, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding );\n\n\t\tthis.image = { data: data, 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.generateMipmaps = false;\n\t\tthis.flipY = false;\n\t\tthis.unpackAlignment = 1;\n\n\t}\n\n\tDataTexture.prototype = Object.create( Texture.prototype );\n\tDataTexture.prototype.constructor = DataTexture;\n\n\tDataTexture.prototype.isDataTexture = true;\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t */\n\n\tfunction CubeTexture( 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\n\t\tTexture.call( this, images, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding );\n\n\t\tthis.flipY = false;\n\n\t}\n\n\tCubeTexture.prototype = Object.create( Texture.prototype );\n\tCubeTexture.prototype.constructor = CubeTexture;\n\n\tCubeTexture.prototype.isCubeTexture = true;\n\n\tObject.defineProperty( CubeTexture.prototype, 'images', {\n\n\t\tget: function () {\n\n\t\t\treturn this.image;\n\n\t\t},\n\n\t\tset: function ( value ) {\n\n\t\t\tthis.image = value;\n\n\t\t}\n\n\t} );\n\n\t/**\n\t * @author tschw\n\t *\n\t * Uniforms of a program.\n\t * Those form a tree structure with a special top-level container for the root,\n\t * which you get by calling 'new WebGLUniforms( gl, program, renderer )'.\n\t *\n\t *\n\t * Properties of inner nodes including the top-level container:\n\t *\n\t * .seq - array of nested uniforms\n\t * .map - nested uniforms by name\n\t *\n\t *\n\t * Methods of all nodes except the top-level container:\n\t *\n\t * .setValue( gl, value, [renderer] )\n\t *\n\t * \t\tuploads a uniform value(s)\n\t * \tthe 'renderer' parameter is needed for sampler uniforms\n\t *\n\t *\n\t * Static methods of the top-level container (renderer factorizations):\n\t *\n\t * .upload( gl, seq, values, renderer )\n\t *\n\t * \t\tsets uniforms in 'seq' to 'values[id].value'\n\t *\n\t * .seqWithValue( seq, values ) : filteredSeq\n\t *\n\t * \t\tfilters 'seq' entries with corresponding entry in values\n\t *\n\t *\n\t * Methods of the top-level container (renderer factorizations):\n\t *\n\t * .setValue( gl, name, value )\n\t *\n\t * \t\tsets uniform with name 'name' to 'value'\n\t *\n\t * .set( gl, obj, prop )\n\t *\n\t * \t\tsets uniform from object and property with same name than uniform\n\t *\n\t * .setOptional( gl, obj, prop )\n\t *\n\t * \t\tlike .set for an optional property of the object\n\t *\n\t */\n\n\tvar emptyTexture = new Texture();\n\tvar emptyCubeTexture = new CubeTexture();\n\n\t// --- Base for inner nodes (including the root) ---\n\n\tfunction UniformContainer() {\n\n\t\tthis.seq = [];\n\t\tthis.map = {};\n\n\t}\n\n\t// --- Utilities ---\n\n\t// Array Caches (provide typed arrays for temporary by size)\n\n\tvar arrayCacheF32 = [];\n\tvar arrayCacheI32 = [];\n\n\t// Float32Array caches used for uploading Matrix uniforms\n\n\tvar mat4array = new Float32Array( 16 );\n\tvar mat3array = new Float32Array( 9 );\n\n\t// Flattening for arrays of vectors and matrices\n\n\tfunction flatten( array, nBlocks, blockSize ) {\n\n\t\tvar firstElem = array[ 0 ];\n\n\t\tif ( firstElem <= 0 || firstElem > 0 ) return array;\n\t\t// unoptimized: ! isNaN( firstElem )\n\t\t// see http://jacksondunstan.com/articles/983\n\n\t\tvar n = nBlocks * blockSize,\n\t\t\tr = arrayCacheF32[ n ];\n\n\t\tif ( r === undefined ) {\n\n\t\t\tr = new Float32Array( n );\n\t\t\tarrayCacheF32[ n ] = r;\n\n\t\t}\n\n\t\tif ( nBlocks !== 0 ) {\n\n\t\t\tfirstElem.toArray( r, 0 );\n\n\t\t\tfor ( var i = 1, offset = 0; i !== nBlocks; ++ i ) {\n\n\t\t\t\toffset += blockSize;\n\t\t\t\tarray[ i ].toArray( r, offset );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn r;\n\n\t}\n\n\t// Texture unit allocation\n\n\tfunction allocTexUnits( renderer, n ) {\n\n\t\tvar r = arrayCacheI32[ n ];\n\n\t\tif ( r === undefined ) {\n\n\t\t\tr = new Int32Array( n );\n\t\t\tarrayCacheI32[ n ] = r;\n\n\t\t}\n\n\t\tfor ( var i = 0; i !== n; ++ i )\n\t\t\tr[ i ] = renderer.allocTextureUnit();\n\n\t\treturn r;\n\n\t}\n\n\t// --- Setters ---\n\n\t// Note: Defining these methods externally, because they come in a bunch\n\t// and this way their names minify.\n\n\t// Single scalar\n\n\tfunction setValue1f( gl, v ) {\n\n\t\tgl.uniform1f( this.addr, v );\n\n\t}\n\n\tfunction setValue1i( gl, v ) {\n\n\t\tgl.uniform1i( this.addr, v );\n\n\t}\n\n\t// Single float vector (from flat array or THREE.VectorN)\n\n\tfunction setValue2fv( gl, v ) {\n\n\t\tif ( v.x === undefined ) {\n\n\t\t\tgl.uniform2fv( this.addr, v );\n\n\t\t} else {\n\n\t\t\tgl.uniform2f( this.addr, v.x, v.y );\n\n\t\t}\n\n\t}\n\n\tfunction setValue3fv( gl, v ) {\n\n\t\tif ( v.x !== undefined ) {\n\n\t\t\tgl.uniform3f( this.addr, v.x, v.y, v.z );\n\n\t\t} else if ( v.r !== undefined ) {\n\n\t\t\tgl.uniform3f( this.addr, v.r, v.g, v.b );\n\n\t\t} else {\n\n\t\t\tgl.uniform3fv( this.addr, v );\n\n\t\t}\n\n\t}\n\n\tfunction setValue4fv( gl, v ) {\n\n\t\tif ( v.x === undefined ) {\n\n\t\t\tgl.uniform4fv( this.addr, v );\n\n\t\t} else {\n\n\t\t\t gl.uniform4f( this.addr, v.x, v.y, v.z, v.w );\n\n\t\t}\n\n\t}\n\n\t// Single matrix (from flat array or MatrixN)\n\n\tfunction setValue2fm( gl, v ) {\n\n\t\tgl.uniformMatrix2fv( this.addr, false, v.elements || v );\n\n\t}\n\n\tfunction setValue3fm( gl, v ) {\n\n\t\tif ( v.elements === undefined ) {\n\n\t\t\tgl.uniformMatrix3fv( this.addr, false, v );\n\n\t\t} else {\n\n\t\t\tmat3array.set( v.elements );\n\t\t\tgl.uniformMatrix3fv( this.addr, false, mat3array );\n\n\t\t}\n\n\t}\n\n\tfunction setValue4fm( gl, v ) {\n\n\t\tif ( v.elements === undefined ) {\n\n\t\t\tgl.uniformMatrix4fv( this.addr, false, v );\n\n\t\t} else {\n\n\t\t\tmat4array.set( v.elements );\n\t\t\tgl.uniformMatrix4fv( this.addr, false, mat4array );\n\n\t\t}\n\n\t}\n\n\t// Single texture (2D / Cube)\n\n\tfunction setValueT1( gl, v, renderer ) {\n\n\t\tvar unit = renderer.allocTextureUnit();\n\t\tgl.uniform1i( this.addr, unit );\n\t\trenderer.setTexture2D( v || emptyTexture, unit );\n\n\t}\n\n\tfunction setValueT6( gl, v, renderer ) {\n\n\t\tvar unit = renderer.allocTextureUnit();\n\t\tgl.uniform1i( this.addr, unit );\n\t\trenderer.setTextureCube( v || emptyCubeTexture, unit );\n\n\t}\n\n\t// Integer / Boolean vectors or arrays thereof (always flat arrays)\n\n\tfunction setValue2iv( gl, v ) {\n\n\t\tgl.uniform2iv( this.addr, v );\n\n\t}\n\n\tfunction setValue3iv( gl, v ) {\n\n\t\tgl.uniform3iv( this.addr, v );\n\n\t}\n\n\tfunction setValue4iv( gl, v ) {\n\n\t\tgl.uniform4iv( this.addr, v );\n\n\t}\n\n\t// Helper to pick the right setter for the singular case\n\n\tfunction getSingularSetter( type ) {\n\n\t\tswitch ( type ) {\n\n\t\t\tcase 0x1406: return setValue1f; // FLOAT\n\t\t\tcase 0x8b50: return setValue2fv; // _VEC2\n\t\t\tcase 0x8b51: return setValue3fv; // _VEC3\n\t\t\tcase 0x8b52: return setValue4fv; // _VEC4\n\n\t\t\tcase 0x8b5a: return setValue2fm; // _MAT2\n\t\t\tcase 0x8b5b: return setValue3fm; // _MAT3\n\t\t\tcase 0x8b5c: return setValue4fm; // _MAT4\n\n\t\t\tcase 0x8b5e: case 0x8d66: return setValueT1; // SAMPLER_2D, SAMPLER_EXTERNAL_OES\n\t\t\tcase 0x8b60: return setValueT6; // SAMPLER_CUBE\n\n\t\t\tcase 0x1404: case 0x8b56: return setValue1i; // INT, BOOL\n\t\t\tcase 0x8b53: case 0x8b57: return setValue2iv; // _VEC2\n\t\t\tcase 0x8b54: case 0x8b58: return setValue3iv; // _VEC3\n\t\t\tcase 0x8b55: case 0x8b59: return setValue4iv; // _VEC4\n\n\t\t}\n\n\t}\n\n\t// Array of scalars\n\n\tfunction setValue1fv( gl, v ) {\n\n\t\tgl.uniform1fv( this.addr, v );\n\n\t}\n\tfunction setValue1iv( gl, v ) {\n\n\t\tgl.uniform1iv( this.addr, v );\n\n\t}\n\n\t// Array of vectors (flat or from THREE classes)\n\n\tfunction setValueV2a( gl, v ) {\n\n\t\tgl.uniform2fv( this.addr, flatten( v, this.size, 2 ) );\n\n\t}\n\n\tfunction setValueV3a( gl, v ) {\n\n\t\tgl.uniform3fv( this.addr, flatten( v, this.size, 3 ) );\n\n\t}\n\n\tfunction setValueV4a( gl, v ) {\n\n\t\tgl.uniform4fv( this.addr, flatten( v, this.size, 4 ) );\n\n\t}\n\n\t// Array of matrices (flat or from THREE clases)\n\n\tfunction setValueM2a( gl, v ) {\n\n\t\tgl.uniformMatrix2fv( this.addr, false, flatten( v, this.size, 4 ) );\n\n\t}\n\n\tfunction setValueM3a( gl, v ) {\n\n\t\tgl.uniformMatrix3fv( this.addr, false, flatten( v, this.size, 9 ) );\n\n\t}\n\n\tfunction setValueM4a( gl, v ) {\n\n\t\tgl.uniformMatrix4fv( this.addr, false, flatten( v, this.size, 16 ) );\n\n\t}\n\n\t// Array of textures (2D / Cube)\n\n\tfunction setValueT1a( gl, v, renderer ) {\n\n\t\tvar n = v.length,\n\t\t\tunits = allocTexUnits( renderer, n );\n\n\t\tgl.uniform1iv( this.addr, units );\n\n\t\tfor ( var i = 0; i !== n; ++ i ) {\n\n\t\t\trenderer.setTexture2D( v[ i ] || emptyTexture, units[ i ] );\n\n\t\t}\n\n\t}\n\n\tfunction setValueT6a( gl, v, renderer ) {\n\n\t\tvar n = v.length,\n\t\t\tunits = allocTexUnits( renderer, n );\n\n\t\tgl.uniform1iv( this.addr, units );\n\n\t\tfor ( var i = 0; i !== n; ++ i ) {\n\n\t\t\trenderer.setTextureCube( v[ i ] || emptyCubeTexture, units[ i ] );\n\n\t\t}\n\n\t}\n\n\t// Helper to pick the right setter for a pure (bottom-level) array\n\n\tfunction getPureArraySetter( type ) {\n\n\t\tswitch ( type ) {\n\n\t\t\tcase 0x1406: return setValue1fv; // FLOAT\n\t\t\tcase 0x8b50: return setValueV2a; // _VEC2\n\t\t\tcase 0x8b51: return setValueV3a; // _VEC3\n\t\t\tcase 0x8b52: return setValueV4a; // _VEC4\n\n\t\t\tcase 0x8b5a: return setValueM2a; // _MAT2\n\t\t\tcase 0x8b5b: return setValueM3a; // _MAT3\n\t\t\tcase 0x8b5c: return setValueM4a; // _MAT4\n\n\t\t\tcase 0x8b5e: return setValueT1a; // SAMPLER_2D\n\t\t\tcase 0x8b60: return setValueT6a; // SAMPLER_CUBE\n\n\t\t\tcase 0x1404: case 0x8b56: return setValue1iv; // INT, BOOL\n\t\t\tcase 0x8b53: case 0x8b57: return setValue2iv; // _VEC2\n\t\t\tcase 0x8b54: case 0x8b58: return setValue3iv; // _VEC3\n\t\t\tcase 0x8b55: case 0x8b59: return setValue4iv; // _VEC4\n\n\t\t}\n\n\t}\n\n\t// --- Uniform Classes ---\n\n\tfunction SingleUniform( id, activeInfo, addr ) {\n\n\t\tthis.id = id;\n\t\tthis.addr = addr;\n\t\tthis.setValue = getSingularSetter( activeInfo.type );\n\n\t\t// this.path = activeInfo.name; // DEBUG\n\n\t}\n\n\tfunction PureArrayUniform( id, activeInfo, addr ) {\n\n\t\tthis.id = id;\n\t\tthis.addr = addr;\n\t\tthis.size = activeInfo.size;\n\t\tthis.setValue = getPureArraySetter( activeInfo.type );\n\n\t\t// this.path = activeInfo.name; // DEBUG\n\n\t}\n\n\tfunction StructuredUniform( id ) {\n\n\t\tthis.id = id;\n\n\t\tUniformContainer.call( this ); // mix-in\n\n\t}\n\n\tStructuredUniform.prototype.setValue = function ( gl, value ) {\n\n\t\t// Note: Don't need an extra 'renderer' parameter, since samplers\n\t\t// are not allowed in structured uniforms.\n\n\t\tvar seq = this.seq;\n\n\t\tfor ( var i = 0, n = seq.length; i !== n; ++ i ) {\n\n\t\t\tvar u = seq[ i ];\n\t\t\tu.setValue( gl, value[ u.id ] );\n\n\t\t}\n\n\t};\n\n\t// --- Top-level ---\n\n\t// Parser - builds up the property tree from the path strings\n\n\tvar RePathPart = /([\\w\\d_]+)(\\])?(\\[|\\.)?/g;\n\n\t// extracts\n\t// \t- the identifier (member name or array index)\n\t// - followed by an optional right bracket (found when array index)\n\t// - followed by an optional left bracket or dot (type of subscript)\n\t//\n\t// Note: These portions can be read in a non-overlapping fashion and\n\t// allow straightforward parsing of the hierarchy that WebGL encodes\n\t// in the uniform names.\n\n\tfunction addUniform( container, uniformObject ) {\n\n\t\tcontainer.seq.push( uniformObject );\n\t\tcontainer.map[ uniformObject.id ] = uniformObject;\n\n\t}\n\n\tfunction parseUniform( activeInfo, addr, container ) {\n\n\t\tvar path = activeInfo.name,\n\t\t\tpathLength = path.length;\n\n\t\t// reset RegExp object, because of the early exit of a previous run\n\t\tRePathPart.lastIndex = 0;\n\n\t\tfor ( ; ; ) {\n\n\t\t\tvar match = RePathPart.exec( path ),\n\t\t\t\tmatchEnd = RePathPart.lastIndex,\n\n\t\t\t\tid = match[ 1 ],\n\t\t\t\tidIsIndex = match[ 2 ] === ']',\n\t\t\t\tsubscript = match[ 3 ];\n\n\t\t\tif ( idIsIndex ) id = id | 0; // convert to integer\n\n\t\t\tif ( subscript === undefined || subscript === '[' && matchEnd + 2 === pathLength ) {\n\n\t\t\t\t// bare name or \"pure\" bottom-level array \"[0]\" suffix\n\n\t\t\t\taddUniform( container, subscript === undefined ?\n\t\t\t\t\tnew SingleUniform( id, activeInfo, addr ) :\n\t\t\t\t\tnew PureArrayUniform( id, activeInfo, addr ) );\n\n\t\t\t\tbreak;\n\n\t\t\t} else {\n\n\t\t\t\t// step into inner node / create it in case it doesn't exist\n\n\t\t\t\tvar map = container.map, next = map[ id ];\n\n\t\t\t\tif ( next === undefined ) {\n\n\t\t\t\t\tnext = new StructuredUniform( id );\n\t\t\t\t\taddUniform( container, next );\n\n\t\t\t\t}\n\n\t\t\t\tcontainer = next;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t// Root Container\n\n\tfunction WebGLUniforms( gl, program, renderer ) {\n\n\t\tUniformContainer.call( this );\n\n\t\tthis.renderer = renderer;\n\n\t\tvar n = gl.getProgramParameter( program, gl.ACTIVE_UNIFORMS );\n\n\t\tfor ( var i = 0; i < n; ++ i ) {\n\n\t\t\tvar info = gl.getActiveUniform( program, i ),\n\t\t\t\tpath = info.name,\n\t\t\t\taddr = gl.getUniformLocation( program, path );\n\n\t\t\tparseUniform( info, addr, this );\n\n\t\t}\n\n\t}\n\n\tWebGLUniforms.prototype.setValue = function ( gl, name, value ) {\n\n\t\tvar u = this.map[ name ];\n\n\t\tif ( u !== undefined ) u.setValue( gl, value, this.renderer );\n\n\t};\n\n\tWebGLUniforms.prototype.setOptional = function ( gl, object, name ) {\n\n\t\tvar v = object[ name ];\n\n\t\tif ( v !== undefined ) this.setValue( gl, name, v );\n\n\t};\n\n\n\t// Static interface\n\n\tWebGLUniforms.upload = function ( gl, seq, values, renderer ) {\n\n\t\tfor ( var i = 0, n = seq.length; i !== n; ++ i ) {\n\n\t\t\tvar u = seq[ i ],\n\t\t\t\tv = values[ u.id ];\n\n\t\t\tif ( v.needsUpdate !== false ) {\n\n\t\t\t\t// note: always updating when .needsUpdate is undefined\n\t\t\t\tu.setValue( gl, v.value, renderer );\n\n\t\t\t}\n\n\t\t}\n\n\t};\n\n\tWebGLUniforms.seqWithValue = function ( seq, values ) {\n\n\t\tvar r = [];\n\n\t\tfor ( var i = 0, n = seq.length; i !== n; ++ i ) {\n\n\t\t\tvar u = seq[ i ];\n\t\t\tif ( u.id in values ) r.push( u );\n\n\t\t}\n\n\t\treturn r;\n\n\t};\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t */\n\n\tvar ColorKeywords = { 'aliceblue': 0xF0F8FF, 'antiquewhite': 0xFAEBD7, 'aqua': 0x00FFFF, 'aquamarine': 0x7FFFD4, 'azure': 0xF0FFFF,\n\t\t'beige': 0xF5F5DC, 'bisque': 0xFFE4C4, 'black': 0x000000, 'blanchedalmond': 0xFFEBCD, 'blue': 0x0000FF, 'blueviolet': 0x8A2BE2,\n\t\t'brown': 0xA52A2A, 'burlywood': 0xDEB887, 'cadetblue': 0x5F9EA0, 'chartreuse': 0x7FFF00, 'chocolate': 0xD2691E, 'coral': 0xFF7F50,\n\t\t'cornflowerblue': 0x6495ED, 'cornsilk': 0xFFF8DC, 'crimson': 0xDC143C, 'cyan': 0x00FFFF, 'darkblue': 0x00008B, 'darkcyan': 0x008B8B,\n\t\t'darkgoldenrod': 0xB8860B, 'darkgray': 0xA9A9A9, 'darkgreen': 0x006400, 'darkgrey': 0xA9A9A9, 'darkkhaki': 0xBDB76B, 'darkmagenta': 0x8B008B,\n\t\t'darkolivegreen': 0x556B2F, 'darkorange': 0xFF8C00, 'darkorchid': 0x9932CC, 'darkred': 0x8B0000, 'darksalmon': 0xE9967A, 'darkseagreen': 0x8FBC8F,\n\t\t'darkslateblue': 0x483D8B, 'darkslategray': 0x2F4F4F, 'darkslategrey': 0x2F4F4F, 'darkturquoise': 0x00CED1, 'darkviolet': 0x9400D3,\n\t\t'deeppink': 0xFF1493, 'deepskyblue': 0x00BFFF, 'dimgray': 0x696969, 'dimgrey': 0x696969, 'dodgerblue': 0x1E90FF, 'firebrick': 0xB22222,\n\t\t'floralwhite': 0xFFFAF0, 'forestgreen': 0x228B22, 'fuchsia': 0xFF00FF, 'gainsboro': 0xDCDCDC, 'ghostwhite': 0xF8F8FF, 'gold': 0xFFD700,\n\t\t'goldenrod': 0xDAA520, 'gray': 0x808080, 'green': 0x008000, 'greenyellow': 0xADFF2F, 'grey': 0x808080, 'honeydew': 0xF0FFF0, 'hotpink': 0xFF69B4,\n\t\t'indianred': 0xCD5C5C, 'indigo': 0x4B0082, 'ivory': 0xFFFFF0, 'khaki': 0xF0E68C, 'lavender': 0xE6E6FA, 'lavenderblush': 0xFFF0F5, 'lawngreen': 0x7CFC00,\n\t\t'lemonchiffon': 0xFFFACD, 'lightblue': 0xADD8E6, 'lightcoral': 0xF08080, 'lightcyan': 0xE0FFFF, 'lightgoldenrodyellow': 0xFAFAD2, 'lightgray': 0xD3D3D3,\n\t\t'lightgreen': 0x90EE90, 'lightgrey': 0xD3D3D3, 'lightpink': 0xFFB6C1, 'lightsalmon': 0xFFA07A, 'lightseagreen': 0x20B2AA, 'lightskyblue': 0x87CEFA,\n\t\t'lightslategray': 0x778899, 'lightslategrey': 0x778899, 'lightsteelblue': 0xB0C4DE, 'lightyellow': 0xFFFFE0, 'lime': 0x00FF00, 'limegreen': 0x32CD32,\n\t\t'linen': 0xFAF0E6, 'magenta': 0xFF00FF, 'maroon': 0x800000, 'mediumaquamarine': 0x66CDAA, 'mediumblue': 0x0000CD, 'mediumorchid': 0xBA55D3,\n\t\t'mediumpurple': 0x9370DB, 'mediumseagreen': 0x3CB371, 'mediumslateblue': 0x7B68EE, 'mediumspringgreen': 0x00FA9A, 'mediumturquoise': 0x48D1CC,\n\t\t'mediumvioletred': 0xC71585, 'midnightblue': 0x191970, 'mintcream': 0xF5FFFA, 'mistyrose': 0xFFE4E1, 'moccasin': 0xFFE4B5, 'navajowhite': 0xFFDEAD,\n\t\t'navy': 0x000080, 'oldlace': 0xFDF5E6, 'olive': 0x808000, 'olivedrab': 0x6B8E23, 'orange': 0xFFA500, 'orangered': 0xFF4500, 'orchid': 0xDA70D6,\n\t\t'palegoldenrod': 0xEEE8AA, 'palegreen': 0x98FB98, 'paleturquoise': 0xAFEEEE, 'palevioletred': 0xDB7093, 'papayawhip': 0xFFEFD5, 'peachpuff': 0xFFDAB9,\n\t\t'peru': 0xCD853F, 'pink': 0xFFC0CB, 'plum': 0xDDA0DD, 'powderblue': 0xB0E0E6, 'purple': 0x800080, 'rebeccapurple': 0x663399, 'red': 0xFF0000, 'rosybrown': 0xBC8F8F,\n\t\t'royalblue': 0x4169E1, 'saddlebrown': 0x8B4513, 'salmon': 0xFA8072, 'sandybrown': 0xF4A460, 'seagreen': 0x2E8B57, 'seashell': 0xFFF5EE,\n\t\t'sienna': 0xA0522D, 'silver': 0xC0C0C0, 'skyblue': 0x87CEEB, 'slateblue': 0x6A5ACD, 'slategray': 0x708090, 'slategrey': 0x708090, 'snow': 0xFFFAFA,\n\t\t'springgreen': 0x00FF7F, 'steelblue': 0x4682B4, 'tan': 0xD2B48C, 'teal': 0x008080, 'thistle': 0xD8BFD8, 'tomato': 0xFF6347, 'turquoise': 0x40E0D0,\n\t\t'violet': 0xEE82EE, 'wheat': 0xF5DEB3, 'white': 0xFFFFFF, 'whitesmoke': 0xF5F5F5, 'yellow': 0xFFFF00, 'yellowgreen': 0x9ACD32 };\n\n\tfunction Color( 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\tObject.assign( Color.prototype, {\n\n\t\tisColor: true,\n\n\t\tr: 1, g: 1, b: 1,\n\n\t\tset: function ( value ) {\n\n\t\t\tif ( value && value.isColor ) {\n\n\t\t\t\tthis.copy( value );\n\n\t\t\t} else if ( typeof value === 'number' ) {\n\n\t\t\t\tthis.setHex( value );\n\n\t\t\t} else if ( typeof value === 'string' ) {\n\n\t\t\t\tthis.setStyle( value );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetScalar: function ( scalar ) {\n\n\t\t\tthis.r = scalar;\n\t\t\tthis.g = scalar;\n\t\t\tthis.b = scalar;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetHex: function ( hex ) {\n\n\t\t\thex = Math.floor( hex );\n\n\t\t\tthis.r = ( hex >> 16 & 255 ) / 255;\n\t\t\tthis.g = ( hex >> 8 & 255 ) / 255;\n\t\t\tthis.b = ( hex & 255 ) / 255;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetRGB: function ( r, g, b ) {\n\n\t\t\tthis.r = r;\n\t\t\tthis.g = g;\n\t\t\tthis.b = b;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetHSL: function () {\n\n\t\t\tfunction hue2rgb( p, q, t ) {\n\n\t\t\t\tif ( t < 0 ) t += 1;\n\t\t\t\tif ( t > 1 ) t -= 1;\n\t\t\t\tif ( t < 1 / 6 ) return p + ( q - p ) * 6 * t;\n\t\t\t\tif ( t < 1 / 2 ) return q;\n\t\t\t\tif ( t < 2 / 3 ) return p + ( q - p ) * 6 * ( 2 / 3 - t );\n\t\t\t\treturn p;\n\n\t\t\t}\n\n\t\t\treturn function setHSL( h, s, l ) {\n\n\t\t\t\t// h,s,l ranges are in 0.0 - 1.0\n\t\t\t\th = _Math.euclideanModulo( h, 1 );\n\t\t\t\ts = _Math.clamp( s, 0, 1 );\n\t\t\t\tl = _Math.clamp( l, 0, 1 );\n\n\t\t\t\tif ( s === 0 ) {\n\n\t\t\t\t\tthis.r = this.g = this.b = l;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tvar p = l <= 0.5 ? l * ( 1 + s ) : l + s - ( l * s );\n\t\t\t\t\tvar q = ( 2 * l ) - p;\n\n\t\t\t\t\tthis.r = hue2rgb( q, p, h + 1 / 3 );\n\t\t\t\t\tthis.g = hue2rgb( q, p, h );\n\t\t\t\t\tthis.b = hue2rgb( q, p, h - 1 / 3 );\n\n\t\t\t\t}\n\n\t\t\t\treturn this;\n\n\t\t\t};\n\n\t\t}(),\n\n\t\tsetStyle: function ( style ) {\n\n\t\t\tfunction handleAlpha( string ) {\n\n\t\t\t\tif ( string === undefined ) return;\n\n\t\t\t\tif ( parseFloat( string ) < 1 ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.Color: Alpha component of ' + style + ' will be ignored.' );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\n\t\t\tvar m;\n\n\t\t\tif ( m = /^((?:rgb|hsl)a?)\\(\\s*([^\\)]*)\\)/.exec( style ) ) {\n\n\t\t\t\t// rgb / hsl\n\n\t\t\t\tvar color;\n\t\t\t\tvar name = m[ 1 ];\n\t\t\t\tvar components = m[ 2 ];\n\n\t\t\t\tswitch ( name ) {\n\n\t\t\t\t\tcase 'rgb':\n\t\t\t\t\tcase 'rgba':\n\n\t\t\t\t\t\tif ( color = /^(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*(,\\s*([0-9]*\\.?[0-9]+)\\s*)?$/.exec( components ) ) {\n\n\t\t\t\t\t\t\t// rgb(255,0,0) rgba(255,0,0,0.5)\n\t\t\t\t\t\t\tthis.r = Math.min( 255, parseInt( color[ 1 ], 10 ) ) / 255;\n\t\t\t\t\t\t\tthis.g = Math.min( 255, parseInt( color[ 2 ], 10 ) ) / 255;\n\t\t\t\t\t\t\tthis.b = Math.min( 255, parseInt( color[ 3 ], 10 ) ) / 255;\n\n\t\t\t\t\t\t\thandleAlpha( color[ 5 ] );\n\n\t\t\t\t\t\t\treturn this;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( color = /^(\\d+)\\%\\s*,\\s*(\\d+)\\%\\s*,\\s*(\\d+)\\%\\s*(,\\s*([0-9]*\\.?[0-9]+)\\s*)?$/.exec( components ) ) {\n\n\t\t\t\t\t\t\t// rgb(100%,0%,0%) rgba(100%,0%,0%,0.5)\n\t\t\t\t\t\t\tthis.r = Math.min( 100, parseInt( color[ 1 ], 10 ) ) / 100;\n\t\t\t\t\t\t\tthis.g = Math.min( 100, parseInt( color[ 2 ], 10 ) ) / 100;\n\t\t\t\t\t\t\tthis.b = Math.min( 100, parseInt( color[ 3 ], 10 ) ) / 100;\n\n\t\t\t\t\t\t\thandleAlpha( color[ 5 ] );\n\n\t\t\t\t\t\t\treturn this;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'hsl':\n\t\t\t\t\tcase 'hsla':\n\n\t\t\t\t\t\tif ( color = /^([0-9]*\\.?[0-9]+)\\s*,\\s*(\\d+)\\%\\s*,\\s*(\\d+)\\%\\s*(,\\s*([0-9]*\\.?[0-9]+)\\s*)?$/.exec( components ) ) {\n\n\t\t\t\t\t\t\t// hsl(120,50%,50%) hsla(120,50%,50%,0.5)\n\t\t\t\t\t\t\tvar h = parseFloat( color[ 1 ] ) / 360;\n\t\t\t\t\t\t\tvar s = parseInt( color[ 2 ], 10 ) / 100;\n\t\t\t\t\t\t\tvar l = parseInt( color[ 3 ], 10 ) / 100;\n\n\t\t\t\t\t\t\thandleAlpha( color[ 5 ] );\n\n\t\t\t\t\t\t\treturn this.setHSL( h, s, l );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t} else if ( m = /^\\#([A-Fa-f0-9]+)$/.exec( style ) ) {\n\n\t\t\t\t// hex color\n\n\t\t\t\tvar hex = m[ 1 ];\n\t\t\t\tvar size = hex.length;\n\n\t\t\t\tif ( size === 3 ) {\n\n\t\t\t\t\t// #ff0\n\t\t\t\t\tthis.r = parseInt( hex.charAt( 0 ) + hex.charAt( 0 ), 16 ) / 255;\n\t\t\t\t\tthis.g = parseInt( hex.charAt( 1 ) + hex.charAt( 1 ), 16 ) / 255;\n\t\t\t\t\tthis.b = parseInt( hex.charAt( 2 ) + hex.charAt( 2 ), 16 ) / 255;\n\n\t\t\t\t\treturn this;\n\n\t\t\t\t} else if ( size === 6 ) {\n\n\t\t\t\t\t// #ff0000\n\t\t\t\t\tthis.r = parseInt( hex.charAt( 0 ) + hex.charAt( 1 ), 16 ) / 255;\n\t\t\t\t\tthis.g = parseInt( hex.charAt( 2 ) + hex.charAt( 3 ), 16 ) / 255;\n\t\t\t\t\tthis.b = parseInt( hex.charAt( 4 ) + hex.charAt( 5 ), 16 ) / 255;\n\n\t\t\t\t\treturn this;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( style && style.length > 0 ) {\n\n\t\t\t\t// color keywords\n\t\t\t\tvar hex = ColorKeywords[ style ];\n\n\t\t\t\tif ( hex !== undefined ) {\n\n\t\t\t\t\t// red\n\t\t\t\t\tthis.setHex( hex );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// unknown color\n\t\t\t\t\tconsole.warn( 'THREE.Color: Unknown color ' + style );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tclone: function () {\n\n\t\t\treturn new this.constructor( this.r, this.g, this.b );\n\n\t\t},\n\n\t\tcopy: function ( color ) {\n\n\t\t\tthis.r = color.r;\n\t\t\tthis.g = color.g;\n\t\t\tthis.b = color.b;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tcopyGammaToLinear: function ( color, gammaFactor ) {\n\n\t\t\tif ( gammaFactor === undefined ) gammaFactor = 2.0;\n\n\t\t\tthis.r = Math.pow( color.r, gammaFactor );\n\t\t\tthis.g = Math.pow( color.g, gammaFactor );\n\t\t\tthis.b = Math.pow( color.b, gammaFactor );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tcopyLinearToGamma: function ( color, gammaFactor ) {\n\n\t\t\tif ( gammaFactor === undefined ) gammaFactor = 2.0;\n\n\t\t\tvar safeInverse = ( gammaFactor > 0 ) ? ( 1.0 / gammaFactor ) : 1.0;\n\n\t\t\tthis.r = Math.pow( color.r, safeInverse );\n\t\t\tthis.g = Math.pow( color.g, safeInverse );\n\t\t\tthis.b = Math.pow( color.b, safeInverse );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tconvertGammaToLinear: function () {\n\n\t\t\tvar r = this.r, g = this.g, b = this.b;\n\n\t\t\tthis.r = r * r;\n\t\t\tthis.g = g * g;\n\t\t\tthis.b = b * b;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tconvertLinearToGamma: function () {\n\n\t\t\tthis.r = Math.sqrt( this.r );\n\t\t\tthis.g = Math.sqrt( this.g );\n\t\t\tthis.b = Math.sqrt( this.b );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tgetHex: function () {\n\n\t\t\treturn ( this.r * 255 ) << 16 ^ ( this.g * 255 ) << 8 ^ ( this.b * 255 ) << 0;\n\n\t\t},\n\n\t\tgetHexString: function () {\n\n\t\t\treturn ( '000000' + this.getHex().toString( 16 ) ).slice( - 6 );\n\n\t\t},\n\n\t\tgetHSL: function ( optionalTarget ) {\n\n\t\t\t// h,s,l ranges are in 0.0 - 1.0\n\n\t\t\tvar hsl = optionalTarget || { h: 0, s: 0, l: 0 };\n\n\t\t\tvar r = this.r, g = this.g, b = this.b;\n\n\t\t\tvar max = Math.max( r, g, b );\n\t\t\tvar min = Math.min( r, g, b );\n\n\t\t\tvar hue, saturation;\n\t\t\tvar lightness = ( min + max ) / 2.0;\n\n\t\t\tif ( min === max ) {\n\n\t\t\t\thue = 0;\n\t\t\t\tsaturation = 0;\n\n\t\t\t} else {\n\n\t\t\t\tvar delta = max - min;\n\n\t\t\t\tsaturation = lightness <= 0.5 ? delta / ( max + min ) : delta / ( 2 - max - min );\n\n\t\t\t\tswitch ( max ) {\n\n\t\t\t\t\tcase r: hue = ( g - b ) / delta + ( g < b ? 6 : 0 ); break;\n\t\t\t\t\tcase g: hue = ( b - r ) / delta + 2; break;\n\t\t\t\t\tcase b: hue = ( r - g ) / delta + 4; break;\n\n\t\t\t\t}\n\n\t\t\t\thue /= 6;\n\n\t\t\t}\n\n\t\t\thsl.h = hue;\n\t\t\thsl.s = saturation;\n\t\t\thsl.l = lightness;\n\n\t\t\treturn hsl;\n\n\t\t},\n\n\t\tgetStyle: function () {\n\n\t\t\treturn 'rgb(' + ( ( this.r * 255 ) | 0 ) + ',' + ( ( this.g * 255 ) | 0 ) + ',' + ( ( this.b * 255 ) | 0 ) + ')';\n\n\t\t},\n\n\t\toffsetHSL: function ( h, s, l ) {\n\n\t\t\tvar hsl = this.getHSL();\n\n\t\t\thsl.h += h; hsl.s += s; hsl.l += l;\n\n\t\t\tthis.setHSL( hsl.h, hsl.s, hsl.l );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tadd: function ( color ) {\n\n\t\t\tthis.r += color.r;\n\t\t\tthis.g += color.g;\n\t\t\tthis.b += color.b;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\taddColors: function ( color1, color2 ) {\n\n\t\t\tthis.r = color1.r + color2.r;\n\t\t\tthis.g = color1.g + color2.g;\n\t\t\tthis.b = color1.b + color2.b;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\taddScalar: function ( s ) {\n\n\t\t\tthis.r += s;\n\t\t\tthis.g += s;\n\t\t\tthis.b += s;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsub: function ( color ) {\n\n\t\t\tthis.r = Math.max( 0, this.r - color.r );\n\t\t\tthis.g = Math.max( 0, this.g - color.g );\n\t\t\tthis.b = Math.max( 0, this.b - color.b );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tmultiply: function ( color ) {\n\n\t\t\tthis.r *= color.r;\n\t\t\tthis.g *= color.g;\n\t\t\tthis.b *= color.b;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tmultiplyScalar: function ( s ) {\n\n\t\t\tthis.r *= s;\n\t\t\tthis.g *= s;\n\t\t\tthis.b *= s;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tlerp: function ( color, alpha ) {\n\n\t\t\tthis.r += ( color.r - this.r ) * alpha;\n\t\t\tthis.g += ( color.g - this.g ) * alpha;\n\t\t\tthis.b += ( color.b - this.b ) * alpha;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tequals: function ( c ) {\n\n\t\t\treturn ( c.r === this.r ) && ( c.g === this.g ) && ( c.b === this.b );\n\n\t\t},\n\n\t\tfromArray: function ( array, offset ) {\n\n\t\t\tif ( offset === undefined ) offset = 0;\n\n\t\t\tthis.r = array[ offset ];\n\t\t\tthis.g = array[ offset + 1 ];\n\t\t\tthis.b = array[ offset + 2 ];\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\ttoArray: function ( array, offset ) {\n\n\t\t\tif ( array === undefined ) array = [];\n\t\t\tif ( offset === undefined ) offset = 0;\n\n\t\t\tarray[ offset ] = this.r;\n\t\t\tarray[ offset + 1 ] = this.g;\n\t\t\tarray[ offset + 2 ] = this.b;\n\n\t\t\treturn array;\n\n\t\t},\n\n\t\ttoJSON: function () {\n\n\t\t\treturn this.getHex();\n\n\t\t}\n\n\t} );\n\n\t/**\n\t * Uniforms library for shared webgl shaders\n\t */\n\n\tvar UniformsLib = {\n\n\t\tcommon: {\n\n\t\t\tdiffuse: { value: new Color( 0xeeeeee ) },\n\t\t\topacity: { value: 1.0 },\n\n\t\t\tmap: { value: null },\n\t\t\tuvTransform: { value: new Matrix3() },\n\n\t\t\talphaMap: { value: null },\n\n\t\t},\n\n\t\tspecularmap: {\n\n\t\t\tspecularMap: { value: null },\n\n\t\t},\n\n\t\tenvmap: {\n\n\t\t\tenvMap: { value: null },\n\t\t\tflipEnvMap: { value: - 1 },\n\t\t\treflectivity: { value: 1.0 },\n\t\t\trefractionRatio: { value: 0.98 }\n\n\t\t},\n\n\t\taomap: {\n\n\t\t\taoMap: { value: null },\n\t\t\taoMapIntensity: { value: 1 }\n\n\t\t},\n\n\t\tlightmap: {\n\n\t\t\tlightMap: { value: null },\n\t\t\tlightMapIntensity: { value: 1 }\n\n\t\t},\n\n\t\temissivemap: {\n\n\t\t\temissiveMap: { value: null }\n\n\t\t},\n\n\t\tbumpmap: {\n\n\t\t\tbumpMap: { value: null },\n\t\t\tbumpScale: { value: 1 }\n\n\t\t},\n\n\t\tnormalmap: {\n\n\t\t\tnormalMap: { value: null },\n\t\t\tnormalScale: { value: new Vector2( 1, 1 ) }\n\n\t\t},\n\n\t\tdisplacementmap: {\n\n\t\t\tdisplacementMap: { value: null },\n\t\t\tdisplacementScale: { value: 1 },\n\t\t\tdisplacementBias: { value: 0 }\n\n\t\t},\n\n\t\troughnessmap: {\n\n\t\t\troughnessMap: { value: null }\n\n\t\t},\n\n\t\tmetalnessmap: {\n\n\t\t\tmetalnessMap: { value: null }\n\n\t\t},\n\n\t\tgradientmap: {\n\n\t\t\tgradientMap: { value: null }\n\n\t\t},\n\n\t\tfog: {\n\n\t\t\tfogDensity: { value: 0.00025 },\n\t\t\tfogNear: { value: 1 },\n\t\t\tfogFar: { value: 2000 },\n\t\t\tfogColor: { value: new Color( 0xffffff ) }\n\n\t\t},\n\n\t\tlights: {\n\n\t\t\tambientLightColor: { value: [] },\n\n\t\t\tdirectionalLights: { value: [], properties: {\n\t\t\t\tdirection: {},\n\t\t\t\tcolor: {},\n\n\t\t\t\tshadow: {},\n\t\t\t\tshadowBias: {},\n\t\t\t\tshadowRadius: {},\n\t\t\t\tshadowMapSize: {}\n\t\t\t} },\n\n\t\t\tdirectionalShadowMap: { value: [] },\n\t\t\tdirectionalShadowMatrix: { value: [] },\n\n\t\t\tspotLights: { value: [], properties: {\n\t\t\t\tcolor: {},\n\t\t\t\tposition: {},\n\t\t\t\tdirection: {},\n\t\t\t\tdistance: {},\n\t\t\t\tconeCos: {},\n\t\t\t\tpenumbraCos: {},\n\t\t\t\tdecay: {},\n\n\t\t\t\tshadow: {},\n\t\t\t\tshadowBias: {},\n\t\t\t\tshadowRadius: {},\n\t\t\t\tshadowMapSize: {}\n\t\t\t} },\n\n\t\t\tspotShadowMap: { value: [] },\n\t\t\tspotShadowMatrix: { value: [] },\n\n\t\t\tpointLights: { value: [], properties: {\n\t\t\t\tcolor: {},\n\t\t\t\tposition: {},\n\t\t\t\tdecay: {},\n\t\t\t\tdistance: {},\n\n\t\t\t\tshadow: {},\n\t\t\t\tshadowBias: {},\n\t\t\t\tshadowRadius: {},\n\t\t\t\tshadowMapSize: {},\n\t\t\t\tshadowCameraNear: {},\n\t\t\t\tshadowCameraFar: {}\n\t\t\t} },\n\n\t\t\tpointShadowMap: { value: [] },\n\t\t\tpointShadowMatrix: { value: [] },\n\n\t\t\themisphereLights: { value: [], properties: {\n\t\t\t\tdirection: {},\n\t\t\t\tskyColor: {},\n\t\t\t\tgroundColor: {}\n\t\t\t} },\n\n\t\t\t// TODO (abelnation): RectAreaLight BRDF data needs to be moved from example to main src\n\t\t\trectAreaLights: { value: [], properties: {\n\t\t\t\tcolor: {},\n\t\t\t\tposition: {},\n\t\t\t\twidth: {},\n\t\t\t\theight: {}\n\t\t\t} }\n\n\t\t},\n\n\t\tpoints: {\n\n\t\t\tdiffuse: { value: new Color( 0xeeeeee ) },\n\t\t\topacity: { value: 1.0 },\n\t\t\tsize: { value: 1.0 },\n\t\t\tscale: { value: 1.0 },\n\t\t\tmap: { value: null },\n\t\t\tuvTransform: { value: new Matrix3() }\n\n\t\t}\n\n\t};\n\n\t/**\n\t * Uniform Utilities\n\t */\n\n\tvar UniformsUtils = {\n\n\t\tmerge: function ( uniforms ) {\n\n\t\t\tvar merged = {};\n\n\t\t\tfor ( var u = 0; u < uniforms.length; u ++ ) {\n\n\t\t\t\tvar tmp = this.clone( uniforms[ u ] );\n\n\t\t\t\tfor ( var p in tmp ) {\n\n\t\t\t\t\tmerged[ p ] = tmp[ p ];\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn merged;\n\n\t\t},\n\n\t\tclone: function ( uniforms_src ) {\n\n\t\t\tvar uniforms_dst = {};\n\n\t\t\tfor ( var u in uniforms_src ) {\n\n\t\t\t\tuniforms_dst[ u ] = {};\n\n\t\t\t\tfor ( var p in uniforms_src[ u ] ) {\n\n\t\t\t\t\tvar parameter_src = uniforms_src[ u ][ p ];\n\n\t\t\t\t\tif ( parameter_src && ( parameter_src.isColor ||\n\t\t\t\t\t\tparameter_src.isMatrix3 || parameter_src.isMatrix4 ||\n\t\t\t\t\t\tparameter_src.isVector2 || parameter_src.isVector3 || parameter_src.isVector4 ||\n\t\t\t\t\t\tparameter_src.isTexture ) ) {\n\n\t\t\t\t\t\tuniforms_dst[ u ][ p ] = parameter_src.clone();\n\n\t\t\t\t\t} else if ( Array.isArray( parameter_src ) ) {\n\n\t\t\t\t\t\tuniforms_dst[ u ][ p ] = parameter_src.slice();\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tuniforms_dst[ u ][ p ] = parameter_src;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn uniforms_dst;\n\n\t\t}\n\n\t};\n\n\tvar alphamap_fragment = \"#ifdef USE_ALPHAMAP\\n\\tdiffuseColor.a *= texture2D( alphaMap, vUv ).g;\\n#endif\\n\";\n\n\tvar alphamap_pars_fragment = \"#ifdef USE_ALPHAMAP\\n\\tuniform sampler2D alphaMap;\\n#endif\\n\";\n\n\tvar alphatest_fragment = \"#ifdef ALPHATEST\\n\\tif ( diffuseColor.a < ALPHATEST ) discard;\\n#endif\\n\";\n\n\tvar aomap_fragment = \"#ifdef USE_AOMAP\\n\\tfloat ambientOcclusion = ( texture2D( aoMap, vUv2 ).r - 1.0 ) * aoMapIntensity + 1.0;\\n\\treflectedLight.indirectDiffuse *= ambientOcclusion;\\n\\t#if defined( USE_ENVMAP ) && defined( PHYSICAL )\\n\\t\\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\\n\\t\\treflectedLight.indirectSpecular *= computeSpecularOcclusion( dotNV, ambientOcclusion, material.specularRoughness );\\n\\t#endif\\n#endif\\n\";\n\n\tvar aomap_pars_fragment = \"#ifdef USE_AOMAP\\n\\tuniform sampler2D aoMap;\\n\\tuniform float aoMapIntensity;\\n#endif\";\n\n\tvar begin_vertex = \"\\nvec3 transformed = vec3( position );\\n\";\n\n\tvar beginnormal_vertex = \"\\nvec3 objectNormal = vec3( normal );\\n\";\n\n\tvar bsdfs = \"float punctualLightIntensityToIrradianceFactor( const in float lightDistance, const in float cutoffDistance, const in float decayExponent ) {\\n\\tif( decayExponent > 0.0 ) {\\n#if defined ( PHYSICALLY_CORRECT_LIGHTS )\\n\\t\\tfloat distanceFalloff = 1.0 / max( pow( lightDistance, decayExponent ), 0.01 );\\n\\t\\tfloat maxDistanceCutoffFactor = pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) );\\n\\t\\treturn distanceFalloff * maxDistanceCutoffFactor;\\n#else\\n\\t\\treturn pow( saturate( -lightDistance / cutoffDistance + 1.0 ), decayExponent );\\n#endif\\n\\t}\\n\\treturn 1.0;\\n}\\nvec3 BRDF_Diffuse_Lambert( const in vec3 diffuseColor ) {\\n\\treturn RECIPROCAL_PI * diffuseColor;\\n}\\nvec3 F_Schlick( const in vec3 specularColor, const in float dotLH ) {\\n\\tfloat fresnel = exp2( ( -5.55473 * dotLH - 6.98316 ) * dotLH );\\n\\treturn ( 1.0 - specularColor ) * fresnel + specularColor;\\n}\\nfloat G_GGX_Smith( const in float alpha, const in float dotNL, const in float dotNV ) {\\n\\tfloat a2 = pow2( alpha );\\n\\tfloat gl = dotNL + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\\n\\tfloat gv = dotNV + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\\n\\treturn 1.0 / ( gl * gv );\\n}\\nfloat G_GGX_SmithCorrelated( const in float alpha, const in float dotNL, const in float dotNV ) {\\n\\tfloat a2 = pow2( alpha );\\n\\tfloat gv = dotNL * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\\n\\tfloat gl = dotNV * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\\n\\treturn 0.5 / max( gv + gl, EPSILON );\\n}\\nfloat D_GGX( const in float alpha, const in float dotNH ) {\\n\\tfloat a2 = pow2( alpha );\\n\\tfloat denom = pow2( dotNH ) * ( a2 - 1.0 ) + 1.0;\\n\\treturn RECIPROCAL_PI * a2 / pow2( denom );\\n}\\nvec3 BRDF_Specular_GGX( const in IncidentLight incidentLight, const in GeometricContext geometry, const in vec3 specularColor, const in float roughness ) {\\n\\tfloat alpha = pow2( roughness );\\n\\tvec3 halfDir = normalize( incidentLight.direction + geometry.viewDir );\\n\\tfloat dotNL = saturate( dot( geometry.normal, incidentLight.direction ) );\\n\\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\\n\\tfloat dotNH = saturate( dot( geometry.normal, halfDir ) );\\n\\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\\n\\tvec3 F = F_Schlick( specularColor, dotLH );\\n\\tfloat G = G_GGX_SmithCorrelated( alpha, dotNL, dotNV );\\n\\tfloat D = D_GGX( alpha, dotNH );\\n\\treturn F * ( G * D );\\n}\\nvec2 LTC_Uv( const in vec3 N, const in vec3 V, const in float roughness ) {\\n\\tconst float LUT_SIZE = 64.0;\\n\\tconst float LUT_SCALE = ( LUT_SIZE - 1.0 ) / LUT_SIZE;\\n\\tconst float LUT_BIAS = 0.5 / LUT_SIZE;\\n\\tfloat theta = acos( dot( N, V ) );\\n\\tvec2 uv = vec2(\\n\\t\\tsqrt( saturate( roughness ) ),\\n\\t\\tsaturate( theta / ( 0.5 * PI ) ) );\\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.86267 + (0.49788 + 0.01436 * y ) * y;\\n\\tfloat b = 3.45068 + (4.18814 + y) * y;\\n\\tfloat v = a / b;\\n\\tfloat theta_sintheta = (x > 0.0) ? v : 0.5 * inversesqrt( 1.0 - x * x ) - 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\\tvec3 result = vec3( LTC_ClippedSphereFormFactor( vectorFormFactor ) );\\n\\treturn result;\\n}\\nvec3 BRDF_Specular_GGX_Environment( const in GeometricContext geometry, const in vec3 specularColor, const in float roughness ) {\\n\\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\\n\\tconst vec4 c0 = vec4( - 1, - 0.0275, - 0.572, 0.022 );\\n\\tconst vec4 c1 = vec4( 1, 0.0425, 1.04, - 0.04 );\\n\\tvec4 r = roughness * c0 + c1;\\n\\tfloat a004 = min( r.x * r.x, exp2( - 9.28 * dotNV ) ) * r.x + r.y;\\n\\tvec2 AB = vec2( -1.04, 1.04 ) * a004 + r.zw;\\n\\treturn specularColor * AB.x + AB.y;\\n}\\nfloat G_BlinnPhong_Implicit( ) {\\n\\treturn 0.25;\\n}\\nfloat D_BlinnPhong( const in float shininess, const in float dotNH ) {\\n\\treturn RECIPROCAL_PI * ( shininess * 0.5 + 1.0 ) * pow( dotNH, shininess );\\n}\\nvec3 BRDF_Specular_BlinnPhong( const in IncidentLight incidentLight, const in GeometricContext geometry, const in vec3 specularColor, const in float shininess ) {\\n\\tvec3 halfDir = normalize( incidentLight.direction + geometry.viewDir );\\n\\tfloat dotNH = saturate( dot( geometry.normal, halfDir ) );\\n\\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\\n\\tvec3 F = F_Schlick( specularColor, dotLH );\\n\\tfloat G = G_BlinnPhong_Implicit( );\\n\\tfloat D = D_BlinnPhong( shininess, dotNH );\\n\\treturn F * ( G * D );\\n}\\nfloat GGXRoughnessToBlinnExponent( const in float ggxRoughness ) {\\n\\treturn ( 2.0 / pow2( ggxRoughness + 0.0001 ) - 2.0 );\\n}\\nfloat BlinnExponentToGGXRoughness( const in float blinnExponent ) {\\n\\treturn sqrt( 2.0 / ( blinnExponent + 2.0 ) );\\n}\\n\";\n\n\tvar bumpmap_pars_fragment = \"#ifdef USE_BUMPMAP\\n\\tuniform sampler2D bumpMap;\\n\\tuniform float bumpScale;\\n\\tvec2 dHdxy_fwd() {\\n\\t\\tvec2 dSTdx = dFdx( vUv );\\n\\t\\tvec2 dSTdy = dFdy( vUv );\\n\\t\\tfloat Hll = bumpScale * texture2D( bumpMap, vUv ).x;\\n\\t\\tfloat dBx = bumpScale * texture2D( bumpMap, vUv + dSTdx ).x - Hll;\\n\\t\\tfloat dBy = bumpScale * texture2D( bumpMap, vUv + dSTdy ).x - Hll;\\n\\t\\treturn vec2( dBx, dBy );\\n\\t}\\n\\tvec3 perturbNormalArb( vec3 surf_pos, vec3 surf_norm, vec2 dHdxy ) {\\n\\t\\tvec3 vSigmaX = vec3( dFdx( surf_pos.x ), dFdx( surf_pos.y ), dFdx( surf_pos.z ) );\\n\\t\\tvec3 vSigmaY = vec3( dFdy( surf_pos.x ), dFdy( surf_pos.y ), dFdy( surf_pos.z ) );\\n\\t\\tvec3 vN = surf_norm;\\n\\t\\tvec3 R1 = cross( vSigmaY, vN );\\n\\t\\tvec3 R2 = cross( vN, vSigmaX );\\n\\t\\tfloat fDet = dot( vSigmaX, R1 );\\n\\t\\tvec3 vGrad = sign( fDet ) * ( dHdxy.x * R1 + dHdxy.y * R2 );\\n\\t\\treturn normalize( abs( fDet ) * surf_norm - vGrad );\\n\\t}\\n#endif\\n\";\n\n\tvar clipping_planes_fragment = \"#if NUM_CLIPPING_PLANES > 0\\n\\tfor ( int i = 0; i < UNION_CLIPPING_PLANES; ++ i ) {\\n\\t\\tvec4 plane = clippingPlanes[ i ];\\n\\t\\tif ( dot( vViewPosition, plane.xyz ) > plane.w ) discard;\\n\\t}\\n\\t\\t\\n\\t#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\\n\\t\\tbool clipped = true;\\n\\t\\tfor ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; ++ i ) {\\n\\t\\t\\tvec4 plane = clippingPlanes[ i ];\\n\\t\\t\\tclipped = ( dot( vViewPosition, plane.xyz ) > plane.w ) && clipped;\\n\\t\\t}\\n\\t\\tif ( clipped ) discard;\\n\\t\\n\\t#endif\\n#endif\\n\";\n\n\tvar clipping_planes_pars_fragment = \"#if NUM_CLIPPING_PLANES > 0\\n\\t#if ! defined( PHYSICAL ) && ! defined( PHONG )\\n\\t\\tvarying vec3 vViewPosition;\\n\\t#endif\\n\\tuniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ];\\n#endif\\n\";\n\n\tvar clipping_planes_pars_vertex = \"#if NUM_CLIPPING_PLANES > 0 && ! defined( PHYSICAL ) && ! defined( PHONG )\\n\\tvarying vec3 vViewPosition;\\n#endif\\n\";\n\n\tvar clipping_planes_vertex = \"#if NUM_CLIPPING_PLANES > 0 && ! defined( PHYSICAL ) && ! defined( PHONG )\\n\\tvViewPosition = - mvPosition.xyz;\\n#endif\\n\";\n\n\tvar color_fragment = \"#ifdef USE_COLOR\\n\\tdiffuseColor.rgb *= vColor;\\n#endif\";\n\n\tvar color_pars_fragment = \"#ifdef USE_COLOR\\n\\tvarying vec3 vColor;\\n#endif\\n\";\n\n\tvar color_pars_vertex = \"#ifdef USE_COLOR\\n\\tvarying vec3 vColor;\\n#endif\";\n\n\tvar color_vertex = \"#ifdef USE_COLOR\\n\\tvColor.xyz = color.xyz;\\n#endif\";\n\n\tvar common = \"#define PI 3.14159265359\\n#define PI2 6.28318530718\\n#define PI_HALF 1.5707963267949\\n#define RECIPROCAL_PI 0.31830988618\\n#define RECIPROCAL_PI2 0.15915494\\n#define LOG2 1.442695\\n#define EPSILON 1e-6\\n#define saturate(a) clamp( a, 0.0, 1.0 )\\n#define whiteCompliment(a) ( 1.0 - saturate( a ) )\\nfloat pow2( const in float x ) { return x*x; }\\nfloat pow3( const in float x ) { return x*x*x; }\\nfloat pow4( const in float x ) { float x2 = x*x; return x2*x2; }\\nfloat average( const in vec3 color ) { return dot( color, vec3( 0.3333 ) ); }\\nhighp float rand( const in vec2 uv ) {\\n\\tconst highp float a = 12.9898, b = 78.233, c = 43758.5453;\\n\\thighp float dt = dot( uv.xy, vec2( a,b ) ), sn = mod( dt, PI );\\n\\treturn fract(sin(sn) * c);\\n}\\nstruct IncidentLight {\\n\\tvec3 color;\\n\\tvec3 direction;\\n\\tbool visible;\\n};\\nstruct ReflectedLight {\\n\\tvec3 directDiffuse;\\n\\tvec3 directSpecular;\\n\\tvec3 indirectDiffuse;\\n\\tvec3 indirectSpecular;\\n};\\nstruct GeometricContext {\\n\\tvec3 position;\\n\\tvec3 normal;\\n\\tvec3 viewDir;\\n};\\nvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\\n\\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\\n}\\nvec3 inverseTransformDirection( in vec3 dir, in mat4 matrix ) {\\n\\treturn normalize( ( vec4( dir, 0.0 ) * matrix ).xyz );\\n}\\nvec3 projectOnPlane(in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\\n\\tfloat distance = dot( planeNormal, point - pointOnPlane );\\n\\treturn - distance * planeNormal + point;\\n}\\nfloat sideOfPlane( in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\\n\\treturn sign( dot( point - pointOnPlane, planeNormal ) );\\n}\\nvec3 linePlaneIntersect( in vec3 pointOnLine, in vec3 lineDirection, in vec3 pointOnPlane, in vec3 planeNormal ) {\\n\\treturn lineDirection * ( dot( planeNormal, pointOnPlane - pointOnLine ) / dot( planeNormal, lineDirection ) ) + pointOnLine;\\n}\\nmat3 transposeMat3( const in mat3 m ) {\\n\\tmat3 tmp;\\n\\ttmp[ 0 ] = vec3( m[ 0 ].x, m[ 1 ].x, m[ 2 ].x );\\n\\ttmp[ 1 ] = vec3( m[ 0 ].y, m[ 1 ].y, m[ 2 ].y );\\n\\ttmp[ 2 ] = vec3( m[ 0 ].z, m[ 1 ].z, m[ 2 ].z );\\n\\treturn tmp;\\n}\\nfloat linearToRelativeLuminance( const in vec3 color ) {\\n\\tvec3 weights = vec3( 0.2126, 0.7152, 0.0722 );\\n\\treturn dot( weights, color.rgb );\\n}\\n\";\n\n\tvar cube_uv_reflection_fragment = \"#ifdef ENVMAP_TYPE_CUBE_UV\\n#define cubeUV_textureSize (1024.0)\\nint getFaceFromDirection(vec3 direction) {\\n\\tvec3 absDirection = abs(direction);\\n\\tint face = -1;\\n\\tif( absDirection.x > absDirection.z ) {\\n\\t\\tif(absDirection.x > absDirection.y )\\n\\t\\t\\tface = direction.x > 0.0 ? 0 : 3;\\n\\t\\telse\\n\\t\\t\\tface = direction.y > 0.0 ? 1 : 4;\\n\\t}\\n\\telse {\\n\\t\\tif(absDirection.z > absDirection.y )\\n\\t\\t\\tface = direction.z > 0.0 ? 2 : 5;\\n\\t\\telse\\n\\t\\t\\tface = direction.y > 0.0 ? 1 : 4;\\n\\t}\\n\\treturn face;\\n}\\n#define cubeUV_maxLods1 (log2(cubeUV_textureSize*0.25) - 1.0)\\n#define cubeUV_rangeClamp (exp2((6.0 - 1.0) * 2.0))\\nvec2 MipLevelInfo( vec3 vec, float roughnessLevel, float roughness ) {\\n\\tfloat scale = exp2(cubeUV_maxLods1 - roughnessLevel);\\n\\tfloat dxRoughness = dFdx(roughness);\\n\\tfloat dyRoughness = dFdy(roughness);\\n\\tvec3 dx = dFdx( vec * scale * dxRoughness );\\n\\tvec3 dy = dFdy( vec * scale * dyRoughness );\\n\\tfloat d = max( dot( dx, dx ), dot( dy, dy ) );\\n\\td = clamp(d, 1.0, cubeUV_rangeClamp);\\n\\tfloat mipLevel = 0.5 * log2(d);\\n\\treturn vec2(floor(mipLevel), fract(mipLevel));\\n}\\n#define cubeUV_maxLods2 (log2(cubeUV_textureSize*0.25) - 2.0)\\n#define cubeUV_rcpTextureSize (1.0 / cubeUV_textureSize)\\nvec2 getCubeUV(vec3 direction, float roughnessLevel, float mipLevel) {\\n\\tmipLevel = roughnessLevel > cubeUV_maxLods2 - 3.0 ? 0.0 : mipLevel;\\n\\tfloat a = 16.0 * cubeUV_rcpTextureSize;\\n\\tvec2 exp2_packed = exp2( vec2( roughnessLevel, mipLevel ) );\\n\\tvec2 rcp_exp2_packed = vec2( 1.0 ) / exp2_packed;\\n\\tfloat powScale = exp2_packed.x * exp2_packed.y;\\n\\tfloat scale = rcp_exp2_packed.x * rcp_exp2_packed.y * 0.25;\\n\\tfloat mipOffset = 0.75*(1.0 - rcp_exp2_packed.y) * rcp_exp2_packed.x;\\n\\tbool bRes = mipLevel == 0.0;\\n\\tscale = bRes && (scale < a) ? a : scale;\\n\\tvec3 r;\\n\\tvec2 offset;\\n\\tint face = getFaceFromDirection(direction);\\n\\tfloat rcpPowScale = 1.0 / powScale;\\n\\tif( face == 0) {\\n\\t\\tr = vec3(direction.x, -direction.z, direction.y);\\n\\t\\toffset = vec2(0.0+mipOffset,0.75 * rcpPowScale);\\n\\t\\toffset.y = bRes && (offset.y < 2.0*a) ? a : offset.y;\\n\\t}\\n\\telse if( face == 1) {\\n\\t\\tr = vec3(direction.y, direction.x, direction.z);\\n\\t\\toffset = vec2(scale+mipOffset, 0.75 * rcpPowScale);\\n\\t\\toffset.y = bRes && (offset.y < 2.0*a) ? a : offset.y;\\n\\t}\\n\\telse if( face == 2) {\\n\\t\\tr = vec3(direction.z, direction.x, direction.y);\\n\\t\\toffset = vec2(2.0*scale+mipOffset, 0.75 * rcpPowScale);\\n\\t\\toffset.y = bRes && (offset.y < 2.0*a) ? a : offset.y;\\n\\t}\\n\\telse if( face == 3) {\\n\\t\\tr = vec3(direction.x, direction.z, direction.y);\\n\\t\\toffset = vec2(0.0+mipOffset,0.5 * rcpPowScale);\\n\\t\\toffset.y = bRes && (offset.y < 2.0*a) ? 0.0 : offset.y;\\n\\t}\\n\\telse if( face == 4) {\\n\\t\\tr = vec3(direction.y, direction.x, -direction.z);\\n\\t\\toffset = vec2(scale+mipOffset, 0.5 * rcpPowScale);\\n\\t\\toffset.y = bRes && (offset.y < 2.0*a) ? 0.0 : offset.y;\\n\\t}\\n\\telse {\\n\\t\\tr = vec3(direction.z, -direction.x, direction.y);\\n\\t\\toffset = vec2(2.0*scale+mipOffset, 0.5 * rcpPowScale);\\n\\t\\toffset.y = bRes && (offset.y < 2.0*a) ? 0.0 : offset.y;\\n\\t}\\n\\tr = normalize(r);\\n\\tfloat texelOffset = 0.5 * cubeUV_rcpTextureSize;\\n\\tvec2 s = ( r.yz / abs( r.x ) + vec2( 1.0 ) ) * 0.5;\\n\\tvec2 base = offset + vec2( texelOffset );\\n\\treturn base + s * ( scale - 2.0 * texelOffset );\\n}\\n#define cubeUV_maxLods3 (log2(cubeUV_textureSize*0.25) - 3.0)\\nvec4 textureCubeUV(vec3 reflectedDirection, float roughness ) {\\n\\tfloat roughnessVal = roughness* cubeUV_maxLods3;\\n\\tfloat r1 = floor(roughnessVal);\\n\\tfloat r2 = r1 + 1.0;\\n\\tfloat t = fract(roughnessVal);\\n\\tvec2 mipInfo = MipLevelInfo(reflectedDirection, r1, roughness);\\n\\tfloat s = mipInfo.y;\\n\\tfloat level0 = mipInfo.x;\\n\\tfloat level1 = level0 + 1.0;\\n\\tlevel1 = level1 > 5.0 ? 5.0 : level1;\\n\\tlevel0 += min( floor( s + 0.5 ), 5.0 );\\n\\tvec2 uv_10 = getCubeUV(reflectedDirection, r1, level0);\\n\\tvec4 color10 = envMapTexelToLinear(texture2D(envMap, uv_10));\\n\\tvec2 uv_20 = getCubeUV(reflectedDirection, r2, level0);\\n\\tvec4 color20 = envMapTexelToLinear(texture2D(envMap, uv_20));\\n\\tvec4 result = mix(color10, color20, t);\\n\\treturn vec4(result.rgb, 1.0);\\n}\\n#endif\\n\";\n\n\tvar defaultnormal_vertex = \"vec3 transformedNormal = normalMatrix * objectNormal;\\n#ifdef FLIP_SIDED\\n\\ttransformedNormal = - transformedNormal;\\n#endif\\n\";\n\n\tvar displacementmap_pars_vertex = \"#ifdef USE_DISPLACEMENTMAP\\n\\tuniform sampler2D displacementMap;\\n\\tuniform float displacementScale;\\n\\tuniform float displacementBias;\\n#endif\\n\";\n\n\tvar displacementmap_vertex = \"#ifdef USE_DISPLACEMENTMAP\\n\\ttransformed += normalize( objectNormal ) * ( texture2D( displacementMap, uv ).x * displacementScale + displacementBias );\\n#endif\\n\";\n\n\tvar emissivemap_fragment = \"#ifdef USE_EMISSIVEMAP\\n\\tvec4 emissiveColor = texture2D( emissiveMap, vUv );\\n\\temissiveColor.rgb = emissiveMapTexelToLinear( emissiveColor ).rgb;\\n\\ttotalEmissiveRadiance *= emissiveColor.rgb;\\n#endif\\n\";\n\n\tvar emissivemap_pars_fragment = \"#ifdef USE_EMISSIVEMAP\\n\\tuniform sampler2D emissiveMap;\\n#endif\\n\";\n\n\tvar encodings_fragment = \" gl_FragColor = linearToOutputTexel( gl_FragColor );\\n\";\n\n\tvar encodings_pars_fragment = \"\\nvec4 LinearToLinear( in vec4 value ) {\\n\\treturn value;\\n}\\nvec4 GammaToLinear( in vec4 value, in float gammaFactor ) {\\n\\treturn vec4( pow( value.xyz, vec3( gammaFactor ) ), value.w );\\n}\\nvec4 LinearToGamma( in vec4 value, in float gammaFactor ) {\\n\\treturn vec4( pow( value.xyz, vec3( 1.0 / gammaFactor ) ), value.w );\\n}\\nvec4 sRGBToLinear( in vec4 value ) {\\n\\treturn vec4( mix( pow( value.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), value.rgb * 0.0773993808, vec3( lessThanEqual( value.rgb, vec3( 0.04045 ) ) ) ), value.w );\\n}\\nvec4 LinearTosRGB( in vec4 value ) {\\n\\treturn vec4( mix( pow( value.rgb, vec3( 0.41666 ) ) * 1.055 - vec3( 0.055 ), value.rgb * 12.92, vec3( lessThanEqual( value.rgb, vec3( 0.0031308 ) ) ) ), value.w );\\n}\\nvec4 RGBEToLinear( in vec4 value ) {\\n\\treturn vec4( value.rgb * exp2( value.a * 255.0 - 128.0 ), 1.0 );\\n}\\nvec4 LinearToRGBE( in vec4 value ) {\\n\\tfloat maxComponent = max( max( value.r, value.g ), value.b );\\n\\tfloat fExp = clamp( ceil( log2( maxComponent ) ), -128.0, 127.0 );\\n\\treturn vec4( value.rgb / exp2( fExp ), ( fExp + 128.0 ) / 255.0 );\\n}\\nvec4 RGBMToLinear( in vec4 value, in float maxRange ) {\\n\\treturn vec4( value.xyz * value.w * maxRange, 1.0 );\\n}\\nvec4 LinearToRGBM( in vec4 value, in float maxRange ) {\\n\\tfloat maxRGB = max( value.x, max( value.g, value.b ) );\\n\\tfloat M = clamp( maxRGB / maxRange, 0.0, 1.0 );\\n\\tM = ceil( M * 255.0 ) / 255.0;\\n\\treturn vec4( value.rgb / ( M * maxRange ), M );\\n}\\nvec4 RGBDToLinear( in vec4 value, in float maxRange ) {\\n\\treturn vec4( value.rgb * ( ( maxRange / 255.0 ) / value.a ), 1.0 );\\n}\\nvec4 LinearToRGBD( in vec4 value, in float maxRange ) {\\n\\tfloat maxRGB = max( value.x, max( value.g, value.b ) );\\n\\tfloat D = max( maxRange / maxRGB, 1.0 );\\n\\tD = min( floor( D ) / 255.0, 1.0 );\\n\\treturn vec4( value.rgb * ( D * ( 255.0 / maxRange ) ), D );\\n}\\nconst mat3 cLogLuvM = mat3( 0.2209, 0.3390, 0.4184, 0.1138, 0.6780, 0.7319, 0.0102, 0.1130, 0.2969 );\\nvec4 LinearToLogLuv( in vec4 value ) {\\n\\tvec3 Xp_Y_XYZp = value.rgb * cLogLuvM;\\n\\tXp_Y_XYZp = max(Xp_Y_XYZp, vec3(1e-6, 1e-6, 1e-6));\\n\\tvec4 vResult;\\n\\tvResult.xy = Xp_Y_XYZp.xy / Xp_Y_XYZp.z;\\n\\tfloat Le = 2.0 * log2(Xp_Y_XYZp.y) + 127.0;\\n\\tvResult.w = fract(Le);\\n\\tvResult.z = (Le - (floor(vResult.w*255.0))/255.0)/255.0;\\n\\treturn vResult;\\n}\\nconst mat3 cLogLuvInverseM = mat3( 6.0014, -2.7008, -1.7996, -1.3320, 3.1029, -5.7721, 0.3008, -1.0882, 5.6268 );\\nvec4 LogLuvToLinear( in vec4 value ) {\\n\\tfloat Le = value.z * 255.0 + value.w;\\n\\tvec3 Xp_Y_XYZp;\\n\\tXp_Y_XYZp.y = exp2((Le - 127.0) / 2.0);\\n\\tXp_Y_XYZp.z = Xp_Y_XYZp.y / value.y;\\n\\tXp_Y_XYZp.x = value.x * Xp_Y_XYZp.z;\\n\\tvec3 vRGB = Xp_Y_XYZp.rgb * cLogLuvInverseM;\\n\\treturn vec4( max(vRGB, 0.0), 1.0 );\\n}\\n\";\n\n\tvar envmap_fragment = \"#ifdef USE_ENVMAP\\n\\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\\n\\t\\tvec3 cameraToVertex = normalize( vWorldPosition - cameraPosition );\\n\\t\\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\\n\\t\\t#ifdef ENVMAP_MODE_REFLECTION\\n\\t\\t\\tvec3 reflectVec = reflect( cameraToVertex, worldNormal );\\n\\t\\t#else\\n\\t\\t\\tvec3 reflectVec = refract( cameraToVertex, worldNormal, refractionRatio );\\n\\t\\t#endif\\n\\t#else\\n\\t\\tvec3 reflectVec = vReflect;\\n\\t#endif\\n\\t#ifdef ENVMAP_TYPE_CUBE\\n\\t\\tvec4 envColor = textureCube( envMap, vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\\n\\t#elif defined( ENVMAP_TYPE_EQUIREC )\\n\\t\\tvec2 sampleUV;\\n\\t\\treflectVec = normalize( reflectVec );\\n\\t\\tsampleUV.y = asin( clamp( reflectVec.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\\n\\t\\tsampleUV.x = atan( reflectVec.z, reflectVec.x ) * RECIPROCAL_PI2 + 0.5;\\n\\t\\tvec4 envColor = texture2D( envMap, sampleUV );\\n\\t#elif defined( ENVMAP_TYPE_SPHERE )\\n\\t\\treflectVec = normalize( reflectVec );\\n\\t\\tvec3 reflectView = normalize( ( viewMatrix * vec4( reflectVec, 0.0 ) ).xyz + vec3( 0.0, 0.0, 1.0 ) );\\n\\t\\tvec4 envColor = texture2D( envMap, reflectView.xy * 0.5 + 0.5 );\\n\\t#else\\n\\t\\tvec4 envColor = vec4( 0.0 );\\n\\t#endif\\n\\tenvColor = envMapTexelToLinear( envColor );\\n\\t#ifdef ENVMAP_BLENDING_MULTIPLY\\n\\t\\toutgoingLight = mix( outgoingLight, outgoingLight * envColor.xyz, specularStrength * reflectivity );\\n\\t#elif defined( ENVMAP_BLENDING_MIX )\\n\\t\\toutgoingLight = mix( outgoingLight, envColor.xyz, specularStrength * reflectivity );\\n\\t#elif defined( ENVMAP_BLENDING_ADD )\\n\\t\\toutgoingLight += envColor.xyz * specularStrength * reflectivity;\\n\\t#endif\\n#endif\\n\";\n\n\tvar envmap_pars_fragment = \"#if defined( USE_ENVMAP ) || defined( PHYSICAL )\\n\\tuniform float reflectivity;\\n\\tuniform float envMapIntensity;\\n#endif\\n#ifdef USE_ENVMAP\\n\\t#if ! defined( PHYSICAL ) && ( defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) )\\n\\t\\tvarying vec3 vWorldPosition;\\n\\t#endif\\n\\t#ifdef ENVMAP_TYPE_CUBE\\n\\t\\tuniform samplerCube envMap;\\n\\t#else\\n\\t\\tuniform sampler2D envMap;\\n\\t#endif\\n\\tuniform float flipEnvMap;\\n\\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) || defined( PHYSICAL )\\n\\t\\tuniform float refractionRatio;\\n\\t#else\\n\\t\\tvarying vec3 vReflect;\\n\\t#endif\\n#endif\\n\";\n\n\tvar envmap_pars_vertex = \"#ifdef USE_ENVMAP\\n\\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\\n\\t\\tvarying vec3 vWorldPosition;\\n\\t#else\\n\\t\\tvarying vec3 vReflect;\\n\\t\\tuniform float refractionRatio;\\n\\t#endif\\n#endif\\n\";\n\n\tvar envmap_vertex = \"#ifdef USE_ENVMAP\\n\\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\\n\\t\\tvWorldPosition = worldPosition.xyz;\\n\\t#else\\n\\t\\tvec3 cameraToVertex = normalize( worldPosition.xyz - cameraPosition );\\n\\t\\tvec3 worldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\\n\\t\\t#ifdef ENVMAP_MODE_REFLECTION\\n\\t\\t\\tvReflect = reflect( cameraToVertex, worldNormal );\\n\\t\\t#else\\n\\t\\t\\tvReflect = refract( cameraToVertex, worldNormal, refractionRatio );\\n\\t\\t#endif\\n\\t#endif\\n#endif\\n\";\n\n\tvar fog_vertex = \"\\n#ifdef USE_FOG\\nfogDepth = -mvPosition.z;\\n#endif\";\n\n\tvar fog_pars_vertex = \"#ifdef USE_FOG\\n varying float fogDepth;\\n#endif\\n\";\n\n\tvar fog_fragment = \"#ifdef USE_FOG\\n\\t#ifdef FOG_EXP2\\n\\t\\tfloat fogFactor = whiteCompliment( exp2( - fogDensity * fogDensity * fogDepth * fogDepth * LOG2 ) );\\n\\t#else\\n\\t\\tfloat fogFactor = smoothstep( fogNear, fogFar, fogDepth );\\n\\t#endif\\n\\tgl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );\\n#endif\\n\";\n\n\tvar fog_pars_fragment = \"#ifdef USE_FOG\\n\\tuniform vec3 fogColor;\\n\\tvarying float fogDepth;\\n\\t#ifdef FOG_EXP2\\n\\t\\tuniform float fogDensity;\\n\\t#else\\n\\t\\tuniform float fogNear;\\n\\t\\tuniform float fogFar;\\n\\t#endif\\n#endif\\n\";\n\n\tvar gradientmap_pars_fragment = \"#ifdef TOON\\n\\tuniform sampler2D gradientMap;\\n\\tvec3 getGradientIrradiance( vec3 normal, vec3 lightDirection ) {\\n\\t\\tfloat dotNL = dot( normal, lightDirection );\\n\\t\\tvec2 coord = vec2( dotNL * 0.5 + 0.5, 0.0 );\\n\\t\\t#ifdef USE_GRADIENTMAP\\n\\t\\t\\treturn texture2D( gradientMap, coord ).rgb;\\n\\t\\t#else\\n\\t\\t\\treturn ( coord.x < 0.7 ) ? vec3( 0.7 ) : vec3( 1.0 );\\n\\t\\t#endif\\n\\t}\\n#endif\\n\";\n\n\tvar lightmap_fragment = \"#ifdef USE_LIGHTMAP\\n\\treflectedLight.indirectDiffuse += PI * texture2D( lightMap, vUv2 ).xyz * lightMapIntensity;\\n#endif\\n\";\n\n\tvar lightmap_pars_fragment = \"#ifdef USE_LIGHTMAP\\n\\tuniform sampler2D lightMap;\\n\\tuniform float lightMapIntensity;\\n#endif\";\n\n\tvar lights_lambert_vertex = \"vec3 diffuse = vec3( 1.0 );\\nGeometricContext geometry;\\ngeometry.position = mvPosition.xyz;\\ngeometry.normal = normalize( transformedNormal );\\ngeometry.viewDir = normalize( -mvPosition.xyz );\\nGeometricContext backGeometry;\\nbackGeometry.position = geometry.position;\\nbackGeometry.normal = -geometry.normal;\\nbackGeometry.viewDir = geometry.viewDir;\\nvLightFront = vec3( 0.0 );\\n#ifdef DOUBLE_SIDED\\n\\tvLightBack = vec3( 0.0 );\\n#endif\\nIncidentLight directLight;\\nfloat dotNL;\\nvec3 directLightColor_Diffuse;\\n#if NUM_POINT_LIGHTS > 0\\n\\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\\n\\t\\tgetPointDirectLightIrradiance( pointLights[ i ], geometry, directLight );\\n\\t\\tdotNL = dot( geometry.normal, directLight.direction );\\n\\t\\tdirectLightColor_Diffuse = PI * directLight.color;\\n\\t\\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\\n\\t\\t#ifdef DOUBLE_SIDED\\n\\t\\t\\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\\n\\t\\t#endif\\n\\t}\\n#endif\\n#if NUM_SPOT_LIGHTS > 0\\n\\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\\n\\t\\tgetSpotDirectLightIrradiance( spotLights[ i ], geometry, directLight );\\n\\t\\tdotNL = dot( geometry.normal, directLight.direction );\\n\\t\\tdirectLightColor_Diffuse = PI * directLight.color;\\n\\t\\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\\n\\t\\t#ifdef DOUBLE_SIDED\\n\\t\\t\\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\\n\\t\\t#endif\\n\\t}\\n#endif\\n#if NUM_DIR_LIGHTS > 0\\n\\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\\n\\t\\tgetDirectionalDirectLightIrradiance( directionalLights[ i ], geometry, directLight );\\n\\t\\tdotNL = dot( geometry.normal, directLight.direction );\\n\\t\\tdirectLightColor_Diffuse = PI * directLight.color;\\n\\t\\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\\n\\t\\t#ifdef DOUBLE_SIDED\\n\\t\\t\\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\\n\\t\\t#endif\\n\\t}\\n#endif\\n#if NUM_HEMI_LIGHTS > 0\\n\\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\\n\\t\\tvLightFront += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\\n\\t\\t#ifdef DOUBLE_SIDED\\n\\t\\t\\tvLightBack += getHemisphereLightIrradiance( hemisphereLights[ i ], backGeometry );\\n\\t\\t#endif\\n\\t}\\n#endif\\n\";\n\n\tvar lights_pars = \"uniform vec3 ambientLightColor;\\nvec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) {\\n\\tvec3 irradiance = ambientLightColor;\\n\\t#ifndef PHYSICALLY_CORRECT_LIGHTS\\n\\t\\tirradiance *= PI;\\n\\t#endif\\n\\treturn irradiance;\\n}\\n#if NUM_DIR_LIGHTS > 0\\n\\tstruct DirectionalLight {\\n\\t\\tvec3 direction;\\n\\t\\tvec3 color;\\n\\t\\tint shadow;\\n\\t\\tfloat shadowBias;\\n\\t\\tfloat shadowRadius;\\n\\t\\tvec2 shadowMapSize;\\n\\t};\\n\\tuniform DirectionalLight directionalLights[ NUM_DIR_LIGHTS ];\\n\\tvoid getDirectionalDirectLightIrradiance( const in DirectionalLight directionalLight, const in GeometricContext geometry, out IncidentLight directLight ) {\\n\\t\\tdirectLight.color = directionalLight.color;\\n\\t\\tdirectLight.direction = directionalLight.direction;\\n\\t\\tdirectLight.visible = true;\\n\\t}\\n#endif\\n#if NUM_POINT_LIGHTS > 0\\n\\tstruct PointLight {\\n\\t\\tvec3 position;\\n\\t\\tvec3 color;\\n\\t\\tfloat distance;\\n\\t\\tfloat decay;\\n\\t\\tint shadow;\\n\\t\\tfloat shadowBias;\\n\\t\\tfloat shadowRadius;\\n\\t\\tvec2 shadowMapSize;\\n\\t\\tfloat shadowCameraNear;\\n\\t\\tfloat shadowCameraFar;\\n\\t};\\n\\tuniform PointLight pointLights[ NUM_POINT_LIGHTS ];\\n\\tvoid getPointDirectLightIrradiance( const in PointLight pointLight, const in GeometricContext geometry, out IncidentLight directLight ) {\\n\\t\\tvec3 lVector = pointLight.position - geometry.position;\\n\\t\\tdirectLight.direction = normalize( lVector );\\n\\t\\tfloat lightDistance = length( lVector );\\n\\t\\tdirectLight.color = pointLight.color;\\n\\t\\tdirectLight.color *= punctualLightIntensityToIrradianceFactor( lightDistance, pointLight.distance, pointLight.decay );\\n\\t\\tdirectLight.visible = ( directLight.color != vec3( 0.0 ) );\\n\\t}\\n#endif\\n#if NUM_SPOT_LIGHTS > 0\\n\\tstruct SpotLight {\\n\\t\\tvec3 position;\\n\\t\\tvec3 direction;\\n\\t\\tvec3 color;\\n\\t\\tfloat distance;\\n\\t\\tfloat decay;\\n\\t\\tfloat coneCos;\\n\\t\\tfloat penumbraCos;\\n\\t\\tint shadow;\\n\\t\\tfloat shadowBias;\\n\\t\\tfloat shadowRadius;\\n\\t\\tvec2 shadowMapSize;\\n\\t};\\n\\tuniform SpotLight spotLights[ NUM_SPOT_LIGHTS ];\\n\\tvoid getSpotDirectLightIrradiance( const in SpotLight spotLight, const in GeometricContext geometry, out IncidentLight directLight ) {\\n\\t\\tvec3 lVector = spotLight.position - geometry.position;\\n\\t\\tdirectLight.direction = normalize( lVector );\\n\\t\\tfloat lightDistance = length( lVector );\\n\\t\\tfloat angleCos = dot( directLight.direction, spotLight.direction );\\n\\t\\tif ( angleCos > spotLight.coneCos ) {\\n\\t\\t\\tfloat spotEffect = smoothstep( spotLight.coneCos, spotLight.penumbraCos, angleCos );\\n\\t\\t\\tdirectLight.color = spotLight.color;\\n\\t\\t\\tdirectLight.color *= spotEffect * punctualLightIntensityToIrradianceFactor( lightDistance, spotLight.distance, spotLight.decay );\\n\\t\\t\\tdirectLight.visible = true;\\n\\t\\t} else {\\n\\t\\t\\tdirectLight.color = vec3( 0.0 );\\n\\t\\t\\tdirectLight.visible = false;\\n\\t\\t}\\n\\t}\\n#endif\\n#if NUM_RECT_AREA_LIGHTS > 0\\n\\tstruct RectAreaLight {\\n\\t\\tvec3 color;\\n\\t\\tvec3 position;\\n\\t\\tvec3 halfWidth;\\n\\t\\tvec3 halfHeight;\\n\\t};\\n\\tuniform sampler2D ltcMat;\\tuniform sampler2D ltcMag;\\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#if defined( USE_ENVMAP ) && defined( PHYSICAL )\\n\\tvec3 getLightProbeIndirectIrradiance( const in GeometricContext geometry, const in int maxMIPLevel ) {\\n\\t\\tvec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );\\n\\t\\t#ifdef ENVMAP_TYPE_CUBE\\n\\t\\t\\tvec3 queryVec = vec3( flipEnvMap * worldNormal.x, worldNormal.yz );\\n\\t\\t\\t#ifdef TEXTURE_LOD_EXT\\n\\t\\t\\t\\tvec4 envMapColor = textureCubeLodEXT( envMap, queryVec, float( maxMIPLevel ) );\\n\\t\\t\\t#else\\n\\t\\t\\t\\tvec4 envMapColor = textureCube( envMap, queryVec, float( maxMIPLevel ) );\\n\\t\\t\\t#endif\\n\\t\\t\\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\\n\\t\\t#elif defined( ENVMAP_TYPE_CUBE_UV )\\n\\t\\t\\tvec3 queryVec = vec3( flipEnvMap * worldNormal.x, worldNormal.yz );\\n\\t\\t\\tvec4 envMapColor = textureCubeUV( queryVec, 1.0 );\\n\\t\\t#else\\n\\t\\t\\tvec4 envMapColor = vec4( 0.0 );\\n\\t\\t#endif\\n\\t\\treturn PI * envMapColor.rgb * envMapIntensity;\\n\\t}\\n\\tfloat getSpecularMIPLevel( const in float blinnShininessExponent, const in int maxMIPLevel ) {\\n\\t\\tfloat maxMIPLevelScalar = float( maxMIPLevel );\\n\\t\\tfloat desiredMIPLevel = maxMIPLevelScalar + 0.79248 - 0.5 * log2( pow2( blinnShininessExponent ) + 1.0 );\\n\\t\\treturn clamp( desiredMIPLevel, 0.0, maxMIPLevelScalar );\\n\\t}\\n\\tvec3 getLightProbeIndirectRadiance( const in GeometricContext geometry, const in float blinnShininessExponent, const in int maxMIPLevel ) {\\n\\t\\t#ifdef ENVMAP_MODE_REFLECTION\\n\\t\\t\\tvec3 reflectVec = reflect( -geometry.viewDir, geometry.normal );\\n\\t\\t#else\\n\\t\\t\\tvec3 reflectVec = refract( -geometry.viewDir, geometry.normal, refractionRatio );\\n\\t\\t#endif\\n\\t\\treflectVec = inverseTransformDirection( reflectVec, viewMatrix );\\n\\t\\tfloat specularMIPLevel = getSpecularMIPLevel( blinnShininessExponent, maxMIPLevel );\\n\\t\\t#ifdef ENVMAP_TYPE_CUBE\\n\\t\\t\\tvec3 queryReflectVec = vec3( flipEnvMap * reflectVec.x, reflectVec.yz );\\n\\t\\t\\t#ifdef TEXTURE_LOD_EXT\\n\\t\\t\\t\\tvec4 envMapColor = textureCubeLodEXT( envMap, queryReflectVec, specularMIPLevel );\\n\\t\\t\\t#else\\n\\t\\t\\t\\tvec4 envMapColor = textureCube( envMap, queryReflectVec, specularMIPLevel );\\n\\t\\t\\t#endif\\n\\t\\t\\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\\n\\t\\t#elif defined( ENVMAP_TYPE_CUBE_UV )\\n\\t\\t\\tvec3 queryReflectVec = vec3( flipEnvMap * reflectVec.x, reflectVec.yz );\\n\\t\\t\\tvec4 envMapColor = textureCubeUV(queryReflectVec, BlinnExponentToGGXRoughness(blinnShininessExponent));\\n\\t\\t#elif defined( ENVMAP_TYPE_EQUIREC )\\n\\t\\t\\tvec2 sampleUV;\\n\\t\\t\\tsampleUV.y = asin( clamp( reflectVec.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\\n\\t\\t\\tsampleUV.x = atan( reflectVec.z, reflectVec.x ) * RECIPROCAL_PI2 + 0.5;\\n\\t\\t\\t#ifdef TEXTURE_LOD_EXT\\n\\t\\t\\t\\tvec4 envMapColor = texture2DLodEXT( envMap, sampleUV, specularMIPLevel );\\n\\t\\t\\t#else\\n\\t\\t\\t\\tvec4 envMapColor = texture2D( envMap, sampleUV, specularMIPLevel );\\n\\t\\t\\t#endif\\n\\t\\t\\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\\n\\t\\t#elif defined( ENVMAP_TYPE_SPHERE )\\n\\t\\t\\tvec3 reflectView = normalize( ( viewMatrix * vec4( reflectVec, 0.0 ) ).xyz + vec3( 0.0,0.0,1.0 ) );\\n\\t\\t\\t#ifdef TEXTURE_LOD_EXT\\n\\t\\t\\t\\tvec4 envMapColor = texture2DLodEXT( envMap, reflectView.xy * 0.5 + 0.5, specularMIPLevel );\\n\\t\\t\\t#else\\n\\t\\t\\t\\tvec4 envMapColor = texture2D( envMap, reflectView.xy * 0.5 + 0.5, specularMIPLevel );\\n\\t\\t\\t#endif\\n\\t\\t\\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\\n\\t\\t#endif\\n\\t\\treturn envMapColor.rgb * envMapIntensity;\\n\\t}\\n#endif\\n\";\n\n\tvar lights_phong_fragment = \"BlinnPhongMaterial material;\\nmaterial.diffuseColor = diffuseColor.rgb;\\nmaterial.specularColor = specular;\\nmaterial.specularShininess = shininess;\\nmaterial.specularStrength = specularStrength;\\n\";\n\n\tvar lights_phong_pars_fragment = \"varying vec3 vViewPosition;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\nstruct BlinnPhongMaterial {\\n\\tvec3\\tdiffuseColor;\\n\\tvec3\\tspecularColor;\\n\\tfloat\\tspecularShininess;\\n\\tfloat\\tspecularStrength;\\n};\\nvoid RE_Direct_BlinnPhong( const in IncidentLight directLight, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\\n\\t#ifdef TOON\\n\\t\\tvec3 irradiance = getGradientIrradiance( geometry.normal, directLight.direction ) * directLight.color;\\n\\t#else\\n\\t\\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\\n\\t\\tvec3 irradiance = dotNL * directLight.color;\\n\\t#endif\\n\\t#ifndef PHYSICALLY_CORRECT_LIGHTS\\n\\t\\tirradiance *= PI;\\n\\t#endif\\n\\treflectedLight.directDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\\n\\treflectedLight.directSpecular += irradiance * BRDF_Specular_BlinnPhong( directLight, geometry, material.specularColor, material.specularShininess ) * material.specularStrength;\\n}\\nvoid RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\\n\\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\\n}\\n#define RE_Direct\\t\\t\\t\\tRE_Direct_BlinnPhong\\n#define RE_IndirectDiffuse\\t\\tRE_IndirectDiffuse_BlinnPhong\\n#define Material_LightProbeLOD( material )\\t(0)\\n\";\n\n\tvar lights_physical_fragment = \"PhysicalMaterial material;\\nmaterial.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor );\\nmaterial.specularRoughness = clamp( roughnessFactor, 0.04, 1.0 );\\n#ifdef STANDARD\\n\\tmaterial.specularColor = mix( vec3( DEFAULT_SPECULAR_COEFFICIENT ), diffuseColor.rgb, metalnessFactor );\\n#else\\n\\tmaterial.specularColor = mix( vec3( MAXIMUM_SPECULAR_COEFFICIENT * pow2( reflectivity ) ), diffuseColor.rgb, metalnessFactor );\\n\\tmaterial.clearCoat = saturate( clearCoat );\\tmaterial.clearCoatRoughness = clamp( clearCoatRoughness, 0.04, 1.0 );\\n#endif\\n\";\n\n\tvar lights_physical_pars_fragment = \"struct PhysicalMaterial {\\n\\tvec3\\tdiffuseColor;\\n\\tfloat\\tspecularRoughness;\\n\\tvec3\\tspecularColor;\\n\\t#ifndef STANDARD\\n\\t\\tfloat clearCoat;\\n\\t\\tfloat clearCoatRoughness;\\n\\t#endif\\n};\\n#define MAXIMUM_SPECULAR_COEFFICIENT 0.16\\n#define DEFAULT_SPECULAR_COEFFICIENT 0.04\\nfloat clearCoatDHRApprox( const in float roughness, const in float dotNL ) {\\n\\treturn DEFAULT_SPECULAR_COEFFICIENT + ( 1.0 - DEFAULT_SPECULAR_COEFFICIENT ) * ( pow( 1.0 - dotNL, 5.0 ) * pow( 1.0 - roughness, 2.0 ) );\\n}\\n#if NUM_RECT_AREA_LIGHTS > 0\\n\\tvoid RE_Direct_RectArea_Physical( const in RectAreaLight rectAreaLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\\n\\t\\tvec3 normal = geometry.normal;\\n\\t\\tvec3 viewDir = geometry.viewDir;\\n\\t\\tvec3 position = geometry.position;\\n\\t\\tvec3 lightPos = rectAreaLight.position;\\n\\t\\tvec3 halfWidth = rectAreaLight.halfWidth;\\n\\t\\tvec3 halfHeight = rectAreaLight.halfHeight;\\n\\t\\tvec3 lightColor = rectAreaLight.color;\\n\\t\\tfloat roughness = material.specularRoughness;\\n\\t\\tvec3 rectCoords[ 4 ];\\n\\t\\trectCoords[ 0 ] = lightPos - halfWidth - halfHeight;\\t\\trectCoords[ 1 ] = lightPos + halfWidth - halfHeight;\\n\\t\\trectCoords[ 2 ] = lightPos + halfWidth + halfHeight;\\n\\t\\trectCoords[ 3 ] = lightPos - halfWidth + halfHeight;\\n\\t\\tvec2 uv = LTC_Uv( normal, viewDir, roughness );\\n\\t\\tfloat norm = texture2D( ltcMag, uv ).a;\\n\\t\\tvec4 t = texture2D( ltcMat, uv );\\n\\t\\tmat3 mInv = mat3(\\n\\t\\t\\tvec3( 1, 0, t.y ),\\n\\t\\t\\tvec3( 0, t.z, 0 ),\\n\\t\\t\\tvec3( t.w, 0, t.x )\\n\\t\\t);\\n\\t\\treflectedLight.directSpecular += lightColor * material.specularColor * norm * LTC_Evaluate( normal, viewDir, position, mInv, rectCoords );\\n\\t\\treflectedLight.directDiffuse += lightColor * material.diffuseColor * LTC_Evaluate( normal, viewDir, position, mat3( 1 ), rectCoords );\\n\\t}\\n#endif\\nvoid RE_Direct_Physical( const in IncidentLight directLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\\n\\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\\n\\tvec3 irradiance = dotNL * directLight.color;\\n\\t#ifndef PHYSICALLY_CORRECT_LIGHTS\\n\\t\\tirradiance *= PI;\\n\\t#endif\\n\\t#ifndef STANDARD\\n\\t\\tfloat clearCoatDHR = material.clearCoat * clearCoatDHRApprox( material.clearCoatRoughness, dotNL );\\n\\t#else\\n\\t\\tfloat clearCoatDHR = 0.0;\\n\\t#endif\\n\\treflectedLight.directSpecular += ( 1.0 - clearCoatDHR ) * irradiance * BRDF_Specular_GGX( directLight, geometry, material.specularColor, material.specularRoughness );\\n\\treflectedLight.directDiffuse += ( 1.0 - clearCoatDHR ) * irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\\n\\t#ifndef STANDARD\\n\\t\\treflectedLight.directSpecular += irradiance * material.clearCoat * BRDF_Specular_GGX( directLight, geometry, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearCoatRoughness );\\n\\t#endif\\n}\\nvoid RE_IndirectDiffuse_Physical( const in vec3 irradiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\\n\\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\\n}\\nvoid RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 clearCoatRadiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\\n\\t#ifndef STANDARD\\n\\t\\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\\n\\t\\tfloat dotNL = dotNV;\\n\\t\\tfloat clearCoatDHR = material.clearCoat * clearCoatDHRApprox( material.clearCoatRoughness, dotNL );\\n\\t#else\\n\\t\\tfloat clearCoatDHR = 0.0;\\n\\t#endif\\n\\treflectedLight.indirectSpecular += ( 1.0 - clearCoatDHR ) * radiance * BRDF_Specular_GGX_Environment( geometry, material.specularColor, material.specularRoughness );\\n\\t#ifndef STANDARD\\n\\t\\treflectedLight.indirectSpecular += clearCoatRadiance * material.clearCoat * BRDF_Specular_GGX_Environment( geometry, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearCoatRoughness );\\n\\t#endif\\n}\\n#define RE_Direct\\t\\t\\t\\tRE_Direct_Physical\\n#define RE_Direct_RectArea\\t\\tRE_Direct_RectArea_Physical\\n#define RE_IndirectDiffuse\\t\\tRE_IndirectDiffuse_Physical\\n#define RE_IndirectSpecular\\t\\tRE_IndirectSpecular_Physical\\n#define Material_BlinnShininessExponent( material ) GGXRoughnessToBlinnExponent( material.specularRoughness )\\n#define Material_ClearCoat_BlinnShininessExponent( material ) GGXRoughnessToBlinnExponent( material.clearCoatRoughness )\\nfloat computeSpecularOcclusion( const in float dotNV, const in float ambientOcclusion, const in float roughness ) {\\n\\treturn saturate( pow( dotNV + ambientOcclusion, exp2( - 16.0 * roughness - 1.0 ) ) - 1.0 + ambientOcclusion );\\n}\\n\";\n\n\tvar lights_template = \"\\nGeometricContext geometry;\\ngeometry.position = - vViewPosition;\\ngeometry.normal = normal;\\ngeometry.viewDir = normalize( vViewPosition );\\nIncidentLight directLight;\\n#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct )\\n\\tPointLight pointLight;\\n\\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\\n\\t\\tpointLight = pointLights[ i ];\\n\\t\\tgetPointDirectLightIrradiance( pointLight, geometry, directLight );\\n\\t\\t#ifdef USE_SHADOWMAP\\n\\t\\tdirectLight.color *= all( bvec2( pointLight.shadow, directLight.visible ) ) ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ], pointLight.shadowCameraNear, pointLight.shadowCameraFar ) : 1.0;\\n\\t\\t#endif\\n\\t\\tRE_Direct( directLight, geometry, material, reflectedLight );\\n\\t}\\n#endif\\n#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct )\\n\\tSpotLight spotLight;\\n\\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\\n\\t\\tspotLight = spotLights[ i ];\\n\\t\\tgetSpotDirectLightIrradiance( spotLight, geometry, directLight );\\n\\t\\t#ifdef USE_SHADOWMAP\\n\\t\\tdirectLight.color *= all( bvec2( spotLight.shadow, directLight.visible ) ) ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\\n\\t\\t#endif\\n\\t\\tRE_Direct( directLight, geometry, material, reflectedLight );\\n\\t}\\n#endif\\n#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct )\\n\\tDirectionalLight directionalLight;\\n\\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\\n\\t\\tdirectionalLight = directionalLights[ i ];\\n\\t\\tgetDirectionalDirectLightIrradiance( directionalLight, geometry, directLight );\\n\\t\\t#ifdef USE_SHADOWMAP\\n\\t\\tdirectLight.color *= all( bvec2( directionalLight.shadow, directLight.visible ) ) ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\\n\\t\\t#endif\\n\\t\\tRE_Direct( directLight, geometry, material, reflectedLight );\\n\\t}\\n#endif\\n#if ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea )\\n\\tRectAreaLight rectAreaLight;\\n\\tfor ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) {\\n\\t\\trectAreaLight = rectAreaLights[ i ];\\n\\t\\tRE_Direct_RectArea( rectAreaLight, geometry, material, reflectedLight );\\n\\t}\\n#endif\\n#if defined( RE_IndirectDiffuse )\\n\\tvec3 irradiance = getAmbientLightIrradiance( ambientLightColor );\\n\\t#ifdef USE_LIGHTMAP\\n\\t\\tvec3 lightMapIrradiance = texture2D( lightMap, vUv2 ).xyz * lightMapIntensity;\\n\\t\\t#ifndef PHYSICALLY_CORRECT_LIGHTS\\n\\t\\t\\tlightMapIrradiance *= PI;\\n\\t\\t#endif\\n\\t\\tirradiance += lightMapIrradiance;\\n\\t#endif\\n\\t#if ( NUM_HEMI_LIGHTS > 0 )\\n\\t\\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\\n\\t\\t\\tirradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\\n\\t\\t}\\n\\t#endif\\n\\t#if defined( USE_ENVMAP ) && defined( PHYSICAL ) && defined( ENVMAP_TYPE_CUBE_UV )\\n\\t\\tirradiance += getLightProbeIndirectIrradiance( geometry, 8 );\\n\\t#endif\\n\\tRE_IndirectDiffuse( irradiance, geometry, material, reflectedLight );\\n#endif\\n#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )\\n\\tvec3 radiance = getLightProbeIndirectRadiance( geometry, Material_BlinnShininessExponent( material ), 8 );\\n\\t#ifndef STANDARD\\n\\t\\tvec3 clearCoatRadiance = getLightProbeIndirectRadiance( geometry, Material_ClearCoat_BlinnShininessExponent( material ), 8 );\\n\\t#else\\n\\t\\tvec3 clearCoatRadiance = vec3( 0.0 );\\n\\t#endif\\n\\tRE_IndirectSpecular( radiance, clearCoatRadiance, geometry, material, reflectedLight );\\n#endif\\n\";\n\n\tvar logdepthbuf_fragment = \"#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\\n\\tgl_FragDepthEXT = log2( vFragDepth ) * logDepthBufFC * 0.5;\\n#endif\";\n\n\tvar logdepthbuf_pars_fragment = \"#ifdef USE_LOGDEPTHBUF\\n\\tuniform float logDepthBufFC;\\n\\t#ifdef USE_LOGDEPTHBUF_EXT\\n\\t\\tvarying float vFragDepth;\\n\\t#endif\\n#endif\\n\";\n\n\tvar logdepthbuf_pars_vertex = \"#ifdef USE_LOGDEPTHBUF\\n\\t#ifdef USE_LOGDEPTHBUF_EXT\\n\\t\\tvarying float vFragDepth;\\n\\t#endif\\n\\tuniform float logDepthBufFC;\\n#endif\";\n\n\tvar logdepthbuf_vertex = \"#ifdef USE_LOGDEPTHBUF\\n\\t#ifdef USE_LOGDEPTHBUF_EXT\\n\\t\\tvFragDepth = 1.0 + gl_Position.w;\\n\\t#else\\n\\t\\tgl_Position.z = log2( max( EPSILON, gl_Position.w + 1.0 ) ) * logDepthBufFC - 1.0;\\n\\t\\tgl_Position.z *= gl_Position.w;\\n\\t#endif\\n#endif\\n\";\n\n\tvar map_fragment = \"#ifdef USE_MAP\\n\\tvec4 texelColor = texture2D( map, vUv );\\n\\ttexelColor = mapTexelToLinear( texelColor );\\n\\tdiffuseColor *= texelColor;\\n#endif\\n\";\n\n\tvar map_pars_fragment = \"#ifdef USE_MAP\\n\\tuniform sampler2D map;\\n#endif\\n\";\n\n\tvar map_particle_fragment = \"#ifdef USE_MAP\\n\\tvec2 uv = ( uvTransform * vec3( gl_PointCoord.x, 1.0 - gl_PointCoord.y, 1 ) ).xy;\\n\\tvec4 mapTexel = texture2D( map, uv );\\n\\tdiffuseColor *= mapTexelToLinear( mapTexel );\\n#endif\\n\";\n\n\tvar map_particle_pars_fragment = \"#ifdef USE_MAP\\n\\tuniform mat3 uvTransform;\\n\\tuniform sampler2D map;\\n#endif\\n\";\n\n\tvar metalnessmap_fragment = \"float metalnessFactor = metalness;\\n#ifdef USE_METALNESSMAP\\n\\tvec4 texelMetalness = texture2D( metalnessMap, vUv );\\n\\tmetalnessFactor *= texelMetalness.b;\\n#endif\\n\";\n\n\tvar metalnessmap_pars_fragment = \"#ifdef USE_METALNESSMAP\\n\\tuniform sampler2D metalnessMap;\\n#endif\";\n\n\tvar morphnormal_vertex = \"#ifdef USE_MORPHNORMALS\\n\\tobjectNormal += ( morphNormal0 - normal ) * morphTargetInfluences[ 0 ];\\n\\tobjectNormal += ( morphNormal1 - normal ) * morphTargetInfluences[ 1 ];\\n\\tobjectNormal += ( morphNormal2 - normal ) * morphTargetInfluences[ 2 ];\\n\\tobjectNormal += ( morphNormal3 - normal ) * morphTargetInfluences[ 3 ];\\n#endif\\n\";\n\n\tvar morphtarget_pars_vertex = \"#ifdef USE_MORPHTARGETS\\n\\t#ifndef USE_MORPHNORMALS\\n\\tuniform float morphTargetInfluences[ 8 ];\\n\\t#else\\n\\tuniform float morphTargetInfluences[ 4 ];\\n\\t#endif\\n#endif\";\n\n\tvar morphtarget_vertex = \"#ifdef USE_MORPHTARGETS\\n\\ttransformed += ( morphTarget0 - position ) * morphTargetInfluences[ 0 ];\\n\\ttransformed += ( morphTarget1 - position ) * morphTargetInfluences[ 1 ];\\n\\ttransformed += ( morphTarget2 - position ) * morphTargetInfluences[ 2 ];\\n\\ttransformed += ( morphTarget3 - position ) * morphTargetInfluences[ 3 ];\\n\\t#ifndef USE_MORPHNORMALS\\n\\ttransformed += ( morphTarget4 - position ) * morphTargetInfluences[ 4 ];\\n\\ttransformed += ( morphTarget5 - position ) * morphTargetInfluences[ 5 ];\\n\\ttransformed += ( morphTarget6 - position ) * morphTargetInfluences[ 6 ];\\n\\ttransformed += ( morphTarget7 - position ) * morphTargetInfluences[ 7 ];\\n\\t#endif\\n#endif\\n\";\n\n\tvar normal_fragment = \"#ifdef FLAT_SHADED\\n\\tvec3 fdx = vec3( dFdx( vViewPosition.x ), dFdx( vViewPosition.y ), dFdx( vViewPosition.z ) );\\n\\tvec3 fdy = vec3( dFdy( vViewPosition.x ), dFdy( vViewPosition.y ), dFdy( vViewPosition.z ) );\\n\\tvec3 normal = normalize( cross( fdx, fdy ) );\\n#else\\n\\tvec3 normal = normalize( vNormal );\\n\\t#ifdef DOUBLE_SIDED\\n\\t\\tnormal = normal * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\\n\\t#endif\\n#endif\\n#ifdef USE_NORMALMAP\\n\\tnormal = perturbNormal2Arb( -vViewPosition, normal );\\n#elif defined( USE_BUMPMAP )\\n\\tnormal = perturbNormalArb( -vViewPosition, normal, dHdxy_fwd() );\\n#endif\\n\";\n\n\tvar normalmap_pars_fragment = \"#ifdef USE_NORMALMAP\\n\\tuniform sampler2D normalMap;\\n\\tuniform vec2 normalScale;\\n\\tvec3 perturbNormal2Arb( vec3 eye_pos, vec3 surf_norm ) {\\n\\t\\tvec3 q0 = vec3( dFdx( eye_pos.x ), dFdx( eye_pos.y ), dFdx( eye_pos.z ) );\\n\\t\\tvec3 q1 = vec3( dFdy( eye_pos.x ), dFdy( eye_pos.y ), dFdy( eye_pos.z ) );\\n\\t\\tvec2 st0 = dFdx( vUv.st );\\n\\t\\tvec2 st1 = dFdy( vUv.st );\\n\\t\\tvec3 S = normalize( q0 * st1.t - q1 * st0.t );\\n\\t\\tvec3 T = normalize( -q0 * st1.s + q1 * st0.s );\\n\\t\\tvec3 N = normalize( surf_norm );\\n\\t\\tvec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\\n\\t\\tmapN.xy = normalScale * mapN.xy;\\n\\t\\tmat3 tsn = mat3( S, T, N );\\n\\t\\treturn normalize( tsn * mapN );\\n\\t}\\n#endif\\n\";\n\n\tvar packing = \"vec3 packNormalToRGB( const in vec3 normal ) {\\n\\treturn normalize( normal ) * 0.5 + 0.5;\\n}\\nvec3 unpackRGBToNormal( const in vec3 rgb ) {\\n\\treturn 2.0 * rgb.xyz - 1.0;\\n}\\nconst float PackUpscale = 256. / 255.;const float UnpackDownscale = 255. / 256.;\\nconst vec3 PackFactors = vec3( 256. * 256. * 256., 256. * 256., 256. );\\nconst vec4 UnpackFactors = UnpackDownscale / vec4( PackFactors, 1. );\\nconst float ShiftRight8 = 1. / 256.;\\nvec4 packDepthToRGBA( const in float v ) {\\n\\tvec4 r = vec4( fract( v * PackFactors ), v );\\n\\tr.yzw -= r.xyz * ShiftRight8;\\treturn r * PackUpscale;\\n}\\nfloat unpackRGBAToDepth( const in vec4 v ) {\\n\\treturn dot( v, UnpackFactors );\\n}\\nfloat viewZToOrthographicDepth( const in float viewZ, const in float near, const in float far ) {\\n\\treturn ( viewZ + near ) / ( near - far );\\n}\\nfloat orthographicDepthToViewZ( const in float linearClipZ, const in float near, const in float far ) {\\n\\treturn linearClipZ * ( near - far ) - near;\\n}\\nfloat viewZToPerspectiveDepth( const in float viewZ, const in float near, const in float far ) {\\n\\treturn (( near + viewZ ) * far ) / (( far - near ) * viewZ );\\n}\\nfloat perspectiveDepthToViewZ( const in float invClipZ, const in float near, const in float far ) {\\n\\treturn ( near * far ) / ( ( far - near ) * invClipZ - far );\\n}\\n\";\n\n\tvar premultiplied_alpha_fragment = \"#ifdef PREMULTIPLIED_ALPHA\\n\\tgl_FragColor.rgb *= gl_FragColor.a;\\n#endif\\n\";\n\n\tvar project_vertex = \"vec4 mvPosition = modelViewMatrix * vec4( transformed, 1.0 );\\ngl_Position = projectionMatrix * mvPosition;\\n\";\n\n\tvar dithering_fragment = \"#if defined( DITHERING )\\n gl_FragColor.rgb = dithering( gl_FragColor.rgb );\\n#endif\\n\";\n\n\tvar dithering_pars_fragment = \"#if defined( DITHERING )\\n\\tvec3 dithering( vec3 color ) {\\n\\t\\tfloat grid_position = rand( gl_FragCoord.xy );\\n\\t\\tvec3 dither_shift_RGB = vec3( 0.25 / 255.0, -0.25 / 255.0, 0.25 / 255.0 );\\n\\t\\tdither_shift_RGB = mix( 2.0 * dither_shift_RGB, -2.0 * dither_shift_RGB, grid_position );\\n\\t\\treturn color + dither_shift_RGB;\\n\\t}\\n#endif\\n\";\n\n\tvar roughnessmap_fragment = \"float roughnessFactor = roughness;\\n#ifdef USE_ROUGHNESSMAP\\n\\tvec4 texelRoughness = texture2D( roughnessMap, vUv );\\n\\troughnessFactor *= texelRoughness.g;\\n#endif\\n\";\n\n\tvar roughnessmap_pars_fragment = \"#ifdef USE_ROUGHNESSMAP\\n\\tuniform sampler2D roughnessMap;\\n#endif\";\n\n\tvar shadowmap_pars_fragment = \"#ifdef USE_SHADOWMAP\\n\\t#if NUM_DIR_LIGHTS > 0\\n\\t\\tuniform sampler2D directionalShadowMap[ NUM_DIR_LIGHTS ];\\n\\t\\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHTS ];\\n\\t#endif\\n\\t#if NUM_SPOT_LIGHTS > 0\\n\\t\\tuniform sampler2D spotShadowMap[ NUM_SPOT_LIGHTS ];\\n\\t\\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHTS ];\\n\\t#endif\\n\\t#if NUM_POINT_LIGHTS > 0\\n\\t\\tuniform sampler2D pointShadowMap[ NUM_POINT_LIGHTS ];\\n\\t\\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHTS ];\\n\\t#endif\\n\\tfloat texture2DCompare( sampler2D depths, vec2 uv, float compare ) {\\n\\t\\treturn step( compare, unpackRGBAToDepth( texture2D( depths, uv ) ) );\\n\\t}\\n\\tfloat texture2DShadowLerp( sampler2D depths, vec2 size, vec2 uv, float compare ) {\\n\\t\\tconst vec2 offset = vec2( 0.0, 1.0 );\\n\\t\\tvec2 texelSize = vec2( 1.0 ) / size;\\n\\t\\tvec2 centroidUV = floor( uv * size + 0.5 ) / size;\\n\\t\\tfloat lb = texture2DCompare( depths, centroidUV + texelSize * offset.xx, compare );\\n\\t\\tfloat lt = texture2DCompare( depths, centroidUV + texelSize * offset.xy, compare );\\n\\t\\tfloat rb = texture2DCompare( depths, centroidUV + texelSize * offset.yx, compare );\\n\\t\\tfloat rt = texture2DCompare( depths, centroidUV + texelSize * offset.yy, compare );\\n\\t\\tvec2 f = fract( uv * size + 0.5 );\\n\\t\\tfloat a = mix( lb, lt, f.y );\\n\\t\\tfloat b = mix( rb, rt, f.y );\\n\\t\\tfloat c = mix( a, b, f.x );\\n\\t\\treturn c;\\n\\t}\\n\\tfloat getShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord ) {\\n\\t\\tfloat shadow = 1.0;\\n\\t\\tshadowCoord.xyz /= shadowCoord.w;\\n\\t\\tshadowCoord.z += shadowBias;\\n\\t\\tbvec4 inFrustumVec = bvec4 ( shadowCoord.x >= 0.0, shadowCoord.x <= 1.0, shadowCoord.y >= 0.0, shadowCoord.y <= 1.0 );\\n\\t\\tbool inFrustum = all( inFrustumVec );\\n\\t\\tbvec2 frustumTestVec = bvec2( inFrustum, shadowCoord.z <= 1.0 );\\n\\t\\tbool frustumTest = all( frustumTestVec );\\n\\t\\tif ( frustumTest ) {\\n\\t\\t#if defined( SHADOWMAP_TYPE_PCF )\\n\\t\\t\\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\\n\\t\\t\\tfloat dx0 = - texelSize.x * shadowRadius;\\n\\t\\t\\tfloat dy0 = - texelSize.y * shadowRadius;\\n\\t\\t\\tfloat dx1 = + texelSize.x * shadowRadius;\\n\\t\\t\\tfloat dy1 = + texelSize.y * shadowRadius;\\n\\t\\t\\tshadow = (\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\\n\\t\\t\\t) * ( 1.0 / 9.0 );\\n\\t\\t#elif defined( SHADOWMAP_TYPE_PCF_SOFT )\\n\\t\\t\\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\\n\\t\\t\\tfloat dx0 = - texelSize.x * shadowRadius;\\n\\t\\t\\tfloat dy0 = - texelSize.y * shadowRadius;\\n\\t\\t\\tfloat dx1 = + texelSize.x * shadowRadius;\\n\\t\\t\\tfloat dy1 = + texelSize.y * shadowRadius;\\n\\t\\t\\tshadow = (\\n\\t\\t\\t\\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy, shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\\n\\t\\t\\t) * ( 1.0 / 9.0 );\\n\\t\\t#else\\n\\t\\t\\tshadow = texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z );\\n\\t\\t#endif\\n\\t\\t}\\n\\t\\treturn shadow;\\n\\t}\\n\\tvec2 cubeToUV( vec3 v, float texelSizeY ) {\\n\\t\\tvec3 absV = abs( v );\\n\\t\\tfloat scaleToCube = 1.0 / max( absV.x, max( absV.y, absV.z ) );\\n\\t\\tabsV *= scaleToCube;\\n\\t\\tv *= scaleToCube * ( 1.0 - 2.0 * texelSizeY );\\n\\t\\tvec2 planar = v.xy;\\n\\t\\tfloat almostATexel = 1.5 * texelSizeY;\\n\\t\\tfloat almostOne = 1.0 - almostATexel;\\n\\t\\tif ( absV.z >= almostOne ) {\\n\\t\\t\\tif ( v.z > 0.0 )\\n\\t\\t\\t\\tplanar.x = 4.0 - v.x;\\n\\t\\t} else if ( absV.x >= almostOne ) {\\n\\t\\t\\tfloat signX = sign( v.x );\\n\\t\\t\\tplanar.x = v.z * signX + 2.0 * signX;\\n\\t\\t} else if ( absV.y >= almostOne ) {\\n\\t\\t\\tfloat signY = sign( v.y );\\n\\t\\t\\tplanar.x = v.x + 2.0 * signY + 2.0;\\n\\t\\t\\tplanar.y = v.z * signY - 2.0;\\n\\t\\t}\\n\\t\\treturn vec2( 0.125, 0.25 ) * planar + vec2( 0.375, 0.75 );\\n\\t}\\n\\tfloat getPointShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord, float shadowCameraNear, float shadowCameraFar ) {\\n\\t\\tvec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) );\\n\\t\\tvec3 lightToPosition = shadowCoord.xyz;\\n\\t\\tfloat dp = ( length( lightToPosition ) - shadowCameraNear ) / ( shadowCameraFar - shadowCameraNear );\\t\\tdp += shadowBias;\\n\\t\\tvec3 bd3D = normalize( lightToPosition );\\n\\t\\t#if defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_PCF_SOFT )\\n\\t\\t\\tvec2 offset = vec2( - 1, 1 ) * shadowRadius * texelSize.y;\\n\\t\\t\\treturn (\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyy, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyy, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyx, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyx, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxy, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxy, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxx, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxx, texelSize.y ), dp )\\n\\t\\t\\t) * ( 1.0 / 9.0 );\\n\\t\\t#else\\n\\t\\t\\treturn texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp );\\n\\t\\t#endif\\n\\t}\\n#endif\\n\";\n\n\tvar shadowmap_pars_vertex = \"#ifdef USE_SHADOWMAP\\n\\t#if NUM_DIR_LIGHTS > 0\\n\\t\\tuniform mat4 directionalShadowMatrix[ NUM_DIR_LIGHTS ];\\n\\t\\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHTS ];\\n\\t#endif\\n\\t#if NUM_SPOT_LIGHTS > 0\\n\\t\\tuniform mat4 spotShadowMatrix[ NUM_SPOT_LIGHTS ];\\n\\t\\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHTS ];\\n\\t#endif\\n\\t#if NUM_POINT_LIGHTS > 0\\n\\t\\tuniform mat4 pointShadowMatrix[ NUM_POINT_LIGHTS ];\\n\\t\\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHTS ];\\n\\t#endif\\n#endif\\n\";\n\n\tvar shadowmap_vertex = \"#ifdef USE_SHADOWMAP\\n\\t#if NUM_DIR_LIGHTS > 0\\n\\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\\n\\t\\tvDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * worldPosition;\\n\\t}\\n\\t#endif\\n\\t#if NUM_SPOT_LIGHTS > 0\\n\\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\\n\\t\\tvSpotShadowCoord[ i ] = spotShadowMatrix[ i ] * worldPosition;\\n\\t}\\n\\t#endif\\n\\t#if NUM_POINT_LIGHTS > 0\\n\\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\\n\\t\\tvPointShadowCoord[ i ] = pointShadowMatrix[ i ] * worldPosition;\\n\\t}\\n\\t#endif\\n#endif\\n\";\n\n\tvar shadowmask_pars_fragment = \"float getShadowMask() {\\n\\tfloat shadow = 1.0;\\n\\t#ifdef USE_SHADOWMAP\\n\\t#if NUM_DIR_LIGHTS > 0\\n\\tDirectionalLight directionalLight;\\n\\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\\n\\t\\tdirectionalLight = directionalLights[ i ];\\n\\t\\tshadow *= bool( directionalLight.shadow ) ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\\n\\t}\\n\\t#endif\\n\\t#if NUM_SPOT_LIGHTS > 0\\n\\tSpotLight spotLight;\\n\\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\\n\\t\\tspotLight = spotLights[ i ];\\n\\t\\tshadow *= bool( spotLight.shadow ) ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\\n\\t}\\n\\t#endif\\n\\t#if NUM_POINT_LIGHTS > 0\\n\\tPointLight pointLight;\\n\\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\\n\\t\\tpointLight = pointLights[ i ];\\n\\t\\tshadow *= bool( pointLight.shadow ) ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ], pointLight.shadowCameraNear, pointLight.shadowCameraFar ) : 1.0;\\n\\t}\\n\\t#endif\\n\\t#endif\\n\\treturn shadow;\\n}\\n\";\n\n\tvar 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\n\tvar skinning_pars_vertex = \"#ifdef USE_SKINNING\\n\\tuniform mat4 bindMatrix;\\n\\tuniform mat4 bindMatrixInverse;\\n\\t#ifdef BONE_TEXTURE\\n\\t\\tuniform sampler2D boneTexture;\\n\\t\\tuniform int boneTextureSize;\\n\\t\\tmat4 getBoneMatrix( const in float i ) {\\n\\t\\t\\tfloat j = i * 4.0;\\n\\t\\t\\tfloat x = mod( j, float( boneTextureSize ) );\\n\\t\\t\\tfloat y = floor( j / float( boneTextureSize ) );\\n\\t\\t\\tfloat dx = 1.0 / float( boneTextureSize );\\n\\t\\t\\tfloat dy = 1.0 / float( boneTextureSize );\\n\\t\\t\\ty = dy * ( y + 0.5 );\\n\\t\\t\\tvec4 v1 = texture2D( boneTexture, vec2( dx * ( x + 0.5 ), y ) );\\n\\t\\t\\tvec4 v2 = texture2D( boneTexture, vec2( dx * ( x + 1.5 ), y ) );\\n\\t\\t\\tvec4 v3 = texture2D( boneTexture, vec2( dx * ( x + 2.5 ), y ) );\\n\\t\\t\\tvec4 v4 = texture2D( boneTexture, vec2( dx * ( x + 3.5 ), y ) );\\n\\t\\t\\tmat4 bone = mat4( v1, v2, v3, v4 );\\n\\t\\t\\treturn bone;\\n\\t\\t}\\n\\t#else\\n\\t\\tuniform mat4 boneMatrices[ MAX_BONES ];\\n\\t\\tmat4 getBoneMatrix( const in float i ) {\\n\\t\\t\\tmat4 bone = boneMatrices[ int(i) ];\\n\\t\\t\\treturn bone;\\n\\t\\t}\\n\\t#endif\\n#endif\\n\";\n\n\tvar skinning_vertex = \"#ifdef USE_SKINNING\\n\\tvec4 skinVertex = bindMatrix * vec4( transformed, 1.0 );\\n\\tvec4 skinned = vec4( 0.0 );\\n\\tskinned += boneMatX * skinVertex * skinWeight.x;\\n\\tskinned += boneMatY * skinVertex * skinWeight.y;\\n\\tskinned += boneMatZ * skinVertex * skinWeight.z;\\n\\tskinned += boneMatW * skinVertex * skinWeight.w;\\n\\ttransformed = ( bindMatrixInverse * skinned ).xyz;\\n#endif\\n\";\n\n\tvar skinnormal_vertex = \"#ifdef USE_SKINNING\\n\\tmat4 skinMatrix = mat4( 0.0 );\\n\\tskinMatrix += skinWeight.x * boneMatX;\\n\\tskinMatrix += skinWeight.y * boneMatY;\\n\\tskinMatrix += skinWeight.z * boneMatZ;\\n\\tskinMatrix += skinWeight.w * boneMatW;\\n\\tskinMatrix = bindMatrixInverse * skinMatrix * bindMatrix;\\n\\tobjectNormal = vec4( skinMatrix * vec4( objectNormal, 0.0 ) ).xyz;\\n#endif\\n\";\n\n\tvar 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\n\tvar specularmap_pars_fragment = \"#ifdef USE_SPECULARMAP\\n\\tuniform sampler2D specularMap;\\n#endif\";\n\n\tvar tonemapping_fragment = \"#if defined( TONE_MAPPING )\\n gl_FragColor.rgb = toneMapping( gl_FragColor.rgb );\\n#endif\\n\";\n\n\tvar tonemapping_pars_fragment = \"#ifndef saturate\\n\\t#define saturate(a) clamp( a, 0.0, 1.0 )\\n#endif\\nuniform float toneMappingExposure;\\nuniform float toneMappingWhitePoint;\\nvec3 LinearToneMapping( vec3 color ) {\\n\\treturn toneMappingExposure * color;\\n}\\nvec3 ReinhardToneMapping( vec3 color ) {\\n\\tcolor *= toneMappingExposure;\\n\\treturn saturate( color / ( vec3( 1.0 ) + color ) );\\n}\\n#define Uncharted2Helper( x ) max( ( ( x * ( 0.15 * x + 0.10 * 0.50 ) + 0.20 * 0.02 ) / ( x * ( 0.15 * x + 0.50 ) + 0.20 * 0.30 ) ) - 0.02 / 0.30, vec3( 0.0 ) )\\nvec3 Uncharted2ToneMapping( vec3 color ) {\\n\\tcolor *= toneMappingExposure;\\n\\treturn saturate( Uncharted2Helper( color ) / Uncharted2Helper( vec3( toneMappingWhitePoint ) ) );\\n}\\nvec3 OptimizedCineonToneMapping( vec3 color ) {\\n\\tcolor *= toneMappingExposure;\\n\\tcolor = max( vec3( 0.0 ), color - 0.004 );\\n\\treturn pow( ( color * ( 6.2 * color + 0.5 ) ) / ( color * ( 6.2 * color + 1.7 ) + 0.06 ), vec3( 2.2 ) );\\n}\\n\";\n\n\tvar uv_pars_fragment = \"#if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP ) || defined( USE_ALPHAMAP ) || defined( USE_EMISSIVEMAP ) || defined( USE_ROUGHNESSMAP ) || defined( USE_METALNESSMAP )\\n\\tvarying vec2 vUv;\\n#endif\";\n\n\tvar uv_pars_vertex = \"#if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP ) || defined( USE_ALPHAMAP ) || defined( USE_EMISSIVEMAP ) || defined( USE_ROUGHNESSMAP ) || defined( USE_METALNESSMAP )\\n\\tvarying vec2 vUv;\\n\\tuniform mat3 uvTransform;\\n#endif\\n\";\n\n\tvar uv_vertex = \"#if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP ) || defined( USE_ALPHAMAP ) || defined( USE_EMISSIVEMAP ) || defined( USE_ROUGHNESSMAP ) || defined( USE_METALNESSMAP )\\n\\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\\n#endif\";\n\n\tvar uv2_pars_fragment = \"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\\n\\tvarying vec2 vUv2;\\n#endif\";\n\n\tvar uv2_pars_vertex = \"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\\n\\tattribute vec2 uv2;\\n\\tvarying vec2 vUv2;\\n#endif\";\n\n\tvar uv2_vertex = \"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\\n\\tvUv2 = uv2;\\n#endif\";\n\n\tvar worldpos_vertex = \"#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP )\\n\\tvec4 worldPosition = modelMatrix * vec4( transformed, 1.0 );\\n#endif\\n\";\n\n\tvar cube_frag = \"uniform samplerCube tCube;\\nuniform float tFlip;\\nuniform float opacity;\\nvarying vec3 vWorldPosition;\\nvoid main() {\\n\\tgl_FragColor = textureCube( tCube, vec3( tFlip * vWorldPosition.x, vWorldPosition.yz ) );\\n\\tgl_FragColor.a *= opacity;\\n}\\n\";\n\n\tvar cube_vert = \"varying vec3 vWorldPosition;\\n#include \\nvoid main() {\\n\\tvWorldPosition = transformDirection( position, modelMatrix );\\n\\t#include \\n\\t#include \\n\\tgl_Position.z = gl_Position.w;\\n}\\n\";\n\n\tvar depth_frag = \"#if DEPTH_PACKING == 3200\\n\\tuniform float opacity;\\n#endif\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\tvec4 diffuseColor = vec4( 1.0 );\\n\\t#if DEPTH_PACKING == 3200\\n\\t\\tdiffuseColor.a = opacity;\\n\\t#endif\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#if DEPTH_PACKING == 3200\\n\\t\\tgl_FragColor = vec4( vec3( gl_FragCoord.z ), opacity );\\n\\t#elif DEPTH_PACKING == 3201\\n\\t\\tgl_FragColor = packDepthToRGBA( gl_FragCoord.z );\\n\\t#endif\\n}\\n\";\n\n\tvar depth_vert = \"#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#ifdef USE_DISPLACEMENTMAP\\n\\t\\t#include \\n\\t\\t#include \\n\\t\\t#include \\n\\t#endif\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\\n\";\n\n\tvar distanceRGBA_frag = \"#define DISTANCE\\nuniform vec3 referencePosition;\\nuniform float nearDistance;\\nuniform float farDistance;\\nvarying vec3 vWorldPosition;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main () {\\n\\t#include \\n\\tvec4 diffuseColor = vec4( 1.0 );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\tfloat dist = length( vWorldPosition - referencePosition );\\n\\tdist = ( dist - nearDistance ) / ( farDistance - nearDistance );\\n\\tdist = saturate( dist );\\n\\tgl_FragColor = packDepthToRGBA( dist );\\n}\\n\";\n\n\tvar distanceRGBA_vert = \"#define DISTANCE\\nvarying vec3 vWorldPosition;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#ifdef USE_DISPLACEMENTMAP\\n\\t\\t#include \\n\\t\\t#include \\n\\t\\t#include \\n\\t#endif\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvWorldPosition = worldPosition.xyz;\\n}\\n\";\n\n\tvar equirect_frag = \"uniform sampler2D tEquirect;\\nvarying vec3 vWorldPosition;\\n#include \\nvoid main() {\\n\\tvec3 direction = normalize( vWorldPosition );\\n\\tvec2 sampleUV;\\n\\tsampleUV.y = asin( clamp( direction.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\\n\\tsampleUV.x = atan( direction.z, direction.x ) * RECIPROCAL_PI2 + 0.5;\\n\\tgl_FragColor = texture2D( tEquirect, sampleUV );\\n}\\n\";\n\n\tvar equirect_vert = \"varying vec3 vWorldPosition;\\n#include \\nvoid main() {\\n\\tvWorldPosition = transformDirection( position, modelMatrix );\\n\\t#include \\n\\t#include \\n}\\n\";\n\n\tvar linedashed_frag = \"uniform vec3 diffuse;\\nuniform float opacity;\\nuniform float dashSize;\\nuniform float totalSize;\\nvarying float vLineDistance;\\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\tif ( mod( vLineDistance, totalSize ) > dashSize ) {\\n\\t\\tdiscard;\\n\\t}\\n\\tvec3 outgoingLight = vec3( 0.0 );\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include \\n\\t#include \\n\\toutgoingLight = diffuseColor.rgb;\\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\\n\";\n\n\tvar linedashed_vert = \"uniform float scale;\\nattribute float lineDistance;\\nvarying float vLineDistance;\\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\tvLineDistance = scale * lineDistance;\\n\\tvec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );\\n\\tgl_Position = projectionMatrix * mvPosition;\\n\\t#include \\n\\t#include \\n\\t#include \\n}\\n\";\n\n\tvar meshbasic_frag = \"uniform vec3 diffuse;\\nuniform float opacity;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\n\\t#ifdef USE_LIGHTMAP\\n\\t\\treflectedLight.indirectDiffuse += texture2D( lightMap, vUv2 ).xyz * lightMapIntensity;\\n\\t#else\\n\\t\\treflectedLight.indirectDiffuse += vec3( 1.0 );\\n\\t#endif\\n\\t#include \\n\\treflectedLight.indirectDiffuse *= diffuseColor.rgb;\\n\\tvec3 outgoingLight = reflectedLight.indirectDiffuse;\\n\\t#include \\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\\n\";\n\n\tvar meshbasic_vert = \"#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#ifdef USE_ENVMAP\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#endif\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\\n\";\n\n\tvar meshlambert_frag = \"uniform vec3 diffuse;\\nuniform vec3 emissive;\\nuniform float opacity;\\nvarying vec3 vLightFront;\\n#ifdef DOUBLE_SIDED\\n\\tvarying vec3 vLightBack;\\n#endif\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\n\\tvec3 totalEmissiveRadiance = emissive;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\treflectedLight.indirectDiffuse = getAmbientLightIrradiance( ambientLightColor );\\n\\t#include \\n\\treflectedLight.indirectDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb );\\n\\t#ifdef DOUBLE_SIDED\\n\\t\\treflectedLight.directDiffuse = ( gl_FrontFacing ) ? vLightFront : vLightBack;\\n\\t#else\\n\\t\\treflectedLight.directDiffuse = vLightFront;\\n\\t#endif\\n\\treflectedLight.directDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb ) * getShadowMask();\\n\\t#include \\n\\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\\n\\t#include \\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\\n\";\n\n\tvar meshlambert_vert = \"#define LAMBERT\\nvarying vec3 vLightFront;\\n#ifdef DOUBLE_SIDED\\n\\tvarying vec3 vLightBack;\\n#endif\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\\n\";\n\n\tvar meshphong_frag = \"#define PHONG\\nuniform vec3 diffuse;\\nuniform vec3 emissive;\\nuniform vec3 specular;\\nuniform float shininess;\\nuniform float opacity;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\n\\tvec3 totalEmissiveRadiance = emissive;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\\n\\t#include \\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\\n\";\n\n\tvar meshphong_vert = \"#define PHONG\\nvarying vec3 vViewPosition;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n#ifndef FLAT_SHADED\\n\\tvNormal = normalize( transformedNormal );\\n#endif\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvViewPosition = - mvPosition.xyz;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\\n\";\n\n\tvar meshphysical_frag = \"#define PHYSICAL\\nuniform vec3 diffuse;\\nuniform vec3 emissive;\\nuniform float roughness;\\nuniform float metalness;\\nuniform float opacity;\\n#ifndef STANDARD\\n\\tuniform float clearCoat;\\n\\tuniform float clearCoatRoughness;\\n#endif\\nvarying vec3 vViewPosition;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\n\\tvec3 totalEmissiveRadiance = emissive;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\\n\";\n\n\tvar meshphysical_vert = \"#define PHYSICAL\\nvarying vec3 vViewPosition;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n#ifndef FLAT_SHADED\\n\\tvNormal = normalize( transformedNormal );\\n#endif\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvViewPosition = - mvPosition.xyz;\\n\\t#include \\n\\t#include \\n\\t#include \\n}\\n\";\n\n\tvar normal_frag = \"#define NORMAL\\nuniform float opacity;\\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP )\\n\\tvarying vec3 vViewPosition;\\n#endif\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\t#include \\n\\tgl_FragColor = vec4( packNormalToRGB( normal ), opacity );\\n}\\n\";\n\n\tvar normal_vert = \"#define NORMAL\\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP )\\n\\tvarying vec3 vViewPosition;\\n#endif\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n#ifndef FLAT_SHADED\\n\\tvNormal = normalize( transformedNormal );\\n#endif\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP )\\n\\tvViewPosition = - mvPosition.xyz;\\n#endif\\n}\\n\";\n\n\tvar points_frag = \"uniform vec3 diffuse;\\nuniform float opacity;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\tvec3 outgoingLight = vec3( 0.0 );\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\toutgoingLight = diffuseColor.rgb;\\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\\n\";\n\n\tvar points_vert = \"uniform float size;\\nuniform float scale;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#ifdef USE_SIZEATTENUATION\\n\\t\\tgl_PointSize = size * ( scale / - mvPosition.z );\\n\\t#else\\n\\t\\tgl_PointSize = size;\\n\\t#endif\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\\n\";\n\n\tvar shadow_frag = \"uniform vec3 color;\\nuniform float opacity;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\tgl_FragColor = vec4( color, opacity * ( 1.0 - getShadowMask() ) );\\n\\t#include \\n}\\n\";\n\n\tvar shadow_vert = \"#include \\n#include \\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\\n\";\n\n\tvar ShaderChunk = {\n\t\talphamap_fragment: alphamap_fragment,\n\t\talphamap_pars_fragment: alphamap_pars_fragment,\n\t\talphatest_fragment: alphatest_fragment,\n\t\taomap_fragment: aomap_fragment,\n\t\taomap_pars_fragment: aomap_pars_fragment,\n\t\tbegin_vertex: begin_vertex,\n\t\tbeginnormal_vertex: beginnormal_vertex,\n\t\tbsdfs: bsdfs,\n\t\tbumpmap_pars_fragment: bumpmap_pars_fragment,\n\t\tclipping_planes_fragment: clipping_planes_fragment,\n\t\tclipping_planes_pars_fragment: clipping_planes_pars_fragment,\n\t\tclipping_planes_pars_vertex: clipping_planes_pars_vertex,\n\t\tclipping_planes_vertex: clipping_planes_vertex,\n\t\tcolor_fragment: color_fragment,\n\t\tcolor_pars_fragment: color_pars_fragment,\n\t\tcolor_pars_vertex: color_pars_vertex,\n\t\tcolor_vertex: color_vertex,\n\t\tcommon: common,\n\t\tcube_uv_reflection_fragment: cube_uv_reflection_fragment,\n\t\tdefaultnormal_vertex: defaultnormal_vertex,\n\t\tdisplacementmap_pars_vertex: displacementmap_pars_vertex,\n\t\tdisplacementmap_vertex: displacementmap_vertex,\n\t\temissivemap_fragment: emissivemap_fragment,\n\t\temissivemap_pars_fragment: emissivemap_pars_fragment,\n\t\tencodings_fragment: encodings_fragment,\n\t\tencodings_pars_fragment: encodings_pars_fragment,\n\t\tenvmap_fragment: envmap_fragment,\n\t\tenvmap_pars_fragment: envmap_pars_fragment,\n\t\tenvmap_pars_vertex: envmap_pars_vertex,\n\t\tenvmap_vertex: envmap_vertex,\n\t\tfog_vertex: fog_vertex,\n\t\tfog_pars_vertex: fog_pars_vertex,\n\t\tfog_fragment: fog_fragment,\n\t\tfog_pars_fragment: fog_pars_fragment,\n\t\tgradientmap_pars_fragment: gradientmap_pars_fragment,\n\t\tlightmap_fragment: lightmap_fragment,\n\t\tlightmap_pars_fragment: lightmap_pars_fragment,\n\t\tlights_lambert_vertex: lights_lambert_vertex,\n\t\tlights_pars: lights_pars,\n\t\tlights_phong_fragment: lights_phong_fragment,\n\t\tlights_phong_pars_fragment: lights_phong_pars_fragment,\n\t\tlights_physical_fragment: lights_physical_fragment,\n\t\tlights_physical_pars_fragment: lights_physical_pars_fragment,\n\t\tlights_template: lights_template,\n\t\tlogdepthbuf_fragment: logdepthbuf_fragment,\n\t\tlogdepthbuf_pars_fragment: logdepthbuf_pars_fragment,\n\t\tlogdepthbuf_pars_vertex: logdepthbuf_pars_vertex,\n\t\tlogdepthbuf_vertex: logdepthbuf_vertex,\n\t\tmap_fragment: map_fragment,\n\t\tmap_pars_fragment: map_pars_fragment,\n\t\tmap_particle_fragment: map_particle_fragment,\n\t\tmap_particle_pars_fragment: map_particle_pars_fragment,\n\t\tmetalnessmap_fragment: metalnessmap_fragment,\n\t\tmetalnessmap_pars_fragment: metalnessmap_pars_fragment,\n\t\tmorphnormal_vertex: morphnormal_vertex,\n\t\tmorphtarget_pars_vertex: morphtarget_pars_vertex,\n\t\tmorphtarget_vertex: morphtarget_vertex,\n\t\tnormal_fragment: normal_fragment,\n\t\tnormalmap_pars_fragment: normalmap_pars_fragment,\n\t\tpacking: packing,\n\t\tpremultiplied_alpha_fragment: premultiplied_alpha_fragment,\n\t\tproject_vertex: project_vertex,\n\t\tdithering_fragment: dithering_fragment,\n\t\tdithering_pars_fragment: dithering_pars_fragment,\n\t\troughnessmap_fragment: roughnessmap_fragment,\n\t\troughnessmap_pars_fragment: roughnessmap_pars_fragment,\n\t\tshadowmap_pars_fragment: shadowmap_pars_fragment,\n\t\tshadowmap_pars_vertex: shadowmap_pars_vertex,\n\t\tshadowmap_vertex: shadowmap_vertex,\n\t\tshadowmask_pars_fragment: shadowmask_pars_fragment,\n\t\tskinbase_vertex: skinbase_vertex,\n\t\tskinning_pars_vertex: skinning_pars_vertex,\n\t\tskinning_vertex: skinning_vertex,\n\t\tskinnormal_vertex: skinnormal_vertex,\n\t\tspecularmap_fragment: specularmap_fragment,\n\t\tspecularmap_pars_fragment: specularmap_pars_fragment,\n\t\ttonemapping_fragment: tonemapping_fragment,\n\t\ttonemapping_pars_fragment: tonemapping_pars_fragment,\n\t\tuv_pars_fragment: uv_pars_fragment,\n\t\tuv_pars_vertex: uv_pars_vertex,\n\t\tuv_vertex: uv_vertex,\n\t\tuv2_pars_fragment: uv2_pars_fragment,\n\t\tuv2_pars_vertex: uv2_pars_vertex,\n\t\tuv2_vertex: uv2_vertex,\n\t\tworldpos_vertex: worldpos_vertex,\n\n\t\tcube_frag: cube_frag,\n\t\tcube_vert: cube_vert,\n\t\tdepth_frag: depth_frag,\n\t\tdepth_vert: depth_vert,\n\t\tdistanceRGBA_frag: distanceRGBA_frag,\n\t\tdistanceRGBA_vert: distanceRGBA_vert,\n\t\tequirect_frag: equirect_frag,\n\t\tequirect_vert: equirect_vert,\n\t\tlinedashed_frag: linedashed_frag,\n\t\tlinedashed_vert: linedashed_vert,\n\t\tmeshbasic_frag: meshbasic_frag,\n\t\tmeshbasic_vert: meshbasic_vert,\n\t\tmeshlambert_frag: meshlambert_frag,\n\t\tmeshlambert_vert: meshlambert_vert,\n\t\tmeshphong_frag: meshphong_frag,\n\t\tmeshphong_vert: meshphong_vert,\n\t\tmeshphysical_frag: meshphysical_frag,\n\t\tmeshphysical_vert: meshphysical_vert,\n\t\tnormal_frag: normal_frag,\n\t\tnormal_vert: normal_vert,\n\t\tpoints_frag: points_frag,\n\t\tpoints_vert: points_vert,\n\t\tshadow_frag: shadow_frag,\n\t\tshadow_vert: shadow_vert\n\t};\n\n\t/**\n\t * @author alteredq / http://alteredqualia.com/\n\t * @author mrdoob / http://mrdoob.com/\n\t * @author mikael emtinger / http://gomo.se/\n\t */\n\n\tvar ShaderLib = {\n\n\t\tbasic: {\n\n\t\t\tuniforms: UniformsUtils.merge( [\n\t\t\t\tUniformsLib.common,\n\t\t\t\tUniformsLib.specularmap,\n\t\t\t\tUniformsLib.envmap,\n\t\t\t\tUniformsLib.aomap,\n\t\t\t\tUniformsLib.lightmap,\n\t\t\t\tUniformsLib.fog\n\t\t\t] ),\n\n\t\t\tvertexShader: ShaderChunk.meshbasic_vert,\n\t\t\tfragmentShader: ShaderChunk.meshbasic_frag\n\n\t\t},\n\n\t\tlambert: {\n\n\t\t\tuniforms: UniformsUtils.merge( [\n\t\t\t\tUniformsLib.common,\n\t\t\t\tUniformsLib.specularmap,\n\t\t\t\tUniformsLib.envmap,\n\t\t\t\tUniformsLib.aomap,\n\t\t\t\tUniformsLib.lightmap,\n\t\t\t\tUniformsLib.emissivemap,\n\t\t\t\tUniformsLib.fog,\n\t\t\t\tUniformsLib.lights,\n\t\t\t\t{\n\t\t\t\t\temissive: { value: new Color( 0x000000 ) }\n\t\t\t\t}\n\t\t\t] ),\n\n\t\t\tvertexShader: ShaderChunk.meshlambert_vert,\n\t\t\tfragmentShader: ShaderChunk.meshlambert_frag\n\n\t\t},\n\n\t\tphong: {\n\n\t\t\tuniforms: UniformsUtils.merge( [\n\t\t\t\tUniformsLib.common,\n\t\t\t\tUniformsLib.specularmap,\n\t\t\t\tUniformsLib.envmap,\n\t\t\t\tUniformsLib.aomap,\n\t\t\t\tUniformsLib.lightmap,\n\t\t\t\tUniformsLib.emissivemap,\n\t\t\t\tUniformsLib.bumpmap,\n\t\t\t\tUniformsLib.normalmap,\n\t\t\t\tUniformsLib.displacementmap,\n\t\t\t\tUniformsLib.gradientmap,\n\t\t\t\tUniformsLib.fog,\n\t\t\t\tUniformsLib.lights,\n\t\t\t\t{\n\t\t\t\t\temissive: { value: new Color( 0x000000 ) },\n\t\t\t\t\tspecular: { value: new Color( 0x111111 ) },\n\t\t\t\t\tshininess: { value: 30 }\n\t\t\t\t}\n\t\t\t] ),\n\n\t\t\tvertexShader: ShaderChunk.meshphong_vert,\n\t\t\tfragmentShader: ShaderChunk.meshphong_frag\n\n\t\t},\n\n\t\tstandard: {\n\n\t\t\tuniforms: UniformsUtils.merge( [\n\t\t\t\tUniformsLib.common,\n\t\t\t\tUniformsLib.envmap,\n\t\t\t\tUniformsLib.aomap,\n\t\t\t\tUniformsLib.lightmap,\n\t\t\t\tUniformsLib.emissivemap,\n\t\t\t\tUniformsLib.bumpmap,\n\t\t\t\tUniformsLib.normalmap,\n\t\t\t\tUniformsLib.displacementmap,\n\t\t\t\tUniformsLib.roughnessmap,\n\t\t\t\tUniformsLib.metalnessmap,\n\t\t\t\tUniformsLib.fog,\n\t\t\t\tUniformsLib.lights,\n\t\t\t\t{\n\t\t\t\t\temissive: { value: new Color( 0x000000 ) },\n\t\t\t\t\troughness: { value: 0.5 },\n\t\t\t\t\tmetalness: { value: 0.5 },\n\t\t\t\t\tenvMapIntensity: { value: 1 } // temporary\n\t\t\t\t}\n\t\t\t] ),\n\n\t\t\tvertexShader: ShaderChunk.meshphysical_vert,\n\t\t\tfragmentShader: ShaderChunk.meshphysical_frag\n\n\t\t},\n\n\t\tpoints: {\n\n\t\t\tuniforms: UniformsUtils.merge( [\n\t\t\t\tUniformsLib.points,\n\t\t\t\tUniformsLib.fog\n\t\t\t] ),\n\n\t\t\tvertexShader: ShaderChunk.points_vert,\n\t\t\tfragmentShader: ShaderChunk.points_frag\n\n\t\t},\n\n\t\tdashed: {\n\n\t\t\tuniforms: UniformsUtils.merge( [\n\t\t\t\tUniformsLib.common,\n\t\t\t\tUniformsLib.fog,\n\t\t\t\t{\n\t\t\t\t\tscale: { value: 1 },\n\t\t\t\t\tdashSize: { value: 1 },\n\t\t\t\t\ttotalSize: { value: 2 }\n\t\t\t\t}\n\t\t\t] ),\n\n\t\t\tvertexShader: ShaderChunk.linedashed_vert,\n\t\t\tfragmentShader: ShaderChunk.linedashed_frag\n\n\t\t},\n\n\t\tdepth: {\n\n\t\t\tuniforms: UniformsUtils.merge( [\n\t\t\t\tUniformsLib.common,\n\t\t\t\tUniformsLib.displacementmap\n\t\t\t] ),\n\n\t\t\tvertexShader: ShaderChunk.depth_vert,\n\t\t\tfragmentShader: ShaderChunk.depth_frag\n\n\t\t},\n\n\t\tnormal: {\n\n\t\t\tuniforms: UniformsUtils.merge( [\n\t\t\t\tUniformsLib.common,\n\t\t\t\tUniformsLib.bumpmap,\n\t\t\t\tUniformsLib.normalmap,\n\t\t\t\tUniformsLib.displacementmap,\n\t\t\t\t{\n\t\t\t\t\topacity: { value: 1.0 }\n\t\t\t\t}\n\t\t\t] ),\n\n\t\t\tvertexShader: ShaderChunk.normal_vert,\n\t\t\tfragmentShader: ShaderChunk.normal_frag\n\n\t\t},\n\n\t\t/* -------------------------------------------------------------------------\n\t\t//\tCube map shader\n\t\t ------------------------------------------------------------------------- */\n\n\t\tcube: {\n\n\t\t\tuniforms: {\n\t\t\t\ttCube: { value: null },\n\t\t\t\ttFlip: { value: - 1 },\n\t\t\t\topacity: { value: 1.0 }\n\t\t\t},\n\n\t\t\tvertexShader: ShaderChunk.cube_vert,\n\t\t\tfragmentShader: ShaderChunk.cube_frag\n\n\t\t},\n\n\t\tequirect: {\n\n\t\t\tuniforms: {\n\t\t\t\ttEquirect: { value: null },\n\t\t\t},\n\n\t\t\tvertexShader: ShaderChunk.equirect_vert,\n\t\t\tfragmentShader: ShaderChunk.equirect_frag\n\n\t\t},\n\n\t\tdistanceRGBA: {\n\n\t\t\tuniforms: UniformsUtils.merge( [\n\t\t\t\tUniformsLib.common,\n\t\t\t\tUniformsLib.displacementmap,\n\t\t\t\t{\n\t\t\t\t\treferencePosition: { value: new Vector3() },\n\t\t\t\t\tnearDistance: { value: 1 },\n\t\t\t\t\tfarDistance: { value: 1000 }\n\t\t\t\t}\n\t\t\t] ),\n\n\t\t\tvertexShader: ShaderChunk.distanceRGBA_vert,\n\t\t\tfragmentShader: ShaderChunk.distanceRGBA_frag\n\n\t\t},\n\n\t\tshadow: {\n\n\t\t\tuniforms: UniformsUtils.merge( [\n\t\t\t\tUniformsLib.lights,\n\t\t\t\tUniformsLib.fog,\n\t\t\t\t{\n\t\t\t\t\tcolor: { value: new Color( 0x00000 ) },\n\t\t\t\t\topacity: { value: 1.0 }\n\t\t\t\t},\n\t\t\t] ),\n\n\t\t\tvertexShader: ShaderChunk.shadow_vert,\n\t\t\tfragmentShader: ShaderChunk.shadow_frag\n\n\t\t}\n\n\t};\n\n\tShaderLib.physical = {\n\n\t\tuniforms: UniformsUtils.merge( [\n\t\t\tShaderLib.standard.uniforms,\n\t\t\t{\n\t\t\t\tclearCoat: { value: 0 },\n\t\t\t\tclearCoatRoughness: { value: 0 }\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\t/**\n\t * @author bhouston / http://clara.io\n\t */\n\n\tfunction Box2( min, max ) {\n\n\t\tthis.min = ( min !== undefined ) ? min : new Vector2( + Infinity, + Infinity );\n\t\tthis.max = ( max !== undefined ) ? max : new Vector2( - Infinity, - Infinity );\n\n\t}\n\n\tObject.assign( Box2.prototype, {\n\n\t\tset: function ( min, max ) {\n\n\t\t\tthis.min.copy( min );\n\t\t\tthis.max.copy( max );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetFromPoints: function ( points ) {\n\n\t\t\tthis.makeEmpty();\n\n\t\t\tfor ( var i = 0, il = points.length; i < il; i ++ ) {\n\n\t\t\t\tthis.expandByPoint( points[ i ] );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetFromCenterAndSize: function () {\n\n\t\t\tvar v1 = new Vector2();\n\n\t\t\treturn function setFromCenterAndSize( center, size ) {\n\n\t\t\t\tvar halfSize = v1.copy( size ).multiplyScalar( 0.5 );\n\t\t\t\tthis.min.copy( center ).sub( halfSize );\n\t\t\t\tthis.max.copy( center ).add( halfSize );\n\n\t\t\t\treturn this;\n\n\t\t\t};\n\n\t\t}(),\n\n\t\tclone: function () {\n\n\t\t\treturn new this.constructor().copy( this );\n\n\t\t},\n\n\t\tcopy: function ( box ) {\n\n\t\t\tthis.min.copy( box.min );\n\t\t\tthis.max.copy( box.max );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tmakeEmpty: function () {\n\n\t\t\tthis.min.x = this.min.y = + Infinity;\n\t\t\tthis.max.x = this.max.y = - Infinity;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tisEmpty: function () {\n\n\t\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\t\treturn ( this.max.x < this.min.x ) || ( this.max.y < this.min.y );\n\n\t\t},\n\n\t\tgetCenter: function ( optionalTarget ) {\n\n\t\t\tvar result = optionalTarget || new Vector2();\n\t\t\treturn this.isEmpty() ? result.set( 0, 0 ) : result.addVectors( this.min, this.max ).multiplyScalar( 0.5 );\n\n\t\t},\n\n\t\tgetSize: function ( optionalTarget ) {\n\n\t\t\tvar result = optionalTarget || new Vector2();\n\t\t\treturn this.isEmpty() ? result.set( 0, 0 ) : result.subVectors( this.max, this.min );\n\n\t\t},\n\n\t\texpandByPoint: function ( point ) {\n\n\t\t\tthis.min.min( point );\n\t\t\tthis.max.max( point );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\texpandByVector: function ( vector ) {\n\n\t\t\tthis.min.sub( vector );\n\t\t\tthis.max.add( vector );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\texpandByScalar: function ( scalar ) {\n\n\t\t\tthis.min.addScalar( - scalar );\n\t\t\tthis.max.addScalar( scalar );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tcontainsPoint: function ( point ) {\n\n\t\t\treturn point.x < this.min.x || point.x > this.max.x ||\n\t\t\t\tpoint.y < this.min.y || point.y > this.max.y ? false : true;\n\n\t\t},\n\n\t\tcontainsBox: function ( box ) {\n\n\t\t\treturn this.min.x <= box.min.x && box.max.x <= this.max.x &&\n\t\t\t\tthis.min.y <= box.min.y && box.max.y <= this.max.y;\n\n\t\t},\n\n\t\tgetParameter: function ( point, optionalTarget ) {\n\n\t\t\t// This can potentially have a divide by zero if the box\n\t\t\t// has a size dimension of 0.\n\n\t\t\tvar result = optionalTarget || new Vector2();\n\n\t\t\treturn result.set(\n\t\t\t\t( point.x - this.min.x ) / ( this.max.x - this.min.x ),\n\t\t\t\t( point.y - this.min.y ) / ( this.max.y - this.min.y )\n\t\t\t);\n\n\t\t},\n\n\t\tintersectsBox: function ( box ) {\n\n\t\t\t// using 4 splitting planes to rule out intersections\n\n\t\t\treturn box.max.x < this.min.x || box.min.x > this.max.x ||\n\t\t\t\tbox.max.y < this.min.y || box.min.y > this.max.y ? false : true;\n\n\t\t},\n\n\t\tclampPoint: function ( point, optionalTarget ) {\n\n\t\t\tvar result = optionalTarget || new Vector2();\n\t\t\treturn result.copy( point ).clamp( this.min, this.max );\n\n\t\t},\n\n\t\tdistanceToPoint: function () {\n\n\t\t\tvar v1 = new Vector2();\n\n\t\t\treturn function distanceToPoint( point ) {\n\n\t\t\t\tvar clampedPoint = v1.copy( point ).clamp( this.min, this.max );\n\t\t\t\treturn clampedPoint.sub( point ).length();\n\n\t\t\t};\n\n\t\t}(),\n\n\t\tintersect: function ( box ) {\n\n\t\t\tthis.min.max( box.min );\n\t\t\tthis.max.min( box.max );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tunion: function ( box ) {\n\n\t\t\tthis.min.min( box.min );\n\t\t\tthis.max.max( box.max );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\ttranslate: function ( offset ) {\n\n\t\t\tthis.min.add( offset );\n\t\t\tthis.max.add( offset );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tequals: function ( box ) {\n\n\t\t\treturn box.min.equals( this.min ) && box.max.equals( this.max );\n\n\t\t}\n\n\t} );\n\n\t/**\n\t * @author mikael emtinger / http://gomo.se/\n\t * @author alteredq / http://alteredqualia.com/\n\t */\n\n\tfunction WebGLFlareRenderer( renderer, gl, state, textures, capabilities ) {\n\n\t\tvar vertexBuffer, elementBuffer;\n\t\tvar shader, program, attributes, uniforms;\n\n\t\tvar tempTexture, occlusionTexture;\n\n\t\tfunction init() {\n\n\t\t\tvar vertices = new Float32Array( [\n\t\t\t\t- 1, - 1, 0, 0,\n\t\t\t\t 1, - 1, 1, 0,\n\t\t\t\t 1, 1, 1, 1,\n\t\t\t\t- 1, 1, 0, 1\n\t\t\t] );\n\n\t\t\tvar faces = new Uint16Array( [\n\t\t\t\t0, 1, 2,\n\t\t\t\t0, 2, 3\n\t\t\t] );\n\n\t\t\t// buffers\n\n\t\t\tvertexBuffer = gl.createBuffer();\n\t\t\telementBuffer = gl.createBuffer();\n\n\t\t\tgl.bindBuffer( gl.ARRAY_BUFFER, vertexBuffer );\n\t\t\tgl.bufferData( gl.ARRAY_BUFFER, vertices, gl.STATIC_DRAW );\n\n\t\t\tgl.bindBuffer( gl.ELEMENT_ARRAY_BUFFER, elementBuffer );\n\t\t\tgl.bufferData( gl.ELEMENT_ARRAY_BUFFER, faces, gl.STATIC_DRAW );\n\n\t\t\t// textures\n\n\t\t\ttempTexture = gl.createTexture();\n\t\t\tocclusionTexture = gl.createTexture();\n\n\t\t\tstate.bindTexture( gl.TEXTURE_2D, tempTexture );\n\t\t\tgl.texImage2D( gl.TEXTURE_2D, 0, gl.RGB, 16, 16, 0, gl.RGB, gl.UNSIGNED_BYTE, null );\n\t\t\tgl.texParameteri( gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE );\n\t\t\tgl.texParameteri( gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE );\n\t\t\tgl.texParameteri( gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST );\n\t\t\tgl.texParameteri( gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST );\n\n\t\t\tstate.bindTexture( gl.TEXTURE_2D, occlusionTexture );\n\t\t\tgl.texImage2D( gl.TEXTURE_2D, 0, gl.RGBA, 16, 16, 0, gl.RGBA, gl.UNSIGNED_BYTE, null );\n\t\t\tgl.texParameteri( gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE );\n\t\t\tgl.texParameteri( gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE );\n\t\t\tgl.texParameteri( gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST );\n\t\t\tgl.texParameteri( gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST );\n\n\t\t\tshader = {\n\n\t\t\t\tvertexShader: [\n\n\t\t\t\t\t'uniform lowp int renderType;',\n\n\t\t\t\t\t'uniform vec3 screenPosition;',\n\t\t\t\t\t'uniform vec2 scale;',\n\t\t\t\t\t'uniform float rotation;',\n\n\t\t\t\t\t'uniform sampler2D occlusionMap;',\n\n\t\t\t\t\t'attribute vec2 position;',\n\t\t\t\t\t'attribute vec2 uv;',\n\n\t\t\t\t\t'varying vec2 vUV;',\n\t\t\t\t\t'varying float vVisibility;',\n\n\t\t\t\t\t'void main() {',\n\n\t\t\t\t\t'\tvUV = uv;',\n\n\t\t\t\t\t'\tvec2 pos = position;',\n\n\t\t\t\t\t'\tif ( renderType == 2 ) {',\n\n\t\t\t\t\t'\t\tvec4 visibility = texture2D( occlusionMap, vec2( 0.1, 0.1 ) );',\n\t\t\t\t\t'\t\tvisibility += texture2D( occlusionMap, vec2( 0.5, 0.1 ) );',\n\t\t\t\t\t'\t\tvisibility += texture2D( occlusionMap, vec2( 0.9, 0.1 ) );',\n\t\t\t\t\t'\t\tvisibility += texture2D( occlusionMap, vec2( 0.9, 0.5 ) );',\n\t\t\t\t\t'\t\tvisibility += texture2D( occlusionMap, vec2( 0.9, 0.9 ) );',\n\t\t\t\t\t'\t\tvisibility += texture2D( occlusionMap, vec2( 0.5, 0.9 ) );',\n\t\t\t\t\t'\t\tvisibility += texture2D( occlusionMap, vec2( 0.1, 0.9 ) );',\n\t\t\t\t\t'\t\tvisibility += texture2D( occlusionMap, vec2( 0.1, 0.5 ) );',\n\t\t\t\t\t'\t\tvisibility += texture2D( occlusionMap, vec2( 0.5, 0.5 ) );',\n\n\t\t\t\t\t'\t\tvVisibility = visibility.r / 9.0;',\n\t\t\t\t\t'\t\tvVisibility *= 1.0 - visibility.g / 9.0;',\n\t\t\t\t\t'\t\tvVisibility *= visibility.b / 9.0;',\n\t\t\t\t\t'\t\tvVisibility *= 1.0 - visibility.a / 9.0;',\n\n\t\t\t\t\t'\t\tpos.x = cos( rotation ) * position.x - sin( rotation ) * position.y;',\n\t\t\t\t\t'\t\tpos.y = sin( rotation ) * position.x + cos( rotation ) * position.y;',\n\n\t\t\t\t\t'\t}',\n\n\t\t\t\t\t'\tgl_Position = vec4( ( pos * scale + screenPosition.xy ).xy, screenPosition.z, 1.0 );',\n\n\t\t\t\t\t'}'\n\n\t\t\t\t].join( '\\n' ),\n\n\t\t\t\tfragmentShader: [\n\n\t\t\t\t\t'uniform lowp int renderType;',\n\n\t\t\t\t\t'uniform sampler2D map;',\n\t\t\t\t\t'uniform float opacity;',\n\t\t\t\t\t'uniform vec3 color;',\n\n\t\t\t\t\t'varying vec2 vUV;',\n\t\t\t\t\t'varying float vVisibility;',\n\n\t\t\t\t\t'void main() {',\n\n\t\t\t\t\t// pink square\n\n\t\t\t\t\t'\tif ( renderType == 0 ) {',\n\n\t\t\t\t\t'\t\tgl_FragColor = vec4( 1.0, 0.0, 1.0, 0.0 );',\n\n\t\t\t\t\t// restore\n\n\t\t\t\t\t'\t} else if ( renderType == 1 ) {',\n\n\t\t\t\t\t'\t\tgl_FragColor = texture2D( map, vUV );',\n\n\t\t\t\t\t// flare\n\n\t\t\t\t\t'\t} else {',\n\n\t\t\t\t\t'\t\tvec4 texture = texture2D( map, vUV );',\n\t\t\t\t\t'\t\ttexture.a *= opacity * vVisibility;',\n\t\t\t\t\t'\t\tgl_FragColor = texture;',\n\t\t\t\t\t'\t\tgl_FragColor.rgb *= color;',\n\n\t\t\t\t\t'\t}',\n\n\t\t\t\t\t'}'\n\n\t\t\t\t].join( '\\n' )\n\n\t\t\t};\n\n\t\t\tprogram = createProgram( shader );\n\n\t\t\tattributes = {\n\t\t\t\tvertex: gl.getAttribLocation( program, 'position' ),\n\t\t\t\tuv: gl.getAttribLocation( program, 'uv' )\n\t\t\t};\n\n\t\t\tuniforms = {\n\t\t\t\trenderType: gl.getUniformLocation( program, 'renderType' ),\n\t\t\t\tmap: gl.getUniformLocation( program, 'map' ),\n\t\t\t\tocclusionMap: gl.getUniformLocation( program, 'occlusionMap' ),\n\t\t\t\topacity: gl.getUniformLocation( program, 'opacity' ),\n\t\t\t\tcolor: gl.getUniformLocation( program, 'color' ),\n\t\t\t\tscale: gl.getUniformLocation( program, 'scale' ),\n\t\t\t\trotation: gl.getUniformLocation( program, 'rotation' ),\n\t\t\t\tscreenPosition: gl.getUniformLocation( program, 'screenPosition' )\n\t\t\t};\n\n\t\t}\n\n\t\t/*\n\t\t * Render lens flares\n\t\t * Method: renders 16x16 0xff00ff-colored points scattered over the light source area,\n\t\t * reads these back and calculates occlusion.\n\t\t */\n\n\t\tthis.render = function ( flares, scene, camera, viewport ) {\n\n\t\t\tif ( flares.length === 0 ) return;\n\n\t\t\tvar tempPosition = new Vector3();\n\n\t\t\tvar invAspect = viewport.w / viewport.z,\n\t\t\t\thalfViewportWidth = viewport.z * 0.5,\n\t\t\t\thalfViewportHeight = viewport.w * 0.5;\n\n\t\t\tvar size = 16 / viewport.w,\n\t\t\t\tscale = new Vector2( size * invAspect, size );\n\n\t\t\tvar screenPosition = new Vector3( 1, 1, 0 ),\n\t\t\t\tscreenPositionPixels = new Vector2( 1, 1 );\n\n\t\t\tvar validArea = new Box2();\n\n\t\t\tvalidArea.min.set( viewport.x, viewport.y );\n\t\t\tvalidArea.max.set( viewport.x + ( viewport.z - 16 ), viewport.y + ( viewport.w - 16 ) );\n\n\t\t\tif ( program === undefined ) {\n\n\t\t\t\tinit();\n\n\t\t\t}\n\n\t\t\tstate.useProgram( program );\n\n\t\t\tstate.initAttributes();\n\t\t\tstate.enableAttribute( attributes.vertex );\n\t\t\tstate.enableAttribute( attributes.uv );\n\t\t\tstate.disableUnusedAttributes();\n\n\t\t\t// loop through all lens flares to update their occlusion and positions\n\t\t\t// setup gl and common used attribs/uniforms\n\n\t\t\tgl.uniform1i( uniforms.occlusionMap, 0 );\n\t\t\tgl.uniform1i( uniforms.map, 1 );\n\n\t\t\tgl.bindBuffer( gl.ARRAY_BUFFER, vertexBuffer );\n\t\t\tgl.vertexAttribPointer( attributes.vertex, 2, gl.FLOAT, false, 2 * 8, 0 );\n\t\t\tgl.vertexAttribPointer( attributes.uv, 2, gl.FLOAT, false, 2 * 8, 8 );\n\n\t\t\tgl.bindBuffer( gl.ELEMENT_ARRAY_BUFFER, elementBuffer );\n\n\t\t\tstate.disable( gl.CULL_FACE );\n\t\t\tstate.buffers.depth.setMask( false );\n\n\t\t\tfor ( var i = 0, l = flares.length; i < l; i ++ ) {\n\n\t\t\t\tsize = 16 / viewport.w;\n\t\t\t\tscale.set( size * invAspect, size );\n\n\t\t\t\t// calc object screen position\n\n\t\t\t\tvar flare = flares[ i ];\n\n\t\t\t\ttempPosition.set( flare.matrixWorld.elements[ 12 ], flare.matrixWorld.elements[ 13 ], flare.matrixWorld.elements[ 14 ] );\n\n\t\t\t\ttempPosition.applyMatrix4( camera.matrixWorldInverse );\n\t\t\t\ttempPosition.applyMatrix4( camera.projectionMatrix );\n\n\t\t\t\t// setup arrays for gl programs\n\n\t\t\t\tscreenPosition.copy( tempPosition );\n\n\t\t\t\t// horizontal and vertical coordinate of the lower left corner of the pixels to copy\n\n\t\t\t\tscreenPositionPixels.x = viewport.x + ( screenPosition.x * halfViewportWidth ) + halfViewportWidth - 8;\n\t\t\t\tscreenPositionPixels.y = viewport.y + ( screenPosition.y * halfViewportHeight ) + halfViewportHeight - 8;\n\n\t\t\t\t// screen cull\n\n\t\t\t\tif ( validArea.containsPoint( screenPositionPixels ) === true ) {\n\n\t\t\t\t\t// save current RGB to temp texture\n\n\t\t\t\t\tstate.activeTexture( gl.TEXTURE0 );\n\t\t\t\t\tstate.bindTexture( gl.TEXTURE_2D, null );\n\t\t\t\t\tstate.activeTexture( gl.TEXTURE1 );\n\t\t\t\t\tstate.bindTexture( gl.TEXTURE_2D, tempTexture );\n\t\t\t\t\tgl.copyTexImage2D( gl.TEXTURE_2D, 0, gl.RGB, screenPositionPixels.x, screenPositionPixels.y, 16, 16, 0 );\n\n\n\t\t\t\t\t// render pink quad\n\n\t\t\t\t\tgl.uniform1i( uniforms.renderType, 0 );\n\t\t\t\t\tgl.uniform2f( uniforms.scale, scale.x, scale.y );\n\t\t\t\t\tgl.uniform3f( uniforms.screenPosition, screenPosition.x, screenPosition.y, screenPosition.z );\n\n\t\t\t\t\tstate.disable( gl.BLEND );\n\t\t\t\t\tstate.enable( gl.DEPTH_TEST );\n\n\t\t\t\t\tgl.drawElements( gl.TRIANGLES, 6, gl.UNSIGNED_SHORT, 0 );\n\n\n\t\t\t\t\t// copy result to occlusionMap\n\n\t\t\t\t\tstate.activeTexture( gl.TEXTURE0 );\n\t\t\t\t\tstate.bindTexture( gl.TEXTURE_2D, occlusionTexture );\n\t\t\t\t\tgl.copyTexImage2D( gl.TEXTURE_2D, 0, gl.RGBA, screenPositionPixels.x, screenPositionPixels.y, 16, 16, 0 );\n\n\n\t\t\t\t\t// restore graphics\n\n\t\t\t\t\tgl.uniform1i( uniforms.renderType, 1 );\n\t\t\t\t\tstate.disable( gl.DEPTH_TEST );\n\n\t\t\t\t\tstate.activeTexture( gl.TEXTURE1 );\n\t\t\t\t\tstate.bindTexture( gl.TEXTURE_2D, tempTexture );\n\t\t\t\t\tgl.drawElements( gl.TRIANGLES, 6, gl.UNSIGNED_SHORT, 0 );\n\n\n\t\t\t\t\t// update object positions\n\n\t\t\t\t\tflare.positionScreen.copy( screenPosition );\n\n\t\t\t\t\tif ( flare.customUpdateCallback ) {\n\n\t\t\t\t\t\tflare.customUpdateCallback( flare );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tflare.updateLensFlares();\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// render flares\n\n\t\t\t\t\tgl.uniform1i( uniforms.renderType, 2 );\n\t\t\t\t\tstate.enable( gl.BLEND );\n\n\t\t\t\t\tfor ( var j = 0, jl = flare.lensFlares.length; j < jl; j ++ ) {\n\n\t\t\t\t\t\tvar sprite = flare.lensFlares[ j ];\n\n\t\t\t\t\t\tif ( sprite.opacity > 0.001 && sprite.scale > 0.001 ) {\n\n\t\t\t\t\t\t\tscreenPosition.x = sprite.x;\n\t\t\t\t\t\t\tscreenPosition.y = sprite.y;\n\t\t\t\t\t\t\tscreenPosition.z = sprite.z;\n\n\t\t\t\t\t\t\tsize = sprite.size * sprite.scale / viewport.w;\n\n\t\t\t\t\t\t\tscale.x = size * invAspect;\n\t\t\t\t\t\t\tscale.y = size;\n\n\t\t\t\t\t\t\tgl.uniform3f( uniforms.screenPosition, screenPosition.x, screenPosition.y, screenPosition.z );\n\t\t\t\t\t\t\tgl.uniform2f( uniforms.scale, scale.x, scale.y );\n\t\t\t\t\t\t\tgl.uniform1f( uniforms.rotation, sprite.rotation );\n\n\t\t\t\t\t\t\tgl.uniform1f( uniforms.opacity, sprite.opacity );\n\t\t\t\t\t\t\tgl.uniform3f( uniforms.color, sprite.color.r, sprite.color.g, sprite.color.b );\n\n\t\t\t\t\t\t\tstate.setBlending( sprite.blending, sprite.blendEquation, sprite.blendSrc, sprite.blendDst );\n\n\t\t\t\t\t\t\ttextures.setTexture2D( sprite.texture, 1 );\n\n\t\t\t\t\t\t\tgl.drawElements( gl.TRIANGLES, 6, gl.UNSIGNED_SHORT, 0 );\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// restore gl\n\n\t\t\tstate.enable( gl.CULL_FACE );\n\t\t\tstate.enable( gl.DEPTH_TEST );\n\t\t\tstate.buffers.depth.setMask( true );\n\n\t\t\tstate.reset();\n\n\t\t};\n\n\t\tfunction createProgram( shader ) {\n\n\t\t\tvar program = gl.createProgram();\n\n\t\t\tvar fragmentShader = gl.createShader( gl.FRAGMENT_SHADER );\n\t\t\tvar vertexShader = gl.createShader( gl.VERTEX_SHADER );\n\n\t\t\tvar prefix = 'precision ' + capabilities.precision + ' float;\\n';\n\n\t\t\tgl.shaderSource( fragmentShader, prefix + shader.fragmentShader );\n\t\t\tgl.shaderSource( vertexShader, prefix + shader.vertexShader );\n\n\t\t\tgl.compileShader( fragmentShader );\n\t\t\tgl.compileShader( vertexShader );\n\n\t\t\tgl.attachShader( program, fragmentShader );\n\t\t\tgl.attachShader( program, vertexShader );\n\n\t\t\tgl.linkProgram( program );\n\n\t\t\treturn program;\n\n\t\t}\n\n\t}\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t */\n\n\tfunction CanvasTexture( canvas, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy ) {\n\n\t\tTexture.call( this, canvas, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy );\n\n\t\tthis.needsUpdate = true;\n\n\t}\n\n\tCanvasTexture.prototype = Object.create( Texture.prototype );\n\tCanvasTexture.prototype.constructor = CanvasTexture;\n\n\t/**\n\t * @author mikael emtinger / http://gomo.se/\n\t * @author alteredq / http://alteredqualia.com/\n\t */\n\n\tfunction WebGLSpriteRenderer( renderer, gl, state, textures, capabilities ) {\n\n\t\tvar vertexBuffer, elementBuffer;\n\t\tvar program, attributes, uniforms;\n\n\t\tvar texture;\n\n\t\t// decompose matrixWorld\n\n\t\tvar spritePosition = new Vector3();\n\t\tvar spriteRotation = new Quaternion();\n\t\tvar spriteScale = new Vector3();\n\n\t\tfunction init() {\n\n\t\t\tvar vertices = new Float32Array( [\n\t\t\t\t- 0.5, - 0.5, 0, 0,\n\t\t\t\t 0.5, - 0.5, 1, 0,\n\t\t\t\t 0.5, 0.5, 1, 1,\n\t\t\t\t- 0.5, 0.5, 0, 1\n\t\t\t] );\n\n\t\t\tvar faces = new Uint16Array( [\n\t\t\t\t0, 1, 2,\n\t\t\t\t0, 2, 3\n\t\t\t] );\n\n\t\t\tvertexBuffer = gl.createBuffer();\n\t\t\telementBuffer = gl.createBuffer();\n\n\t\t\tgl.bindBuffer( gl.ARRAY_BUFFER, vertexBuffer );\n\t\t\tgl.bufferData( gl.ARRAY_BUFFER, vertices, gl.STATIC_DRAW );\n\n\t\t\tgl.bindBuffer( gl.ELEMENT_ARRAY_BUFFER, elementBuffer );\n\t\t\tgl.bufferData( gl.ELEMENT_ARRAY_BUFFER, faces, gl.STATIC_DRAW );\n\n\t\t\tprogram = createProgram();\n\n\t\t\tattributes = {\n\t\t\t\tposition: gl.getAttribLocation( program, 'position' ),\n\t\t\t\tuv: gl.getAttribLocation( program, 'uv' )\n\t\t\t};\n\n\t\t\tuniforms = {\n\t\t\t\tuvOffset: gl.getUniformLocation( program, 'uvOffset' ),\n\t\t\t\tuvScale: gl.getUniformLocation( program, 'uvScale' ),\n\n\t\t\t\trotation: gl.getUniformLocation( program, 'rotation' ),\n\t\t\t\tscale: gl.getUniformLocation( program, 'scale' ),\n\n\t\t\t\tcolor: gl.getUniformLocation( program, 'color' ),\n\t\t\t\tmap: gl.getUniformLocation( program, 'map' ),\n\t\t\t\topacity: gl.getUniformLocation( program, 'opacity' ),\n\n\t\t\t\tmodelViewMatrix: gl.getUniformLocation( program, 'modelViewMatrix' ),\n\t\t\t\tprojectionMatrix: gl.getUniformLocation( program, 'projectionMatrix' ),\n\n\t\t\t\tfogType: gl.getUniformLocation( program, 'fogType' ),\n\t\t\t\tfogDensity: gl.getUniformLocation( program, 'fogDensity' ),\n\t\t\t\tfogNear: gl.getUniformLocation( program, 'fogNear' ),\n\t\t\t\tfogFar: gl.getUniformLocation( program, 'fogFar' ),\n\t\t\t\tfogColor: gl.getUniformLocation( program, 'fogColor' ),\n\t\t\t\tfogDepth: gl.getUniformLocation( program, 'fogDepth' ),\n\n\t\t\t\talphaTest: gl.getUniformLocation( program, 'alphaTest' )\n\t\t\t};\n\n\t\t\tvar canvas = document.createElementNS( 'http://www.w3.org/1999/xhtml', 'canvas' );\n\t\t\tcanvas.width = 8;\n\t\t\tcanvas.height = 8;\n\n\t\t\tvar context = canvas.getContext( '2d' );\n\t\t\tcontext.fillStyle = 'white';\n\t\t\tcontext.fillRect( 0, 0, 8, 8 );\n\n\t\t\ttexture = new CanvasTexture( canvas );\n\n\t\t}\n\n\t\tthis.render = function ( sprites, scene, camera ) {\n\n\t\t\tif ( sprites.length === 0 ) return;\n\n\t\t\t// setup gl\n\n\t\t\tif ( program === undefined ) {\n\n\t\t\t\tinit();\n\n\t\t\t}\n\n\t\t\tstate.useProgram( program );\n\n\t\t\tstate.initAttributes();\n\t\t\tstate.enableAttribute( attributes.position );\n\t\t\tstate.enableAttribute( attributes.uv );\n\t\t\tstate.disableUnusedAttributes();\n\n\t\t\tstate.disable( gl.CULL_FACE );\n\t\t\tstate.enable( gl.BLEND );\n\n\t\t\tgl.bindBuffer( gl.ARRAY_BUFFER, vertexBuffer );\n\t\t\tgl.vertexAttribPointer( attributes.position, 2, gl.FLOAT, false, 2 * 8, 0 );\n\t\t\tgl.vertexAttribPointer( attributes.uv, 2, gl.FLOAT, false, 2 * 8, 8 );\n\n\t\t\tgl.bindBuffer( gl.ELEMENT_ARRAY_BUFFER, elementBuffer );\n\n\t\t\tgl.uniformMatrix4fv( uniforms.projectionMatrix, false, camera.projectionMatrix.elements );\n\n\t\t\tstate.activeTexture( gl.TEXTURE0 );\n\t\t\tgl.uniform1i( uniforms.map, 0 );\n\n\t\t\tvar oldFogType = 0;\n\t\t\tvar sceneFogType = 0;\n\t\t\tvar fog = scene.fog;\n\n\t\t\tif ( fog ) {\n\n\t\t\t\tgl.uniform3f( uniforms.fogColor, fog.color.r, fog.color.g, fog.color.b );\n\n\t\t\t\tif ( fog.isFog ) {\n\n\t\t\t\t\tgl.uniform1f( uniforms.fogNear, fog.near );\n\t\t\t\t\tgl.uniform1f( uniforms.fogFar, fog.far );\n\n\t\t\t\t\tgl.uniform1i( uniforms.fogType, 1 );\n\t\t\t\t\toldFogType = 1;\n\t\t\t\t\tsceneFogType = 1;\n\n\t\t\t\t} else if ( fog.isFogExp2 ) {\n\n\t\t\t\t\tgl.uniform1f( uniforms.fogDensity, fog.density );\n\n\t\t\t\t\tgl.uniform1i( uniforms.fogType, 2 );\n\t\t\t\t\toldFogType = 2;\n\t\t\t\t\tsceneFogType = 2;\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tgl.uniform1i( uniforms.fogType, 0 );\n\t\t\t\toldFogType = 0;\n\t\t\t\tsceneFogType = 0;\n\n\t\t\t}\n\n\n\t\t\t// update positions and sort\n\n\t\t\tfor ( var i = 0, l = sprites.length; i < l; i ++ ) {\n\n\t\t\t\tvar sprite = sprites[ i ];\n\n\t\t\t\tsprite.modelViewMatrix.multiplyMatrices( camera.matrixWorldInverse, sprite.matrixWorld );\n\t\t\t\tsprite.z = - sprite.modelViewMatrix.elements[ 14 ];\n\n\t\t\t}\n\n\t\t\tsprites.sort( painterSortStable );\n\n\t\t\t// render all sprites\n\n\t\t\tvar scale = [];\n\n\t\t\tfor ( var i = 0, l = sprites.length; i < l; i ++ ) {\n\n\t\t\t\tvar sprite = sprites[ i ];\n\t\t\t\tvar material = sprite.material;\n\n\t\t\t\tif ( material.visible === false ) continue;\n\n\t\t\t\tsprite.onBeforeRender( renderer, scene, camera, undefined, material, undefined );\n\n\t\t\t\tgl.uniform1f( uniforms.alphaTest, material.alphaTest );\n\t\t\t\tgl.uniformMatrix4fv( uniforms.modelViewMatrix, false, sprite.modelViewMatrix.elements );\n\n\t\t\t\tsprite.matrixWorld.decompose( spritePosition, spriteRotation, spriteScale );\n\n\t\t\t\tscale[ 0 ] = spriteScale.x;\n\t\t\t\tscale[ 1 ] = spriteScale.y;\n\n\t\t\t\tvar fogType = 0;\n\n\t\t\t\tif ( scene.fog && material.fog ) {\n\n\t\t\t\t\tfogType = sceneFogType;\n\n\t\t\t\t}\n\n\t\t\t\tif ( oldFogType !== fogType ) {\n\n\t\t\t\t\tgl.uniform1i( uniforms.fogType, fogType );\n\t\t\t\t\toldFogType = fogType;\n\n\t\t\t\t}\n\n\t\t\t\tif ( material.map !== null ) {\n\n\t\t\t\t\tgl.uniform2f( uniforms.uvOffset, material.map.offset.x, material.map.offset.y );\n\t\t\t\t\tgl.uniform2f( uniforms.uvScale, material.map.repeat.x, material.map.repeat.y );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tgl.uniform2f( uniforms.uvOffset, 0, 0 );\n\t\t\t\t\tgl.uniform2f( uniforms.uvScale, 1, 1 );\n\n\t\t\t\t}\n\n\t\t\t\tgl.uniform1f( uniforms.opacity, material.opacity );\n\t\t\t\tgl.uniform3f( uniforms.color, material.color.r, material.color.g, material.color.b );\n\n\t\t\t\tgl.uniform1f( uniforms.rotation, material.rotation );\n\t\t\t\tgl.uniform2fv( uniforms.scale, scale );\n\n\t\t\t\tstate.setBlending( material.blending, material.blendEquation, material.blendSrc, material.blendDst, material.blendEquationAlpha, material.blendSrcAlpha, material.blendDstAlpha, material.premultipliedAlpha );\n\t\t\t\tstate.buffers.depth.setTest( material.depthTest );\n\t\t\t\tstate.buffers.depth.setMask( material.depthWrite );\n\t\t\t\tstate.buffers.color.setMask( material.colorWrite );\n\n\t\t\t\ttextures.setTexture2D( material.map || texture, 0 );\n\n\t\t\t\tgl.drawElements( gl.TRIANGLES, 6, gl.UNSIGNED_SHORT, 0 );\n\n\t\t\t\tsprite.onAfterRender( renderer, scene, camera, undefined, material, undefined );\n\n\t\t\t}\n\n\t\t\t// restore gl\n\n\t\t\tstate.enable( gl.CULL_FACE );\n\n\t\t\tstate.reset();\n\n\t\t};\n\n\t\tfunction createProgram() {\n\n\t\t\tvar program = gl.createProgram();\n\n\t\t\tvar vertexShader = gl.createShader( gl.VERTEX_SHADER );\n\t\t\tvar fragmentShader = gl.createShader( gl.FRAGMENT_SHADER );\n\n\t\t\tgl.shaderSource( vertexShader, [\n\n\t\t\t\t'precision ' + capabilities.precision + ' float;',\n\n\t\t\t\t'#define SHADER_NAME ' + 'SpriteMaterial',\n\n\t\t\t\t'uniform mat4 modelViewMatrix;',\n\t\t\t\t'uniform mat4 projectionMatrix;',\n\t\t\t\t'uniform float rotation;',\n\t\t\t\t'uniform vec2 scale;',\n\t\t\t\t'uniform vec2 uvOffset;',\n\t\t\t\t'uniform vec2 uvScale;',\n\n\t\t\t\t'attribute vec2 position;',\n\t\t\t\t'attribute vec2 uv;',\n\n\t\t\t\t'varying vec2 vUV;',\n\t\t\t\t'varying float fogDepth;',\n\n\t\t\t\t'void main() {',\n\n\t\t\t\t'\tvUV = uvOffset + uv * uvScale;',\n\n\t\t\t\t'\tvec2 alignedPosition = position * scale;',\n\n\t\t\t\t'\tvec2 rotatedPosition;',\n\t\t\t\t'\trotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;',\n\t\t\t\t'\trotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;',\n\n\t\t\t\t'\tvec4 mvPosition;',\n\n\t\t\t\t'\tmvPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );',\n\t\t\t\t'\tmvPosition.xy += rotatedPosition;',\n\n\t\t\t\t'\tgl_Position = projectionMatrix * mvPosition;',\n\n\t\t\t\t'\tfogDepth = - mvPosition.z;',\n\n\t\t\t\t'}'\n\n\t\t\t].join( '\\n' ) );\n\n\t\t\tgl.shaderSource( fragmentShader, [\n\n\t\t\t\t'precision ' + capabilities.precision + ' float;',\n\n\t\t\t\t'#define SHADER_NAME ' + 'SpriteMaterial',\n\n\t\t\t\t'uniform vec3 color;',\n\t\t\t\t'uniform sampler2D map;',\n\t\t\t\t'uniform float opacity;',\n\n\t\t\t\t'uniform int fogType;',\n\t\t\t\t'uniform vec3 fogColor;',\n\t\t\t\t'uniform float fogDensity;',\n\t\t\t\t'uniform float fogNear;',\n\t\t\t\t'uniform float fogFar;',\n\t\t\t\t'uniform float alphaTest;',\n\n\t\t\t\t'varying vec2 vUV;',\n\t\t\t\t'varying float fogDepth;',\n\n\t\t\t\t'void main() {',\n\n\t\t\t\t'\tvec4 texture = texture2D( map, vUV );',\n\n\t\t\t\t'\tgl_FragColor = vec4( color * texture.xyz, texture.a * opacity );',\n\n\t\t\t\t'\tif ( gl_FragColor.a < alphaTest ) discard;',\n\n\t\t\t\t'\tif ( fogType > 0 ) {',\n\n\t\t\t\t'\t\tfloat fogFactor = 0.0;',\n\n\t\t\t\t'\t\tif ( fogType == 1 ) {',\n\n\t\t\t\t'\t\t\tfogFactor = smoothstep( fogNear, fogFar, fogDepth );',\n\n\t\t\t\t'\t\t} else {',\n\n\t\t\t\t'\t\t\tconst float LOG2 = 1.442695;',\n\t\t\t\t'\t\t\tfogFactor = exp2( - fogDensity * fogDensity * fogDepth * fogDepth * LOG2 );',\n\t\t\t\t'\t\t\tfogFactor = 1.0 - clamp( fogFactor, 0.0, 1.0 );',\n\n\t\t\t\t'\t\t}',\n\n\t\t\t\t'\t\tgl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );',\n\n\t\t\t\t'\t}',\n\n\t\t\t\t'}'\n\n\t\t\t].join( '\\n' ) );\n\n\t\t\tgl.compileShader( vertexShader );\n\t\t\tgl.compileShader( fragmentShader );\n\n\t\t\tgl.attachShader( program, vertexShader );\n\t\t\tgl.attachShader( program, fragmentShader );\n\n\t\t\tgl.linkProgram( program );\n\n\t\t\treturn program;\n\n\t\t}\n\n\t\tfunction painterSortStable( a, b ) {\n\n\t\t\tif ( a.renderOrder !== b.renderOrder ) {\n\n\t\t\t\treturn a.renderOrder - b.renderOrder;\n\n\t\t\t} else if ( a.z !== b.z ) {\n\n\t\t\t\treturn b.z - a.z;\n\n\t\t\t} else {\n\n\t\t\t\treturn b.id - a.id;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t * @author alteredq / http://alteredqualia.com/\n\t */\n\n\tvar materialId = 0;\n\n\tfunction Material() {\n\n\t\tObject.defineProperty( this, 'id', { value: materialId ++ } );\n\n\t\tthis.uuid = _Math.generateUUID();\n\n\t\tthis.name = '';\n\t\tthis.type = 'Material';\n\n\t\tthis.fog = true;\n\t\tthis.lights = true;\n\n\t\tthis.blending = NormalBlending;\n\t\tthis.side = FrontSide;\n\t\tthis.flatShading = false;\n\t\tthis.vertexColors = NoColors; // THREE.NoColors, THREE.VertexColors, THREE.FaceColors\n\n\t\tthis.opacity = 1;\n\t\tthis.transparent = false;\n\n\t\tthis.blendSrc = SrcAlphaFactor;\n\t\tthis.blendDst = OneMinusSrcAlphaFactor;\n\t\tthis.blendEquation = AddEquation;\n\t\tthis.blendSrcAlpha = null;\n\t\tthis.blendDstAlpha = null;\n\t\tthis.blendEquationAlpha = null;\n\n\t\tthis.depthFunc = LessEqualDepth;\n\t\tthis.depthTest = true;\n\t\tthis.depthWrite = true;\n\n\t\tthis.clippingPlanes = null;\n\t\tthis.clipIntersection = false;\n\t\tthis.clipShadows = false;\n\n\t\tthis.colorWrite = true;\n\n\t\tthis.precision = null; // override the renderer's default precision for this material\n\n\t\tthis.polygonOffset = false;\n\t\tthis.polygonOffsetFactor = 0;\n\t\tthis.polygonOffsetUnits = 0;\n\n\t\tthis.dithering = false;\n\n\t\tthis.alphaTest = 0;\n\t\tthis.premultipliedAlpha = false;\n\n\t\tthis.overdraw = 0; // Overdrawn pixels (typically between 0 and 1) for fixing antialiasing gaps in CanvasRenderer\n\n\t\tthis.visible = true;\n\n\t\tthis.userData = {};\n\n\t\tthis.needsUpdate = true;\n\n\t}\n\n\tObject.assign( Material.prototype, EventDispatcher.prototype, {\n\n\t\tisMaterial: true,\n\n\t\tonBeforeCompile: function () {},\n\n\t\tsetValues: function ( values ) {\n\n\t\t\tif ( values === undefined ) return;\n\n\t\t\tfor ( var key in values ) {\n\n\t\t\t\tvar newValue = values[ key ];\n\n\t\t\t\tif ( newValue === undefined ) {\n\n\t\t\t\t\tconsole.warn( \"THREE.Material: '\" + key + \"' parameter is undefined.\" );\n\t\t\t\t\tcontinue;\n\n\t\t\t\t}\n\n\t\t\t\t// for backward compatability if shading is set in the constructor\n\t\t\t\tif ( key === 'shading' ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.' + this.type + ': .shading has been removed. Use the boolean .flatShading instead.' );\n\t\t\t\t\tthis.flatShading = ( newValue === FlatShading ) ? true : false;\n\t\t\t\t\tcontinue;\n\n\t\t\t\t}\n\n\t\t\t\tvar currentValue = this[ key ];\n\n\t\t\t\tif ( currentValue === undefined ) {\n\n\t\t\t\t\tconsole.warn( \"THREE.\" + this.type + \": '\" + key + \"' is not a property of this material.\" );\n\t\t\t\t\tcontinue;\n\n\t\t\t\t}\n\n\t\t\t\tif ( currentValue && currentValue.isColor ) {\n\n\t\t\t\t\tcurrentValue.set( newValue );\n\n\t\t\t\t} else if ( ( currentValue && currentValue.isVector3 ) && ( newValue && newValue.isVector3 ) ) {\n\n\t\t\t\t\tcurrentValue.copy( newValue );\n\n\t\t\t\t} else if ( key === 'overdraw' ) {\n\n\t\t\t\t\t// ensure overdraw is backwards-compatible with legacy boolean type\n\t\t\t\t\tthis[ key ] = Number( newValue );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis[ key ] = newValue;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t},\n\n\t\ttoJSON: function ( meta ) {\n\n\t\t\tvar isRoot = ( meta === undefined || typeof meta === 'string' );\n\n\t\t\tif ( isRoot ) {\n\n\t\t\t\tmeta = {\n\t\t\t\t\ttextures: {},\n\t\t\t\t\timages: {}\n\t\t\t\t};\n\n\t\t\t}\n\n\t\t\tvar data = {\n\t\t\t\tmetadata: {\n\t\t\t\t\tversion: 4.5,\n\t\t\t\t\ttype: 'Material',\n\t\t\t\t\tgenerator: 'Material.toJSON'\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t// standard Material serialization\n\t\t\tdata.uuid = this.uuid;\n\t\t\tdata.type = this.type;\n\n\t\t\tif ( this.name !== '' ) data.name = this.name;\n\n\t\t\tif ( this.color && this.color.isColor ) data.color = this.color.getHex();\n\n\t\t\tif ( this.roughness !== undefined ) data.roughness = this.roughness;\n\t\t\tif ( this.metalness !== undefined ) data.metalness = this.metalness;\n\n\t\t\tif ( this.emissive && this.emissive.isColor ) data.emissive = this.emissive.getHex();\n\t\t\tif ( this.emissiveIntensity !== 1 ) data.emissiveIntensity = this.emissiveIntensity;\n\n\t\t\tif ( this.specular && this.specular.isColor ) data.specular = this.specular.getHex();\n\t\t\tif ( this.shininess !== undefined ) data.shininess = this.shininess;\n\t\t\tif ( this.clearCoat !== undefined ) data.clearCoat = this.clearCoat;\n\t\t\tif ( this.clearCoatRoughness !== undefined ) data.clearCoatRoughness = this.clearCoatRoughness;\n\n\t\t\tif ( this.map && this.map.isTexture ) data.map = this.map.toJSON( meta ).uuid;\n\t\t\tif ( this.alphaMap && this.alphaMap.isTexture ) data.alphaMap = this.alphaMap.toJSON( meta ).uuid;\n\t\t\tif ( this.lightMap && this.lightMap.isTexture ) data.lightMap = this.lightMap.toJSON( meta ).uuid;\n\t\t\tif ( this.bumpMap && this.bumpMap.isTexture ) {\n\n\t\t\t\tdata.bumpMap = this.bumpMap.toJSON( meta ).uuid;\n\t\t\t\tdata.bumpScale = this.bumpScale;\n\n\t\t\t}\n\t\t\tif ( this.normalMap && this.normalMap.isTexture ) {\n\n\t\t\t\tdata.normalMap = this.normalMap.toJSON( meta ).uuid;\n\t\t\t\tdata.normalScale = this.normalScale.toArray();\n\n\t\t\t}\n\t\t\tif ( this.displacementMap && this.displacementMap.isTexture ) {\n\n\t\t\t\tdata.displacementMap = this.displacementMap.toJSON( meta ).uuid;\n\t\t\t\tdata.displacementScale = this.displacementScale;\n\t\t\t\tdata.displacementBias = this.displacementBias;\n\n\t\t\t}\n\t\t\tif ( this.roughnessMap && this.roughnessMap.isTexture ) data.roughnessMap = this.roughnessMap.toJSON( meta ).uuid;\n\t\t\tif ( this.metalnessMap && this.metalnessMap.isTexture ) data.metalnessMap = this.metalnessMap.toJSON( meta ).uuid;\n\n\t\t\tif ( this.emissiveMap && this.emissiveMap.isTexture ) data.emissiveMap = this.emissiveMap.toJSON( meta ).uuid;\n\t\t\tif ( this.specularMap && this.specularMap.isTexture ) data.specularMap = this.specularMap.toJSON( meta ).uuid;\n\n\t\t\tif ( this.envMap && this.envMap.isTexture ) {\n\n\t\t\t\tdata.envMap = this.envMap.toJSON( meta ).uuid;\n\t\t\t\tdata.reflectivity = this.reflectivity; // Scale behind envMap\n\n\t\t\t}\n\n\t\t\tif ( this.gradientMap && this.gradientMap.isTexture ) {\n\n\t\t\t\tdata.gradientMap = this.gradientMap.toJSON( meta ).uuid;\n\n\t\t\t}\n\n\t\t\tif ( this.size !== undefined ) data.size = this.size;\n\t\t\tif ( this.sizeAttenuation !== undefined ) data.sizeAttenuation = this.sizeAttenuation;\n\n\t\t\tif ( this.blending !== NormalBlending ) data.blending = this.blending;\n\t\t\tif ( this.flatShading === true ) data.flatShading = this.flatShading;\n\t\t\tif ( this.side !== FrontSide ) data.side = this.side;\n\t\t\tif ( this.vertexColors !== NoColors ) data.vertexColors = this.vertexColors;\n\n\t\t\tif ( this.opacity < 1 ) data.opacity = this.opacity;\n\t\t\tif ( this.transparent === true ) data.transparent = this.transparent;\n\n\t\t\tdata.depthFunc = this.depthFunc;\n\t\t\tdata.depthTest = this.depthTest;\n\t\t\tdata.depthWrite = this.depthWrite;\n\n\t\t\t// rotation (SpriteMaterial)\n\t\t\tif ( this.rotation !== 0 ) data.rotation = this.rotation;\n\n\t\t\tif ( this.linewidth !== 1 ) data.linewidth = this.linewidth;\n\t\t\tif ( this.dashSize !== undefined ) data.dashSize = this.dashSize;\n\t\t\tif ( this.gapSize !== undefined ) data.gapSize = this.gapSize;\n\t\t\tif ( this.scale !== undefined ) data.scale = this.scale;\n\n\t\t\tif ( this.dithering === true ) data.dithering = true;\n\n\t\t\tif ( this.alphaTest > 0 ) data.alphaTest = this.alphaTest;\n\t\t\tif ( this.premultipliedAlpha === true ) data.premultipliedAlpha = this.premultipliedAlpha;\n\n\t\t\tif ( this.wireframe === true ) data.wireframe = this.wireframe;\n\t\t\tif ( this.wireframeLinewidth > 1 ) data.wireframeLinewidth = this.wireframeLinewidth;\n\t\t\tif ( this.wireframeLinecap !== 'round' ) data.wireframeLinecap = this.wireframeLinecap;\n\t\t\tif ( this.wireframeLinejoin !== 'round' ) data.wireframeLinejoin = this.wireframeLinejoin;\n\n\t\t\tif ( this.morphTargets === true ) data.morphTargets = true;\n\t\t\tif ( this.skinning === true ) data.skinning = true;\n\n\t\t\tif ( this.visible === false ) data.visible = false;\n\t\t\tif ( JSON.stringify( this.userData ) !== '{}' ) data.userData = this.userData;\n\n\t\t\t// TODO: Copied from Object3D.toJSON\n\n\t\t\tfunction extractFromCache( cache ) {\n\n\t\t\t\tvar values = [];\n\n\t\t\t\tfor ( var key in cache ) {\n\n\t\t\t\t\tvar data = cache[ key ];\n\t\t\t\t\tdelete data.metadata;\n\t\t\t\t\tvalues.push( data );\n\n\t\t\t\t}\n\n\t\t\t\treturn values;\n\n\t\t\t}\n\n\t\t\tif ( isRoot ) {\n\n\t\t\t\tvar textures = extractFromCache( meta.textures );\n\t\t\t\tvar images = extractFromCache( meta.images );\n\n\t\t\t\tif ( textures.length > 0 ) data.textures = textures;\n\t\t\t\tif ( images.length > 0 ) data.images = images;\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t},\n\n\t\tclone: function () {\n\n\t\t\treturn new this.constructor().copy( this );\n\n\t\t},\n\n\t\tcopy: function ( source ) {\n\n\t\t\tthis.name = source.name;\n\n\t\t\tthis.fog = source.fog;\n\t\t\tthis.lights = source.lights;\n\n\t\t\tthis.blending = source.blending;\n\t\t\tthis.side = source.side;\n\t\t\tthis.flatShading = source.flatShading;\n\t\t\tthis.vertexColors = source.vertexColors;\n\n\t\t\tthis.opacity = source.opacity;\n\t\t\tthis.transparent = source.transparent;\n\n\t\t\tthis.blendSrc = source.blendSrc;\n\t\t\tthis.blendDst = source.blendDst;\n\t\t\tthis.blendEquation = source.blendEquation;\n\t\t\tthis.blendSrcAlpha = source.blendSrcAlpha;\n\t\t\tthis.blendDstAlpha = source.blendDstAlpha;\n\t\t\tthis.blendEquationAlpha = source.blendEquationAlpha;\n\n\t\t\tthis.depthFunc = source.depthFunc;\n\t\t\tthis.depthTest = source.depthTest;\n\t\t\tthis.depthWrite = source.depthWrite;\n\n\t\t\tthis.colorWrite = source.colorWrite;\n\n\t\t\tthis.precision = source.precision;\n\n\t\t\tthis.polygonOffset = source.polygonOffset;\n\t\t\tthis.polygonOffsetFactor = source.polygonOffsetFactor;\n\t\t\tthis.polygonOffsetUnits = source.polygonOffsetUnits;\n\n\t\t\tthis.dithering = source.dithering;\n\n\t\t\tthis.alphaTest = source.alphaTest;\n\t\t\tthis.premultipliedAlpha = source.premultipliedAlpha;\n\n\t\t\tthis.overdraw = source.overdraw;\n\n\t\t\tthis.visible = source.visible;\n\t\t\tthis.userData = JSON.parse( JSON.stringify( source.userData ) );\n\n\t\t\tthis.clipShadows = source.clipShadows;\n\t\t\tthis.clipIntersection = source.clipIntersection;\n\n\t\t\tvar srcPlanes = source.clippingPlanes,\n\t\t\t\tdstPlanes = null;\n\n\t\t\tif ( srcPlanes !== null ) {\n\n\t\t\t\tvar n = srcPlanes.length;\n\t\t\t\tdstPlanes = new Array( n );\n\n\t\t\t\tfor ( var i = 0; i !== n; ++ i )\n\t\t\t\t\tdstPlanes[ i ] = srcPlanes[ i ].clone();\n\n\t\t\t}\n\n\t\t\tthis.clippingPlanes = dstPlanes;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tdispose: function () {\n\n\t\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t\t}\n\n\t} );\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t * @author alteredq / http://alteredqualia.com/\n\t * @author bhouston / https://clara.io\n\t * @author WestLangley / http://github.com/WestLangley\n\t *\n\t * parameters = {\n\t *\n\t * opacity: ,\n\t *\n\t * map: new THREE.Texture( ),\n\t *\n\t * alphaMap: new THREE.Texture( ),\n\t *\n\t * displacementMap: new THREE.Texture( ),\n\t * displacementScale: ,\n\t * displacementBias: ,\n\t *\n\t * wireframe: ,\n\t * wireframeLinewidth: \n\t * }\n\t */\n\n\tfunction MeshDepthMaterial( parameters ) {\n\n\t\tMaterial.call( this );\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\t\tthis.lights = false;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tMeshDepthMaterial.prototype = Object.create( Material.prototype );\n\tMeshDepthMaterial.prototype.constructor = MeshDepthMaterial;\n\n\tMeshDepthMaterial.prototype.isMeshDepthMaterial = true;\n\n\tMeshDepthMaterial.prototype.copy = function ( source ) {\n\n\t\tMaterial.prototype.copy.call( this, 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\t/**\n\t * @author WestLangley / http://github.com/WestLangley\n\t *\n\t * parameters = {\n\t *\n\t * referencePosition: ,\n\t * nearDistance: ,\n\t * farDistance: ,\n\t *\n\t * skinning: ,\n\t * morphTargets: ,\n\t *\n\t * map: new THREE.Texture( ),\n\t *\n\t * alphaMap: new THREE.Texture( ),\n\t *\n\t * displacementMap: new THREE.Texture( ),\n\t * displacementScale: ,\n\t * displacementBias: \n\t *\n\t * }\n\t */\n\n\tfunction MeshDistanceMaterial( parameters ) {\n\n\t\tMaterial.call( this );\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\t\tthis.lights = false;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tMeshDistanceMaterial.prototype = Object.create( Material.prototype );\n\tMeshDistanceMaterial.prototype.constructor = MeshDistanceMaterial;\n\n\tMeshDistanceMaterial.prototype.isMeshDistanceMaterial = true;\n\n\tMeshDistanceMaterial.prototype.copy = function ( source ) {\n\n\t\tMaterial.prototype.copy.call( this, 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\t/**\n\t * @author bhouston / http://clara.io\n\t * @author WestLangley / http://github.com/WestLangley\n\t */\n\n\tfunction Box3( min, max ) {\n\n\t\tthis.min = ( min !== undefined ) ? min : new Vector3( + Infinity, + Infinity, + Infinity );\n\t\tthis.max = ( max !== undefined ) ? max : new Vector3( - Infinity, - Infinity, - Infinity );\n\n\t}\n\n\tObject.assign( Box3.prototype, {\n\n\t\tisBox3: true,\n\n\t\tset: function ( min, max ) {\n\n\t\t\tthis.min.copy( min );\n\t\t\tthis.max.copy( max );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetFromArray: function ( array ) {\n\n\t\t\tvar minX = + Infinity;\n\t\t\tvar minY = + Infinity;\n\t\t\tvar minZ = + Infinity;\n\n\t\t\tvar maxX = - Infinity;\n\t\t\tvar maxY = - Infinity;\n\t\t\tvar maxZ = - Infinity;\n\n\t\t\tfor ( var i = 0, l = array.length; i < l; i += 3 ) {\n\n\t\t\t\tvar x = array[ i ];\n\t\t\t\tvar y = array[ i + 1 ];\n\t\t\t\tvar z = array[ i + 2 ];\n\n\t\t\t\tif ( x < minX ) minX = x;\n\t\t\t\tif ( y < minY ) minY = y;\n\t\t\t\tif ( z < minZ ) minZ = z;\n\n\t\t\t\tif ( x > maxX ) maxX = x;\n\t\t\t\tif ( y > maxY ) maxY = y;\n\t\t\t\tif ( z > maxZ ) maxZ = z;\n\n\t\t\t}\n\n\t\t\tthis.min.set( minX, minY, minZ );\n\t\t\tthis.max.set( maxX, maxY, maxZ );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetFromBufferAttribute: function ( attribute ) {\n\n\t\t\tvar minX = + Infinity;\n\t\t\tvar minY = + Infinity;\n\t\t\tvar minZ = + Infinity;\n\n\t\t\tvar maxX = - Infinity;\n\t\t\tvar maxY = - Infinity;\n\t\t\tvar maxZ = - Infinity;\n\n\t\t\tfor ( var i = 0, l = attribute.count; i < l; i ++ ) {\n\n\t\t\t\tvar x = attribute.getX( i );\n\t\t\t\tvar y = attribute.getY( i );\n\t\t\t\tvar z = attribute.getZ( i );\n\n\t\t\t\tif ( x < minX ) minX = x;\n\t\t\t\tif ( y < minY ) minY = y;\n\t\t\t\tif ( z < minZ ) minZ = z;\n\n\t\t\t\tif ( x > maxX ) maxX = x;\n\t\t\t\tif ( y > maxY ) maxY = y;\n\t\t\t\tif ( z > maxZ ) maxZ = z;\n\n\t\t\t}\n\n\t\t\tthis.min.set( minX, minY, minZ );\n\t\t\tthis.max.set( maxX, maxY, maxZ );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetFromPoints: function ( points ) {\n\n\t\t\tthis.makeEmpty();\n\n\t\t\tfor ( var i = 0, il = points.length; i < il; i ++ ) {\n\n\t\t\t\tthis.expandByPoint( points[ i ] );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetFromCenterAndSize: function () {\n\n\t\t\tvar v1 = new Vector3();\n\n\t\t\treturn function setFromCenterAndSize( center, size ) {\n\n\t\t\t\tvar halfSize = v1.copy( size ).multiplyScalar( 0.5 );\n\n\t\t\t\tthis.min.copy( center ).sub( halfSize );\n\t\t\t\tthis.max.copy( center ).add( halfSize );\n\n\t\t\t\treturn this;\n\n\t\t\t};\n\n\t\t}(),\n\n\t\tsetFromObject: function ( object ) {\n\n\t\t\tthis.makeEmpty();\n\n\t\t\treturn this.expandByObject( object );\n\n\t\t},\n\n\t\tclone: function () {\n\n\t\t\treturn new this.constructor().copy( this );\n\n\t\t},\n\n\t\tcopy: function ( box ) {\n\n\t\t\tthis.min.copy( box.min );\n\t\t\tthis.max.copy( box.max );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tmakeEmpty: function () {\n\n\t\t\tthis.min.x = this.min.y = this.min.z = + Infinity;\n\t\t\tthis.max.x = this.max.y = this.max.z = - Infinity;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tisEmpty: function () {\n\n\t\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\t\treturn ( this.max.x < this.min.x ) || ( this.max.y < this.min.y ) || ( this.max.z < this.min.z );\n\n\t\t},\n\n\t\tgetCenter: function ( optionalTarget ) {\n\n\t\t\tvar result = optionalTarget || new Vector3();\n\t\t\treturn this.isEmpty() ? result.set( 0, 0, 0 ) : result.addVectors( this.min, this.max ).multiplyScalar( 0.5 );\n\n\t\t},\n\n\t\tgetSize: function ( optionalTarget ) {\n\n\t\t\tvar result = optionalTarget || new Vector3();\n\t\t\treturn this.isEmpty() ? result.set( 0, 0, 0 ) : result.subVectors( this.max, this.min );\n\n\t\t},\n\n\t\texpandByPoint: function ( point ) {\n\n\t\t\tthis.min.min( point );\n\t\t\tthis.max.max( point );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\texpandByVector: function ( vector ) {\n\n\t\t\tthis.min.sub( vector );\n\t\t\tthis.max.add( vector );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\texpandByScalar: function ( scalar ) {\n\n\t\t\tthis.min.addScalar( - scalar );\n\t\t\tthis.max.addScalar( scalar );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\texpandByObject: function () {\n\n\t\t\t// Computes the world-axis-aligned bounding box of an object (including its children),\n\t\t\t// accounting for both the object's, and children's, world transforms\n\n\t\t\tvar scope, i, l;\n\n\t\t\tvar v1 = new Vector3();\n\n\t\t\tfunction traverse( node ) {\n\n\t\t\t\tvar geometry = node.geometry;\n\n\t\t\t\tif ( geometry !== undefined ) {\n\n\t\t\t\t\tif ( geometry.isGeometry ) {\n\n\t\t\t\t\t\tvar vertices = geometry.vertices;\n\n\t\t\t\t\t\tfor ( i = 0, l = vertices.length; i < l; i ++ ) {\n\n\t\t\t\t\t\t\tv1.copy( vertices[ i ] );\n\t\t\t\t\t\t\tv1.applyMatrix4( node.matrixWorld );\n\n\t\t\t\t\t\t\tscope.expandByPoint( v1 );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else if ( geometry.isBufferGeometry ) {\n\n\t\t\t\t\t\tvar attribute = geometry.attributes.position;\n\n\t\t\t\t\t\tif ( attribute !== undefined ) {\n\n\t\t\t\t\t\t\tfor ( i = 0, l = attribute.count; i < l; i ++ ) {\n\n\t\t\t\t\t\t\t\tv1.fromBufferAttribute( attribute, i ).applyMatrix4( node.matrixWorld );\n\n\t\t\t\t\t\t\t\tscope.expandByPoint( v1 );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn function expandByObject( object ) {\n\n\t\t\t\tscope = this;\n\n\t\t\t\tobject.updateMatrixWorld( true );\n\n\t\t\t\tobject.traverse( traverse );\n\n\t\t\t\treturn this;\n\n\t\t\t};\n\n\t\t}(),\n\n\t\tcontainsPoint: function ( point ) {\n\n\t\t\treturn point.x < this.min.x || point.x > this.max.x ||\n\t\t\t\tpoint.y < this.min.y || point.y > this.max.y ||\n\t\t\t\tpoint.z < this.min.z || point.z > this.max.z ? false : true;\n\n\t\t},\n\n\t\tcontainsBox: function ( box ) {\n\n\t\t\treturn this.min.x <= box.min.x && box.max.x <= this.max.x &&\n\t\t\t\tthis.min.y <= box.min.y && box.max.y <= this.max.y &&\n\t\t\t\tthis.min.z <= box.min.z && box.max.z <= this.max.z;\n\n\t\t},\n\n\t\tgetParameter: function ( point, optionalTarget ) {\n\n\t\t\t// This can potentially have a divide by zero if the box\n\t\t\t// has a size dimension of 0.\n\n\t\t\tvar result = optionalTarget || new Vector3();\n\n\t\t\treturn result.set(\n\t\t\t\t( point.x - this.min.x ) / ( this.max.x - this.min.x ),\n\t\t\t\t( point.y - this.min.y ) / ( this.max.y - this.min.y ),\n\t\t\t\t( point.z - this.min.z ) / ( this.max.z - this.min.z )\n\t\t\t);\n\n\t\t},\n\n\t\tintersectsBox: function ( box ) {\n\n\t\t\t// using 6 splitting planes to rule out intersections.\n\t\t\treturn box.max.x < this.min.x || box.min.x > this.max.x ||\n\t\t\t\tbox.max.y < this.min.y || box.min.y > this.max.y ||\n\t\t\t\tbox.max.z < this.min.z || box.min.z > this.max.z ? false : true;\n\n\t\t},\n\n\t\tintersectsSphere: ( function () {\n\n\t\t\tvar closestPoint = new Vector3();\n\n\t\t\treturn function intersectsSphere( sphere ) {\n\n\t\t\t\t// Find the point on the AABB closest to the sphere center.\n\t\t\t\tthis.clampPoint( sphere.center, closestPoint );\n\n\t\t\t\t// If that point is inside the sphere, the AABB and sphere intersect.\n\t\t\t\treturn closestPoint.distanceToSquared( sphere.center ) <= ( sphere.radius * sphere.radius );\n\n\t\t\t};\n\n\t\t} )(),\n\n\t\tintersectsPlane: function ( plane ) {\n\n\t\t\t// We compute the minimum and maximum dot product values. If those values\n\t\t\t// are on the same side (back or front) of the plane, then there is no intersection.\n\n\t\t\tvar min, max;\n\n\t\t\tif ( plane.normal.x > 0 ) {\n\n\t\t\t\tmin = plane.normal.x * this.min.x;\n\t\t\t\tmax = plane.normal.x * this.max.x;\n\n\t\t\t} else {\n\n\t\t\t\tmin = plane.normal.x * this.max.x;\n\t\t\t\tmax = plane.normal.x * this.min.x;\n\n\t\t\t}\n\n\t\t\tif ( plane.normal.y > 0 ) {\n\n\t\t\t\tmin += plane.normal.y * this.min.y;\n\t\t\t\tmax += plane.normal.y * this.max.y;\n\n\t\t\t} else {\n\n\t\t\t\tmin += plane.normal.y * this.max.y;\n\t\t\t\tmax += plane.normal.y * this.min.y;\n\n\t\t\t}\n\n\t\t\tif ( plane.normal.z > 0 ) {\n\n\t\t\t\tmin += plane.normal.z * this.min.z;\n\t\t\t\tmax += plane.normal.z * this.max.z;\n\n\t\t\t} else {\n\n\t\t\t\tmin += plane.normal.z * this.max.z;\n\t\t\t\tmax += plane.normal.z * this.min.z;\n\n\t\t\t}\n\n\t\t\treturn ( min <= plane.constant && max >= plane.constant );\n\n\t\t},\n\n\t\tclampPoint: function ( point, optionalTarget ) {\n\n\t\t\tvar result = optionalTarget || new Vector3();\n\t\t\treturn result.copy( point ).clamp( this.min, this.max );\n\n\t\t},\n\n\t\tdistanceToPoint: function () {\n\n\t\t\tvar v1 = new Vector3();\n\n\t\t\treturn function distanceToPoint( point ) {\n\n\t\t\t\tvar clampedPoint = v1.copy( point ).clamp( this.min, this.max );\n\t\t\t\treturn clampedPoint.sub( point ).length();\n\n\t\t\t};\n\n\t\t}(),\n\n\t\tgetBoundingSphere: function () {\n\n\t\t\tvar v1 = new Vector3();\n\n\t\t\treturn function getBoundingSphere( optionalTarget ) {\n\n\t\t\t\tvar result = optionalTarget || new Sphere();\n\n\t\t\t\tthis.getCenter( result.center );\n\n\t\t\t\tresult.radius = this.getSize( v1 ).length() * 0.5;\n\n\t\t\t\treturn result;\n\n\t\t\t};\n\n\t\t}(),\n\n\t\tintersect: function ( box ) {\n\n\t\t\tthis.min.max( box.min );\n\t\t\tthis.max.min( box.max );\n\n\t\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\t\tif ( this.isEmpty() ) this.makeEmpty();\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tunion: function ( box ) {\n\n\t\t\tthis.min.min( box.min );\n\t\t\tthis.max.max( box.max );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tapplyMatrix4: function () {\n\n\t\t\tvar points = [\n\t\t\t\tnew Vector3(),\n\t\t\t\tnew Vector3(),\n\t\t\t\tnew Vector3(),\n\t\t\t\tnew Vector3(),\n\t\t\t\tnew Vector3(),\n\t\t\t\tnew Vector3(),\n\t\t\t\tnew Vector3(),\n\t\t\t\tnew Vector3()\n\t\t\t];\n\n\t\t\treturn function applyMatrix4( matrix ) {\n\n\t\t\t\t// transform of empty box is an empty box.\n\t\t\t\tif ( this.isEmpty() ) return this;\n\n\t\t\t\t// NOTE: I am using a binary pattern to specify all 2^3 combinations below\n\t\t\t\tpoints[ 0 ].set( this.min.x, this.min.y, this.min.z ).applyMatrix4( matrix ); // 000\n\t\t\t\tpoints[ 1 ].set( this.min.x, this.min.y, this.max.z ).applyMatrix4( matrix ); // 001\n\t\t\t\tpoints[ 2 ].set( this.min.x, this.max.y, this.min.z ).applyMatrix4( matrix ); // 010\n\t\t\t\tpoints[ 3 ].set( this.min.x, this.max.y, this.max.z ).applyMatrix4( matrix ); // 011\n\t\t\t\tpoints[ 4 ].set( this.max.x, this.min.y, this.min.z ).applyMatrix4( matrix ); // 100\n\t\t\t\tpoints[ 5 ].set( this.max.x, this.min.y, this.max.z ).applyMatrix4( matrix ); // 101\n\t\t\t\tpoints[ 6 ].set( this.max.x, this.max.y, this.min.z ).applyMatrix4( matrix ); // 110\n\t\t\t\tpoints[ 7 ].set( this.max.x, this.max.y, this.max.z ).applyMatrix4( matrix );\t// 111\n\n\t\t\t\tthis.setFromPoints( points );\n\n\t\t\t\treturn this;\n\n\t\t\t};\n\n\t\t}(),\n\n\t\ttranslate: function ( offset ) {\n\n\t\t\tthis.min.add( offset );\n\t\t\tthis.max.add( offset );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tequals: function ( box ) {\n\n\t\t\treturn box.min.equals( this.min ) && box.max.equals( this.max );\n\n\t\t}\n\n\t} );\n\n\t/**\n\t * @author bhouston / http://clara.io\n\t * @author mrdoob / http://mrdoob.com/\n\t */\n\n\tfunction Sphere( center, radius ) {\n\n\t\tthis.center = ( center !== undefined ) ? center : new Vector3();\n\t\tthis.radius = ( radius !== undefined ) ? radius : 0;\n\n\t}\n\n\tObject.assign( Sphere.prototype, {\n\n\t\tset: function ( center, radius ) {\n\n\t\t\tthis.center.copy( center );\n\t\t\tthis.radius = radius;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetFromPoints: function () {\n\n\t\t\tvar box = new Box3();\n\n\t\t\treturn function setFromPoints( points, optionalCenter ) {\n\n\t\t\t\tvar center = this.center;\n\n\t\t\t\tif ( optionalCenter !== undefined ) {\n\n\t\t\t\t\tcenter.copy( optionalCenter );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tbox.setFromPoints( points ).getCenter( center );\n\n\t\t\t\t}\n\n\t\t\t\tvar maxRadiusSq = 0;\n\n\t\t\t\tfor ( var i = 0, il = points.length; i < il; i ++ ) {\n\n\t\t\t\t\tmaxRadiusSq = Math.max( maxRadiusSq, center.distanceToSquared( points[ i ] ) );\n\n\t\t\t\t}\n\n\t\t\t\tthis.radius = Math.sqrt( maxRadiusSq );\n\n\t\t\t\treturn this;\n\n\t\t\t};\n\n\t\t}(),\n\n\t\tclone: function () {\n\n\t\t\treturn new this.constructor().copy( this );\n\n\t\t},\n\n\t\tcopy: function ( sphere ) {\n\n\t\t\tthis.center.copy( sphere.center );\n\t\t\tthis.radius = sphere.radius;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tempty: function () {\n\n\t\t\treturn ( this.radius <= 0 );\n\n\t\t},\n\n\t\tcontainsPoint: function ( point ) {\n\n\t\t\treturn ( point.distanceToSquared( this.center ) <= ( this.radius * this.radius ) );\n\n\t\t},\n\n\t\tdistanceToPoint: function ( point ) {\n\n\t\t\treturn ( point.distanceTo( this.center ) - this.radius );\n\n\t\t},\n\n\t\tintersectsSphere: function ( sphere ) {\n\n\t\t\tvar radiusSum = this.radius + sphere.radius;\n\n\t\t\treturn sphere.center.distanceToSquared( this.center ) <= ( radiusSum * radiusSum );\n\n\t\t},\n\n\t\tintersectsBox: function ( box ) {\n\n\t\t\treturn box.intersectsSphere( this );\n\n\t\t},\n\n\t\tintersectsPlane: function ( plane ) {\n\n\t\t\treturn Math.abs( plane.distanceToPoint( this.center ) ) <= this.radius;\n\n\t\t},\n\n\t\tclampPoint: function ( point, optionalTarget ) {\n\n\t\t\tvar deltaLengthSq = this.center.distanceToSquared( point );\n\n\t\t\tvar result = optionalTarget || new Vector3();\n\n\t\t\tresult.copy( point );\n\n\t\t\tif ( deltaLengthSq > ( this.radius * this.radius ) ) {\n\n\t\t\t\tresult.sub( this.center ).normalize();\n\t\t\t\tresult.multiplyScalar( this.radius ).add( this.center );\n\n\t\t\t}\n\n\t\t\treturn result;\n\n\t\t},\n\n\t\tgetBoundingBox: function ( optionalTarget ) {\n\n\t\t\tvar box = optionalTarget || new Box3();\n\n\t\t\tbox.set( this.center, this.center );\n\t\t\tbox.expandByScalar( this.radius );\n\n\t\t\treturn box;\n\n\t\t},\n\n\t\tapplyMatrix4: function ( matrix ) {\n\n\t\t\tthis.center.applyMatrix4( matrix );\n\t\t\tthis.radius = this.radius * matrix.getMaxScaleOnAxis();\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\ttranslate: function ( offset ) {\n\n\t\t\tthis.center.add( offset );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tequals: function ( sphere ) {\n\n\t\t\treturn sphere.center.equals( this.center ) && ( sphere.radius === this.radius );\n\n\t\t}\n\n\t} );\n\n\t/**\n\t * @author bhouston / http://clara.io\n\t */\n\n\tfunction Plane( normal, constant ) {\n\n\t\t// normal is assumed to be normalized\n\n\t\tthis.normal = ( normal !== undefined ) ? normal : new Vector3( 1, 0, 0 );\n\t\tthis.constant = ( constant !== undefined ) ? constant : 0;\n\n\t}\n\n\tObject.assign( Plane.prototype, {\n\n\t\tset: function ( normal, constant ) {\n\n\t\t\tthis.normal.copy( normal );\n\t\t\tthis.constant = constant;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetComponents: function ( x, y, z, w ) {\n\n\t\t\tthis.normal.set( x, y, z );\n\t\t\tthis.constant = w;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetFromNormalAndCoplanarPoint: function ( normal, point ) {\n\n\t\t\tthis.normal.copy( normal );\n\t\t\tthis.constant = - point.dot( this.normal );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetFromCoplanarPoints: function () {\n\n\t\t\tvar v1 = new Vector3();\n\t\t\tvar v2 = new Vector3();\n\n\t\t\treturn function setFromCoplanarPoints( a, b, c ) {\n\n\t\t\t\tvar normal = v1.subVectors( c, b ).cross( v2.subVectors( a, b ) ).normalize();\n\n\t\t\t\t// Q: should an error be thrown if normal is zero (e.g. degenerate plane)?\n\n\t\t\t\tthis.setFromNormalAndCoplanarPoint( normal, a );\n\n\t\t\t\treturn this;\n\n\t\t\t};\n\n\t\t}(),\n\n\t\tclone: function () {\n\n\t\t\treturn new this.constructor().copy( this );\n\n\t\t},\n\n\t\tcopy: function ( plane ) {\n\n\t\t\tthis.normal.copy( plane.normal );\n\t\t\tthis.constant = plane.constant;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tnormalize: function () {\n\n\t\t\t// Note: will lead to a divide by zero if the plane is invalid.\n\n\t\t\tvar inverseNormalLength = 1.0 / this.normal.length();\n\t\t\tthis.normal.multiplyScalar( inverseNormalLength );\n\t\t\tthis.constant *= inverseNormalLength;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tnegate: function () {\n\n\t\t\tthis.constant *= - 1;\n\t\t\tthis.normal.negate();\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tdistanceToPoint: function ( point ) {\n\n\t\t\treturn this.normal.dot( point ) + this.constant;\n\n\t\t},\n\n\t\tdistanceToSphere: function ( sphere ) {\n\n\t\t\treturn this.distanceToPoint( sphere.center ) - sphere.radius;\n\n\t\t},\n\n\t\tprojectPoint: function ( point, optionalTarget ) {\n\n\t\t\tvar result = optionalTarget || new Vector3();\n\n\t\t\treturn result.copy( this.normal ).multiplyScalar( - this.distanceToPoint( point ) ).add( point );\n\n\t\t},\n\n\t\tintersectLine: function () {\n\n\t\t\tvar v1 = new Vector3();\n\n\t\t\treturn function intersectLine( line, optionalTarget ) {\n\n\t\t\t\tvar result = optionalTarget || new Vector3();\n\n\t\t\t\tvar direction = line.delta( v1 );\n\n\t\t\t\tvar denominator = this.normal.dot( direction );\n\n\t\t\t\tif ( denominator === 0 ) {\n\n\t\t\t\t\t// line is coplanar, return origin\n\t\t\t\t\tif ( this.distanceToPoint( line.start ) === 0 ) {\n\n\t\t\t\t\t\treturn result.copy( line.start );\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// Unsure if this is the correct method to handle this case.\n\t\t\t\t\treturn undefined;\n\n\t\t\t\t}\n\n\t\t\t\tvar t = - ( line.start.dot( this.normal ) + this.constant ) / denominator;\n\n\t\t\t\tif ( t < 0 || t > 1 ) {\n\n\t\t\t\t\treturn undefined;\n\n\t\t\t\t}\n\n\t\t\t\treturn result.copy( direction ).multiplyScalar( t ).add( line.start );\n\n\t\t\t};\n\n\t\t}(),\n\n\t\tintersectsLine: function ( line ) {\n\n\t\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\t\tvar startSign = this.distanceToPoint( line.start );\n\t\t\tvar endSign = this.distanceToPoint( line.end );\n\n\t\t\treturn ( startSign < 0 && endSign > 0 ) || ( endSign < 0 && startSign > 0 );\n\n\t\t},\n\n\t\tintersectsBox: function ( box ) {\n\n\t\t\treturn box.intersectsPlane( this );\n\n\t\t},\n\n\t\tintersectsSphere: function ( sphere ) {\n\n\t\t\treturn sphere.intersectsPlane( this );\n\n\t\t},\n\n\t\tcoplanarPoint: function ( optionalTarget ) {\n\n\t\t\tvar result = optionalTarget || new Vector3();\n\n\t\t\treturn result.copy( this.normal ).multiplyScalar( - this.constant );\n\n\t\t},\n\n\t\tapplyMatrix4: function () {\n\n\t\t\tvar v1 = new Vector3();\n\t\t\tvar m1 = new Matrix3();\n\n\t\t\treturn function applyMatrix4( matrix, optionalNormalMatrix ) {\n\n\t\t\t\tvar normalMatrix = optionalNormalMatrix || m1.getNormalMatrix( matrix );\n\n\t\t\t\tvar referencePoint = this.coplanarPoint( v1 ).applyMatrix4( matrix );\n\n\t\t\t\tvar normal = this.normal.applyMatrix3( normalMatrix ).normalize();\n\n\t\t\t\tthis.constant = - referencePoint.dot( normal );\n\n\t\t\t\treturn this;\n\n\t\t\t};\n\n\t\t}(),\n\n\t\ttranslate: function ( offset ) {\n\n\t\t\tthis.constant -= offset.dot( this.normal );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tequals: function ( plane ) {\n\n\t\t\treturn plane.normal.equals( this.normal ) && ( plane.constant === this.constant );\n\n\t\t}\n\n\t} );\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t * @author alteredq / http://alteredqualia.com/\n\t * @author bhouston / http://clara.io\n\t */\n\n\tfunction Frustum( p0, p1, p2, p3, p4, p5 ) {\n\n\t\tthis.planes = [\n\n\t\t\t( p0 !== undefined ) ? p0 : new Plane(),\n\t\t\t( p1 !== undefined ) ? p1 : new Plane(),\n\t\t\t( p2 !== undefined ) ? p2 : new Plane(),\n\t\t\t( p3 !== undefined ) ? p3 : new Plane(),\n\t\t\t( p4 !== undefined ) ? p4 : new Plane(),\n\t\t\t( p5 !== undefined ) ? p5 : new Plane()\n\n\t\t];\n\n\t}\n\n\tObject.assign( Frustum.prototype, {\n\n\t\tset: function ( p0, p1, p2, p3, p4, p5 ) {\n\n\t\t\tvar planes = this.planes;\n\n\t\t\tplanes[ 0 ].copy( p0 );\n\t\t\tplanes[ 1 ].copy( p1 );\n\t\t\tplanes[ 2 ].copy( p2 );\n\t\t\tplanes[ 3 ].copy( p3 );\n\t\t\tplanes[ 4 ].copy( p4 );\n\t\t\tplanes[ 5 ].copy( p5 );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tclone: function () {\n\n\t\t\treturn new this.constructor().copy( this );\n\n\t\t},\n\n\t\tcopy: function ( frustum ) {\n\n\t\t\tvar planes = this.planes;\n\n\t\t\tfor ( var i = 0; i < 6; i ++ ) {\n\n\t\t\t\tplanes[ i ].copy( frustum.planes[ i ] );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetFromMatrix: function ( m ) {\n\n\t\t\tvar planes = this.planes;\n\t\t\tvar me = m.elements;\n\t\t\tvar me0 = me[ 0 ], me1 = me[ 1 ], me2 = me[ 2 ], me3 = me[ 3 ];\n\t\t\tvar me4 = me[ 4 ], me5 = me[ 5 ], me6 = me[ 6 ], me7 = me[ 7 ];\n\t\t\tvar me8 = me[ 8 ], me9 = me[ 9 ], me10 = me[ 10 ], me11 = me[ 11 ];\n\t\t\tvar me12 = me[ 12 ], me13 = me[ 13 ], me14 = me[ 14 ], me15 = me[ 15 ];\n\n\t\t\tplanes[ 0 ].setComponents( me3 - me0, me7 - me4, me11 - me8, me15 - me12 ).normalize();\n\t\t\tplanes[ 1 ].setComponents( me3 + me0, me7 + me4, me11 + me8, me15 + me12 ).normalize();\n\t\t\tplanes[ 2 ].setComponents( me3 + me1, me7 + me5, me11 + me9, me15 + me13 ).normalize();\n\t\t\tplanes[ 3 ].setComponents( me3 - me1, me7 - me5, me11 - me9, me15 - me13 ).normalize();\n\t\t\tplanes[ 4 ].setComponents( me3 - me2, me7 - me6, me11 - me10, me15 - me14 ).normalize();\n\t\t\tplanes[ 5 ].setComponents( me3 + me2, me7 + me6, me11 + me10, me15 + me14 ).normalize();\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tintersectsObject: function () {\n\n\t\t\tvar sphere = new Sphere();\n\n\t\t\treturn function intersectsObject( object ) {\n\n\t\t\t\tvar geometry = object.geometry;\n\n\t\t\t\tif ( geometry.boundingSphere === null )\n\t\t\t\t\tgeometry.computeBoundingSphere();\n\n\t\t\t\tsphere.copy( geometry.boundingSphere )\n\t\t\t\t\t.applyMatrix4( object.matrixWorld );\n\n\t\t\t\treturn this.intersectsSphere( sphere );\n\n\t\t\t};\n\n\t\t}(),\n\n\t\tintersectsSprite: function () {\n\n\t\t\tvar sphere = new Sphere();\n\n\t\t\treturn function intersectsSprite( sprite ) {\n\n\t\t\t\tsphere.center.set( 0, 0, 0 );\n\t\t\t\tsphere.radius = 0.7071067811865476;\n\t\t\t\tsphere.applyMatrix4( sprite.matrixWorld );\n\n\t\t\t\treturn this.intersectsSphere( sphere );\n\n\t\t\t};\n\n\t\t}(),\n\n\t\tintersectsSphere: function ( sphere ) {\n\n\t\t\tvar planes = this.planes;\n\t\t\tvar center = sphere.center;\n\t\t\tvar negRadius = - sphere.radius;\n\n\t\t\tfor ( var i = 0; i < 6; i ++ ) {\n\n\t\t\t\tvar distance = planes[ i ].distanceToPoint( center );\n\n\t\t\t\tif ( distance < negRadius ) {\n\n\t\t\t\t\treturn false;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn true;\n\n\t\t},\n\n\t\tintersectsBox: function () {\n\n\t\t\tvar p1 = new Vector3(),\n\t\t\t\tp2 = new Vector3();\n\n\t\t\treturn function intersectsBox( box ) {\n\n\t\t\t\tvar planes = this.planes;\n\n\t\t\t\tfor ( var i = 0; i < 6; i ++ ) {\n\n\t\t\t\t\tvar plane = planes[ i ];\n\n\t\t\t\t\tp1.x = plane.normal.x > 0 ? box.min.x : box.max.x;\n\t\t\t\t\tp2.x = plane.normal.x > 0 ? box.max.x : box.min.x;\n\t\t\t\t\tp1.y = plane.normal.y > 0 ? box.min.y : box.max.y;\n\t\t\t\t\tp2.y = plane.normal.y > 0 ? box.max.y : box.min.y;\n\t\t\t\t\tp1.z = plane.normal.z > 0 ? box.min.z : box.max.z;\n\t\t\t\t\tp2.z = plane.normal.z > 0 ? box.max.z : box.min.z;\n\n\t\t\t\t\tvar d1 = plane.distanceToPoint( p1 );\n\t\t\t\t\tvar d2 = plane.distanceToPoint( p2 );\n\n\t\t\t\t\t// if both outside plane, no intersection\n\n\t\t\t\t\tif ( d1 < 0 && d2 < 0 ) {\n\n\t\t\t\t\t\treturn false;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\treturn true;\n\n\t\t\t};\n\n\t\t}(),\n\n\t\tcontainsPoint: function ( point ) {\n\n\t\t\tvar planes = this.planes;\n\n\t\t\tfor ( var i = 0; i < 6; i ++ ) {\n\n\t\t\t\tif ( planes[ i ].distanceToPoint( point ) < 0 ) {\n\n\t\t\t\t\treturn false;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn true;\n\n\t\t}\n\n\t} );\n\n\t/**\n\t * @author alteredq / http://alteredqualia.com/\n\t * @author mrdoob / http://mrdoob.com/\n\t */\n\n\tfunction WebGLShadowMap( _renderer, _objects, maxTextureSize ) {\n\n\t\tvar _frustum = new Frustum(),\n\t\t\t_projScreenMatrix = new Matrix4(),\n\n\t\t\t_shadowMapSize = new Vector2(),\n\t\t\t_maxShadowMapSize = new Vector2( maxTextureSize, maxTextureSize ),\n\n\t\t\t_lookTarget = new Vector3(),\n\t\t\t_lightPositionWorld = new Vector3(),\n\n\t\t\t_MorphingFlag = 1,\n\t\t\t_SkinningFlag = 2,\n\n\t\t\t_NumberOfMaterialVariants = ( _MorphingFlag | _SkinningFlag ) + 1,\n\n\t\t\t_depthMaterials = new Array( _NumberOfMaterialVariants ),\n\t\t\t_distanceMaterials = new Array( _NumberOfMaterialVariants ),\n\n\t\t\t_materialCache = {};\n\n\t\tvar 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\tvar 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\tvar cube2DViewPorts = [\n\t\t\tnew Vector4(), new Vector4(), new Vector4(),\n\t\t\tnew Vector4(), new Vector4(), new Vector4()\n\t\t];\n\n\t\t// init\n\n\t\tfor ( var i = 0; i !== _NumberOfMaterialVariants; ++ i ) {\n\n\t\t\tvar useMorphing = ( i & _MorphingFlag ) !== 0;\n\t\t\tvar useSkinning = ( i & _SkinningFlag ) !== 0;\n\n\t\t\tvar depthMaterial = 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[ i ] = depthMaterial;\n\n\t\t\t//\n\n\t\t\tvar distanceMaterial = 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[ i ] = distanceMaterial;\n\n\t\t}\n\n\t\t//\n\n\t\tvar scope = this;\n\n\t\tthis.enabled = false;\n\n\t\tthis.autoUpdate = true;\n\t\tthis.needsUpdate = false;\n\n\t\tthis.type = PCFShadowMap;\n\n\t\tthis.renderReverseSided = true;\n\t\tthis.renderSingleSided = true;\n\n\t\tthis.render = function ( lights, scene, camera ) {\n\n\t\t\tif ( scope.enabled === false ) return;\n\t\t\tif ( scope.autoUpdate === false && scope.needsUpdate === false ) return;\n\n\t\t\tif ( lights.length === 0 ) return;\n\n\t\t\t// TODO Clean up (needed in case of contextlost)\n\t\t\tvar _gl = _renderer.context;\n\t\t\tvar _state = _renderer.state;\n\n\t\t\t// Set GL state for depth map.\n\t\t\t_state.disable( _gl.BLEND );\n\t\t\t_state.buffers.color.setClear( 1, 1, 1, 1 );\n\t\t\t_state.buffers.depth.setTest( true );\n\t\t\t_state.setScissorTest( false );\n\n\t\t\t// render depth map\n\n\t\t\tvar faceCount;\n\n\t\t\tfor ( var i = 0, il = lights.length; i < il; i ++ ) {\n\n\t\t\t\tvar light = lights[ i ];\n\t\t\t\tvar shadow = light.shadow;\n\t\t\t\tvar isPointLight = light && light.isPointLight;\n\n\t\t\t\tif ( shadow === undefined ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.WebGLShadowMap:', light, 'has no shadow.' );\n\t\t\t\t\tcontinue;\n\n\t\t\t\t}\n\n\t\t\t\tvar shadowCamera = shadow.camera;\n\n\t\t\t\t_shadowMapSize.copy( shadow.mapSize );\n\t\t\t\t_shadowMapSize.min( _maxShadowMapSize );\n\n\t\t\t\tif ( isPointLight ) {\n\n\t\t\t\t\tvar vpWidth = _shadowMapSize.x;\n\t\t\t\t\tvar vpHeight = _shadowMapSize.y;\n\n\t\t\t\t\t// These viewports map a cube-map onto a 2D texture with the\n\t\t\t\t\t// following orientation:\n\t\t\t\t\t//\n\t\t\t\t\t// xzXZ\n\t\t\t\t\t// y Y\n\t\t\t\t\t//\n\t\t\t\t\t// X - Positive x direction\n\t\t\t\t\t// x - Negative x direction\n\t\t\t\t\t// Y - Positive y direction\n\t\t\t\t\t// y - Negative y direction\n\t\t\t\t\t// Z - Positive z direction\n\t\t\t\t\t// z - Negative z direction\n\n\t\t\t\t\t// positive X\n\t\t\t\t\tcube2DViewPorts[ 0 ].set( vpWidth * 2, vpHeight, vpWidth, vpHeight );\n\t\t\t\t\t// negative X\n\t\t\t\t\tcube2DViewPorts[ 1 ].set( 0, vpHeight, vpWidth, vpHeight );\n\t\t\t\t\t// positive Z\n\t\t\t\t\tcube2DViewPorts[ 2 ].set( vpWidth * 3, vpHeight, vpWidth, vpHeight );\n\t\t\t\t\t// negative Z\n\t\t\t\t\tcube2DViewPorts[ 3 ].set( vpWidth, vpHeight, vpWidth, vpHeight );\n\t\t\t\t\t// positive Y\n\t\t\t\t\tcube2DViewPorts[ 4 ].set( vpWidth * 3, 0, vpWidth, vpHeight );\n\t\t\t\t\t// negative Y\n\t\t\t\t\tcube2DViewPorts[ 5 ].set( vpWidth, 0, vpWidth, vpHeight );\n\n\t\t\t\t\t_shadowMapSize.x *= 4.0;\n\t\t\t\t\t_shadowMapSize.y *= 2.0;\n\n\t\t\t\t}\n\n\t\t\t\tif ( shadow.map === null ) {\n\n\t\t\t\t\tvar pars = { minFilter: NearestFilter, magFilter: NearestFilter, format: RGBAFormat };\n\n\t\t\t\t\tshadow.map = new WebGLRenderTarget( _shadowMapSize.x, _shadowMapSize.y, pars );\n\t\t\t\t\tshadow.map.texture.name = light.name + \".shadowMap\";\n\n\t\t\t\t\tshadowCamera.updateProjectionMatrix();\n\n\t\t\t\t}\n\n\t\t\t\tif ( shadow.isSpotLightShadow ) {\n\n\t\t\t\t\tshadow.update( light );\n\n\t\t\t\t}\n\n\t\t\t\tvar shadowMap = shadow.map;\n\t\t\t\tvar shadowMatrix = shadow.matrix;\n\n\t\t\t\t_lightPositionWorld.setFromMatrixPosition( light.matrixWorld );\n\t\t\t\tshadowCamera.position.copy( _lightPositionWorld );\n\n\t\t\t\tif ( isPointLight ) {\n\n\t\t\t\t\tfaceCount = 6;\n\n\t\t\t\t\t// for point lights we set the shadow matrix to be a translation-only matrix\n\t\t\t\t\t// equal to inverse of the light's position\n\n\t\t\t\t\tshadowMatrix.makeTranslation( - _lightPositionWorld.x, - _lightPositionWorld.y, - _lightPositionWorld.z );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tfaceCount = 1;\n\n\t\t\t\t\t_lookTarget.setFromMatrixPosition( light.target.matrixWorld );\n\t\t\t\t\tshadowCamera.lookAt( _lookTarget );\n\t\t\t\t\tshadowCamera.updateMatrixWorld();\n\n\t\t\t\t\t// compute shadow matrix\n\n\t\t\t\t\tshadowMatrix.set(\n\t\t\t\t\t\t0.5, 0.0, 0.0, 0.5,\n\t\t\t\t\t\t0.0, 0.5, 0.0, 0.5,\n\t\t\t\t\t\t0.0, 0.0, 0.5, 0.5,\n\t\t\t\t\t\t0.0, 0.0, 0.0, 1.0\n\t\t\t\t\t);\n\n\t\t\t\t\tshadowMatrix.multiply( shadowCamera.projectionMatrix );\n\t\t\t\t\tshadowMatrix.multiply( shadowCamera.matrixWorldInverse );\n\n\t\t\t\t}\n\n\t\t\t\t_renderer.setRenderTarget( shadowMap );\n\t\t\t\t_renderer.clear();\n\n\t\t\t\t// render shadow map for each cube face (if omni-directional) or\n\t\t\t\t// run a single pass if not\n\n\t\t\t\tfor ( var face = 0; face < faceCount; face ++ ) {\n\n\t\t\t\t\tif ( isPointLight ) {\n\n\t\t\t\t\t\t_lookTarget.copy( shadowCamera.position );\n\t\t\t\t\t\t_lookTarget.add( cubeDirections[ face ] );\n\t\t\t\t\t\tshadowCamera.up.copy( cubeUps[ face ] );\n\t\t\t\t\t\tshadowCamera.lookAt( _lookTarget );\n\t\t\t\t\t\tshadowCamera.updateMatrixWorld();\n\n\t\t\t\t\t\tvar vpDimensions = cube2DViewPorts[ face ];\n\t\t\t\t\t\t_state.viewport( vpDimensions );\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// update camera matrices and frustum\n\n\t\t\t\t\t_projScreenMatrix.multiplyMatrices( shadowCamera.projectionMatrix, shadowCamera.matrixWorldInverse );\n\t\t\t\t\t_frustum.setFromMatrix( _projScreenMatrix );\n\n\t\t\t\t\t// set object matrices & frustum culling\n\n\t\t\t\t\trenderObject( scene, camera, shadowCamera, isPointLight );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tscope.needsUpdate = false;\n\n\t\t};\n\n\t\tfunction getDepthMaterial( object, material, isPointLight, lightPositionWorld, shadowCameraNear, shadowCameraFar ) {\n\n\t\t\tvar geometry = object.geometry;\n\n\t\t\tvar result = null;\n\n\t\t\tvar materialVariants = _depthMaterials;\n\t\t\tvar customMaterial = object.customDepthMaterial;\n\n\t\t\tif ( isPointLight ) {\n\n\t\t\t\tmaterialVariants = _distanceMaterials;\n\t\t\t\tcustomMaterial = object.customDistanceMaterial;\n\n\t\t\t}\n\n\t\t\tif ( ! customMaterial ) {\n\n\t\t\t\tvar useMorphing = false;\n\n\t\t\t\tif ( material.morphTargets ) {\n\n\t\t\t\t\tif ( geometry && geometry.isBufferGeometry ) {\n\n\t\t\t\t\t\tuseMorphing = geometry.morphAttributes && geometry.morphAttributes.position && geometry.morphAttributes.position.length > 0;\n\n\t\t\t\t\t} else if ( geometry && geometry.isGeometry ) {\n\n\t\t\t\t\t\tuseMorphing = geometry.morphTargets && geometry.morphTargets.length > 0;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( object.isSkinnedMesh && material.skinning === false ) {\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\tvar useSkinning = object.isSkinnedMesh && material.skinning;\n\n\t\t\t\tvar variantIndex = 0;\n\n\t\t\t\tif ( useMorphing ) variantIndex |= _MorphingFlag;\n\t\t\t\tif ( useSkinning ) variantIndex |= _SkinningFlag;\n\n\t\t\t\tresult = materialVariants[ variantIndex ];\n\n\t\t\t} else {\n\n\t\t\t\tresult = customMaterial;\n\n\t\t\t}\n\n\t\t\tif ( _renderer.localClippingEnabled &&\n\t\t\t\t\tmaterial.clipShadows === true &&\n\t\t\t\t\tmaterial.clippingPlanes.length !== 0 ) {\n\n\t\t\t\t// in this case we need a unique material instance reflecting the\n\t\t\t\t// appropriate state\n\n\t\t\t\tvar keyA = result.uuid, keyB = material.uuid;\n\n\t\t\t\tvar materialsForVariant = _materialCache[ keyA ];\n\n\t\t\t\tif ( materialsForVariant === undefined ) {\n\n\t\t\t\t\tmaterialsForVariant = {};\n\t\t\t\t\t_materialCache[ keyA ] = materialsForVariant;\n\n\t\t\t\t}\n\n\t\t\t\tvar cachedMaterial = materialsForVariant[ keyB ];\n\n\t\t\t\tif ( cachedMaterial === undefined ) {\n\n\t\t\t\t\tcachedMaterial = result.clone();\n\t\t\t\t\tmaterialsForVariant[ keyB ] = cachedMaterial;\n\n\t\t\t\t}\n\n\t\t\t\tresult = cachedMaterial;\n\n\t\t\t}\n\n\t\t\tresult.visible = material.visible;\n\t\t\tresult.wireframe = material.wireframe;\n\n\t\t\tvar side = material.side;\n\n\t\t\tif ( scope.renderSingleSided && side == DoubleSide ) {\n\n\t\t\t\tside = FrontSide;\n\n\t\t\t}\n\n\t\t\tif ( scope.renderReverseSided ) {\n\n\t\t\t\tif ( side === FrontSide ) side = BackSide;\n\t\t\t\telse if ( side === BackSide ) side = FrontSide;\n\n\t\t\t}\n\n\t\t\tresult.side = side;\n\n\t\t\tresult.clipShadows = material.clipShadows;\n\t\t\tresult.clippingPlanes = material.clippingPlanes;\n\t\t\tresult.clipIntersection = material.clipIntersection;\n\n\t\t\tresult.wireframeLinewidth = material.wireframeLinewidth;\n\t\t\tresult.linewidth = material.linewidth;\n\n\t\t\tif ( isPointLight && result.isMeshDistanceMaterial ) {\n\n\t\t\t\tresult.referencePosition.copy( lightPositionWorld );\n\t\t\t\tresult.nearDistance = shadowCameraNear;\n\t\t\t\tresult.farDistance = shadowCameraFar;\n\n\t\t\t}\n\n\t\t\treturn result;\n\n\t\t}\n\n\t\tfunction renderObject( object, camera, shadowCamera, isPointLight ) {\n\n\t\t\tif ( object.visible === false ) return;\n\n\t\t\tvar visible = object.layers.test( camera.layers );\n\n\t\t\tif ( visible && ( object.isMesh || object.isLine || object.isPoints ) ) {\n\n\t\t\t\tif ( object.castShadow && ( ! object.frustumCulled || _frustum.intersectsObject( object ) ) ) {\n\n\t\t\t\t\tobject.modelViewMatrix.multiplyMatrices( shadowCamera.matrixWorldInverse, object.matrixWorld );\n\n\t\t\t\t\tvar geometry = _objects.update( object );\n\t\t\t\t\tvar material = object.material;\n\n\t\t\t\t\tif ( Array.isArray( material ) ) {\n\n\t\t\t\t\t\tvar groups = geometry.groups;\n\n\t\t\t\t\t\tfor ( var k = 0, kl = groups.length; k < kl; k ++ ) {\n\n\t\t\t\t\t\t\tvar group = groups[ k ];\n\t\t\t\t\t\t\tvar groupMaterial = material[ group.materialIndex ];\n\n\t\t\t\t\t\t\tif ( groupMaterial && groupMaterial.visible ) {\n\n\t\t\t\t\t\t\t\tvar depthMaterial = getDepthMaterial( object, groupMaterial, isPointLight, _lightPositionWorld, shadowCamera.near, shadowCamera.far );\n\t\t\t\t\t\t\t\t_renderer.renderBufferDirect( shadowCamera, null, geometry, depthMaterial, object, 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\tvar depthMaterial = getDepthMaterial( object, material, isPointLight, _lightPositionWorld, shadowCamera.near, shadowCamera.far );\n\t\t\t\t\t\t_renderer.renderBufferDirect( shadowCamera, null, geometry, depthMaterial, object, null );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tvar children = object.children;\n\n\t\t\tfor ( var i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\t\trenderObject( children[ i ], camera, shadowCamera, isPointLight );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t */\n\n\tfunction WebGLAttributes( gl ) {\n\n\t\tvar buffers = {};\n\n\t\tfunction createBuffer( attribute, bufferType ) {\n\n\t\t\tvar array = attribute.array;\n\t\t\tvar usage = attribute.dynamic ? gl.DYNAMIC_DRAW : gl.STATIC_DRAW;\n\n\t\t\tvar buffer = gl.createBuffer();\n\n\t\t\tgl.bindBuffer( bufferType, buffer );\n\t\t\tgl.bufferData( bufferType, array, usage );\n\n\t\t\tattribute.onUploadCallback();\n\n\t\t\tvar type = gl.FLOAT;\n\n\t\t\tif ( array instanceof Float32Array ) {\n\n\t\t\t\ttype = gl.FLOAT;\n\n\t\t\t} else if ( array instanceof Float64Array ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLAttributes: Unsupported data buffer format: Float64Array.' );\n\n\t\t\t} else if ( array instanceof Uint16Array ) {\n\n\t\t\t\ttype = gl.UNSIGNED_SHORT;\n\n\t\t\t} else if ( array instanceof Int16Array ) {\n\n\t\t\t\ttype = gl.SHORT;\n\n\t\t\t} else if ( array instanceof Uint32Array ) {\n\n\t\t\t\ttype = gl.UNSIGNED_INT;\n\n\t\t\t} else if ( array instanceof Int32Array ) {\n\n\t\t\t\ttype = gl.INT;\n\n\t\t\t} else if ( array instanceof Int8Array ) {\n\n\t\t\t\ttype = gl.BYTE;\n\n\t\t\t} else if ( array instanceof Uint8Array ) {\n\n\t\t\t\ttype = gl.UNSIGNED_BYTE;\n\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tbuffer: buffer,\n\t\t\t\ttype: type,\n\t\t\t\tbytesPerElement: array.BYTES_PER_ELEMENT,\n\t\t\t\tversion: attribute.version\n\t\t\t};\n\n\t\t}\n\n\t\tfunction updateBuffer( buffer, attribute, bufferType ) {\n\n\t\t\tvar array = attribute.array;\n\t\t\tvar updateRange = attribute.updateRange;\n\n\t\t\tgl.bindBuffer( bufferType, buffer );\n\n\t\t\tif ( attribute.dynamic === false ) {\n\n\t\t\t\tgl.bufferData( bufferType, array, gl.STATIC_DRAW );\n\n\t\t\t} else if ( updateRange.count === - 1 ) {\n\n\t\t\t\t// Not using update ranges\n\n\t\t\t\tgl.bufferSubData( bufferType, 0, array );\n\n\t\t\t} else if ( updateRange.count === 0 ) {\n\n\t\t\t\tconsole.error( 'THREE.WebGLObjects.updateBuffer: dynamic THREE.BufferAttribute marked as needsUpdate but updateRange.count is 0, ensure you are using set methods or updating manually.' );\n\n\t\t\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\tupdateRange.count = - 1; // reset range\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\n\t\tfunction get( attribute ) {\n\n\t\t\tif ( attribute.isInterleavedBufferAttribute ) attribute = attribute.data;\n\n\t\t\treturn buffers[ attribute.uuid ];\n\n\t\t}\n\n\t\tfunction remove( attribute ) {\n\n\t\t\tif ( attribute.isInterleavedBufferAttribute ) attribute = attribute.data;\n\n\t\t\tvar data = buffers[ attribute.uuid ];\n\n\t\t\tif ( data ) {\n\n\t\t\t\tgl.deleteBuffer( data.buffer );\n\n\t\t\t\tdelete buffers[ attribute.uuid ];\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction update( attribute, bufferType ) {\n\n\t\t\tif ( attribute.isInterleavedBufferAttribute ) attribute = attribute.data;\n\n\t\t\tvar data = buffers[ attribute.uuid ];\n\n\t\t\tif ( data === undefined ) {\n\n\t\t\t\tbuffers[ attribute.uuid ] = createBuffer( attribute, bufferType );\n\n\t\t\t} else if ( data.version < attribute.version ) {\n\n\t\t\t\tupdateBuffer( data.buffer, attribute, bufferType );\n\n\t\t\t\tdata.version = attribute.version;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn {\n\n\t\t\tget: get,\n\t\t\tremove: remove,\n\t\t\tupdate: update\n\n\t\t};\n\n\t}\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t * @author WestLangley / http://github.com/WestLangley\n\t * @author bhouston / http://clara.io\n\t */\n\n\tfunction Euler( x, y, z, order ) {\n\n\t\tthis._x = x || 0;\n\t\tthis._y = y || 0;\n\t\tthis._z = z || 0;\n\t\tthis._order = order || Euler.DefaultOrder;\n\n\t}\n\n\tEuler.RotationOrders = [ 'XYZ', 'YZX', 'ZXY', 'XZY', 'YXZ', 'ZYX' ];\n\n\tEuler.DefaultOrder = 'XYZ';\n\n\tObject.defineProperties( Euler.prototype, {\n\n\t\tx: {\n\n\t\t\tget: function () {\n\n\t\t\t\treturn this._x;\n\n\t\t\t},\n\n\t\t\tset: function ( value ) {\n\n\t\t\t\tthis._x = value;\n\t\t\t\tthis.onChangeCallback();\n\n\t\t\t}\n\n\t\t},\n\n\t\ty: {\n\n\t\t\tget: function () {\n\n\t\t\t\treturn this._y;\n\n\t\t\t},\n\n\t\t\tset: function ( value ) {\n\n\t\t\t\tthis._y = value;\n\t\t\t\tthis.onChangeCallback();\n\n\t\t\t}\n\n\t\t},\n\n\t\tz: {\n\n\t\t\tget: function () {\n\n\t\t\t\treturn this._z;\n\n\t\t\t},\n\n\t\t\tset: function ( value ) {\n\n\t\t\t\tthis._z = value;\n\t\t\t\tthis.onChangeCallback();\n\n\t\t\t}\n\n\t\t},\n\n\t\torder: {\n\n\t\t\tget: function () {\n\n\t\t\t\treturn this._order;\n\n\t\t\t},\n\n\t\t\tset: function ( value ) {\n\n\t\t\t\tthis._order = value;\n\t\t\t\tthis.onChangeCallback();\n\n\t\t\t}\n\n\t\t}\n\n\t} );\n\n\tObject.assign( Euler.prototype, {\n\n\t\tisEuler: true,\n\n\t\tset: function ( x, y, z, order ) {\n\n\t\t\tthis._x = x;\n\t\t\tthis._y = y;\n\t\t\tthis._z = z;\n\t\t\tthis._order = order || this._order;\n\n\t\t\tthis.onChangeCallback();\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tclone: function () {\n\n\t\t\treturn new this.constructor( this._x, this._y, this._z, this._order );\n\n\t\t},\n\n\t\tcopy: function ( euler ) {\n\n\t\t\tthis._x = euler._x;\n\t\t\tthis._y = euler._y;\n\t\t\tthis._z = euler._z;\n\t\t\tthis._order = euler._order;\n\n\t\t\tthis.onChangeCallback();\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetFromRotationMatrix: function ( m, order, update ) {\n\n\t\t\tvar clamp = _Math.clamp;\n\n\t\t\t// assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)\n\n\t\t\tvar te = m.elements;\n\t\t\tvar m11 = te[ 0 ], m12 = te[ 4 ], m13 = te[ 8 ];\n\t\t\tvar m21 = te[ 1 ], m22 = te[ 5 ], m23 = te[ 9 ];\n\t\t\tvar m31 = te[ 2 ], m32 = te[ 6 ], m33 = te[ 10 ];\n\n\t\t\torder = order || this._order;\n\n\t\t\tif ( order === 'XYZ' ) {\n\n\t\t\t\tthis._y = Math.asin( clamp( m13, - 1, 1 ) );\n\n\t\t\t\tif ( Math.abs( m13 ) < 0.99999 ) {\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} else if ( order === 'YXZ' ) {\n\n\t\t\t\tthis._x = Math.asin( - clamp( m23, - 1, 1 ) );\n\n\t\t\t\tif ( Math.abs( m23 ) < 0.99999 ) {\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} else if ( order === 'ZXY' ) {\n\n\t\t\t\tthis._x = Math.asin( clamp( m32, - 1, 1 ) );\n\n\t\t\t\tif ( Math.abs( m32 ) < 0.99999 ) {\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} else if ( order === 'ZYX' ) {\n\n\t\t\t\tthis._y = Math.asin( - clamp( m31, - 1, 1 ) );\n\n\t\t\t\tif ( Math.abs( m31 ) < 0.99999 ) {\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} else if ( order === 'YZX' ) {\n\n\t\t\t\tthis._z = Math.asin( clamp( m21, - 1, 1 ) );\n\n\t\t\t\tif ( Math.abs( m21 ) < 0.99999 ) {\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} else if ( order === 'XZY' ) {\n\n\t\t\t\tthis._z = Math.asin( - clamp( m12, - 1, 1 ) );\n\n\t\t\t\tif ( Math.abs( m12 ) < 0.99999 ) {\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} else {\n\n\t\t\t\tconsole.warn( 'THREE.Euler: .setFromRotationMatrix() given unsupported order: ' + order );\n\n\t\t\t}\n\n\t\t\tthis._order = order;\n\n\t\t\tif ( update !== false ) this.onChangeCallback();\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetFromQuaternion: function () {\n\n\t\t\tvar matrix = new Matrix4();\n\n\t\t\treturn function setFromQuaternion( q, order, update ) {\n\n\t\t\t\tmatrix.makeRotationFromQuaternion( q );\n\n\t\t\t\treturn this.setFromRotationMatrix( matrix, order, update );\n\n\t\t\t};\n\n\t\t}(),\n\n\t\tsetFromVector3: function ( v, order ) {\n\n\t\t\treturn this.set( v.x, v.y, v.z, order || this._order );\n\n\t\t},\n\n\t\treorder: function () {\n\n\t\t\t// WARNING: this discards revolution information -bhouston\n\n\t\t\tvar q = new Quaternion();\n\n\t\t\treturn function reorder( newOrder ) {\n\n\t\t\t\tq.setFromEuler( this );\n\n\t\t\t\treturn this.setFromQuaternion( q, newOrder );\n\n\t\t\t};\n\n\t\t}(),\n\n\t\tequals: function ( euler ) {\n\n\t\t\treturn ( euler._x === this._x ) && ( euler._y === this._y ) && ( euler._z === this._z ) && ( euler._order === this._order );\n\n\t\t},\n\n\t\tfromArray: function ( array ) {\n\n\t\t\tthis._x = array[ 0 ];\n\t\t\tthis._y = array[ 1 ];\n\t\t\tthis._z = array[ 2 ];\n\t\t\tif ( array[ 3 ] !== undefined ) this._order = array[ 3 ];\n\n\t\t\tthis.onChangeCallback();\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\ttoArray: function ( array, offset ) {\n\n\t\t\tif ( array === undefined ) array = [];\n\t\t\tif ( offset === undefined ) offset = 0;\n\n\t\t\tarray[ offset ] = this._x;\n\t\t\tarray[ offset + 1 ] = this._y;\n\t\t\tarray[ offset + 2 ] = this._z;\n\t\t\tarray[ offset + 3 ] = this._order;\n\n\t\t\treturn array;\n\n\t\t},\n\n\t\ttoVector3: function ( optionalResult ) {\n\n\t\t\tif ( optionalResult ) {\n\n\t\t\t\treturn optionalResult.set( this._x, this._y, this._z );\n\n\t\t\t} else {\n\n\t\t\t\treturn new Vector3( this._x, this._y, this._z );\n\n\t\t\t}\n\n\t\t},\n\n\t\tonChange: function ( callback ) {\n\n\t\t\tthis.onChangeCallback = callback;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tonChangeCallback: function () {}\n\n\t} );\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t */\n\n\tfunction Layers() {\n\n\t\tthis.mask = 1 | 0;\n\n\t}\n\n\tObject.assign( Layers.prototype, {\n\n\t\tset: function ( channel ) {\n\n\t\t\tthis.mask = 1 << channel | 0;\n\n\t\t},\n\n\t\tenable: function ( channel ) {\n\n\t\t\tthis.mask |= 1 << channel | 0;\n\n\t\t},\n\n\t\ttoggle: function ( channel ) {\n\n\t\t\tthis.mask ^= 1 << channel | 0;\n\n\t\t},\n\n\t\tdisable: function ( channel ) {\n\n\t\t\tthis.mask &= ~ ( 1 << channel | 0 );\n\n\t\t},\n\n\t\ttest: function ( layers ) {\n\n\t\t\treturn ( this.mask & layers.mask ) !== 0;\n\n\t\t}\n\n\t} );\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t * @author mikael emtinger / http://gomo.se/\n\t * @author alteredq / http://alteredqualia.com/\n\t * @author WestLangley / http://github.com/WestLangley\n\t * @author elephantatwork / www.elephantatwork.ch\n\t */\n\n\tvar object3DId = 0;\n\n\tfunction Object3D() {\n\n\t\tObject.defineProperty( this, 'id', { value: object3DId ++ } );\n\n\t\tthis.uuid = _Math.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\tvar position = new Vector3();\n\t\tvar rotation = new Euler();\n\t\tvar quaternion = new Quaternion();\n\t\tvar 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\tenumerable: true,\n\t\t\t\tvalue: position\n\t\t\t},\n\t\t\trotation: {\n\t\t\t\tenumerable: true,\n\t\t\t\tvalue: rotation\n\t\t\t},\n\t\t\tquaternion: {\n\t\t\t\tenumerable: true,\n\t\t\t\tvalue: quaternion\n\t\t\t},\n\t\t\tscale: {\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.userData = {};\n\n\t}\n\n\tObject3D.DefaultUp = new Vector3( 0, 1, 0 );\n\tObject3D.DefaultMatrixAutoUpdate = true;\n\n\tObject.assign( Object3D.prototype, EventDispatcher.prototype, {\n\n\t\tisObject3D: true,\n\n\t\tonBeforeRender: function () {},\n\t\tonAfterRender: function () {},\n\n\t\tapplyMatrix: function ( matrix ) {\n\n\t\t\tthis.matrix.multiplyMatrices( matrix, this.matrix );\n\n\t\t\tthis.matrix.decompose( this.position, this.quaternion, this.scale );\n\n\t\t},\n\n\t\tapplyQuaternion: function ( q ) {\n\n\t\t\tthis.quaternion.premultiply( q );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetRotationFromAxisAngle: function ( axis, angle ) {\n\n\t\t\t// assumes axis is normalized\n\n\t\t\tthis.quaternion.setFromAxisAngle( axis, angle );\n\n\t\t},\n\n\t\tsetRotationFromEuler: function ( euler ) {\n\n\t\t\tthis.quaternion.setFromEuler( euler, true );\n\n\t\t},\n\n\t\tsetRotationFromMatrix: function ( m ) {\n\n\t\t\t// assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)\n\n\t\t\tthis.quaternion.setFromRotationMatrix( m );\n\n\t\t},\n\n\t\tsetRotationFromQuaternion: function ( q ) {\n\n\t\t\t// assumes q is normalized\n\n\t\t\tthis.quaternion.copy( q );\n\n\t\t},\n\n\t\trotateOnAxis: function () {\n\n\t\t\t// rotate object on axis in object space\n\t\t\t// axis is assumed to be normalized\n\n\t\t\tvar q1 = new Quaternion();\n\n\t\t\treturn function rotateOnAxis( axis, angle ) {\n\n\t\t\t\tq1.setFromAxisAngle( axis, angle );\n\n\t\t\t\tthis.quaternion.multiply( q1 );\n\n\t\t\t\treturn this;\n\n\t\t\t};\n\n\t\t}(),\n\n\t\trotateOnWorldAxis: function () {\n\n\t\t\t// rotate object on axis in world space\n\t\t\t// axis is assumed to be normalized\n\t\t\t// method assumes no rotated parent\n\n\t\t\tvar q1 = new Quaternion();\n\n\t\t\treturn function rotateOnWorldAxis( axis, angle ) {\n\n\t\t\t\tq1.setFromAxisAngle( axis, angle );\n\n\t\t\t\tthis.quaternion.premultiply( q1 );\n\n\t\t\t\treturn this;\n\n\t\t\t};\n\n\t\t}(),\n\n\t\trotateX: function () {\n\n\t\t\tvar v1 = new Vector3( 1, 0, 0 );\n\n\t\t\treturn function rotateX( angle ) {\n\n\t\t\t\treturn this.rotateOnAxis( v1, angle );\n\n\t\t\t};\n\n\t\t}(),\n\n\t\trotateY: function () {\n\n\t\t\tvar v1 = new Vector3( 0, 1, 0 );\n\n\t\t\treturn function rotateY( angle ) {\n\n\t\t\t\treturn this.rotateOnAxis( v1, angle );\n\n\t\t\t};\n\n\t\t}(),\n\n\t\trotateZ: function () {\n\n\t\t\tvar v1 = new Vector3( 0, 0, 1 );\n\n\t\t\treturn function rotateZ( angle ) {\n\n\t\t\t\treturn this.rotateOnAxis( v1, angle );\n\n\t\t\t};\n\n\t\t}(),\n\n\t\ttranslateOnAxis: function () {\n\n\t\t\t// translate object by distance along axis in object space\n\t\t\t// axis is assumed to be normalized\n\n\t\t\tvar v1 = new Vector3();\n\n\t\t\treturn function translateOnAxis( axis, distance ) {\n\n\t\t\t\tv1.copy( axis ).applyQuaternion( this.quaternion );\n\n\t\t\t\tthis.position.add( v1.multiplyScalar( distance ) );\n\n\t\t\t\treturn this;\n\n\t\t\t};\n\n\t\t}(),\n\n\t\ttranslateX: function () {\n\n\t\t\tvar v1 = new Vector3( 1, 0, 0 );\n\n\t\t\treturn function translateX( distance ) {\n\n\t\t\t\treturn this.translateOnAxis( v1, distance );\n\n\t\t\t};\n\n\t\t}(),\n\n\t\ttranslateY: function () {\n\n\t\t\tvar v1 = new Vector3( 0, 1, 0 );\n\n\t\t\treturn function translateY( distance ) {\n\n\t\t\t\treturn this.translateOnAxis( v1, distance );\n\n\t\t\t};\n\n\t\t}(),\n\n\t\ttranslateZ: function () {\n\n\t\t\tvar v1 = new Vector3( 0, 0, 1 );\n\n\t\t\treturn function translateZ( distance ) {\n\n\t\t\t\treturn this.translateOnAxis( v1, distance );\n\n\t\t\t};\n\n\t\t}(),\n\n\t\tlocalToWorld: function ( vector ) {\n\n\t\t\treturn vector.applyMatrix4( this.matrixWorld );\n\n\t\t},\n\n\t\tworldToLocal: function () {\n\n\t\t\tvar m1 = new Matrix4();\n\n\t\t\treturn function worldToLocal( vector ) {\n\n\t\t\t\treturn vector.applyMatrix4( m1.getInverse( this.matrixWorld ) );\n\n\t\t\t};\n\n\t\t}(),\n\n\t\tlookAt: function () {\n\n\t\t\t// This method does not support objects with rotated and/or translated parent(s)\n\n\t\t\tvar m1 = new Matrix4();\n\t\t\tvar vector = new Vector3();\n\n\t\t\treturn function lookAt( x, y, z ) {\n\n\t\t\t\tif ( x.isVector3 ) {\n\n\t\t\t\t\tvector.copy( x );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tvector.set( x, y, z );\n\n\t\t\t\t}\n\n\t\t\t\tif ( this.isCamera ) {\n\n\t\t\t\t\tm1.lookAt( this.position, vector, this.up );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tm1.lookAt( vector, this.position, this.up );\n\n\t\t\t\t}\n\n\t\t\t\tthis.quaternion.setFromRotationMatrix( m1 );\n\n\t\t\t};\n\n\t\t}(),\n\n\t\tadd: function ( object ) {\n\n\t\t\tif ( arguments.length > 1 ) {\n\n\t\t\t\tfor ( var i = 0; i < arguments.length; i ++ ) {\n\n\t\t\t\t\tthis.add( arguments[ i ] );\n\n\t\t\t\t}\n\n\t\t\t\treturn this;\n\n\t\t\t}\n\n\t\t\tif ( object === this ) {\n\n\t\t\t\tconsole.error( \"THREE.Object3D.add: object can't be added as a child of itself.\", object );\n\t\t\t\treturn this;\n\n\t\t\t}\n\n\t\t\tif ( ( object && object.isObject3D ) ) {\n\n\t\t\t\tif ( object.parent !== null ) {\n\n\t\t\t\t\tobject.parent.remove( object );\n\n\t\t\t\t}\n\n\t\t\t\tobject.parent = this;\n\t\t\t\tobject.dispatchEvent( { type: 'added' } );\n\n\t\t\t\tthis.children.push( object );\n\n\t\t\t} else {\n\n\t\t\t\tconsole.error( \"THREE.Object3D.add: object not an instance of THREE.Object3D.\", object );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tremove: function ( object ) {\n\n\t\t\tif ( arguments.length > 1 ) {\n\n\t\t\t\tfor ( var i = 0; i < arguments.length; i ++ ) {\n\n\t\t\t\t\tthis.remove( arguments[ i ] );\n\n\t\t\t\t}\n\n\t\t\t\treturn this;\n\n\t\t\t}\n\n\t\t\tvar index = this.children.indexOf( object );\n\n\t\t\tif ( index !== - 1 ) {\n\n\t\t\t\tobject.parent = null;\n\n\t\t\t\tobject.dispatchEvent( { type: 'removed' } );\n\n\t\t\t\tthis.children.splice( index, 1 );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tgetObjectById: function ( id ) {\n\n\t\t\treturn this.getObjectByProperty( 'id', id );\n\n\t\t},\n\n\t\tgetObjectByName: function ( name ) {\n\n\t\t\treturn this.getObjectByProperty( 'name', name );\n\n\t\t},\n\n\t\tgetObjectByProperty: function ( name, value ) {\n\n\t\t\tif ( this[ name ] === value ) return this;\n\n\t\t\tfor ( var i = 0, l = this.children.length; i < l; i ++ ) {\n\n\t\t\t\tvar child = this.children[ i ];\n\t\t\t\tvar object = child.getObjectByProperty( name, value );\n\n\t\t\t\tif ( object !== undefined ) {\n\n\t\t\t\t\treturn object;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn undefined;\n\n\t\t},\n\n\t\tgetWorldPosition: function ( optionalTarget ) {\n\n\t\t\tvar result = optionalTarget || new Vector3();\n\n\t\t\tthis.updateMatrixWorld( true );\n\n\t\t\treturn result.setFromMatrixPosition( this.matrixWorld );\n\n\t\t},\n\n\t\tgetWorldQuaternion: function () {\n\n\t\t\tvar position = new Vector3();\n\t\t\tvar scale = new Vector3();\n\n\t\t\treturn function getWorldQuaternion( optionalTarget ) {\n\n\t\t\t\tvar result = optionalTarget || new Quaternion();\n\n\t\t\t\tthis.updateMatrixWorld( true );\n\n\t\t\t\tthis.matrixWorld.decompose( position, result, scale );\n\n\t\t\t\treturn result;\n\n\t\t\t};\n\n\t\t}(),\n\n\t\tgetWorldRotation: function () {\n\n\t\t\tvar quaternion = new Quaternion();\n\n\t\t\treturn function getWorldRotation( optionalTarget ) {\n\n\t\t\t\tvar result = optionalTarget || new Euler();\n\n\t\t\t\tthis.getWorldQuaternion( quaternion );\n\n\t\t\t\treturn result.setFromQuaternion( quaternion, this.rotation.order, false );\n\n\t\t\t};\n\n\t\t}(),\n\n\t\tgetWorldScale: function () {\n\n\t\t\tvar position = new Vector3();\n\t\t\tvar quaternion = new Quaternion();\n\n\t\t\treturn function getWorldScale( optionalTarget ) {\n\n\t\t\t\tvar result = optionalTarget || new Vector3();\n\n\t\t\t\tthis.updateMatrixWorld( true );\n\n\t\t\t\tthis.matrixWorld.decompose( position, quaternion, result );\n\n\t\t\t\treturn result;\n\n\t\t\t};\n\n\t\t}(),\n\n\t\tgetWorldDirection: function () {\n\n\t\t\tvar quaternion = new Quaternion();\n\n\t\t\treturn function getWorldDirection( optionalTarget ) {\n\n\t\t\t\tvar result = optionalTarget || new Vector3();\n\n\t\t\t\tthis.getWorldQuaternion( quaternion );\n\n\t\t\t\treturn result.set( 0, 0, 1 ).applyQuaternion( quaternion );\n\n\t\t\t};\n\n\t\t}(),\n\n\t\traycast: function () {},\n\n\t\ttraverse: function ( callback ) {\n\n\t\t\tcallback( this );\n\n\t\t\tvar children = this.children;\n\n\t\t\tfor ( var i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\t\tchildren[ i ].traverse( callback );\n\n\t\t\t}\n\n\t\t},\n\n\t\ttraverseVisible: function ( callback ) {\n\n\t\t\tif ( this.visible === false ) return;\n\n\t\t\tcallback( this );\n\n\t\t\tvar children = this.children;\n\n\t\t\tfor ( var i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\t\tchildren[ i ].traverseVisible( callback );\n\n\t\t\t}\n\n\t\t},\n\n\t\ttraverseAncestors: function ( callback ) {\n\n\t\t\tvar parent = this.parent;\n\n\t\t\tif ( parent !== null ) {\n\n\t\t\t\tcallback( parent );\n\n\t\t\t\tparent.traverseAncestors( callback );\n\n\t\t\t}\n\n\t\t},\n\n\t\tupdateMatrix: function () {\n\n\t\t\tthis.matrix.compose( this.position, this.quaternion, this.scale );\n\n\t\t\tthis.matrixWorldNeedsUpdate = true;\n\n\t\t},\n\n\t\tupdateMatrixWorld: function ( force ) {\n\n\t\t\tif ( this.matrixAutoUpdate ) this.updateMatrix();\n\n\t\t\tif ( this.matrixWorldNeedsUpdate || force ) {\n\n\t\t\t\tif ( this.parent === null ) {\n\n\t\t\t\t\tthis.matrixWorld.copy( this.matrix );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis.matrixWorld.multiplyMatrices( this.parent.matrixWorld, this.matrix );\n\n\t\t\t\t}\n\n\t\t\t\tthis.matrixWorldNeedsUpdate = false;\n\n\t\t\t\tforce = true;\n\n\t\t\t}\n\n\t\t\t// update children\n\n\t\t\tvar children = this.children;\n\n\t\t\tfor ( var i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\t\tchildren[ i ].updateMatrixWorld( force );\n\n\t\t\t}\n\n\t\t},\n\n\t\ttoJSON: function ( meta ) {\n\n\t\t\t// meta is a string when called from JSON.stringify\n\t\t\tvar isRootObject = ( meta === undefined || typeof meta === 'string' );\n\n\t\t\tvar output = {};\n\n\t\t\t// meta is a hash used to collect geometries, materials.\n\t\t\t// not providing it implies that this is the root object\n\t\t\t// being serialized.\n\t\t\tif ( isRootObject ) {\n\n\t\t\t\t// initialize meta obj\n\t\t\t\tmeta = {\n\t\t\t\t\tgeometries: {},\n\t\t\t\t\tmaterials: {},\n\t\t\t\t\ttextures: {},\n\t\t\t\t\timages: {}\n\t\t\t\t};\n\n\t\t\t\toutput.metadata = {\n\t\t\t\t\tversion: 4.5,\n\t\t\t\t\ttype: 'Object',\n\t\t\t\t\tgenerator: 'Object3D.toJSON'\n\t\t\t\t};\n\n\t\t\t}\n\n\t\t\t// standard Object3D serialization\n\n\t\t\tvar object = {};\n\n\t\t\tobject.uuid = this.uuid;\n\t\t\tobject.type = this.type;\n\n\t\t\tif ( this.name !== '' ) object.name = this.name;\n\t\t\tif ( this.castShadow === true ) object.castShadow = true;\n\t\t\tif ( this.receiveShadow === true ) object.receiveShadow = true;\n\t\t\tif ( this.visible === false ) object.visible = false;\n\t\t\tif ( JSON.stringify( this.userData ) !== '{}' ) object.userData = this.userData;\n\n\t\t\tobject.matrix = this.matrix.toArray();\n\n\t\t\t//\n\n\t\t\tfunction serialize( library, element ) {\n\n\t\t\t\tif ( library[ element.uuid ] === undefined ) {\n\n\t\t\t\t\tlibrary[ element.uuid ] = element.toJSON( meta );\n\n\t\t\t\t}\n\n\t\t\t\treturn element.uuid;\n\n\t\t\t}\n\n\t\t\tif ( this.geometry !== undefined ) {\n\n\t\t\t\tobject.geometry = serialize( meta.geometries, this.geometry );\n\n\t\t\t}\n\n\t\t\tif ( this.material !== undefined ) {\n\n\t\t\t\tif ( Array.isArray( this.material ) ) {\n\n\t\t\t\t\tvar uuids = [];\n\n\t\t\t\t\tfor ( var i = 0, l = this.material.length; i < l; i ++ ) {\n\n\t\t\t\t\t\tuuids.push( serialize( meta.materials, this.material[ i ] ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tobject.material = uuids;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tobject.material = serialize( meta.materials, this.material );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tif ( this.children.length > 0 ) {\n\n\t\t\t\tobject.children = [];\n\n\t\t\t\tfor ( var i = 0; i < this.children.length; i ++ ) {\n\n\t\t\t\t\tobject.children.push( this.children[ i ].toJSON( meta ).object );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( isRootObject ) {\n\n\t\t\t\tvar geometries = extractFromCache( meta.geometries );\n\t\t\t\tvar materials = extractFromCache( meta.materials );\n\t\t\t\tvar textures = extractFromCache( meta.textures );\n\t\t\t\tvar images = extractFromCache( meta.images );\n\n\t\t\t\tif ( geometries.length > 0 ) output.geometries = geometries;\n\t\t\t\tif ( materials.length > 0 ) output.materials = materials;\n\t\t\t\tif ( textures.length > 0 ) output.textures = textures;\n\t\t\t\tif ( images.length > 0 ) output.images = images;\n\n\t\t\t}\n\n\t\t\toutput.object = object;\n\n\t\t\treturn output;\n\n\t\t\t// extract data from the cache hash\n\t\t\t// remove metadata on each item\n\t\t\t// and return as array\n\t\t\tfunction extractFromCache( cache ) {\n\n\t\t\t\tvar values = [];\n\t\t\t\tfor ( var key in cache ) {\n\n\t\t\t\t\tvar data = cache[ key ];\n\t\t\t\t\tdelete data.metadata;\n\t\t\t\t\tvalues.push( data );\n\n\t\t\t\t}\n\t\t\t\treturn values;\n\n\t\t\t}\n\n\t\t},\n\n\t\tclone: function ( recursive ) {\n\n\t\t\treturn new this.constructor().copy( this, recursive );\n\n\t\t},\n\n\t\tcopy: function ( source, recursive ) {\n\n\t\t\tif ( recursive === undefined ) recursive = true;\n\n\t\t\tthis.name = source.name;\n\n\t\t\tthis.up.copy( source.up );\n\n\t\t\tthis.position.copy( source.position );\n\t\t\tthis.quaternion.copy( source.quaternion );\n\t\t\tthis.scale.copy( source.scale );\n\n\t\t\tthis.matrix.copy( source.matrix );\n\t\t\tthis.matrixWorld.copy( source.matrixWorld );\n\n\t\t\tthis.matrixAutoUpdate = source.matrixAutoUpdate;\n\t\t\tthis.matrixWorldNeedsUpdate = source.matrixWorldNeedsUpdate;\n\n\t\t\tthis.layers.mask = source.layers.mask;\n\t\t\tthis.visible = source.visible;\n\n\t\t\tthis.castShadow = source.castShadow;\n\t\t\tthis.receiveShadow = source.receiveShadow;\n\n\t\t\tthis.frustumCulled = source.frustumCulled;\n\t\t\tthis.renderOrder = source.renderOrder;\n\n\t\t\tthis.userData = JSON.parse( JSON.stringify( source.userData ) );\n\n\t\t\tif ( recursive === true ) {\n\n\t\t\t\tfor ( var i = 0; i < source.children.length; i ++ ) {\n\n\t\t\t\t\tvar child = source.children[ i ];\n\t\t\t\t\tthis.add( child.clone() );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t}\n\n\t} );\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t * @author mikael emtinger / http://gomo.se/\n\t * @author WestLangley / http://github.com/WestLangley\n\t*/\n\n\tfunction Camera() {\n\n\t\tObject3D.call( this );\n\n\t\tthis.type = 'Camera';\n\n\t\tthis.matrixWorldInverse = new Matrix4();\n\t\tthis.projectionMatrix = new Matrix4();\n\n\t}\n\n\tCamera.prototype = Object.assign( Object.create( Object3D.prototype ), {\n\n\t\tconstructor: Camera,\n\n\t\tisCamera: true,\n\n\t\tcopy: function ( source, recursive ) {\n\n\t\t\tObject3D.prototype.copy.call( this, source, recursive );\n\n\t\t\tthis.matrixWorldInverse.copy( source.matrixWorldInverse );\n\t\t\tthis.projectionMatrix.copy( source.projectionMatrix );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tgetWorldDirection: function () {\n\n\t\t\tvar quaternion = new Quaternion();\n\n\t\t\treturn function getWorldDirection( optionalTarget ) {\n\n\t\t\t\tvar result = optionalTarget || new Vector3();\n\n\t\t\t\tthis.getWorldQuaternion( quaternion );\n\n\t\t\t\treturn result.set( 0, 0, - 1 ).applyQuaternion( quaternion );\n\n\t\t\t};\n\n\t\t}(),\n\n\t\tupdateMatrixWorld: function ( force ) {\n\n\t\t\tObject3D.prototype.updateMatrixWorld.call( this, force );\n\n\t\t\tthis.matrixWorldInverse.getInverse( this.matrixWorld );\n\n\t\t},\n\n\t\tclone: function () {\n\n\t\t\treturn new this.constructor().copy( this );\n\n\t\t}\n\n\t} );\n\n\t/**\n\t * @author alteredq / http://alteredqualia.com/\n\t * @author arose / http://github.com/arose\n\t */\n\n\tfunction OrthographicCamera( left, right, top, bottom, near, far ) {\n\n\t\tCamera.call( this );\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 !== undefined ) ? near : 0.1;\n\t\tthis.far = ( far !== undefined ) ? far : 2000;\n\n\t\tthis.updateProjectionMatrix();\n\n\t}\n\n\tOrthographicCamera.prototype = Object.assign( Object.create( Camera.prototype ), {\n\n\t\tconstructor: OrthographicCamera,\n\n\t\tisOrthographicCamera: true,\n\n\t\tcopy: function ( source, recursive ) {\n\n\t\t\tCamera.prototype.copy.call( this, source, recursive );\n\n\t\t\tthis.left = source.left;\n\t\t\tthis.right = source.right;\n\t\t\tthis.top = source.top;\n\t\t\tthis.bottom = source.bottom;\n\t\t\tthis.near = source.near;\n\t\t\tthis.far = source.far;\n\n\t\t\tthis.zoom = source.zoom;\n\t\t\tthis.view = source.view === null ? null : Object.assign( {}, source.view );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetViewOffset: function ( fullWidth, fullHeight, x, y, width, height ) {\n\n\t\t\tif ( this.view === null ) {\n\n\t\t\t\tthis.view = {\n\t\t\t\t\tenabled: true,\n\t\t\t\t\tfullWidth: 1,\n\t\t\t\t\tfullHeight: 1,\n\t\t\t\t\toffsetX: 0,\n\t\t\t\t\toffsetY: 0,\n\t\t\t\t\twidth: 1,\n\t\t\t\t\theight: 1\n\t\t\t\t};\n\n\t\t\t}\n\n\t\t\tthis.view.enabled = true;\n\t\t\tthis.view.fullWidth = fullWidth;\n\t\t\tthis.view.fullHeight = fullHeight;\n\t\t\tthis.view.offsetX = x;\n\t\t\tthis.view.offsetY = y;\n\t\t\tthis.view.width = width;\n\t\t\tthis.view.height = height;\n\n\t\t\tthis.updateProjectionMatrix();\n\n\t\t},\n\n\t\tclearViewOffset: function () {\n\n\t\t\tif ( this.view !== null ) {\n\n\t\t\t\tthis.view.enabled = false;\n\n\t\t\t}\n\n\t\t\tthis.updateProjectionMatrix();\n\n\t\t},\n\n\t\tupdateProjectionMatrix: function () {\n\n\t\t\tvar dx = ( this.right - this.left ) / ( 2 * this.zoom );\n\t\t\tvar dy = ( this.top - this.bottom ) / ( 2 * this.zoom );\n\t\t\tvar cx = ( this.right + this.left ) / 2;\n\t\t\tvar cy = ( this.top + this.bottom ) / 2;\n\n\t\t\tvar left = cx - dx;\n\t\t\tvar right = cx + dx;\n\t\t\tvar top = cy + dy;\n\t\t\tvar bottom = cy - dy;\n\n\t\t\tif ( this.view !== null && this.view.enabled ) {\n\n\t\t\t\tvar zoomW = this.zoom / ( this.view.width / this.view.fullWidth );\n\t\t\t\tvar zoomH = this.zoom / ( this.view.height / this.view.fullHeight );\n\t\t\t\tvar scaleW = ( this.right - this.left ) / this.view.width;\n\t\t\t\tvar scaleH = ( this.top - this.bottom ) / this.view.height;\n\n\t\t\t\tleft += scaleW * ( this.view.offsetX / zoomW );\n\t\t\t\tright = left + scaleW * ( this.view.width / zoomW );\n\t\t\t\ttop -= scaleH * ( this.view.offsetY / zoomH );\n\t\t\t\tbottom = top - scaleH * ( this.view.height / zoomH );\n\n\t\t\t}\n\n\t\t\tthis.projectionMatrix.makeOrthographic( left, right, top, bottom, this.near, this.far );\n\n\t\t},\n\n\t\ttoJSON: function ( meta ) {\n\n\t\t\tvar data = Object3D.prototype.toJSON.call( this, meta );\n\n\t\t\tdata.object.zoom = this.zoom;\n\t\t\tdata.object.left = this.left;\n\t\t\tdata.object.right = this.right;\n\t\t\tdata.object.top = this.top;\n\t\t\tdata.object.bottom = this.bottom;\n\t\t\tdata.object.near = this.near;\n\t\t\tdata.object.far = this.far;\n\n\t\t\tif ( this.view !== null ) data.object.view = Object.assign( {}, this.view );\n\n\t\t\treturn data;\n\n\t\t}\n\n\t} );\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t * @author alteredq / http://alteredqualia.com/\n\t */\n\n\tfunction Face3( a, b, c, normal, color, materialIndex ) {\n\n\t\tthis.a = a;\n\t\tthis.b = b;\n\t\tthis.c = c;\n\n\t\tthis.normal = ( normal && normal.isVector3 ) ? normal : new Vector3();\n\t\tthis.vertexNormals = Array.isArray( normal ) ? normal : [];\n\n\t\tthis.color = ( color && color.isColor ) ? color : new Color();\n\t\tthis.vertexColors = Array.isArray( color ) ? color : [];\n\n\t\tthis.materialIndex = materialIndex !== undefined ? materialIndex : 0;\n\n\t}\n\n\tObject.assign( Face3.prototype, {\n\n\t\tclone: function () {\n\n\t\t\treturn new this.constructor().copy( this );\n\n\t\t},\n\n\t\tcopy: function ( source ) {\n\n\t\t\tthis.a = source.a;\n\t\t\tthis.b = source.b;\n\t\t\tthis.c = source.c;\n\n\t\t\tthis.normal.copy( source.normal );\n\t\t\tthis.color.copy( source.color );\n\n\t\t\tthis.materialIndex = source.materialIndex;\n\n\t\t\tfor ( var i = 0, il = source.vertexNormals.length; i < il; i ++ ) {\n\n\t\t\t\tthis.vertexNormals[ i ] = source.vertexNormals[ i ].clone();\n\n\t\t\t}\n\n\t\t\tfor ( var i = 0, il = source.vertexColors.length; i < il; i ++ ) {\n\n\t\t\t\tthis.vertexColors[ i ] = source.vertexColors[ i ].clone();\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t}\n\n\t} );\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t * @author kile / http://kile.stravaganza.org/\n\t * @author alteredq / http://alteredqualia.com/\n\t * @author mikael emtinger / http://gomo.se/\n\t * @author zz85 / http://www.lab4games.net/zz85/blog\n\t * @author bhouston / http://clara.io\n\t */\n\n\tvar geometryId = 0; // Geometry uses even numbers as Id\n\n\tfunction Geometry() {\n\n\t\tObject.defineProperty( this, 'id', { value: geometryId += 2 } );\n\n\t\tthis.uuid = _Math.generateUUID();\n\n\t\tthis.name = '';\n\t\tthis.type = 'Geometry';\n\n\t\tthis.vertices = [];\n\t\tthis.colors = [];\n\t\tthis.faces = [];\n\t\tthis.faceVertexUvs = [[]];\n\n\t\tthis.morphTargets = [];\n\t\tthis.morphNormals = [];\n\n\t\tthis.skinWeights = [];\n\t\tthis.skinIndices = [];\n\n\t\tthis.lineDistances = [];\n\n\t\tthis.boundingBox = null;\n\t\tthis.boundingSphere = null;\n\n\t\t// update flags\n\n\t\tthis.elementsNeedUpdate = false;\n\t\tthis.verticesNeedUpdate = false;\n\t\tthis.uvsNeedUpdate = false;\n\t\tthis.normalsNeedUpdate = false;\n\t\tthis.colorsNeedUpdate = false;\n\t\tthis.lineDistancesNeedUpdate = false;\n\t\tthis.groupsNeedUpdate = false;\n\n\t}\n\n\tObject.assign( Geometry.prototype, EventDispatcher.prototype, {\n\n\t\tisGeometry: true,\n\n\t\tapplyMatrix: function ( matrix ) {\n\n\t\t\tvar normalMatrix = new Matrix3().getNormalMatrix( matrix );\n\n\t\t\tfor ( var i = 0, il = this.vertices.length; i < il; i ++ ) {\n\n\t\t\t\tvar vertex = this.vertices[ i ];\n\t\t\t\tvertex.applyMatrix4( matrix );\n\n\t\t\t}\n\n\t\t\tfor ( var i = 0, il = this.faces.length; i < il; i ++ ) {\n\n\t\t\t\tvar face = this.faces[ i ];\n\t\t\t\tface.normal.applyMatrix3( normalMatrix ).normalize();\n\n\t\t\t\tfor ( var j = 0, jl = face.vertexNormals.length; j < jl; j ++ ) {\n\n\t\t\t\t\tface.vertexNormals[ j ].applyMatrix3( normalMatrix ).normalize();\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( this.boundingBox !== null ) {\n\n\t\t\t\tthis.computeBoundingBox();\n\n\t\t\t}\n\n\t\t\tif ( this.boundingSphere !== null ) {\n\n\t\t\t\tthis.computeBoundingSphere();\n\n\t\t\t}\n\n\t\t\tthis.verticesNeedUpdate = true;\n\t\t\tthis.normalsNeedUpdate = true;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\trotateX: function () {\n\n\t\t\t// rotate geometry around world x-axis\n\n\t\t\tvar m1 = new Matrix4();\n\n\t\t\treturn function rotateX( angle ) {\n\n\t\t\t\tm1.makeRotationX( angle );\n\n\t\t\t\tthis.applyMatrix( m1 );\n\n\t\t\t\treturn this;\n\n\t\t\t};\n\n\t\t}(),\n\n\t\trotateY: function () {\n\n\t\t\t// rotate geometry around world y-axis\n\n\t\t\tvar m1 = new Matrix4();\n\n\t\t\treturn function rotateY( angle ) {\n\n\t\t\t\tm1.makeRotationY( angle );\n\n\t\t\t\tthis.applyMatrix( m1 );\n\n\t\t\t\treturn this;\n\n\t\t\t};\n\n\t\t}(),\n\n\t\trotateZ: function () {\n\n\t\t\t// rotate geometry around world z-axis\n\n\t\t\tvar m1 = new Matrix4();\n\n\t\t\treturn function rotateZ( angle ) {\n\n\t\t\t\tm1.makeRotationZ( angle );\n\n\t\t\t\tthis.applyMatrix( m1 );\n\n\t\t\t\treturn this;\n\n\t\t\t};\n\n\t\t}(),\n\n\t\ttranslate: function () {\n\n\t\t\t// translate geometry\n\n\t\t\tvar m1 = new Matrix4();\n\n\t\t\treturn function translate( x, y, z ) {\n\n\t\t\t\tm1.makeTranslation( x, y, z );\n\n\t\t\t\tthis.applyMatrix( m1 );\n\n\t\t\t\treturn this;\n\n\t\t\t};\n\n\t\t}(),\n\n\t\tscale: function () {\n\n\t\t\t// scale geometry\n\n\t\t\tvar m1 = new Matrix4();\n\n\t\t\treturn function scale( x, y, z ) {\n\n\t\t\t\tm1.makeScale( x, y, z );\n\n\t\t\t\tthis.applyMatrix( m1 );\n\n\t\t\t\treturn this;\n\n\t\t\t};\n\n\t\t}(),\n\n\t\tlookAt: function () {\n\n\t\t\tvar obj = new Object3D();\n\n\t\t\treturn function lookAt( vector ) {\n\n\t\t\t\tobj.lookAt( vector );\n\n\t\t\t\tobj.updateMatrix();\n\n\t\t\t\tthis.applyMatrix( obj.matrix );\n\n\t\t\t};\n\n\t\t}(),\n\n\t\tfromBufferGeometry: function ( geometry ) {\n\n\t\t\tvar scope = this;\n\n\t\t\tvar indices = geometry.index !== null ? geometry.index.array : undefined;\n\t\t\tvar attributes = geometry.attributes;\n\n\t\t\tvar positions = attributes.position.array;\n\t\t\tvar normals = attributes.normal !== undefined ? attributes.normal.array : undefined;\n\t\t\tvar colors = attributes.color !== undefined ? attributes.color.array : undefined;\n\t\t\tvar uvs = attributes.uv !== undefined ? attributes.uv.array : undefined;\n\t\t\tvar uvs2 = attributes.uv2 !== undefined ? attributes.uv2.array : undefined;\n\n\t\t\tif ( uvs2 !== undefined ) this.faceVertexUvs[ 1 ] = [];\n\n\t\t\tvar tempNormals = [];\n\t\t\tvar tempUVs = [];\n\t\t\tvar tempUVs2 = [];\n\n\t\t\tfor ( var i = 0, j = 0; i < positions.length; i += 3, j += 2 ) {\n\n\t\t\t\tscope.vertices.push( new Vector3( positions[ i ], positions[ i + 1 ], positions[ i + 2 ] ) );\n\n\t\t\t\tif ( normals !== undefined ) {\n\n\t\t\t\t\ttempNormals.push( new Vector3( normals[ i ], normals[ i + 1 ], normals[ i + 2 ] ) );\n\n\t\t\t\t}\n\n\t\t\t\tif ( colors !== undefined ) {\n\n\t\t\t\t\tscope.colors.push( new Color( colors[ i ], colors[ i + 1 ], colors[ i + 2 ] ) );\n\n\t\t\t\t}\n\n\t\t\t\tif ( uvs !== undefined ) {\n\n\t\t\t\t\ttempUVs.push( new Vector2( uvs[ j ], uvs[ j + 1 ] ) );\n\n\t\t\t\t}\n\n\t\t\t\tif ( uvs2 !== undefined ) {\n\n\t\t\t\t\ttempUVs2.push( new Vector2( uvs2[ j ], uvs2[ j + 1 ] ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tfunction addFace( a, b, c, materialIndex ) {\n\n\t\t\t\tvar vertexNormals = normals !== undefined ? [ tempNormals[ a ].clone(), tempNormals[ b ].clone(), tempNormals[ c ].clone() ] : [];\n\t\t\t\tvar vertexColors = colors !== undefined ? [ scope.colors[ a ].clone(), scope.colors[ b ].clone(), scope.colors[ c ].clone() ] : [];\n\n\t\t\t\tvar face = new Face3( a, b, c, vertexNormals, vertexColors, materialIndex );\n\n\t\t\t\tscope.faces.push( face );\n\n\t\t\t\tif ( uvs !== undefined ) {\n\n\t\t\t\t\tscope.faceVertexUvs[ 0 ].push( [ tempUVs[ a ].clone(), tempUVs[ b ].clone(), tempUVs[ c ].clone() ] );\n\n\t\t\t\t}\n\n\t\t\t\tif ( uvs2 !== undefined ) {\n\n\t\t\t\t\tscope.faceVertexUvs[ 1 ].push( [ tempUVs2[ a ].clone(), tempUVs2[ b ].clone(), tempUVs2[ c ].clone() ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tvar groups = geometry.groups;\n\n\t\t\tif ( groups.length > 0 ) {\n\n\t\t\t\tfor ( var i = 0; i < groups.length; i ++ ) {\n\n\t\t\t\t\tvar group = groups[ i ];\n\n\t\t\t\t\tvar start = group.start;\n\t\t\t\t\tvar count = group.count;\n\n\t\t\t\t\tfor ( var j = start, jl = start + count; j < jl; j += 3 ) {\n\n\t\t\t\t\t\tif ( indices !== undefined ) {\n\n\t\t\t\t\t\t\taddFace( indices[ j ], indices[ j + 1 ], indices[ j + 2 ], group.materialIndex );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\taddFace( j, j + 1, j + 2, group.materialIndex );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tif ( indices !== undefined ) {\n\n\t\t\t\t\tfor ( var i = 0; i < indices.length; i += 3 ) {\n\n\t\t\t\t\t\taddFace( indices[ i ], indices[ i + 1 ], indices[ i + 2 ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tfor ( var i = 0; i < positions.length / 3; i += 3 ) {\n\n\t\t\t\t\t\taddFace( i, i + 1, i + 2 );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis.computeFaceNormals();\n\n\t\t\tif ( geometry.boundingBox !== null ) {\n\n\t\t\t\tthis.boundingBox = geometry.boundingBox.clone();\n\n\t\t\t}\n\n\t\t\tif ( geometry.boundingSphere !== null ) {\n\n\t\t\t\tthis.boundingSphere = geometry.boundingSphere.clone();\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tcenter: function () {\n\n\t\t\tthis.computeBoundingBox();\n\n\t\t\tvar offset = this.boundingBox.getCenter().negate();\n\n\t\t\tthis.translate( offset.x, offset.y, offset.z );\n\n\t\t\treturn offset;\n\n\t\t},\n\n\t\tnormalize: function () {\n\n\t\t\tthis.computeBoundingSphere();\n\n\t\t\tvar center = this.boundingSphere.center;\n\t\t\tvar radius = this.boundingSphere.radius;\n\n\t\t\tvar s = radius === 0 ? 1 : 1.0 / radius;\n\n\t\t\tvar matrix = new Matrix4();\n\t\t\tmatrix.set(\n\t\t\t\ts, 0, 0, - s * center.x,\n\t\t\t\t0, s, 0, - s * center.y,\n\t\t\t\t0, 0, s, - s * center.z,\n\t\t\t\t0, 0, 0, 1\n\t\t\t);\n\n\t\t\tthis.applyMatrix( matrix );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tcomputeFaceNormals: function () {\n\n\t\t\tvar cb = new Vector3(), ab = new Vector3();\n\n\t\t\tfor ( var f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\t\tvar face = this.faces[ f ];\n\n\t\t\t\tvar vA = this.vertices[ face.a ];\n\t\t\t\tvar vB = this.vertices[ face.b ];\n\t\t\t\tvar vC = this.vertices[ face.c ];\n\n\t\t\t\tcb.subVectors( vC, vB );\n\t\t\t\tab.subVectors( vA, vB );\n\t\t\t\tcb.cross( ab );\n\n\t\t\t\tcb.normalize();\n\n\t\t\t\tface.normal.copy( cb );\n\n\t\t\t}\n\n\t\t},\n\n\t\tcomputeVertexNormals: function ( areaWeighted ) {\n\n\t\t\tif ( areaWeighted === undefined ) areaWeighted = true;\n\n\t\t\tvar v, vl, f, fl, face, vertices;\n\n\t\t\tvertices = new Array( this.vertices.length );\n\n\t\t\tfor ( v = 0, vl = this.vertices.length; v < vl; v ++ ) {\n\n\t\t\t\tvertices[ v ] = new Vector3();\n\n\t\t\t}\n\n\t\t\tif ( areaWeighted ) {\n\n\t\t\t\t// vertex normals weighted by triangle areas\n\t\t\t\t// http://www.iquilezles.org/www/articles/normals/normals.htm\n\n\t\t\t\tvar vA, vB, vC;\n\t\t\t\tvar cb = new Vector3(), ab = new Vector3();\n\n\t\t\t\tfor ( f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\t\t\tface = this.faces[ f ];\n\n\t\t\t\t\tvA = this.vertices[ face.a ];\n\t\t\t\t\tvB = this.vertices[ face.b ];\n\t\t\t\t\tvC = this.vertices[ face.c ];\n\n\t\t\t\t\tcb.subVectors( vC, vB );\n\t\t\t\t\tab.subVectors( vA, vB );\n\t\t\t\t\tcb.cross( ab );\n\n\t\t\t\t\tvertices[ face.a ].add( cb );\n\t\t\t\t\tvertices[ face.b ].add( cb );\n\t\t\t\t\tvertices[ face.c ].add( cb );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tthis.computeFaceNormals();\n\n\t\t\t\tfor ( f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\t\t\tface = this.faces[ f ];\n\n\t\t\t\t\tvertices[ face.a ].add( face.normal );\n\t\t\t\t\tvertices[ face.b ].add( face.normal );\n\t\t\t\t\tvertices[ face.c ].add( face.normal );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tfor ( v = 0, vl = this.vertices.length; v < vl; v ++ ) {\n\n\t\t\t\tvertices[ v ].normalize();\n\n\t\t\t}\n\n\t\t\tfor ( f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\t\tface = this.faces[ f ];\n\n\t\t\t\tvar vertexNormals = face.vertexNormals;\n\n\t\t\t\tif ( vertexNormals.length === 3 ) {\n\n\t\t\t\t\tvertexNormals[ 0 ].copy( vertices[ face.a ] );\n\t\t\t\t\tvertexNormals[ 1 ].copy( vertices[ face.b ] );\n\t\t\t\t\tvertexNormals[ 2 ].copy( vertices[ face.c ] );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tvertexNormals[ 0 ] = vertices[ face.a ].clone();\n\t\t\t\t\tvertexNormals[ 1 ] = vertices[ face.b ].clone();\n\t\t\t\t\tvertexNormals[ 2 ] = vertices[ face.c ].clone();\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( this.faces.length > 0 ) {\n\n\t\t\t\tthis.normalsNeedUpdate = true;\n\n\t\t\t}\n\n\t\t},\n\n\t\tcomputeFlatVertexNormals: function () {\n\n\t\t\tvar f, fl, face;\n\n\t\t\tthis.computeFaceNormals();\n\n\t\t\tfor ( f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\t\tface = this.faces[ f ];\n\n\t\t\t\tvar vertexNormals = face.vertexNormals;\n\n\t\t\t\tif ( vertexNormals.length === 3 ) {\n\n\t\t\t\t\tvertexNormals[ 0 ].copy( face.normal );\n\t\t\t\t\tvertexNormals[ 1 ].copy( face.normal );\n\t\t\t\t\tvertexNormals[ 2 ].copy( face.normal );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tvertexNormals[ 0 ] = face.normal.clone();\n\t\t\t\t\tvertexNormals[ 1 ] = face.normal.clone();\n\t\t\t\t\tvertexNormals[ 2 ] = face.normal.clone();\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( this.faces.length > 0 ) {\n\n\t\t\t\tthis.normalsNeedUpdate = true;\n\n\t\t\t}\n\n\t\t},\n\n\t\tcomputeMorphNormals: function () {\n\n\t\t\tvar i, il, f, fl, face;\n\n\t\t\t// save original normals\n\t\t\t// - create temp variables on first access\n\t\t\t// otherwise just copy (for faster repeated calls)\n\n\t\t\tfor ( f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\t\tface = this.faces[ f ];\n\n\t\t\t\tif ( ! face.__originalFaceNormal ) {\n\n\t\t\t\t\tface.__originalFaceNormal = face.normal.clone();\n\n\t\t\t\t} else {\n\n\t\t\t\t\tface.__originalFaceNormal.copy( face.normal );\n\n\t\t\t\t}\n\n\t\t\t\tif ( ! face.__originalVertexNormals ) face.__originalVertexNormals = [];\n\n\t\t\t\tfor ( i = 0, il = face.vertexNormals.length; i < il; i ++ ) {\n\n\t\t\t\t\tif ( ! face.__originalVertexNormals[ i ] ) {\n\n\t\t\t\t\t\tface.__originalVertexNormals[ i ] = face.vertexNormals[ i ].clone();\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tface.__originalVertexNormals[ i ].copy( face.vertexNormals[ i ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// use temp geometry to compute face and vertex normals for each morph\n\n\t\t\tvar tmpGeo = new Geometry();\n\t\t\ttmpGeo.faces = this.faces;\n\n\t\t\tfor ( i = 0, il = this.morphTargets.length; i < il; i ++ ) {\n\n\t\t\t\t// create on first access\n\n\t\t\t\tif ( ! this.morphNormals[ i ] ) {\n\n\t\t\t\t\tthis.morphNormals[ i ] = {};\n\t\t\t\t\tthis.morphNormals[ i ].faceNormals = [];\n\t\t\t\t\tthis.morphNormals[ i ].vertexNormals = [];\n\n\t\t\t\t\tvar dstNormalsFace = this.morphNormals[ i ].faceNormals;\n\t\t\t\t\tvar dstNormalsVertex = this.morphNormals[ i ].vertexNormals;\n\n\t\t\t\t\tvar faceNormal, vertexNormals;\n\n\t\t\t\t\tfor ( f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\t\t\t\tfaceNormal = new Vector3();\n\t\t\t\t\t\tvertexNormals = { a: new Vector3(), b: new Vector3(), c: new Vector3() };\n\n\t\t\t\t\t\tdstNormalsFace.push( faceNormal );\n\t\t\t\t\t\tdstNormalsVertex.push( vertexNormals );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tvar morphNormals = this.morphNormals[ i ];\n\n\t\t\t\t// set vertices to morph target\n\n\t\t\t\ttmpGeo.vertices = this.morphTargets[ i ].vertices;\n\n\t\t\t\t// compute morph normals\n\n\t\t\t\ttmpGeo.computeFaceNormals();\n\t\t\t\ttmpGeo.computeVertexNormals();\n\n\t\t\t\t// store morph normals\n\n\t\t\t\tvar faceNormal, vertexNormals;\n\n\t\t\t\tfor ( f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\t\t\tface = this.faces[ f ];\n\n\t\t\t\t\tfaceNormal = morphNormals.faceNormals[ f ];\n\t\t\t\t\tvertexNormals = morphNormals.vertexNormals[ f ];\n\n\t\t\t\t\tfaceNormal.copy( face.normal );\n\n\t\t\t\t\tvertexNormals.a.copy( face.vertexNormals[ 0 ] );\n\t\t\t\t\tvertexNormals.b.copy( face.vertexNormals[ 1 ] );\n\t\t\t\t\tvertexNormals.c.copy( face.vertexNormals[ 2 ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// restore original normals\n\n\t\t\tfor ( f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\t\tface = this.faces[ f ];\n\n\t\t\t\tface.normal = face.__originalFaceNormal;\n\t\t\t\tface.vertexNormals = face.__originalVertexNormals;\n\n\t\t\t}\n\n\t\t},\n\n\t\tcomputeLineDistances: function () {\n\n\t\t\tvar d = 0;\n\t\t\tvar vertices = this.vertices;\n\n\t\t\tfor ( var i = 0, il = vertices.length; i < il; i ++ ) {\n\n\t\t\t\tif ( i > 0 ) {\n\n\t\t\t\t\td += vertices[ i ].distanceTo( vertices[ i - 1 ] );\n\n\t\t\t\t}\n\n\t\t\t\tthis.lineDistances[ i ] = d;\n\n\t\t\t}\n\n\t\t},\n\n\t\tcomputeBoundingBox: function () {\n\n\t\t\tif ( this.boundingBox === null ) {\n\n\t\t\t\tthis.boundingBox = new Box3();\n\n\t\t\t}\n\n\t\t\tthis.boundingBox.setFromPoints( this.vertices );\n\n\t\t},\n\n\t\tcomputeBoundingSphere: function () {\n\n\t\t\tif ( this.boundingSphere === null ) {\n\n\t\t\t\tthis.boundingSphere = new Sphere();\n\n\t\t\t}\n\n\t\t\tthis.boundingSphere.setFromPoints( this.vertices );\n\n\t\t},\n\n\t\tmerge: function ( geometry, matrix, materialIndexOffset ) {\n\n\t\t\tif ( ! ( geometry && geometry.isGeometry ) ) {\n\n\t\t\t\tconsole.error( 'THREE.Geometry.merge(): geometry not an instance of THREE.Geometry.', geometry );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tvar normalMatrix,\n\t\t\t\tvertexOffset = this.vertices.length,\n\t\t\t\tvertices1 = this.vertices,\n\t\t\t\tvertices2 = geometry.vertices,\n\t\t\t\tfaces1 = this.faces,\n\t\t\t\tfaces2 = geometry.faces,\n\t\t\t\tuvs1 = this.faceVertexUvs[ 0 ],\n\t\t\t\tuvs2 = geometry.faceVertexUvs[ 0 ],\n\t\t\t\tcolors1 = this.colors,\n\t\t\t\tcolors2 = geometry.colors;\n\n\t\t\tif ( materialIndexOffset === undefined ) materialIndexOffset = 0;\n\n\t\t\tif ( matrix !== undefined ) {\n\n\t\t\t\tnormalMatrix = new Matrix3().getNormalMatrix( matrix );\n\n\t\t\t}\n\n\t\t\t// vertices\n\n\t\t\tfor ( var i = 0, il = vertices2.length; i < il; i ++ ) {\n\n\t\t\t\tvar vertex = vertices2[ i ];\n\n\t\t\t\tvar vertexCopy = vertex.clone();\n\n\t\t\t\tif ( matrix !== undefined ) vertexCopy.applyMatrix4( matrix );\n\n\t\t\t\tvertices1.push( vertexCopy );\n\n\t\t\t}\n\n\t\t\t// colors\n\n\t\t\tfor ( var i = 0, il = colors2.length; i < il; i ++ ) {\n\n\t\t\t\tcolors1.push( colors2[ i ].clone() );\n\n\t\t\t}\n\n\t\t\t// faces\n\n\t\t\tfor ( i = 0, il = faces2.length; i < il; i ++ ) {\n\n\t\t\t\tvar face = faces2[ i ], faceCopy, normal, color,\n\t\t\t\t\tfaceVertexNormals = face.vertexNormals,\n\t\t\t\t\tfaceVertexColors = face.vertexColors;\n\n\t\t\t\tfaceCopy = new Face3( face.a + vertexOffset, face.b + vertexOffset, face.c + vertexOffset );\n\t\t\t\tfaceCopy.normal.copy( face.normal );\n\n\t\t\t\tif ( normalMatrix !== undefined ) {\n\n\t\t\t\t\tfaceCopy.normal.applyMatrix3( normalMatrix ).normalize();\n\n\t\t\t\t}\n\n\t\t\t\tfor ( var j = 0, jl = faceVertexNormals.length; j < jl; j ++ ) {\n\n\t\t\t\t\tnormal = faceVertexNormals[ j ].clone();\n\n\t\t\t\t\tif ( normalMatrix !== undefined ) {\n\n\t\t\t\t\t\tnormal.applyMatrix3( normalMatrix ).normalize();\n\n\t\t\t\t\t}\n\n\t\t\t\t\tfaceCopy.vertexNormals.push( normal );\n\n\t\t\t\t}\n\n\t\t\t\tfaceCopy.color.copy( face.color );\n\n\t\t\t\tfor ( var j = 0, jl = faceVertexColors.length; j < jl; j ++ ) {\n\n\t\t\t\t\tcolor = faceVertexColors[ j ];\n\t\t\t\t\tfaceCopy.vertexColors.push( color.clone() );\n\n\t\t\t\t}\n\n\t\t\t\tfaceCopy.materialIndex = face.materialIndex + materialIndexOffset;\n\n\t\t\t\tfaces1.push( faceCopy );\n\n\t\t\t}\n\n\t\t\t// uvs\n\n\t\t\tfor ( i = 0, il = uvs2.length; i < il; i ++ ) {\n\n\t\t\t\tvar uv = uvs2[ i ], uvCopy = [];\n\n\t\t\t\tif ( uv === undefined ) {\n\n\t\t\t\t\tcontinue;\n\n\t\t\t\t}\n\n\t\t\t\tfor ( var j = 0, jl = uv.length; j < jl; j ++ ) {\n\n\t\t\t\t\tuvCopy.push( uv[ j ].clone() );\n\n\t\t\t\t}\n\n\t\t\t\tuvs1.push( uvCopy );\n\n\t\t\t}\n\n\t\t},\n\n\t\tmergeMesh: function ( mesh ) {\n\n\t\t\tif ( ! ( mesh && mesh.isMesh ) ) {\n\n\t\t\t\tconsole.error( 'THREE.Geometry.mergeMesh(): mesh not an instance of THREE.Mesh.', mesh );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tmesh.matrixAutoUpdate && mesh.updateMatrix();\n\n\t\t\tthis.merge( mesh.geometry, mesh.matrix );\n\n\t\t},\n\n\t\t/*\n\t\t * Checks for duplicate vertices with hashmap.\n\t\t * Duplicated vertices are removed\n\t\t * and faces' vertices are updated.\n\t\t */\n\n\t\tmergeVertices: function () {\n\n\t\t\tvar verticesMap = {}; // Hashmap for looking up vertices by position coordinates (and making sure they are unique)\n\t\t\tvar unique = [], changes = [];\n\n\t\t\tvar v, key;\n\t\t\tvar precisionPoints = 4; // number of decimal points, e.g. 4 for epsilon of 0.0001\n\t\t\tvar precision = Math.pow( 10, precisionPoints );\n\t\t\tvar i, il, face;\n\t\t\tvar indices, j, jl;\n\n\t\t\tfor ( i = 0, il = this.vertices.length; i < il; i ++ ) {\n\n\t\t\t\tv = this.vertices[ i ];\n\t\t\t\tkey = Math.round( v.x * precision ) + '_' + Math.round( v.y * precision ) + '_' + Math.round( v.z * precision );\n\n\t\t\t\tif ( verticesMap[ key ] === undefined ) {\n\n\t\t\t\t\tverticesMap[ key ] = i;\n\t\t\t\t\tunique.push( this.vertices[ i ] );\n\t\t\t\t\tchanges[ i ] = unique.length - 1;\n\n\t\t\t\t} else {\n\n\t\t\t\t\t//console.log('Duplicate vertex found. ', i, ' could be using ', verticesMap[key]);\n\t\t\t\t\tchanges[ i ] = changes[ verticesMap[ key ] ];\n\n\t\t\t\t}\n\n\t\t\t}\n\n\n\t\t\t// if faces are completely degenerate after merging vertices, we\n\t\t\t// have to remove them from the geometry.\n\t\t\tvar faceIndicesToRemove = [];\n\n\t\t\tfor ( i = 0, il = this.faces.length; i < il; i ++ ) {\n\n\t\t\t\tface = this.faces[ i ];\n\n\t\t\t\tface.a = changes[ face.a ];\n\t\t\t\tface.b = changes[ face.b ];\n\t\t\t\tface.c = changes[ face.c ];\n\n\t\t\t\tindices = [ face.a, face.b, face.c ];\n\n\t\t\t\t// if any duplicate vertices are found in a Face3\n\t\t\t\t// we have to remove the face as nothing can be saved\n\t\t\t\tfor ( var n = 0; n < 3; n ++ ) {\n\n\t\t\t\t\tif ( indices[ n ] === indices[ ( n + 1 ) % 3 ] ) {\n\n\t\t\t\t\t\tfaceIndicesToRemove.push( i );\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\tfor ( i = faceIndicesToRemove.length - 1; i >= 0; i -- ) {\n\n\t\t\t\tvar idx = faceIndicesToRemove[ i ];\n\n\t\t\t\tthis.faces.splice( idx, 1 );\n\n\t\t\t\tfor ( j = 0, jl = this.faceVertexUvs.length; j < jl; j ++ ) {\n\n\t\t\t\t\tthis.faceVertexUvs[ j ].splice( idx, 1 );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// Use unique set of vertices\n\n\t\t\tvar diff = this.vertices.length - unique.length;\n\t\t\tthis.vertices = unique;\n\t\t\treturn diff;\n\n\t\t},\n\n\t\tsetFromPoints: function ( points ) {\n\n\t\t\tthis.vertices = [];\n\n\t\t\tfor ( var i = 0, l = points.length; i < l; i ++ ) {\n\n\t\t\t\tvar point = points[ i ];\n\t\t\t\tthis.vertices.push( new Vector3( point.x, point.y, point.z || 0 ) );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsortFacesByMaterialIndex: function () {\n\n\t\t\tvar faces = this.faces;\n\t\t\tvar length = faces.length;\n\n\t\t\t// tag faces\n\n\t\t\tfor ( var i = 0; i < length; i ++ ) {\n\n\t\t\t\tfaces[ i ]._id = i;\n\n\t\t\t}\n\n\t\t\t// sort faces\n\n\t\t\tfunction materialIndexSort( a, b ) {\n\n\t\t\t\treturn a.materialIndex - b.materialIndex;\n\n\t\t\t}\n\n\t\t\tfaces.sort( materialIndexSort );\n\n\t\t\t// sort uvs\n\n\t\t\tvar uvs1 = this.faceVertexUvs[ 0 ];\n\t\t\tvar uvs2 = this.faceVertexUvs[ 1 ];\n\n\t\t\tvar newUvs1, newUvs2;\n\n\t\t\tif ( uvs1 && uvs1.length === length ) newUvs1 = [];\n\t\t\tif ( uvs2 && uvs2.length === length ) newUvs2 = [];\n\n\t\t\tfor ( var i = 0; i < length; i ++ ) {\n\n\t\t\t\tvar id = faces[ i ]._id;\n\n\t\t\t\tif ( newUvs1 ) newUvs1.push( uvs1[ id ] );\n\t\t\t\tif ( newUvs2 ) newUvs2.push( uvs2[ id ] );\n\n\t\t\t}\n\n\t\t\tif ( newUvs1 ) this.faceVertexUvs[ 0 ] = newUvs1;\n\t\t\tif ( newUvs2 ) this.faceVertexUvs[ 1 ] = newUvs2;\n\n\t\t},\n\n\t\ttoJSON: function () {\n\n\t\t\tvar data = {\n\t\t\t\tmetadata: {\n\t\t\t\t\tversion: 4.5,\n\t\t\t\t\ttype: 'Geometry',\n\t\t\t\t\tgenerator: 'Geometry.toJSON'\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t// standard Geometry serialization\n\n\t\t\tdata.uuid = this.uuid;\n\t\t\tdata.type = this.type;\n\t\t\tif ( this.name !== '' ) data.name = this.name;\n\n\t\t\tif ( this.parameters !== undefined ) {\n\n\t\t\t\tvar parameters = this.parameters;\n\n\t\t\t\tfor ( var key in parameters ) {\n\n\t\t\t\t\tif ( parameters[ key ] !== undefined ) data[ key ] = parameters[ key ];\n\n\t\t\t\t}\n\n\t\t\t\treturn data;\n\n\t\t\t}\n\n\t\t\tvar vertices = [];\n\n\t\t\tfor ( var i = 0; i < this.vertices.length; i ++ ) {\n\n\t\t\t\tvar vertex = this.vertices[ i ];\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t}\n\n\t\t\tvar faces = [];\n\t\t\tvar normals = [];\n\t\t\tvar normalsHash = {};\n\t\t\tvar colors = [];\n\t\t\tvar colorsHash = {};\n\t\t\tvar uvs = [];\n\t\t\tvar uvsHash = {};\n\n\t\t\tfor ( var i = 0; i < this.faces.length; i ++ ) {\n\n\t\t\t\tvar face = this.faces[ i ];\n\n\t\t\t\tvar hasMaterial = true;\n\t\t\t\tvar hasFaceUv = false; // deprecated\n\t\t\t\tvar hasFaceVertexUv = this.faceVertexUvs[ 0 ][ i ] !== undefined;\n\t\t\t\tvar hasFaceNormal = face.normal.length() > 0;\n\t\t\t\tvar hasFaceVertexNormal = face.vertexNormals.length > 0;\n\t\t\t\tvar hasFaceColor = face.color.r !== 1 || face.color.g !== 1 || face.color.b !== 1;\n\t\t\t\tvar hasFaceVertexColor = face.vertexColors.length > 0;\n\n\t\t\t\tvar faceType = 0;\n\n\t\t\t\tfaceType = setBit( faceType, 0, 0 ); // isQuad\n\t\t\t\tfaceType = setBit( faceType, 1, hasMaterial );\n\t\t\t\tfaceType = setBit( faceType, 2, hasFaceUv );\n\t\t\t\tfaceType = setBit( faceType, 3, hasFaceVertexUv );\n\t\t\t\tfaceType = setBit( faceType, 4, hasFaceNormal );\n\t\t\t\tfaceType = setBit( faceType, 5, hasFaceVertexNormal );\n\t\t\t\tfaceType = setBit( faceType, 6, hasFaceColor );\n\t\t\t\tfaceType = setBit( faceType, 7, hasFaceVertexColor );\n\n\t\t\t\tfaces.push( faceType );\n\t\t\t\tfaces.push( face.a, face.b, face.c );\n\t\t\t\tfaces.push( face.materialIndex );\n\n\t\t\t\tif ( hasFaceVertexUv ) {\n\n\t\t\t\t\tvar faceVertexUvs = this.faceVertexUvs[ 0 ][ i ];\n\n\t\t\t\t\tfaces.push(\n\t\t\t\t\t\tgetUvIndex( faceVertexUvs[ 0 ] ),\n\t\t\t\t\t\tgetUvIndex( faceVertexUvs[ 1 ] ),\n\t\t\t\t\t\tgetUvIndex( faceVertexUvs[ 2 ] )\n\t\t\t\t\t);\n\n\t\t\t\t}\n\n\t\t\t\tif ( hasFaceNormal ) {\n\n\t\t\t\t\tfaces.push( getNormalIndex( face.normal ) );\n\n\t\t\t\t}\n\n\t\t\t\tif ( hasFaceVertexNormal ) {\n\n\t\t\t\t\tvar vertexNormals = face.vertexNormals;\n\n\t\t\t\t\tfaces.push(\n\t\t\t\t\t\tgetNormalIndex( vertexNormals[ 0 ] ),\n\t\t\t\t\t\tgetNormalIndex( vertexNormals[ 1 ] ),\n\t\t\t\t\t\tgetNormalIndex( vertexNormals[ 2 ] )\n\t\t\t\t\t);\n\n\t\t\t\t}\n\n\t\t\t\tif ( hasFaceColor ) {\n\n\t\t\t\t\tfaces.push( getColorIndex( face.color ) );\n\n\t\t\t\t}\n\n\t\t\t\tif ( hasFaceVertexColor ) {\n\n\t\t\t\t\tvar vertexColors = face.vertexColors;\n\n\t\t\t\t\tfaces.push(\n\t\t\t\t\t\tgetColorIndex( vertexColors[ 0 ] ),\n\t\t\t\t\t\tgetColorIndex( vertexColors[ 1 ] ),\n\t\t\t\t\t\tgetColorIndex( vertexColors[ 2 ] )\n\t\t\t\t\t);\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tfunction setBit( value, position, enabled ) {\n\n\t\t\t\treturn enabled ? value | ( 1 << position ) : value & ( ~ ( 1 << position ) );\n\n\t\t\t}\n\n\t\t\tfunction getNormalIndex( normal ) {\n\n\t\t\t\tvar hash = normal.x.toString() + normal.y.toString() + normal.z.toString();\n\n\t\t\t\tif ( normalsHash[ hash ] !== undefined ) {\n\n\t\t\t\t\treturn normalsHash[ hash ];\n\n\t\t\t\t}\n\n\t\t\t\tnormalsHash[ hash ] = normals.length / 3;\n\t\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\n\t\t\t\treturn normalsHash[ hash ];\n\n\t\t\t}\n\n\t\t\tfunction getColorIndex( color ) {\n\n\t\t\t\tvar hash = color.r.toString() + color.g.toString() + color.b.toString();\n\n\t\t\t\tif ( colorsHash[ hash ] !== undefined ) {\n\n\t\t\t\t\treturn colorsHash[ hash ];\n\n\t\t\t\t}\n\n\t\t\t\tcolorsHash[ hash ] = colors.length;\n\t\t\t\tcolors.push( color.getHex() );\n\n\t\t\t\treturn colorsHash[ hash ];\n\n\t\t\t}\n\n\t\t\tfunction getUvIndex( uv ) {\n\n\t\t\t\tvar hash = uv.x.toString() + uv.y.toString();\n\n\t\t\t\tif ( uvsHash[ hash ] !== undefined ) {\n\n\t\t\t\t\treturn uvsHash[ hash ];\n\n\t\t\t\t}\n\n\t\t\t\tuvsHash[ hash ] = uvs.length / 2;\n\t\t\t\tuvs.push( uv.x, uv.y );\n\n\t\t\t\treturn uvsHash[ hash ];\n\n\t\t\t}\n\n\t\t\tdata.data = {};\n\n\t\t\tdata.data.vertices = vertices;\n\t\t\tdata.data.normals = normals;\n\t\t\tif ( colors.length > 0 ) data.data.colors = colors;\n\t\t\tif ( uvs.length > 0 ) data.data.uvs = [ uvs ]; // temporal backward compatibility\n\t\t\tdata.data.faces = faces;\n\n\t\t\treturn data;\n\n\t\t},\n\n\t\tclone: function () {\n\n\t\t\t/*\n\t\t\t // Handle primitives\n\n\t\t\t var parameters = this.parameters;\n\n\t\t\t if ( parameters !== undefined ) {\n\n\t\t\t var values = [];\n\n\t\t\t for ( var key in parameters ) {\n\n\t\t\t values.push( parameters[ key ] );\n\n\t\t\t }\n\n\t\t\t var geometry = Object.create( this.constructor.prototype );\n\t\t\t this.constructor.apply( geometry, values );\n\t\t\t return geometry;\n\n\t\t\t }\n\n\t\t\t return new this.constructor().copy( this );\n\t\t\t */\n\n\t\t\treturn new Geometry().copy( this );\n\n\t\t},\n\n\t\tcopy: function ( source ) {\n\n\t\t\tvar i, il, j, jl, k, kl;\n\n\t\t\t// reset\n\n\t\t\tthis.vertices = [];\n\t\t\tthis.colors = [];\n\t\t\tthis.faces = [];\n\t\t\tthis.faceVertexUvs = [[]];\n\t\t\tthis.morphTargets = [];\n\t\t\tthis.morphNormals = [];\n\t\t\tthis.skinWeights = [];\n\t\t\tthis.skinIndices = [];\n\t\t\tthis.lineDistances = [];\n\t\t\tthis.boundingBox = null;\n\t\t\tthis.boundingSphere = null;\n\n\t\t\t// name\n\n\t\t\tthis.name = source.name;\n\n\t\t\t// vertices\n\n\t\t\tvar vertices = source.vertices;\n\n\t\t\tfor ( i = 0, il = vertices.length; i < il; i ++ ) {\n\n\t\t\t\tthis.vertices.push( vertices[ i ].clone() );\n\n\t\t\t}\n\n\t\t\t// colors\n\n\t\t\tvar colors = source.colors;\n\n\t\t\tfor ( i = 0, il = colors.length; i < il; i ++ ) {\n\n\t\t\t\tthis.colors.push( colors[ i ].clone() );\n\n\t\t\t}\n\n\t\t\t// faces\n\n\t\t\tvar faces = source.faces;\n\n\t\t\tfor ( i = 0, il = faces.length; i < il; i ++ ) {\n\n\t\t\t\tthis.faces.push( faces[ i ].clone() );\n\n\t\t\t}\n\n\t\t\t// face vertex uvs\n\n\t\t\tfor ( i = 0, il = source.faceVertexUvs.length; i < il; i ++ ) {\n\n\t\t\t\tvar faceVertexUvs = source.faceVertexUvs[ i ];\n\n\t\t\t\tif ( this.faceVertexUvs[ i ] === undefined ) {\n\n\t\t\t\t\tthis.faceVertexUvs[ i ] = [];\n\n\t\t\t\t}\n\n\t\t\t\tfor ( j = 0, jl = faceVertexUvs.length; j < jl; j ++ ) {\n\n\t\t\t\t\tvar uvs = faceVertexUvs[ j ], uvsCopy = [];\n\n\t\t\t\t\tfor ( k = 0, kl = uvs.length; k < kl; k ++ ) {\n\n\t\t\t\t\t\tvar uv = uvs[ k ];\n\n\t\t\t\t\t\tuvsCopy.push( uv.clone() );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.faceVertexUvs[ i ].push( uvsCopy );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// morph targets\n\n\t\t\tvar morphTargets = source.morphTargets;\n\n\t\t\tfor ( i = 0, il = morphTargets.length; i < il; i ++ ) {\n\n\t\t\t\tvar morphTarget = {};\n\t\t\t\tmorphTarget.name = morphTargets[ i ].name;\n\n\t\t\t\t// vertices\n\n\t\t\t\tif ( morphTargets[ i ].vertices !== undefined ) {\n\n\t\t\t\t\tmorphTarget.vertices = [];\n\n\t\t\t\t\tfor ( j = 0, jl = morphTargets[ i ].vertices.length; j < jl; j ++ ) {\n\n\t\t\t\t\t\tmorphTarget.vertices.push( morphTargets[ i ].vertices[ j ].clone() );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t// normals\n\n\t\t\t\tif ( morphTargets[ i ].normals !== undefined ) {\n\n\t\t\t\t\tmorphTarget.normals = [];\n\n\t\t\t\t\tfor ( j = 0, jl = morphTargets[ i ].normals.length; j < jl; j ++ ) {\n\n\t\t\t\t\t\tmorphTarget.normals.push( morphTargets[ i ].normals[ j ].clone() );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tthis.morphTargets.push( morphTarget );\n\n\t\t\t}\n\n\t\t\t// morph normals\n\n\t\t\tvar morphNormals = source.morphNormals;\n\n\t\t\tfor ( i = 0, il = morphNormals.length; i < il; i ++ ) {\n\n\t\t\t\tvar morphNormal = {};\n\n\t\t\t\t// vertex normals\n\n\t\t\t\tif ( morphNormals[ i ].vertexNormals !== undefined ) {\n\n\t\t\t\t\tmorphNormal.vertexNormals = [];\n\n\t\t\t\t\tfor ( j = 0, jl = morphNormals[ i ].vertexNormals.length; j < jl; j ++ ) {\n\n\t\t\t\t\t\tvar srcVertexNormal = morphNormals[ i ].vertexNormals[ j ];\n\t\t\t\t\t\tvar destVertexNormal = {};\n\n\t\t\t\t\t\tdestVertexNormal.a = srcVertexNormal.a.clone();\n\t\t\t\t\t\tdestVertexNormal.b = srcVertexNormal.b.clone();\n\t\t\t\t\t\tdestVertexNormal.c = srcVertexNormal.c.clone();\n\n\t\t\t\t\t\tmorphNormal.vertexNormals.push( destVertexNormal );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t// face normals\n\n\t\t\t\tif ( morphNormals[ i ].faceNormals !== undefined ) {\n\n\t\t\t\t\tmorphNormal.faceNormals = [];\n\n\t\t\t\t\tfor ( j = 0, jl = morphNormals[ i ].faceNormals.length; j < jl; j ++ ) {\n\n\t\t\t\t\t\tmorphNormal.faceNormals.push( morphNormals[ i ].faceNormals[ j ].clone() );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tthis.morphNormals.push( morphNormal );\n\n\t\t\t}\n\n\t\t\t// skin weights\n\n\t\t\tvar skinWeights = source.skinWeights;\n\n\t\t\tfor ( i = 0, il = skinWeights.length; i < il; i ++ ) {\n\n\t\t\t\tthis.skinWeights.push( skinWeights[ i ].clone() );\n\n\t\t\t}\n\n\t\t\t// skin indices\n\n\t\t\tvar skinIndices = source.skinIndices;\n\n\t\t\tfor ( i = 0, il = skinIndices.length; i < il; i ++ ) {\n\n\t\t\t\tthis.skinIndices.push( skinIndices[ i ].clone() );\n\n\t\t\t}\n\n\t\t\t// line distances\n\n\t\t\tvar lineDistances = source.lineDistances;\n\n\t\t\tfor ( i = 0, il = lineDistances.length; i < il; i ++ ) {\n\n\t\t\t\tthis.lineDistances.push( lineDistances[ i ] );\n\n\t\t\t}\n\n\t\t\t// bounding box\n\n\t\t\tvar boundingBox = source.boundingBox;\n\n\t\t\tif ( boundingBox !== null ) {\n\n\t\t\t\tthis.boundingBox = boundingBox.clone();\n\n\t\t\t}\n\n\t\t\t// bounding sphere\n\n\t\t\tvar boundingSphere = source.boundingSphere;\n\n\t\t\tif ( boundingSphere !== null ) {\n\n\t\t\t\tthis.boundingSphere = boundingSphere.clone();\n\n\t\t\t}\n\n\t\t\t// update flags\n\n\t\t\tthis.elementsNeedUpdate = source.elementsNeedUpdate;\n\t\t\tthis.verticesNeedUpdate = source.verticesNeedUpdate;\n\t\t\tthis.uvsNeedUpdate = source.uvsNeedUpdate;\n\t\t\tthis.normalsNeedUpdate = source.normalsNeedUpdate;\n\t\t\tthis.colorsNeedUpdate = source.colorsNeedUpdate;\n\t\t\tthis.lineDistancesNeedUpdate = source.lineDistancesNeedUpdate;\n\t\t\tthis.groupsNeedUpdate = source.groupsNeedUpdate;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tdispose: function () {\n\n\t\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t\t}\n\n\t} );\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t */\n\n\tfunction BufferAttribute( 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.uuid = _Math.generateUUID();\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.dynamic = false;\n\t\tthis.updateRange = { offset: 0, count: - 1 };\n\n\t\tthis.onUploadCallback = function () {};\n\n\t\tthis.version = 0;\n\n\t}\n\n\tObject.defineProperty( BufferAttribute.prototype, 'needsUpdate', {\n\n\t\tset: function ( value ) {\n\n\t\t\tif ( value === true ) this.version ++;\n\n\t\t}\n\n\t} );\n\n\tObject.assign( BufferAttribute.prototype, {\n\n\t\tisBufferAttribute: true,\n\n\t\tsetArray: function ( array ) {\n\n\t\t\tif ( Array.isArray( array ) ) {\n\n\t\t\t\tthrow new TypeError( 'THREE.BufferAttribute: array should be a Typed Array.' );\n\n\t\t\t}\n\n\t\t\tthis.count = array !== undefined ? array.length / this.itemSize : 0;\n\t\t\tthis.array = array;\n\n\t\t},\n\n\t\tsetDynamic: function ( value ) {\n\n\t\t\tthis.dynamic = value;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tcopy: function ( source ) {\n\n\t\t\tthis.array = new source.array.constructor( source.array );\n\t\t\tthis.itemSize = source.itemSize;\n\t\t\tthis.count = source.count;\n\t\t\tthis.normalized = source.normalized;\n\n\t\t\tthis.dynamic = source.dynamic;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tcopyAt: function ( index1, attribute, index2 ) {\n\n\t\t\tindex1 *= this.itemSize;\n\t\t\tindex2 *= attribute.itemSize;\n\n\t\t\tfor ( var i = 0, l = this.itemSize; i < l; i ++ ) {\n\n\t\t\t\tthis.array[ index1 + i ] = attribute.array[ index2 + i ];\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tcopyArray: function ( array ) {\n\n\t\t\tthis.array.set( array );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tcopyColorsArray: function ( colors ) {\n\n\t\t\tvar array = this.array, offset = 0;\n\n\t\t\tfor ( var i = 0, l = colors.length; i < l; i ++ ) {\n\n\t\t\t\tvar color = colors[ i ];\n\n\t\t\t\tif ( color === undefined ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.BufferAttribute.copyColorsArray(): color is undefined', i );\n\t\t\t\t\tcolor = new Color();\n\n\t\t\t\t}\n\n\t\t\t\tarray[ offset ++ ] = color.r;\n\t\t\t\tarray[ offset ++ ] = color.g;\n\t\t\t\tarray[ offset ++ ] = color.b;\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tcopyIndicesArray: function ( indices ) {\n\n\t\t\tvar array = this.array, offset = 0;\n\n\t\t\tfor ( var i = 0, l = indices.length; i < l; i ++ ) {\n\n\t\t\t\tvar index = indices[ i ];\n\n\t\t\t\tarray[ offset ++ ] = index.a;\n\t\t\t\tarray[ offset ++ ] = index.b;\n\t\t\t\tarray[ offset ++ ] = index.c;\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tcopyVector2sArray: function ( vectors ) {\n\n\t\t\tvar array = this.array, offset = 0;\n\n\t\t\tfor ( var i = 0, l = vectors.length; i < l; i ++ ) {\n\n\t\t\t\tvar vector = vectors[ i ];\n\n\t\t\t\tif ( vector === undefined ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.BufferAttribute.copyVector2sArray(): vector is undefined', i );\n\t\t\t\t\tvector = new Vector2();\n\n\t\t\t\t}\n\n\t\t\t\tarray[ offset ++ ] = vector.x;\n\t\t\t\tarray[ offset ++ ] = vector.y;\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tcopyVector3sArray: function ( vectors ) {\n\n\t\t\tvar array = this.array, offset = 0;\n\n\t\t\tfor ( var i = 0, l = vectors.length; i < l; i ++ ) {\n\n\t\t\t\tvar vector = vectors[ i ];\n\n\t\t\t\tif ( vector === undefined ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.BufferAttribute.copyVector3sArray(): vector is undefined', i );\n\t\t\t\t\tvector = new Vector3();\n\n\t\t\t\t}\n\n\t\t\t\tarray[ offset ++ ] = vector.x;\n\t\t\t\tarray[ offset ++ ] = vector.y;\n\t\t\t\tarray[ offset ++ ] = vector.z;\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tcopyVector4sArray: function ( vectors ) {\n\n\t\t\tvar array = this.array, offset = 0;\n\n\t\t\tfor ( var i = 0, l = vectors.length; i < l; i ++ ) {\n\n\t\t\t\tvar vector = vectors[ i ];\n\n\t\t\t\tif ( vector === undefined ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.BufferAttribute.copyVector4sArray(): vector is undefined', i );\n\t\t\t\t\tvector = new Vector4();\n\n\t\t\t\t}\n\n\t\t\t\tarray[ offset ++ ] = vector.x;\n\t\t\t\tarray[ offset ++ ] = vector.y;\n\t\t\t\tarray[ offset ++ ] = vector.z;\n\t\t\t\tarray[ offset ++ ] = vector.w;\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tset: function ( value, offset ) {\n\n\t\t\tif ( offset === undefined ) offset = 0;\n\n\t\t\tthis.array.set( value, offset );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tgetX: function ( index ) {\n\n\t\t\treturn this.array[ index * this.itemSize ];\n\n\t\t},\n\n\t\tsetX: function ( index, x ) {\n\n\t\t\tthis.array[ index * this.itemSize ] = x;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tgetY: function ( index ) {\n\n\t\t\treturn this.array[ index * this.itemSize + 1 ];\n\n\t\t},\n\n\t\tsetY: function ( index, y ) {\n\n\t\t\tthis.array[ index * this.itemSize + 1 ] = y;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tgetZ: function ( index ) {\n\n\t\t\treturn this.array[ index * this.itemSize + 2 ];\n\n\t\t},\n\n\t\tsetZ: function ( index, z ) {\n\n\t\t\tthis.array[ index * this.itemSize + 2 ] = z;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tgetW: function ( index ) {\n\n\t\t\treturn this.array[ index * this.itemSize + 3 ];\n\n\t\t},\n\n\t\tsetW: function ( index, w ) {\n\n\t\t\tthis.array[ index * this.itemSize + 3 ] = w;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetXY: function ( index, x, y ) {\n\n\t\t\tindex *= this.itemSize;\n\n\t\t\tthis.array[ index + 0 ] = x;\n\t\t\tthis.array[ index + 1 ] = y;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetXYZ: function ( index, x, y, z ) {\n\n\t\t\tindex *= this.itemSize;\n\n\t\t\tthis.array[ index + 0 ] = x;\n\t\t\tthis.array[ index + 1 ] = y;\n\t\t\tthis.array[ index + 2 ] = z;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetXYZW: function ( index, x, y, z, w ) {\n\n\t\t\tindex *= this.itemSize;\n\n\t\t\tthis.array[ index + 0 ] = x;\n\t\t\tthis.array[ index + 1 ] = y;\n\t\t\tthis.array[ index + 2 ] = z;\n\t\t\tthis.array[ index + 3 ] = w;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tonUpload: function ( callback ) {\n\n\t\t\tthis.onUploadCallback = callback;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tclone: function () {\n\n\t\t\treturn new this.constructor( this.array, this.itemSize ).copy( this );\n\n\t\t}\n\n\t} );\n\n\t//\n\n\tfunction Int8BufferAttribute( array, itemSize, normalized ) {\n\n\t\tBufferAttribute.call( this, new Int8Array( array ), itemSize, normalized );\n\n\t}\n\n\tInt8BufferAttribute.prototype = Object.create( BufferAttribute.prototype );\n\tInt8BufferAttribute.prototype.constructor = Int8BufferAttribute;\n\n\n\tfunction Uint8BufferAttribute( array, itemSize, normalized ) {\n\n\t\tBufferAttribute.call( this, new Uint8Array( array ), itemSize, normalized );\n\n\t}\n\n\tUint8BufferAttribute.prototype = Object.create( BufferAttribute.prototype );\n\tUint8BufferAttribute.prototype.constructor = Uint8BufferAttribute;\n\n\n\tfunction Uint8ClampedBufferAttribute( array, itemSize, normalized ) {\n\n\t\tBufferAttribute.call( this, new Uint8ClampedArray( array ), itemSize, normalized );\n\n\t}\n\n\tUint8ClampedBufferAttribute.prototype = Object.create( BufferAttribute.prototype );\n\tUint8ClampedBufferAttribute.prototype.constructor = Uint8ClampedBufferAttribute;\n\n\n\tfunction Int16BufferAttribute( array, itemSize, normalized ) {\n\n\t\tBufferAttribute.call( this, new Int16Array( array ), itemSize, normalized );\n\n\t}\n\n\tInt16BufferAttribute.prototype = Object.create( BufferAttribute.prototype );\n\tInt16BufferAttribute.prototype.constructor = Int16BufferAttribute;\n\n\n\tfunction Uint16BufferAttribute( array, itemSize, normalized ) {\n\n\t\tBufferAttribute.call( this, new Uint16Array( array ), itemSize, normalized );\n\n\t}\n\n\tUint16BufferAttribute.prototype = Object.create( BufferAttribute.prototype );\n\tUint16BufferAttribute.prototype.constructor = Uint16BufferAttribute;\n\n\n\tfunction Int32BufferAttribute( array, itemSize, normalized ) {\n\n\t\tBufferAttribute.call( this, new Int32Array( array ), itemSize, normalized );\n\n\t}\n\n\tInt32BufferAttribute.prototype = Object.create( BufferAttribute.prototype );\n\tInt32BufferAttribute.prototype.constructor = Int32BufferAttribute;\n\n\n\tfunction Uint32BufferAttribute( array, itemSize, normalized ) {\n\n\t\tBufferAttribute.call( this, new Uint32Array( array ), itemSize, normalized );\n\n\t}\n\n\tUint32BufferAttribute.prototype = Object.create( BufferAttribute.prototype );\n\tUint32BufferAttribute.prototype.constructor = Uint32BufferAttribute;\n\n\n\tfunction Float32BufferAttribute( array, itemSize, normalized ) {\n\n\t\tBufferAttribute.call( this, new Float32Array( array ), itemSize, normalized );\n\n\t}\n\n\tFloat32BufferAttribute.prototype = Object.create( BufferAttribute.prototype );\n\tFloat32BufferAttribute.prototype.constructor = Float32BufferAttribute;\n\n\n\tfunction Float64BufferAttribute( array, itemSize, normalized ) {\n\n\t\tBufferAttribute.call( this, new Float64Array( array ), itemSize, normalized );\n\n\t}\n\n\tFloat64BufferAttribute.prototype = Object.create( BufferAttribute.prototype );\n\tFloat64BufferAttribute.prototype.constructor = Float64BufferAttribute;\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t */\n\n\tfunction DirectGeometry() {\n\n\t\tthis.indices = [];\n\t\tthis.vertices = [];\n\t\tthis.normals = [];\n\t\tthis.colors = [];\n\t\tthis.uvs = [];\n\t\tthis.uvs2 = [];\n\n\t\tthis.groups = [];\n\n\t\tthis.morphTargets = {};\n\n\t\tthis.skinWeights = [];\n\t\tthis.skinIndices = [];\n\n\t\t// this.lineDistances = [];\n\n\t\tthis.boundingBox = null;\n\t\tthis.boundingSphere = null;\n\n\t\t// update flags\n\n\t\tthis.verticesNeedUpdate = false;\n\t\tthis.normalsNeedUpdate = false;\n\t\tthis.colorsNeedUpdate = false;\n\t\tthis.uvsNeedUpdate = false;\n\t\tthis.groupsNeedUpdate = false;\n\n\t}\n\n\tObject.assign( DirectGeometry.prototype, {\n\n\t\tcomputeGroups: function ( geometry ) {\n\n\t\t\tvar group;\n\t\t\tvar groups = [];\n\t\t\tvar materialIndex = undefined;\n\n\t\t\tvar faces = geometry.faces;\n\n\t\t\tfor ( var i = 0; i < faces.length; i ++ ) {\n\n\t\t\t\tvar face = faces[ i ];\n\n\t\t\t\t// materials\n\n\t\t\t\tif ( face.materialIndex !== materialIndex ) {\n\n\t\t\t\t\tmaterialIndex = face.materialIndex;\n\n\t\t\t\t\tif ( group !== undefined ) {\n\n\t\t\t\t\t\tgroup.count = ( i * 3 ) - group.start;\n\t\t\t\t\t\tgroups.push( group );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tgroup = {\n\t\t\t\t\t\tstart: i * 3,\n\t\t\t\t\t\tmaterialIndex: materialIndex\n\t\t\t\t\t};\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( group !== undefined ) {\n\n\t\t\t\tgroup.count = ( i * 3 ) - group.start;\n\t\t\t\tgroups.push( group );\n\n\t\t\t}\n\n\t\t\tthis.groups = groups;\n\n\t\t},\n\n\t\tfromGeometry: function ( geometry ) {\n\n\t\t\tvar faces = geometry.faces;\n\t\t\tvar vertices = geometry.vertices;\n\t\t\tvar faceVertexUvs = geometry.faceVertexUvs;\n\n\t\t\tvar hasFaceVertexUv = faceVertexUvs[ 0 ] && faceVertexUvs[ 0 ].length > 0;\n\t\t\tvar hasFaceVertexUv2 = faceVertexUvs[ 1 ] && faceVertexUvs[ 1 ].length > 0;\n\n\t\t\t// morphs\n\n\t\t\tvar morphTargets = geometry.morphTargets;\n\t\t\tvar morphTargetsLength = morphTargets.length;\n\n\t\t\tvar morphTargetsPosition;\n\n\t\t\tif ( morphTargetsLength > 0 ) {\n\n\t\t\t\tmorphTargetsPosition = [];\n\n\t\t\t\tfor ( var i = 0; i < morphTargetsLength; i ++ ) {\n\n\t\t\t\t\tmorphTargetsPosition[ i ] = [];\n\n\t\t\t\t}\n\n\t\t\t\tthis.morphTargets.position = morphTargetsPosition;\n\n\t\t\t}\n\n\t\t\tvar morphNormals = geometry.morphNormals;\n\t\t\tvar morphNormalsLength = morphNormals.length;\n\n\t\t\tvar morphTargetsNormal;\n\n\t\t\tif ( morphNormalsLength > 0 ) {\n\n\t\t\t\tmorphTargetsNormal = [];\n\n\t\t\t\tfor ( var i = 0; i < morphNormalsLength; i ++ ) {\n\n\t\t\t\t\tmorphTargetsNormal[ i ] = [];\n\n\t\t\t\t}\n\n\t\t\t\tthis.morphTargets.normal = morphTargetsNormal;\n\n\t\t\t}\n\n\t\t\t// skins\n\n\t\t\tvar skinIndices = geometry.skinIndices;\n\t\t\tvar skinWeights = geometry.skinWeights;\n\n\t\t\tvar hasSkinIndices = skinIndices.length === vertices.length;\n\t\t\tvar hasSkinWeights = skinWeights.length === vertices.length;\n\n\t\t\t//\n\n\t\t\tfor ( var i = 0; i < faces.length; i ++ ) {\n\n\t\t\t\tvar face = faces[ i ];\n\n\t\t\t\tthis.vertices.push( vertices[ face.a ], vertices[ face.b ], vertices[ face.c ] );\n\n\t\t\t\tvar vertexNormals = face.vertexNormals;\n\n\t\t\t\tif ( vertexNormals.length === 3 ) {\n\n\t\t\t\t\tthis.normals.push( vertexNormals[ 0 ], vertexNormals[ 1 ], vertexNormals[ 2 ] );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tvar normal = face.normal;\n\n\t\t\t\t\tthis.normals.push( normal, normal, normal );\n\n\t\t\t\t}\n\n\t\t\t\tvar vertexColors = face.vertexColors;\n\n\t\t\t\tif ( vertexColors.length === 3 ) {\n\n\t\t\t\t\tthis.colors.push( vertexColors[ 0 ], vertexColors[ 1 ], vertexColors[ 2 ] );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tvar color = face.color;\n\n\t\t\t\t\tthis.colors.push( color, color, color );\n\n\t\t\t\t}\n\n\t\t\t\tif ( hasFaceVertexUv === true ) {\n\n\t\t\t\t\tvar vertexUvs = faceVertexUvs[ 0 ][ i ];\n\n\t\t\t\t\tif ( vertexUvs !== undefined ) {\n\n\t\t\t\t\t\tthis.uvs.push( vertexUvs[ 0 ], vertexUvs[ 1 ], vertexUvs[ 2 ] );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tconsole.warn( 'THREE.DirectGeometry.fromGeometry(): Undefined vertexUv ', i );\n\n\t\t\t\t\t\tthis.uvs.push( new Vector2(), new Vector2(), new Vector2() );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( hasFaceVertexUv2 === true ) {\n\n\t\t\t\t\tvar vertexUvs = faceVertexUvs[ 1 ][ i ];\n\n\t\t\t\t\tif ( vertexUvs !== undefined ) {\n\n\t\t\t\t\t\tthis.uvs2.push( vertexUvs[ 0 ], vertexUvs[ 1 ], vertexUvs[ 2 ] );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tconsole.warn( 'THREE.DirectGeometry.fromGeometry(): Undefined vertexUv2 ', i );\n\n\t\t\t\t\t\tthis.uvs2.push( new Vector2(), new Vector2(), new Vector2() );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t// morphs\n\n\t\t\t\tfor ( var j = 0; j < morphTargetsLength; j ++ ) {\n\n\t\t\t\t\tvar morphTarget = morphTargets[ j ].vertices;\n\n\t\t\t\t\tmorphTargetsPosition[ j ].push( morphTarget[ face.a ], morphTarget[ face.b ], morphTarget[ face.c ] );\n\n\t\t\t\t}\n\n\t\t\t\tfor ( var j = 0; j < morphNormalsLength; j ++ ) {\n\n\t\t\t\t\tvar morphNormal = morphNormals[ j ].vertexNormals[ i ];\n\n\t\t\t\t\tmorphTargetsNormal[ j ].push( morphNormal.a, morphNormal.b, morphNormal.c );\n\n\t\t\t\t}\n\n\t\t\t\t// skins\n\n\t\t\t\tif ( hasSkinIndices ) {\n\n\t\t\t\t\tthis.skinIndices.push( skinIndices[ face.a ], skinIndices[ face.b ], skinIndices[ face.c ] );\n\n\t\t\t\t}\n\n\t\t\t\tif ( hasSkinWeights ) {\n\n\t\t\t\t\tthis.skinWeights.push( skinWeights[ face.a ], skinWeights[ face.b ], skinWeights[ face.c ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis.computeGroups( geometry );\n\n\t\t\tthis.verticesNeedUpdate = geometry.verticesNeedUpdate;\n\t\t\tthis.normalsNeedUpdate = geometry.normalsNeedUpdate;\n\t\t\tthis.colorsNeedUpdate = geometry.colorsNeedUpdate;\n\t\t\tthis.uvsNeedUpdate = geometry.uvsNeedUpdate;\n\t\t\tthis.groupsNeedUpdate = geometry.groupsNeedUpdate;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t} );\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t */\n\n\tfunction arrayMax( array ) {\n\n\t\tif ( array.length === 0 ) return - Infinity;\n\n\t\tvar max = array[ 0 ];\n\n\t\tfor ( var i = 1, l = array.length; i < l; ++ i ) {\n\n\t\t\tif ( array[ i ] > max ) max = array[ i ];\n\n\t\t}\n\n\t\treturn max;\n\n\t}\n\n\t/**\n\t * @author alteredq / http://alteredqualia.com/\n\t * @author mrdoob / http://mrdoob.com/\n\t */\n\n\tvar bufferGeometryId = 1; // BufferGeometry uses odd numbers as Id\n\n\tfunction BufferGeometry() {\n\n\t\tObject.defineProperty( this, 'id', { value: bufferGeometryId += 2 } );\n\n\t\tthis.uuid = _Math.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\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}\n\n\tObject.assign( BufferGeometry.prototype, EventDispatcher.prototype, {\n\n\t\tisBufferGeometry: true,\n\n\t\tgetIndex: function () {\n\n\t\t\treturn this.index;\n\n\t\t},\n\n\t\tsetIndex: function ( index ) {\n\n\t\t\tif ( Array.isArray( index ) ) {\n\n\t\t\t\tthis.index = new ( arrayMax( index ) > 65535 ? Uint32BufferAttribute : Uint16BufferAttribute )( index, 1 );\n\n\t\t\t} else {\n\n\t\t\t\tthis.index = index;\n\n\t\t\t}\n\n\t\t},\n\n\t\taddAttribute: function ( name, attribute ) {\n\n\t\t\tif ( ! ( attribute && attribute.isBufferAttribute ) && ! ( attribute && attribute.isInterleavedBufferAttribute ) ) {\n\n\t\t\t\tconsole.warn( 'THREE.BufferGeometry: .addAttribute() now expects ( name, attribute ).' );\n\n\t\t\t\tthis.addAttribute( name, new BufferAttribute( arguments[ 1 ], arguments[ 2 ] ) );\n\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tif ( name === 'index' ) {\n\n\t\t\t\tconsole.warn( 'THREE.BufferGeometry.addAttribute: Use .setIndex() for index attribute.' );\n\t\t\t\tthis.setIndex( attribute );\n\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tthis.attributes[ name ] = attribute;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tgetAttribute: function ( name ) {\n\n\t\t\treturn this.attributes[ name ];\n\n\t\t},\n\n\t\tremoveAttribute: function ( name ) {\n\n\t\t\tdelete this.attributes[ name ];\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\taddGroup: function ( start, count, materialIndex ) {\n\n\t\t\tthis.groups.push( {\n\n\t\t\t\tstart: start,\n\t\t\t\tcount: count,\n\t\t\t\tmaterialIndex: materialIndex !== undefined ? materialIndex : 0\n\n\t\t\t} );\n\n\t\t},\n\n\t\tclearGroups: function () {\n\n\t\t\tthis.groups = [];\n\n\t\t},\n\n\t\tsetDrawRange: function ( start, count ) {\n\n\t\t\tthis.drawRange.start = start;\n\t\t\tthis.drawRange.count = count;\n\n\t\t},\n\n\t\tapplyMatrix: function ( matrix ) {\n\n\t\t\tvar position = this.attributes.position;\n\n\t\t\tif ( position !== undefined ) {\n\n\t\t\t\tmatrix.applyToBufferAttribute( position );\n\t\t\t\tposition.needsUpdate = true;\n\n\t\t\t}\n\n\t\t\tvar normal = this.attributes.normal;\n\n\t\t\tif ( normal !== undefined ) {\n\n\t\t\t\tvar normalMatrix = new Matrix3().getNormalMatrix( matrix );\n\n\t\t\t\tnormalMatrix.applyToBufferAttribute( normal );\n\t\t\t\tnormal.needsUpdate = true;\n\n\t\t\t}\n\n\t\t\tif ( this.boundingBox !== null ) {\n\n\t\t\t\tthis.computeBoundingBox();\n\n\t\t\t}\n\n\t\t\tif ( this.boundingSphere !== null ) {\n\n\t\t\t\tthis.computeBoundingSphere();\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\trotateX: function () {\n\n\t\t\t// rotate geometry around world x-axis\n\n\t\t\tvar m1 = new Matrix4();\n\n\t\t\treturn function rotateX( angle ) {\n\n\t\t\t\tm1.makeRotationX( angle );\n\n\t\t\t\tthis.applyMatrix( m1 );\n\n\t\t\t\treturn this;\n\n\t\t\t};\n\n\t\t}(),\n\n\t\trotateY: function () {\n\n\t\t\t// rotate geometry around world y-axis\n\n\t\t\tvar m1 = new Matrix4();\n\n\t\t\treturn function rotateY( angle ) {\n\n\t\t\t\tm1.makeRotationY( angle );\n\n\t\t\t\tthis.applyMatrix( m1 );\n\n\t\t\t\treturn this;\n\n\t\t\t};\n\n\t\t}(),\n\n\t\trotateZ: function () {\n\n\t\t\t// rotate geometry around world z-axis\n\n\t\t\tvar m1 = new Matrix4();\n\n\t\t\treturn function rotateZ( angle ) {\n\n\t\t\t\tm1.makeRotationZ( angle );\n\n\t\t\t\tthis.applyMatrix( m1 );\n\n\t\t\t\treturn this;\n\n\t\t\t};\n\n\t\t}(),\n\n\t\ttranslate: function () {\n\n\t\t\t// translate geometry\n\n\t\t\tvar m1 = new Matrix4();\n\n\t\t\treturn function translate( x, y, z ) {\n\n\t\t\t\tm1.makeTranslation( x, y, z );\n\n\t\t\t\tthis.applyMatrix( m1 );\n\n\t\t\t\treturn this;\n\n\t\t\t};\n\n\t\t}(),\n\n\t\tscale: function () {\n\n\t\t\t// scale geometry\n\n\t\t\tvar m1 = new Matrix4();\n\n\t\t\treturn function scale( x, y, z ) {\n\n\t\t\t\tm1.makeScale( x, y, z );\n\n\t\t\t\tthis.applyMatrix( m1 );\n\n\t\t\t\treturn this;\n\n\t\t\t};\n\n\t\t}(),\n\n\t\tlookAt: function () {\n\n\t\t\tvar obj = new Object3D();\n\n\t\t\treturn function lookAt( vector ) {\n\n\t\t\t\tobj.lookAt( vector );\n\n\t\t\t\tobj.updateMatrix();\n\n\t\t\t\tthis.applyMatrix( obj.matrix );\n\n\t\t\t};\n\n\t\t}(),\n\n\t\tcenter: function () {\n\n\t\t\tthis.computeBoundingBox();\n\n\t\t\tvar offset = this.boundingBox.getCenter().negate();\n\n\t\t\tthis.translate( offset.x, offset.y, offset.z );\n\n\t\t\treturn offset;\n\n\t\t},\n\n\t\tsetFromObject: function ( object ) {\n\n\t\t\t// console.log( 'THREE.BufferGeometry.setFromObject(). Converting', object, this );\n\n\t\t\tvar geometry = object.geometry;\n\n\t\t\tif ( object.isPoints || object.isLine ) {\n\n\t\t\t\tvar positions = new Float32BufferAttribute( geometry.vertices.length * 3, 3 );\n\t\t\t\tvar colors = new Float32BufferAttribute( geometry.colors.length * 3, 3 );\n\n\t\t\t\tthis.addAttribute( 'position', positions.copyVector3sArray( geometry.vertices ) );\n\t\t\t\tthis.addAttribute( 'color', colors.copyColorsArray( geometry.colors ) );\n\n\t\t\t\tif ( geometry.lineDistances && geometry.lineDistances.length === geometry.vertices.length ) {\n\n\t\t\t\t\tvar lineDistances = new Float32BufferAttribute( geometry.lineDistances.length, 1 );\n\n\t\t\t\t\tthis.addAttribute( 'lineDistance', lineDistances.copyArray( geometry.lineDistances ) );\n\n\t\t\t\t}\n\n\t\t\t\tif ( geometry.boundingSphere !== null ) {\n\n\t\t\t\t\tthis.boundingSphere = geometry.boundingSphere.clone();\n\n\t\t\t\t}\n\n\t\t\t\tif ( geometry.boundingBox !== null ) {\n\n\t\t\t\t\tthis.boundingBox = geometry.boundingBox.clone();\n\n\t\t\t\t}\n\n\t\t\t} else if ( object.isMesh ) {\n\n\t\t\t\tif ( geometry && geometry.isGeometry ) {\n\n\t\t\t\t\tthis.fromGeometry( geometry );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetFromPoints: function ( points ) {\n\n\t\t\tvar position = [];\n\n\t\t\tfor ( var i = 0, l = points.length; i < l; i ++ ) {\n\n\t\t\t\tvar point = points[ i ];\n\t\t\t\tposition.push( point.x, point.y, point.z || 0 );\n\n\t\t\t}\n\n\t\t\tthis.addAttribute( 'position', new Float32BufferAttribute( position, 3 ) );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tupdateFromObject: function ( object ) {\n\n\t\t\tvar geometry = object.geometry;\n\n\t\t\tif ( object.isMesh ) {\n\n\t\t\t\tvar direct = geometry.__directGeometry;\n\n\t\t\t\tif ( geometry.elementsNeedUpdate === true ) {\n\n\t\t\t\t\tdirect = undefined;\n\t\t\t\t\tgeometry.elementsNeedUpdate = false;\n\n\t\t\t\t}\n\n\t\t\t\tif ( direct === undefined ) {\n\n\t\t\t\t\treturn this.fromGeometry( geometry );\n\n\t\t\t\t}\n\n\t\t\t\tdirect.verticesNeedUpdate = geometry.verticesNeedUpdate;\n\t\t\t\tdirect.normalsNeedUpdate = geometry.normalsNeedUpdate;\n\t\t\t\tdirect.colorsNeedUpdate = geometry.colorsNeedUpdate;\n\t\t\t\tdirect.uvsNeedUpdate = geometry.uvsNeedUpdate;\n\t\t\t\tdirect.groupsNeedUpdate = geometry.groupsNeedUpdate;\n\n\t\t\t\tgeometry.verticesNeedUpdate = false;\n\t\t\t\tgeometry.normalsNeedUpdate = false;\n\t\t\t\tgeometry.colorsNeedUpdate = false;\n\t\t\t\tgeometry.uvsNeedUpdate = false;\n\t\t\t\tgeometry.groupsNeedUpdate = false;\n\n\t\t\t\tgeometry = direct;\n\n\t\t\t}\n\n\t\t\tvar attribute;\n\n\t\t\tif ( geometry.verticesNeedUpdate === true ) {\n\n\t\t\t\tattribute = this.attributes.position;\n\n\t\t\t\tif ( attribute !== undefined ) {\n\n\t\t\t\t\tattribute.copyVector3sArray( geometry.vertices );\n\t\t\t\t\tattribute.needsUpdate = true;\n\n\t\t\t\t}\n\n\t\t\t\tgeometry.verticesNeedUpdate = false;\n\n\t\t\t}\n\n\t\t\tif ( geometry.normalsNeedUpdate === true ) {\n\n\t\t\t\tattribute = this.attributes.normal;\n\n\t\t\t\tif ( attribute !== undefined ) {\n\n\t\t\t\t\tattribute.copyVector3sArray( geometry.normals );\n\t\t\t\t\tattribute.needsUpdate = true;\n\n\t\t\t\t}\n\n\t\t\t\tgeometry.normalsNeedUpdate = false;\n\n\t\t\t}\n\n\t\t\tif ( geometry.colorsNeedUpdate === true ) {\n\n\t\t\t\tattribute = this.attributes.color;\n\n\t\t\t\tif ( attribute !== undefined ) {\n\n\t\t\t\t\tattribute.copyColorsArray( geometry.colors );\n\t\t\t\t\tattribute.needsUpdate = true;\n\n\t\t\t\t}\n\n\t\t\t\tgeometry.colorsNeedUpdate = false;\n\n\t\t\t}\n\n\t\t\tif ( geometry.uvsNeedUpdate ) {\n\n\t\t\t\tattribute = this.attributes.uv;\n\n\t\t\t\tif ( attribute !== undefined ) {\n\n\t\t\t\t\tattribute.copyVector2sArray( geometry.uvs );\n\t\t\t\t\tattribute.needsUpdate = true;\n\n\t\t\t\t}\n\n\t\t\t\tgeometry.uvsNeedUpdate = false;\n\n\t\t\t}\n\n\t\t\tif ( geometry.lineDistancesNeedUpdate ) {\n\n\t\t\t\tattribute = this.attributes.lineDistance;\n\n\t\t\t\tif ( attribute !== undefined ) {\n\n\t\t\t\t\tattribute.copyArray( geometry.lineDistances );\n\t\t\t\t\tattribute.needsUpdate = true;\n\n\t\t\t\t}\n\n\t\t\t\tgeometry.lineDistancesNeedUpdate = false;\n\n\t\t\t}\n\n\t\t\tif ( geometry.groupsNeedUpdate ) {\n\n\t\t\t\tgeometry.computeGroups( object.geometry );\n\t\t\t\tthis.groups = geometry.groups;\n\n\t\t\t\tgeometry.groupsNeedUpdate = false;\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tfromGeometry: function ( geometry ) {\n\n\t\t\tgeometry.__directGeometry = new DirectGeometry().fromGeometry( geometry );\n\n\t\t\treturn this.fromDirectGeometry( geometry.__directGeometry );\n\n\t\t},\n\n\t\tfromDirectGeometry: function ( geometry ) {\n\n\t\t\tvar positions = new Float32Array( geometry.vertices.length * 3 );\n\t\t\tthis.addAttribute( 'position', new BufferAttribute( positions, 3 ).copyVector3sArray( geometry.vertices ) );\n\n\t\t\tif ( geometry.normals.length > 0 ) {\n\n\t\t\t\tvar normals = new Float32Array( geometry.normals.length * 3 );\n\t\t\t\tthis.addAttribute( 'normal', new BufferAttribute( normals, 3 ).copyVector3sArray( geometry.normals ) );\n\n\t\t\t}\n\n\t\t\tif ( geometry.colors.length > 0 ) {\n\n\t\t\t\tvar colors = new Float32Array( geometry.colors.length * 3 );\n\t\t\t\tthis.addAttribute( 'color', new BufferAttribute( colors, 3 ).copyColorsArray( geometry.colors ) );\n\n\t\t\t}\n\n\t\t\tif ( geometry.uvs.length > 0 ) {\n\n\t\t\t\tvar uvs = new Float32Array( geometry.uvs.length * 2 );\n\t\t\t\tthis.addAttribute( 'uv', new BufferAttribute( uvs, 2 ).copyVector2sArray( geometry.uvs ) );\n\n\t\t\t}\n\n\t\t\tif ( geometry.uvs2.length > 0 ) {\n\n\t\t\t\tvar uvs2 = new Float32Array( geometry.uvs2.length * 2 );\n\t\t\t\tthis.addAttribute( 'uv2', new BufferAttribute( uvs2, 2 ).copyVector2sArray( geometry.uvs2 ) );\n\n\t\t\t}\n\n\t\t\tif ( geometry.indices.length > 0 ) {\n\n\t\t\t\tvar TypeArray = arrayMax( geometry.indices ) > 65535 ? Uint32Array : Uint16Array;\n\t\t\t\tvar indices = new TypeArray( geometry.indices.length * 3 );\n\t\t\t\tthis.setIndex( new BufferAttribute( indices, 1 ).copyIndicesArray( geometry.indices ) );\n\n\t\t\t}\n\n\t\t\t// groups\n\n\t\t\tthis.groups = geometry.groups;\n\n\t\t\t// morphs\n\n\t\t\tfor ( var name in geometry.morphTargets ) {\n\n\t\t\t\tvar array = [];\n\t\t\t\tvar morphTargets = geometry.morphTargets[ name ];\n\n\t\t\t\tfor ( var i = 0, l = morphTargets.length; i < l; i ++ ) {\n\n\t\t\t\t\tvar morphTarget = morphTargets[ i ];\n\n\t\t\t\t\tvar attribute = new Float32BufferAttribute( morphTarget.length * 3, 3 );\n\n\t\t\t\t\tarray.push( attribute.copyVector3sArray( morphTarget ) );\n\n\t\t\t\t}\n\n\t\t\t\tthis.morphAttributes[ name ] = array;\n\n\t\t\t}\n\n\t\t\t// skinning\n\n\t\t\tif ( geometry.skinIndices.length > 0 ) {\n\n\t\t\t\tvar skinIndices = new Float32BufferAttribute( geometry.skinIndices.length * 4, 4 );\n\t\t\t\tthis.addAttribute( 'skinIndex', skinIndices.copyVector4sArray( geometry.skinIndices ) );\n\n\t\t\t}\n\n\t\t\tif ( geometry.skinWeights.length > 0 ) {\n\n\t\t\t\tvar skinWeights = new Float32BufferAttribute( geometry.skinWeights.length * 4, 4 );\n\t\t\t\tthis.addAttribute( 'skinWeight', skinWeights.copyVector4sArray( geometry.skinWeights ) );\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tif ( geometry.boundingSphere !== null ) {\n\n\t\t\t\tthis.boundingSphere = geometry.boundingSphere.clone();\n\n\t\t\t}\n\n\t\t\tif ( geometry.boundingBox !== null ) {\n\n\t\t\t\tthis.boundingBox = geometry.boundingBox.clone();\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tcomputeBoundingBox: function () {\n\n\t\t\tif ( this.boundingBox === null ) {\n\n\t\t\t\tthis.boundingBox = new Box3();\n\n\t\t\t}\n\n\t\t\tvar position = this.attributes.position;\n\n\t\t\tif ( position !== undefined ) {\n\n\t\t\t\tthis.boundingBox.setFromBufferAttribute( position );\n\n\t\t\t} else {\n\n\t\t\t\tthis.boundingBox.makeEmpty();\n\n\t\t\t}\n\n\t\t\tif ( isNaN( this.boundingBox.min.x ) || isNaN( this.boundingBox.min.y ) || isNaN( this.boundingBox.min.z ) ) {\n\n\t\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\t}\n\n\t\t},\n\n\t\tcomputeBoundingSphere: function () {\n\n\t\t\tvar box = new Box3();\n\t\t\tvar vector = new Vector3();\n\n\t\t\treturn function computeBoundingSphere() {\n\n\t\t\t\tif ( this.boundingSphere === null ) {\n\n\t\t\t\t\tthis.boundingSphere = new Sphere();\n\n\t\t\t\t}\n\n\t\t\t\tvar position = this.attributes.position;\n\n\t\t\t\tif ( position ) {\n\n\t\t\t\t\tvar center = this.boundingSphere.center;\n\n\t\t\t\t\tbox.setFromBufferAttribute( position );\n\t\t\t\t\tbox.getCenter( center );\n\n\t\t\t\t\t// hoping to find a boundingSphere with a radius smaller than the\n\t\t\t\t\t// boundingSphere of the boundingBox: sqrt(3) smaller in the best case\n\n\t\t\t\t\tvar maxRadiusSq = 0;\n\n\t\t\t\t\tfor ( var i = 0, il = position.count; i < il; i ++ ) {\n\n\t\t\t\t\t\tvector.x = position.getX( i );\n\t\t\t\t\t\tvector.y = position.getY( i );\n\t\t\t\t\t\tvector.z = position.getZ( i );\n\t\t\t\t\t\tmaxRadiusSq = Math.max( maxRadiusSq, center.distanceToSquared( vector ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.boundingSphere.radius = Math.sqrt( maxRadiusSq );\n\n\t\t\t\t\tif ( isNaN( this.boundingSphere.radius ) ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.BufferGeometry.computeBoundingSphere(): Computed radius is NaN. The \"position\" attribute is likely to have NaN values.', this );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t};\n\n\t\t}(),\n\n\t\tcomputeFaceNormals: function () {\n\n\t\t\t// backwards compatibility\n\n\t\t},\n\n\t\tcomputeVertexNormals: function () {\n\n\t\t\tvar index = this.index;\n\t\t\tvar attributes = this.attributes;\n\t\t\tvar groups = this.groups;\n\n\t\t\tif ( attributes.position ) {\n\n\t\t\t\tvar positions = attributes.position.array;\n\n\t\t\t\tif ( attributes.normal === undefined ) {\n\n\t\t\t\t\tthis.addAttribute( 'normal', new BufferAttribute( new Float32Array( positions.length ), 3 ) );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// reset existing normals to zero\n\n\t\t\t\t\tvar array = attributes.normal.array;\n\n\t\t\t\t\tfor ( var i = 0, il = array.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tarray[ i ] = 0;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tvar normals = attributes.normal.array;\n\n\t\t\t\tvar vA, vB, vC;\n\t\t\t\tvar pA = new Vector3(), pB = new Vector3(), pC = new Vector3();\n\t\t\t\tvar cb = new Vector3(), ab = new Vector3();\n\n\t\t\t\t// indexed elements\n\n\t\t\t\tif ( index ) {\n\n\t\t\t\t\tvar indices = index.array;\n\n\t\t\t\t\tif ( groups.length === 0 ) {\n\n\t\t\t\t\t\tthis.addGroup( 0, indices.length );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tfor ( var j = 0, jl = groups.length; j < jl; ++ j ) {\n\n\t\t\t\t\t\tvar group = groups[ j ];\n\n\t\t\t\t\t\tvar start = group.start;\n\t\t\t\t\t\tvar count = group.count;\n\n\t\t\t\t\t\tfor ( var i = start, il = start + count; i < il; i += 3 ) {\n\n\t\t\t\t\t\t\tvA = indices[ i + 0 ] * 3;\n\t\t\t\t\t\t\tvB = indices[ i + 1 ] * 3;\n\t\t\t\t\t\t\tvC = indices[ i + 2 ] * 3;\n\n\t\t\t\t\t\t\tpA.fromArray( positions, vA );\n\t\t\t\t\t\t\tpB.fromArray( positions, vB );\n\t\t\t\t\t\t\tpC.fromArray( positions, vC );\n\n\t\t\t\t\t\t\tcb.subVectors( pC, pB );\n\t\t\t\t\t\t\tab.subVectors( pA, pB );\n\t\t\t\t\t\t\tcb.cross( ab );\n\n\t\t\t\t\t\t\tnormals[ vA ] += cb.x;\n\t\t\t\t\t\t\tnormals[ vA + 1 ] += cb.y;\n\t\t\t\t\t\t\tnormals[ vA + 2 ] += cb.z;\n\n\t\t\t\t\t\t\tnormals[ vB ] += cb.x;\n\t\t\t\t\t\t\tnormals[ vB + 1 ] += cb.y;\n\t\t\t\t\t\t\tnormals[ vB + 2 ] += cb.z;\n\n\t\t\t\t\t\t\tnormals[ vC ] += cb.x;\n\t\t\t\t\t\t\tnormals[ vC + 1 ] += cb.y;\n\t\t\t\t\t\t\tnormals[ vC + 2 ] += cb.z;\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// non-indexed elements (unconnected triangle soup)\n\n\t\t\t\t\tfor ( var i = 0, il = positions.length; i < il; i += 9 ) {\n\n\t\t\t\t\t\tpA.fromArray( positions, i );\n\t\t\t\t\t\tpB.fromArray( positions, i + 3 );\n\t\t\t\t\t\tpC.fromArray( positions, i + 6 );\n\n\t\t\t\t\t\tcb.subVectors( pC, pB );\n\t\t\t\t\t\tab.subVectors( pA, pB );\n\t\t\t\t\t\tcb.cross( ab );\n\n\t\t\t\t\t\tnormals[ i ] = cb.x;\n\t\t\t\t\t\tnormals[ i + 1 ] = cb.y;\n\t\t\t\t\t\tnormals[ i + 2 ] = cb.z;\n\n\t\t\t\t\t\tnormals[ i + 3 ] = cb.x;\n\t\t\t\t\t\tnormals[ i + 4 ] = cb.y;\n\t\t\t\t\t\tnormals[ i + 5 ] = cb.z;\n\n\t\t\t\t\t\tnormals[ i + 6 ] = cb.x;\n\t\t\t\t\t\tnormals[ i + 7 ] = cb.y;\n\t\t\t\t\t\tnormals[ i + 8 ] = cb.z;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tthis.normalizeNormals();\n\n\t\t\t\tattributes.normal.needsUpdate = true;\n\n\t\t\t}\n\n\t\t},\n\n\t\tmerge: function ( geometry, offset ) {\n\n\t\t\tif ( ! ( geometry && geometry.isBufferGeometry ) ) {\n\n\t\t\t\tconsole.error( 'THREE.BufferGeometry.merge(): geometry not an instance of THREE.BufferGeometry.', geometry );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tif ( offset === undefined ) offset = 0;\n\n\t\t\tvar attributes = this.attributes;\n\n\t\t\tfor ( var key in attributes ) {\n\n\t\t\t\tif ( geometry.attributes[ key ] === undefined ) continue;\n\n\t\t\t\tvar attribute1 = attributes[ key ];\n\t\t\t\tvar attributeArray1 = attribute1.array;\n\n\t\t\t\tvar attribute2 = geometry.attributes[ key ];\n\t\t\t\tvar attributeArray2 = attribute2.array;\n\n\t\t\t\tvar attributeSize = attribute2.itemSize;\n\n\t\t\t\tfor ( var i = 0, j = attributeSize * offset; i < attributeArray2.length; i ++, j ++ ) {\n\n\t\t\t\t\tattributeArray1[ j ] = attributeArray2[ i ];\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tnormalizeNormals: function () {\n\n\t\t\tvar vector = new Vector3();\n\n\t\t\treturn function normalizeNormals() {\n\n\t\t\t\tvar normals = this.attributes.normal;\n\n\t\t\t\tfor ( var i = 0, il = normals.count; i < il; i ++ ) {\n\n\t\t\t\t\tvector.x = normals.getX( i );\n\t\t\t\t\tvector.y = normals.getY( i );\n\t\t\t\t\tvector.z = normals.getZ( i );\n\n\t\t\t\t\tvector.normalize();\n\n\t\t\t\t\tnormals.setXYZ( i, vector.x, vector.y, vector.z );\n\n\t\t\t\t}\n\n\t\t\t};\n\n\t\t}(),\n\n\t\ttoNonIndexed: function () {\n\n\t\t\tif ( this.index === null ) {\n\n\t\t\t\tconsole.warn( 'THREE.BufferGeometry.toNonIndexed(): Geometry is already non-indexed.' );\n\t\t\t\treturn this;\n\n\t\t\t}\n\n\t\t\tvar geometry2 = new BufferGeometry();\n\n\t\t\tvar indices = this.index.array;\n\t\t\tvar attributes = this.attributes;\n\n\t\t\tfor ( var name in attributes ) {\n\n\t\t\t\tvar attribute = attributes[ name ];\n\n\t\t\t\tvar array = attribute.array;\n\t\t\t\tvar itemSize = attribute.itemSize;\n\n\t\t\t\tvar array2 = new array.constructor( indices.length * itemSize );\n\n\t\t\t\tvar index = 0, index2 = 0;\n\n\t\t\t\tfor ( var i = 0, l = indices.length; i < l; i ++ ) {\n\n\t\t\t\t\tindex = indices[ i ] * itemSize;\n\n\t\t\t\t\tfor ( var j = 0; j < itemSize; j ++ ) {\n\n\t\t\t\t\t\tarray2[ index2 ++ ] = array[ index ++ ];\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tgeometry2.addAttribute( name, new BufferAttribute( array2, itemSize ) );\n\n\t\t\t}\n\n\t\t\treturn geometry2;\n\n\t\t},\n\n\t\ttoJSON: function () {\n\n\t\t\tvar data = {\n\t\t\t\tmetadata: {\n\t\t\t\t\tversion: 4.5,\n\t\t\t\t\ttype: 'BufferGeometry',\n\t\t\t\t\tgenerator: 'BufferGeometry.toJSON'\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t// standard BufferGeometry serialization\n\n\t\t\tdata.uuid = this.uuid;\n\t\t\tdata.type = this.type;\n\t\t\tif ( this.name !== '' ) data.name = this.name;\n\n\t\t\tif ( this.parameters !== undefined ) {\n\n\t\t\t\tvar parameters = this.parameters;\n\n\t\t\t\tfor ( var key in parameters ) {\n\n\t\t\t\t\tif ( parameters[ key ] !== undefined ) data[ key ] = parameters[ key ];\n\n\t\t\t\t}\n\n\t\t\t\treturn data;\n\n\t\t\t}\n\n\t\t\tdata.data = { attributes: {} };\n\n\t\t\tvar index = this.index;\n\n\t\t\tif ( index !== null ) {\n\n\t\t\t\tvar array = Array.prototype.slice.call( index.array );\n\n\t\t\t\tdata.data.index = {\n\t\t\t\t\ttype: index.array.constructor.name,\n\t\t\t\t\tarray: array\n\t\t\t\t};\n\n\t\t\t}\n\n\t\t\tvar attributes = this.attributes;\n\n\t\t\tfor ( var key in attributes ) {\n\n\t\t\t\tvar attribute = attributes[ key ];\n\n\t\t\t\tvar array = Array.prototype.slice.call( attribute.array );\n\n\t\t\t\tdata.data.attributes[ key ] = {\n\t\t\t\t\titemSize: attribute.itemSize,\n\t\t\t\t\ttype: attribute.array.constructor.name,\n\t\t\t\t\tarray: array,\n\t\t\t\t\tnormalized: attribute.normalized\n\t\t\t\t};\n\n\t\t\t}\n\n\t\t\tvar groups = this.groups;\n\n\t\t\tif ( groups.length > 0 ) {\n\n\t\t\t\tdata.data.groups = JSON.parse( JSON.stringify( groups ) );\n\n\t\t\t}\n\n\t\t\tvar boundingSphere = this.boundingSphere;\n\n\t\t\tif ( boundingSphere !== null ) {\n\n\t\t\t\tdata.data.boundingSphere = {\n\t\t\t\t\tcenter: boundingSphere.center.toArray(),\n\t\t\t\t\tradius: boundingSphere.radius\n\t\t\t\t};\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t},\n\n\t\tclone: function () {\n\n\t\t\t/*\n\t\t\t // Handle primitives\n\n\t\t\t var parameters = this.parameters;\n\n\t\t\t if ( parameters !== undefined ) {\n\n\t\t\t var values = [];\n\n\t\t\t for ( var key in parameters ) {\n\n\t\t\t values.push( parameters[ key ] );\n\n\t\t\t }\n\n\t\t\t var geometry = Object.create( this.constructor.prototype );\n\t\t\t this.constructor.apply( geometry, values );\n\t\t\t return geometry;\n\n\t\t\t }\n\n\t\t\t return new this.constructor().copy( this );\n\t\t\t */\n\n\t\t\treturn new BufferGeometry().copy( this );\n\n\t\t},\n\n\t\tcopy: function ( source ) {\n\n\t\t\tvar name, i, l;\n\n\t\t\t// reset\n\n\t\t\tthis.index = null;\n\t\t\tthis.attributes = {};\n\t\t\tthis.morphAttributes = {};\n\t\t\tthis.groups = [];\n\t\t\tthis.boundingBox = null;\n\t\t\tthis.boundingSphere = null;\n\n\t\t\t// name\n\n\t\t\tthis.name = source.name;\n\n\t\t\t// index\n\n\t\t\tvar index = source.index;\n\n\t\t\tif ( index !== null ) {\n\n\t\t\t\tthis.setIndex( index.clone() );\n\n\t\t\t}\n\n\t\t\t// attributes\n\n\t\t\tvar attributes = source.attributes;\n\n\t\t\tfor ( name in attributes ) {\n\n\t\t\t\tvar attribute = attributes[ name ];\n\t\t\t\tthis.addAttribute( name, attribute.clone() );\n\n\t\t\t}\n\n\t\t\t// morph attributes\n\n\t\t\tvar morphAttributes = source.morphAttributes;\n\n\t\t\tfor ( name in morphAttributes ) {\n\n\t\t\t\tvar array = [];\n\t\t\t\tvar morphAttribute = morphAttributes[ name ]; // morphAttribute: array of Float32BufferAttributes\n\n\t\t\t\tfor ( i = 0, l = morphAttribute.length; i < l; i ++ ) {\n\n\t\t\t\t\tarray.push( morphAttribute[ i ].clone() );\n\n\t\t\t\t}\n\n\t\t\t\tthis.morphAttributes[ name ] = array;\n\n\t\t\t}\n\n\t\t\t// groups\n\n\t\t\tvar groups = source.groups;\n\n\t\t\tfor ( i = 0, l = groups.length; i < l; i ++ ) {\n\n\t\t\t\tvar group = groups[ i ];\n\t\t\t\tthis.addGroup( group.start, group.count, group.materialIndex );\n\n\t\t\t}\n\n\t\t\t// bounding box\n\n\t\t\tvar boundingBox = source.boundingBox;\n\n\t\t\tif ( boundingBox !== null ) {\n\n\t\t\t\tthis.boundingBox = boundingBox.clone();\n\n\t\t\t}\n\n\t\t\t// bounding sphere\n\n\t\t\tvar boundingSphere = source.boundingSphere;\n\n\t\t\tif ( boundingSphere !== null ) {\n\n\t\t\t\tthis.boundingSphere = boundingSphere.clone();\n\n\t\t\t}\n\n\t\t\t// draw range\n\n\t\t\tthis.drawRange.start = source.drawRange.start;\n\t\t\tthis.drawRange.count = source.drawRange.count;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tdispose: function () {\n\n\t\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t\t}\n\n\t} );\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t * @author Mugen87 / https://github.com/Mugen87\n\t */\n\n\t// BoxGeometry\n\n\tfunction BoxGeometry( width, height, depth, widthSegments, heightSegments, depthSegments ) {\n\n\t\tGeometry.call( this );\n\n\t\tthis.type = 'BoxGeometry';\n\n\t\tthis.parameters = {\n\t\t\twidth: width,\n\t\t\theight: height,\n\t\t\tdepth: depth,\n\t\t\twidthSegments: widthSegments,\n\t\t\theightSegments: heightSegments,\n\t\t\tdepthSegments: depthSegments\n\t\t};\n\n\t\tthis.fromBufferGeometry( new BoxBufferGeometry( width, height, depth, widthSegments, heightSegments, depthSegments ) );\n\t\tthis.mergeVertices();\n\n\t}\n\n\tBoxGeometry.prototype = Object.create( Geometry.prototype );\n\tBoxGeometry.prototype.constructor = BoxGeometry;\n\n\t// BoxBufferGeometry\n\n\tfunction BoxBufferGeometry( width, height, depth, widthSegments, heightSegments, depthSegments ) {\n\n\t\tBufferGeometry.call( this );\n\n\t\tthis.type = 'BoxBufferGeometry';\n\n\t\tthis.parameters = {\n\t\t\twidth: width,\n\t\t\theight: height,\n\t\t\tdepth: depth,\n\t\t\twidthSegments: widthSegments,\n\t\t\theightSegments: heightSegments,\n\t\t\tdepthSegments: depthSegments\n\t\t};\n\n\t\tvar scope = this;\n\n\t\twidth = width || 1;\n\t\theight = height || 1;\n\t\tdepth = depth || 1;\n\n\t\t// segments\n\n\t\twidthSegments = Math.floor( widthSegments ) || 1;\n\t\theightSegments = Math.floor( heightSegments ) || 1;\n\t\tdepthSegments = Math.floor( depthSegments ) || 1;\n\n\t\t// buffers\n\n\t\tvar indices = [];\n\t\tvar vertices = [];\n\t\tvar normals = [];\n\t\tvar uvs = [];\n\n\t\t// helper variables\n\n\t\tvar numberOfVertices = 0;\n\t\tvar 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.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.addAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.addAttribute( '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\tvar segmentWidth = width / gridX;\n\t\t\tvar segmentHeight = height / gridY;\n\n\t\t\tvar widthHalf = width / 2;\n\t\t\tvar heightHalf = height / 2;\n\t\t\tvar depthHalf = depth / 2;\n\n\t\t\tvar gridX1 = gridX + 1;\n\t\t\tvar gridY1 = gridY + 1;\n\n\t\t\tvar vertexCounter = 0;\n\t\t\tvar groupCount = 0;\n\n\t\t\tvar ix, iy;\n\n\t\t\tvar vector = new Vector3();\n\n\t\t\t// generate vertices, normals and uvs\n\n\t\t\tfor ( iy = 0; iy < gridY1; iy ++ ) {\n\n\t\t\t\tvar y = iy * segmentHeight - heightHalf;\n\n\t\t\t\tfor ( ix = 0; ix < gridX1; ix ++ ) {\n\n\t\t\t\t\tvar 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 ( iy = 0; iy < gridY; iy ++ ) {\n\n\t\t\t\tfor ( ix = 0; ix < gridX; ix ++ ) {\n\n\t\t\t\t\tvar a = numberOfVertices + ix + gridX1 * iy;\n\t\t\t\t\tvar b = numberOfVertices + ix + gridX1 * ( iy + 1 );\n\t\t\t\t\tvar c = numberOfVertices + ( ix + 1 ) + gridX1 * ( iy + 1 );\n\t\t\t\t\tvar 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\tBoxBufferGeometry.prototype = Object.create( BufferGeometry.prototype );\n\tBoxBufferGeometry.prototype.constructor = BoxBufferGeometry;\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t * @author Mugen87 / https://github.com/Mugen87\n\t */\n\n\t// PlaneGeometry\n\n\tfunction PlaneGeometry( width, height, widthSegments, heightSegments ) {\n\n\t\tGeometry.call( this );\n\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\tthis.fromBufferGeometry( new PlaneBufferGeometry( width, height, widthSegments, heightSegments ) );\n\t\tthis.mergeVertices();\n\n\t}\n\n\tPlaneGeometry.prototype = Object.create( Geometry.prototype );\n\tPlaneGeometry.prototype.constructor = PlaneGeometry;\n\n\t// PlaneBufferGeometry\n\n\tfunction PlaneBufferGeometry( width, height, widthSegments, heightSegments ) {\n\n\t\tBufferGeometry.call( this );\n\n\t\tthis.type = 'PlaneBufferGeometry';\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\twidth = width || 1;\n\t\theight = height || 1;\n\n\t\tvar width_half = width / 2;\n\t\tvar height_half = height / 2;\n\n\t\tvar gridX = Math.floor( widthSegments ) || 1;\n\t\tvar gridY = Math.floor( heightSegments ) || 1;\n\n\t\tvar gridX1 = gridX + 1;\n\t\tvar gridY1 = gridY + 1;\n\n\t\tvar segment_width = width / gridX;\n\t\tvar segment_height = height / gridY;\n\n\t\tvar ix, iy;\n\n\t\t// buffers\n\n\t\tvar indices = [];\n\t\tvar vertices = [];\n\t\tvar normals = [];\n\t\tvar uvs = [];\n\n\t\t// generate vertices, normals and uvs\n\n\t\tfor ( iy = 0; iy < gridY1; iy ++ ) {\n\n\t\t\tvar y = iy * segment_height - height_half;\n\n\t\t\tfor ( ix = 0; ix < gridX1; ix ++ ) {\n\n\t\t\t\tvar 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\t// indices\n\n\t\tfor ( iy = 0; iy < gridY; iy ++ ) {\n\n\t\t\tfor ( ix = 0; ix < gridX; ix ++ ) {\n\n\t\t\t\tvar a = ix + gridX1 * iy;\n\t\t\t\tvar b = ix + gridX1 * ( iy + 1 );\n\t\t\t\tvar c = ( ix + 1 ) + gridX1 * ( iy + 1 );\n\t\t\t\tvar d = ( ix + 1 ) + gridX1 * iy;\n\n\t\t\t\t// faces\n\n\t\t\t\tindices.push( a, b, d );\n\t\t\t\tindices.push( b, c, d );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.addAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.addAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t}\n\n\tPlaneBufferGeometry.prototype = Object.create( BufferGeometry.prototype );\n\tPlaneBufferGeometry.prototype.constructor = PlaneBufferGeometry;\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t * @author alteredq / http://alteredqualia.com/\n\t *\n\t * parameters = {\n\t * color: ,\n\t * opacity: ,\n\t * map: new THREE.Texture( ),\n\t *\n\t * lightMap: new THREE.Texture( ),\n\t * lightMapIntensity: \n\t *\n\t * aoMap: new THREE.Texture( ),\n\t * aoMapIntensity: \n\t *\n\t * specularMap: new THREE.Texture( ),\n\t *\n\t * alphaMap: new THREE.Texture( ),\n\t *\n\t * envMap: new THREE.TextureCube( [posx, negx, posy, negy, posz, negz] ),\n\t * combine: THREE.Multiply,\n\t * reflectivity: ,\n\t * refractionRatio: ,\n\t *\n\t * depthTest: ,\n\t * depthWrite: ,\n\t *\n\t * wireframe: ,\n\t * wireframeLinewidth: ,\n\t *\n\t * skinning: ,\n\t * morphTargets: \n\t * }\n\t */\n\n\tfunction MeshBasicMaterial( parameters ) {\n\n\t\tMaterial.call( this );\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.lights = false;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tMeshBasicMaterial.prototype = Object.create( Material.prototype );\n\tMeshBasicMaterial.prototype.constructor = MeshBasicMaterial;\n\n\tMeshBasicMaterial.prototype.isMeshBasicMaterial = true;\n\n\tMeshBasicMaterial.prototype.copy = function ( source ) {\n\n\t\tMaterial.prototype.copy.call( this, 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\t/**\n\t * @author alteredq / http://alteredqualia.com/\n\t *\n\t * parameters = {\n\t * defines: { \"label\" : \"value\" },\n\t * uniforms: { \"parameter1\": { value: 1.0 }, \"parameter2\": { value2: 2 } },\n\t *\n\t * fragmentShader: ,\n\t * vertexShader: ,\n\t *\n\t * wireframe: ,\n\t * wireframeLinewidth: ,\n\t *\n\t * lights: ,\n\t *\n\t * skinning: ,\n\t * morphTargets: ,\n\t * morphNormals: \n\t * }\n\t */\n\n\tfunction ShaderMaterial( parameters ) {\n\n\t\tMaterial.call( this );\n\n\t\tthis.type = 'ShaderMaterial';\n\n\t\tthis.defines = {};\n\t\tthis.uniforms = {};\n\n\t\tthis.vertexShader = 'void main() {\\n\\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\\n}';\n\t\tthis.fragmentShader = 'void main() {\\n\\tgl_FragColor = vec4( 1.0, 0.0, 0.0, 1.0 );\\n}';\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\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\tShaderMaterial.prototype = Object.create( Material.prototype );\n\tShaderMaterial.prototype.constructor = ShaderMaterial;\n\n\tShaderMaterial.prototype.isShaderMaterial = true;\n\n\tShaderMaterial.prototype.copy = function ( source ) {\n\n\t\tMaterial.prototype.copy.call( this, source );\n\n\t\tthis.fragmentShader = source.fragmentShader;\n\t\tthis.vertexShader = source.vertexShader;\n\n\t\tthis.uniforms = UniformsUtils.clone( source.uniforms );\n\n\t\tthis.defines = 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 = source.extensions;\n\n\t\treturn this;\n\n\t};\n\n\tShaderMaterial.prototype.toJSON = function ( meta ) {\n\n\t\tvar data = Material.prototype.toJSON.call( this, meta );\n\n\t\tdata.uniforms = this.uniforms;\n\t\tdata.vertexShader = this.vertexShader;\n\t\tdata.fragmentShader = this.fragmentShader;\n\n\t\treturn data;\n\n\t};\n\n\t/**\n\t * @author bhouston / http://clara.io\n\t */\n\n\tfunction Ray( origin, direction ) {\n\n\t\tthis.origin = ( origin !== undefined ) ? origin : new Vector3();\n\t\tthis.direction = ( direction !== undefined ) ? direction : new Vector3();\n\n\t}\n\n\tObject.assign( Ray.prototype, {\n\n\t\tset: function ( origin, direction ) {\n\n\t\t\tthis.origin.copy( origin );\n\t\t\tthis.direction.copy( direction );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tclone: function () {\n\n\t\t\treturn new this.constructor().copy( this );\n\n\t\t},\n\n\t\tcopy: function ( ray ) {\n\n\t\t\tthis.origin.copy( ray.origin );\n\t\t\tthis.direction.copy( ray.direction );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tat: function ( t, optionalTarget ) {\n\n\t\t\tvar result = optionalTarget || new Vector3();\n\n\t\t\treturn result.copy( this.direction ).multiplyScalar( t ).add( this.origin );\n\n\t\t},\n\n\t\tlookAt: function ( v ) {\n\n\t\t\tthis.direction.copy( v ).sub( this.origin ).normalize();\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\trecast: function () {\n\n\t\t\tvar v1 = new Vector3();\n\n\t\t\treturn function recast( t ) {\n\n\t\t\t\tthis.origin.copy( this.at( t, v1 ) );\n\n\t\t\t\treturn this;\n\n\t\t\t};\n\n\t\t}(),\n\n\t\tclosestPointToPoint: function ( point, optionalTarget ) {\n\n\t\t\tvar result = optionalTarget || new Vector3();\n\t\t\tresult.subVectors( point, this.origin );\n\t\t\tvar directionDistance = result.dot( this.direction );\n\n\t\t\tif ( directionDistance < 0 ) {\n\n\t\t\t\treturn result.copy( this.origin );\n\n\t\t\t}\n\n\t\t\treturn result.copy( this.direction ).multiplyScalar( directionDistance ).add( this.origin );\n\n\t\t},\n\n\t\tdistanceToPoint: function ( point ) {\n\n\t\t\treturn Math.sqrt( this.distanceSqToPoint( point ) );\n\n\t\t},\n\n\t\tdistanceSqToPoint: function () {\n\n\t\t\tvar v1 = new Vector3();\n\n\t\t\treturn function distanceSqToPoint( point ) {\n\n\t\t\t\tvar directionDistance = v1.subVectors( point, this.origin ).dot( this.direction );\n\n\t\t\t\t// point behind the ray\n\n\t\t\t\tif ( directionDistance < 0 ) {\n\n\t\t\t\t\treturn this.origin.distanceToSquared( point );\n\n\t\t\t\t}\n\n\t\t\t\tv1.copy( this.direction ).multiplyScalar( directionDistance ).add( this.origin );\n\n\t\t\t\treturn v1.distanceToSquared( point );\n\n\t\t\t};\n\n\t\t}(),\n\n\t\tdistanceSqToSegment: function () {\n\n\t\t\tvar segCenter = new Vector3();\n\t\t\tvar segDir = new Vector3();\n\t\t\tvar diff = new Vector3();\n\n\t\t\treturn function distanceSqToSegment( v0, v1, optionalPointOnRay, optionalPointOnSegment ) {\n\n\t\t\t\t// from http://www.geometrictools.com/GTEngine/Include/Mathematics/GteDistRaySegment.h\n\t\t\t\t// It returns the min distance between the ray and the segment\n\t\t\t\t// defined by v0 and v1\n\t\t\t\t// It can also set two optional targets :\n\t\t\t\t// - The closest point on the ray\n\t\t\t\t// - The closest point on the segment\n\n\t\t\t\tsegCenter.copy( v0 ).add( v1 ).multiplyScalar( 0.5 );\n\t\t\t\tsegDir.copy( v1 ).sub( v0 ).normalize();\n\t\t\t\tdiff.copy( this.origin ).sub( segCenter );\n\n\t\t\t\tvar segExtent = v0.distanceTo( v1 ) * 0.5;\n\t\t\t\tvar a01 = - this.direction.dot( segDir );\n\t\t\t\tvar b0 = diff.dot( this.direction );\n\t\t\t\tvar b1 = - diff.dot( segDir );\n\t\t\t\tvar c = diff.lengthSq();\n\t\t\t\tvar det = Math.abs( 1 - a01 * a01 );\n\t\t\t\tvar s0, s1, sqrDist, extDet;\n\n\t\t\t\tif ( det > 0 ) {\n\n\t\t\t\t\t// The ray and segment are not parallel.\n\n\t\t\t\t\ts0 = a01 * b1 - b0;\n\t\t\t\t\ts1 = a01 * b0 - b1;\n\t\t\t\t\textDet = segExtent * det;\n\n\t\t\t\t\tif ( s0 >= 0 ) {\n\n\t\t\t\t\t\tif ( s1 >= - extDet ) {\n\n\t\t\t\t\t\t\tif ( s1 <= extDet ) {\n\n\t\t\t\t\t\t\t\t// region 0\n\t\t\t\t\t\t\t\t// Minimum at interior points of ray and segment.\n\n\t\t\t\t\t\t\t\tvar invDet = 1 / det;\n\t\t\t\t\t\t\t\ts0 *= invDet;\n\t\t\t\t\t\t\t\ts1 *= invDet;\n\t\t\t\t\t\t\t\tsqrDist = s0 * ( s0 + a01 * s1 + 2 * b0 ) + s1 * ( a01 * s0 + s1 + 2 * b1 ) + c;\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// region 1\n\n\t\t\t\t\t\t\t\ts1 = segExtent;\n\t\t\t\t\t\t\t\ts0 = Math.max( 0, - ( a01 * s1 + b0 ) );\n\t\t\t\t\t\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\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\t// region 5\n\n\t\t\t\t\t\t\ts1 = - segExtent;\n\t\t\t\t\t\t\ts0 = Math.max( 0, - ( a01 * s1 + b0 ) );\n\t\t\t\t\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tif ( s1 <= - extDet ) {\n\n\t\t\t\t\t\t\t// region 4\n\n\t\t\t\t\t\t\ts0 = Math.max( 0, - ( - a01 * segExtent + b0 ) );\n\t\t\t\t\t\t\ts1 = ( s0 > 0 ) ? - segExtent : Math.min( Math.max( - segExtent, - b1 ), segExtent );\n\t\t\t\t\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t\t\t\t} else if ( s1 <= extDet ) {\n\n\t\t\t\t\t\t\t// region 3\n\n\t\t\t\t\t\t\ts0 = 0;\n\t\t\t\t\t\t\ts1 = Math.min( Math.max( - segExtent, - b1 ), segExtent );\n\t\t\t\t\t\t\tsqrDist = s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// region 2\n\n\t\t\t\t\t\t\ts0 = Math.max( 0, - ( a01 * segExtent + b0 ) );\n\t\t\t\t\t\t\ts1 = ( s0 > 0 ) ? segExtent : Math.min( Math.max( - segExtent, - b1 ), segExtent );\n\t\t\t\t\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// Ray and segment are parallel.\n\n\t\t\t\t\ts1 = ( a01 > 0 ) ? - segExtent : 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\tif ( optionalPointOnRay ) {\n\n\t\t\t\t\toptionalPointOnRay.copy( this.direction ).multiplyScalar( s0 ).add( this.origin );\n\n\t\t\t\t}\n\n\t\t\t\tif ( optionalPointOnSegment ) {\n\n\t\t\t\t\toptionalPointOnSegment.copy( segDir ).multiplyScalar( s1 ).add( segCenter );\n\n\t\t\t\t}\n\n\t\t\t\treturn sqrDist;\n\n\t\t\t};\n\n\t\t}(),\n\n\t\tintersectSphere: function () {\n\n\t\t\tvar v1 = new Vector3();\n\n\t\t\treturn function intersectSphere( sphere, optionalTarget ) {\n\n\t\t\t\tv1.subVectors( sphere.center, this.origin );\n\t\t\t\tvar tca = v1.dot( this.direction );\n\t\t\t\tvar d2 = v1.dot( v1 ) - tca * tca;\n\t\t\t\tvar radius2 = sphere.radius * sphere.radius;\n\n\t\t\t\tif ( d2 > radius2 ) return null;\n\n\t\t\t\tvar thc = Math.sqrt( radius2 - d2 );\n\n\t\t\t\t// t0 = first intersect point - entrance on front of sphere\n\t\t\t\tvar t0 = tca - thc;\n\n\t\t\t\t// t1 = second intersect point - exit point on back of sphere\n\t\t\t\tvar t1 = tca + thc;\n\n\t\t\t\t// test to see if both t0 and t1 are behind the ray - if so, return null\n\t\t\t\tif ( t0 < 0 && t1 < 0 ) return null;\n\n\t\t\t\t// test to see if t0 is behind the ray:\n\t\t\t\t// if it is, the ray is inside the sphere, so return the second exit point scaled by t1,\n\t\t\t\t// in order to always return an intersect point that is in front of the ray.\n\t\t\t\tif ( t0 < 0 ) return this.at( t1, optionalTarget );\n\n\t\t\t\t// else t0 is in front of the ray, so return the first collision point scaled by t0\n\t\t\t\treturn this.at( t0, optionalTarget );\n\n\t\t\t};\n\n\t\t}(),\n\n\t\tintersectsSphere: function ( sphere ) {\n\n\t\t\treturn this.distanceToPoint( sphere.center ) <= sphere.radius;\n\n\t\t},\n\n\t\tdistanceToPlane: function ( plane ) {\n\n\t\t\tvar denominator = plane.normal.dot( this.direction );\n\n\t\t\tif ( denominator === 0 ) {\n\n\t\t\t\t// line is coplanar, return origin\n\t\t\t\tif ( plane.distanceToPoint( this.origin ) === 0 ) {\n\n\t\t\t\t\treturn 0;\n\n\t\t\t\t}\n\n\t\t\t\t// Null is preferable to undefined since undefined means.... it is undefined\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t\tvar t = - ( this.origin.dot( plane.normal ) + plane.constant ) / denominator;\n\n\t\t\t// Return if the ray never intersects the plane\n\n\t\t\treturn t >= 0 ? t : null;\n\n\t\t},\n\n\t\tintersectPlane: function ( plane, optionalTarget ) {\n\n\t\t\tvar t = this.distanceToPlane( plane );\n\n\t\t\tif ( t === null ) {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t\treturn this.at( t, optionalTarget );\n\n\t\t},\n\n\t\tintersectsPlane: function ( plane ) {\n\n\t\t\t// check if the ray lies on the plane first\n\n\t\t\tvar distToPoint = plane.distanceToPoint( this.origin );\n\n\t\t\tif ( distToPoint === 0 ) {\n\n\t\t\t\treturn true;\n\n\t\t\t}\n\n\t\t\tvar denominator = plane.normal.dot( this.direction );\n\n\t\t\tif ( denominator * distToPoint < 0 ) {\n\n\t\t\t\treturn true;\n\n\t\t\t}\n\n\t\t\t// ray origin is behind the plane (and is pointing behind it)\n\n\t\t\treturn false;\n\n\t\t},\n\n\t\tintersectBox: function ( box, optionalTarget ) {\n\n\t\t\tvar tmin, tmax, tymin, tymax, tzmin, tzmax;\n\n\t\t\tvar invdirx = 1 / this.direction.x,\n\t\t\t\tinvdiry = 1 / this.direction.y,\n\t\t\t\tinvdirz = 1 / this.direction.z;\n\n\t\t\tvar origin = this.origin;\n\n\t\t\tif ( invdirx >= 0 ) {\n\n\t\t\t\ttmin = ( box.min.x - origin.x ) * invdirx;\n\t\t\t\ttmax = ( box.max.x - origin.x ) * invdirx;\n\n\t\t\t} else {\n\n\t\t\t\ttmin = ( box.max.x - origin.x ) * invdirx;\n\t\t\t\ttmax = ( box.min.x - origin.x ) * invdirx;\n\n\t\t\t}\n\n\t\t\tif ( invdiry >= 0 ) {\n\n\t\t\t\ttymin = ( box.min.y - origin.y ) * invdiry;\n\t\t\t\ttymax = ( box.max.y - origin.y ) * invdiry;\n\n\t\t\t} else {\n\n\t\t\t\ttymin = ( box.max.y - origin.y ) * invdiry;\n\t\t\t\ttymax = ( box.min.y - origin.y ) * invdiry;\n\n\t\t\t}\n\n\t\t\tif ( ( tmin > tymax ) || ( tymin > tmax ) ) return null;\n\n\t\t\t// These lines also handle the case where tmin or tmax is NaN\n\t\t\t// (result of 0 * Infinity). x !== x returns true if x is NaN\n\n\t\t\tif ( tymin > tmin || tmin !== tmin ) tmin = tymin;\n\n\t\t\tif ( tymax < tmax || tmax !== tmax ) tmax = tymax;\n\n\t\t\tif ( invdirz >= 0 ) {\n\n\t\t\t\ttzmin = ( box.min.z - origin.z ) * invdirz;\n\t\t\t\ttzmax = ( box.max.z - origin.z ) * invdirz;\n\n\t\t\t} else {\n\n\t\t\t\ttzmin = ( box.max.z - origin.z ) * invdirz;\n\t\t\t\ttzmax = ( box.min.z - origin.z ) * invdirz;\n\n\t\t\t}\n\n\t\t\tif ( ( tmin > tzmax ) || ( tzmin > tmax ) ) return null;\n\n\t\t\tif ( tzmin > tmin || tmin !== tmin ) tmin = tzmin;\n\n\t\t\tif ( tzmax < tmax || tmax !== tmax ) tmax = tzmax;\n\n\t\t\t//return point closest to the ray (positive side)\n\n\t\t\tif ( tmax < 0 ) return null;\n\n\t\t\treturn this.at( tmin >= 0 ? tmin : tmax, optionalTarget );\n\n\t\t},\n\n\t\tintersectsBox: ( function () {\n\n\t\t\tvar v = new Vector3();\n\n\t\t\treturn function intersectsBox( box ) {\n\n\t\t\t\treturn this.intersectBox( box, v ) !== null;\n\n\t\t\t};\n\n\t\t} )(),\n\n\t\tintersectTriangle: function () {\n\n\t\t\t// Compute the offset origin, edges, and normal.\n\t\t\tvar diff = new Vector3();\n\t\t\tvar edge1 = new Vector3();\n\t\t\tvar edge2 = new Vector3();\n\t\t\tvar normal = new Vector3();\n\n\t\t\treturn function intersectTriangle( a, b, c, backfaceCulling, optionalTarget ) {\n\n\t\t\t\t// from http://www.geometrictools.com/GTEngine/Include/Mathematics/GteIntrRay3Triangle3.h\n\n\t\t\t\tedge1.subVectors( b, a );\n\t\t\t\tedge2.subVectors( c, a );\n\t\t\t\tnormal.crossVectors( edge1, edge2 );\n\n\t\t\t\t// Solve Q + t*D = b1*E1 + b2*E2 (Q = kDiff, D = ray direction,\n\t\t\t\t// E1 = kEdge1, E2 = kEdge2, N = Cross(E1,E2)) by\n\t\t\t\t// |Dot(D,N)|*b1 = sign(Dot(D,N))*Dot(D,Cross(Q,E2))\n\t\t\t\t// |Dot(D,N)|*b2 = sign(Dot(D,N))*Dot(D,Cross(E1,Q))\n\t\t\t\t// |Dot(D,N)|*t = -sign(Dot(D,N))*Dot(Q,N)\n\t\t\t\tvar DdN = this.direction.dot( normal );\n\t\t\t\tvar sign;\n\n\t\t\t\tif ( DdN > 0 ) {\n\n\t\t\t\t\tif ( backfaceCulling ) return null;\n\t\t\t\t\tsign = 1;\n\n\t\t\t\t} else if ( DdN < 0 ) {\n\n\t\t\t\t\tsign = - 1;\n\t\t\t\t\tDdN = - DdN;\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\tdiff.subVectors( this.origin, a );\n\t\t\t\tvar DdQxE2 = sign * this.direction.dot( edge2.crossVectors( diff, edge2 ) );\n\n\t\t\t\t// b1 < 0, no intersection\n\t\t\t\tif ( DdQxE2 < 0 ) {\n\n\t\t\t\t\treturn null;\n\n\t\t\t\t}\n\n\t\t\t\tvar DdE1xQ = sign * this.direction.dot( edge1.cross( diff ) );\n\n\t\t\t\t// b2 < 0, no intersection\n\t\t\t\tif ( DdE1xQ < 0 ) {\n\n\t\t\t\t\treturn null;\n\n\t\t\t\t}\n\n\t\t\t\t// b1+b2 > 1, no intersection\n\t\t\t\tif ( DdQxE2 + DdE1xQ > DdN ) {\n\n\t\t\t\t\treturn null;\n\n\t\t\t\t}\n\n\t\t\t\t// Line intersects triangle, check if ray does.\n\t\t\t\tvar QdN = - sign * diff.dot( normal );\n\n\t\t\t\t// t < 0, no intersection\n\t\t\t\tif ( QdN < 0 ) {\n\n\t\t\t\t\treturn null;\n\n\t\t\t\t}\n\n\t\t\t\t// Ray intersects triangle.\n\t\t\t\treturn this.at( QdN / DdN, optionalTarget );\n\n\t\t\t};\n\n\t\t}(),\n\n\t\tapplyMatrix4: function ( matrix4 ) {\n\n\t\t\tthis.origin.applyMatrix4( matrix4 );\n\t\t\tthis.direction.transformDirection( matrix4 );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tequals: function ( ray ) {\n\n\t\t\treturn ray.origin.equals( this.origin ) && ray.direction.equals( this.direction );\n\n\t\t}\n\n\t} );\n\n\t/**\n\t * @author bhouston / http://clara.io\n\t */\n\n\tfunction Line3( start, end ) {\n\n\t\tthis.start = ( start !== undefined ) ? start : new Vector3();\n\t\tthis.end = ( end !== undefined ) ? end : new Vector3();\n\n\t}\n\n\tObject.assign( Line3.prototype, {\n\n\t\tset: function ( start, end ) {\n\n\t\t\tthis.start.copy( start );\n\t\t\tthis.end.copy( end );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tclone: function () {\n\n\t\t\treturn new this.constructor().copy( this );\n\n\t\t},\n\n\t\tcopy: function ( line ) {\n\n\t\t\tthis.start.copy( line.start );\n\t\t\tthis.end.copy( line.end );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tgetCenter: function ( optionalTarget ) {\n\n\t\t\tvar result = optionalTarget || new Vector3();\n\t\t\treturn result.addVectors( this.start, this.end ).multiplyScalar( 0.5 );\n\n\t\t},\n\n\t\tdelta: function ( optionalTarget ) {\n\n\t\t\tvar result = optionalTarget || new Vector3();\n\t\t\treturn result.subVectors( this.end, this.start );\n\n\t\t},\n\n\t\tdistanceSq: function () {\n\n\t\t\treturn this.start.distanceToSquared( this.end );\n\n\t\t},\n\n\t\tdistance: function () {\n\n\t\t\treturn this.start.distanceTo( this.end );\n\n\t\t},\n\n\t\tat: function ( t, optionalTarget ) {\n\n\t\t\tvar result = optionalTarget || new Vector3();\n\n\t\t\treturn this.delta( result ).multiplyScalar( t ).add( this.start );\n\n\t\t},\n\n\t\tclosestPointToPointParameter: function () {\n\n\t\t\tvar startP = new Vector3();\n\t\t\tvar startEnd = new Vector3();\n\n\t\t\treturn function closestPointToPointParameter( point, clampToLine ) {\n\n\t\t\t\tstartP.subVectors( point, this.start );\n\t\t\t\tstartEnd.subVectors( this.end, this.start );\n\n\t\t\t\tvar startEnd2 = startEnd.dot( startEnd );\n\t\t\t\tvar startEnd_startP = startEnd.dot( startP );\n\n\t\t\t\tvar t = startEnd_startP / startEnd2;\n\n\t\t\t\tif ( clampToLine ) {\n\n\t\t\t\t\tt = _Math.clamp( t, 0, 1 );\n\n\t\t\t\t}\n\n\t\t\t\treturn t;\n\n\t\t\t};\n\n\t\t}(),\n\n\t\tclosestPointToPoint: function ( point, clampToLine, optionalTarget ) {\n\n\t\t\tvar t = this.closestPointToPointParameter( point, clampToLine );\n\n\t\t\tvar result = optionalTarget || new Vector3();\n\n\t\t\treturn this.delta( result ).multiplyScalar( t ).add( this.start );\n\n\t\t},\n\n\t\tapplyMatrix4: function ( matrix ) {\n\n\t\t\tthis.start.applyMatrix4( matrix );\n\t\t\tthis.end.applyMatrix4( matrix );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tequals: function ( line ) {\n\n\t\t\treturn line.start.equals( this.start ) && line.end.equals( this.end );\n\n\t\t}\n\n\t} );\n\n\t/**\n\t * @author bhouston / http://clara.io\n\t * @author mrdoob / http://mrdoob.com/\n\t */\n\n\tfunction Triangle( a, b, c ) {\n\n\t\tthis.a = ( a !== undefined ) ? a : new Vector3();\n\t\tthis.b = ( b !== undefined ) ? b : new Vector3();\n\t\tthis.c = ( c !== undefined ) ? c : new Vector3();\n\n\t}\n\n\tObject.assign( Triangle, {\n\n\t\tnormal: function () {\n\n\t\t\tvar v0 = new Vector3();\n\n\t\t\treturn function normal( a, b, c, optionalTarget ) {\n\n\t\t\t\tvar result = optionalTarget || new Vector3();\n\n\t\t\t\tresult.subVectors( c, b );\n\t\t\t\tv0.subVectors( a, b );\n\t\t\t\tresult.cross( v0 );\n\n\t\t\t\tvar resultLengthSq = result.lengthSq();\n\t\t\t\tif ( resultLengthSq > 0 ) {\n\n\t\t\t\t\treturn result.multiplyScalar( 1 / Math.sqrt( resultLengthSq ) );\n\n\t\t\t\t}\n\n\t\t\t\treturn result.set( 0, 0, 0 );\n\n\t\t\t};\n\n\t\t}(),\n\n\t\t// static/instance method to calculate barycentric coordinates\n\t\t// based on: http://www.blackpawn.com/texts/pointinpoly/default.html\n\t\tbarycoordFromPoint: function () {\n\n\t\t\tvar v0 = new Vector3();\n\t\t\tvar v1 = new Vector3();\n\t\t\tvar v2 = new Vector3();\n\n\t\t\treturn function barycoordFromPoint( point, a, b, c, optionalTarget ) {\n\n\t\t\t\tv0.subVectors( c, a );\n\t\t\t\tv1.subVectors( b, a );\n\t\t\t\tv2.subVectors( point, a );\n\n\t\t\t\tvar dot00 = v0.dot( v0 );\n\t\t\t\tvar dot01 = v0.dot( v1 );\n\t\t\t\tvar dot02 = v0.dot( v2 );\n\t\t\t\tvar dot11 = v1.dot( v1 );\n\t\t\t\tvar dot12 = v1.dot( v2 );\n\n\t\t\t\tvar denom = ( dot00 * dot11 - dot01 * dot01 );\n\n\t\t\t\tvar result = optionalTarget || new Vector3();\n\n\t\t\t\t// collinear or singular triangle\n\t\t\t\tif ( denom === 0 ) {\n\n\t\t\t\t\t// arbitrary location outside of triangle?\n\t\t\t\t\t// not sure if this is the best idea, maybe should be returning undefined\n\t\t\t\t\treturn result.set( - 2, - 1, - 1 );\n\n\t\t\t\t}\n\n\t\t\t\tvar invDenom = 1 / denom;\n\t\t\t\tvar u = ( dot11 * dot02 - dot01 * dot12 ) * invDenom;\n\t\t\t\tvar v = ( dot00 * dot12 - dot01 * dot02 ) * invDenom;\n\n\t\t\t\t// barycentric coordinates must always sum to 1\n\t\t\t\treturn result.set( 1 - u - v, v, u );\n\n\t\t\t};\n\n\t\t}(),\n\n\t\tcontainsPoint: function () {\n\n\t\t\tvar v1 = new Vector3();\n\n\t\t\treturn function containsPoint( point, a, b, c ) {\n\n\t\t\t\tvar result = Triangle.barycoordFromPoint( point, a, b, c, v1 );\n\n\t\t\t\treturn ( result.x >= 0 ) && ( result.y >= 0 ) && ( ( result.x + result.y ) <= 1 );\n\n\t\t\t};\n\n\t\t}()\n\n\t} );\n\n\tObject.assign( Triangle.prototype, {\n\n\t\tset: function ( a, b, c ) {\n\n\t\t\tthis.a.copy( a );\n\t\t\tthis.b.copy( b );\n\t\t\tthis.c.copy( c );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetFromPointsAndIndices: function ( points, i0, i1, i2 ) {\n\n\t\t\tthis.a.copy( points[ i0 ] );\n\t\t\tthis.b.copy( points[ i1 ] );\n\t\t\tthis.c.copy( points[ i2 ] );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tclone: function () {\n\n\t\t\treturn new this.constructor().copy( this );\n\n\t\t},\n\n\t\tcopy: function ( triangle ) {\n\n\t\t\tthis.a.copy( triangle.a );\n\t\t\tthis.b.copy( triangle.b );\n\t\t\tthis.c.copy( triangle.c );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tarea: function () {\n\n\t\t\tvar v0 = new Vector3();\n\t\t\tvar v1 = new Vector3();\n\n\t\t\treturn function area() {\n\n\t\t\t\tv0.subVectors( this.c, this.b );\n\t\t\t\tv1.subVectors( this.a, this.b );\n\n\t\t\t\treturn v0.cross( v1 ).length() * 0.5;\n\n\t\t\t};\n\n\t\t}(),\n\n\t\tmidpoint: function ( optionalTarget ) {\n\n\t\t\tvar result = optionalTarget || new Vector3();\n\t\t\treturn result.addVectors( this.a, this.b ).add( this.c ).multiplyScalar( 1 / 3 );\n\n\t\t},\n\n\t\tnormal: function ( optionalTarget ) {\n\n\t\t\treturn Triangle.normal( this.a, this.b, this.c, optionalTarget );\n\n\t\t},\n\n\t\tplane: function ( optionalTarget ) {\n\n\t\t\tvar result = optionalTarget || new Plane();\n\n\t\t\treturn result.setFromCoplanarPoints( this.a, this.b, this.c );\n\n\t\t},\n\n\t\tbarycoordFromPoint: function ( point, optionalTarget ) {\n\n\t\t\treturn Triangle.barycoordFromPoint( point, this.a, this.b, this.c, optionalTarget );\n\n\t\t},\n\n\t\tcontainsPoint: function ( point ) {\n\n\t\t\treturn Triangle.containsPoint( point, this.a, this.b, this.c );\n\n\t\t},\n\n\t\tclosestPointToPoint: function () {\n\n\t\t\tvar plane = new Plane();\n\t\t\tvar edgeList = [ new Line3(), new Line3(), new Line3() ];\n\t\t\tvar projectedPoint = new Vector3();\n\t\t\tvar closestPoint = new Vector3();\n\n\t\t\treturn function closestPointToPoint( point, optionalTarget ) {\n\n\t\t\t\tvar result = optionalTarget || new Vector3();\n\t\t\t\tvar minDistance = Infinity;\n\n\t\t\t\t// project the point onto the plane of the triangle\n\n\t\t\t\tplane.setFromCoplanarPoints( this.a, this.b, this.c );\n\t\t\t\tplane.projectPoint( point, projectedPoint );\n\n\t\t\t\t// check if the projection lies within the triangle\n\n\t\t\t\tif ( this.containsPoint( projectedPoint ) === true ) {\n\n\t\t\t\t\t// if so, this is the closest point\n\n\t\t\t\t\tresult.copy( projectedPoint );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// if not, the point falls outside the triangle. the result is the closest point to the triangle's edges or vertices\n\n\t\t\t\t\tedgeList[ 0 ].set( this.a, this.b );\n\t\t\t\t\tedgeList[ 1 ].set( this.b, this.c );\n\t\t\t\t\tedgeList[ 2 ].set( this.c, this.a );\n\n\t\t\t\t\tfor ( var i = 0; i < edgeList.length; i ++ ) {\n\n\t\t\t\t\t\tedgeList[ i ].closestPointToPoint( projectedPoint, true, closestPoint );\n\n\t\t\t\t\t\tvar distance = projectedPoint.distanceToSquared( closestPoint );\n\n\t\t\t\t\t\tif ( distance < minDistance ) {\n\n\t\t\t\t\t\t\tminDistance = distance;\n\n\t\t\t\t\t\t\tresult.copy( closestPoint );\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\treturn result;\n\n\t\t\t};\n\n\t\t}(),\n\n\t\tequals: function ( triangle ) {\n\n\t\t\treturn triangle.a.equals( this.a ) && triangle.b.equals( this.b ) && triangle.c.equals( this.c );\n\n\t\t}\n\n\t} );\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t * @author alteredq / http://alteredqualia.com/\n\t * @author mikael emtinger / http://gomo.se/\n\t * @author jonobr1 / http://jonobr1.com/\n\t */\n\n\tfunction Mesh( geometry, material ) {\n\n\t\tObject3D.call( this );\n\n\t\tthis.type = 'Mesh';\n\n\t\tthis.geometry = geometry !== undefined ? geometry : new BufferGeometry();\n\t\tthis.material = material !== undefined ? material : new MeshBasicMaterial( { color: Math.random() * 0xffffff } );\n\n\t\tthis.drawMode = TrianglesDrawMode;\n\n\t\tthis.updateMorphTargets();\n\n\t}\n\n\tMesh.prototype = Object.assign( Object.create( Object3D.prototype ), {\n\n\t\tconstructor: Mesh,\n\n\t\tisMesh: true,\n\n\t\tsetDrawMode: function ( value ) {\n\n\t\t\tthis.drawMode = value;\n\n\t\t},\n\n\t\tcopy: function ( source ) {\n\n\t\t\tObject3D.prototype.copy.call( this, source );\n\n\t\t\tthis.drawMode = source.drawMode;\n\n\t\t\tif ( source.morphTargetInfluences !== undefined ) {\n\n\t\t\t\tthis.morphTargetInfluences = source.morphTargetInfluences.slice();\n\n\t\t\t}\n\n\t\t\tif ( source.morphTargetDictionary !== undefined ) {\n\n\t\t\t\tthis.morphTargetDictionary = Object.assign( {}, source.morphTargetDictionary );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tupdateMorphTargets: function () {\n\n\t\t\tvar geometry = this.geometry;\n\t\t\tvar m, ml, name;\n\n\t\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\t\tvar morphAttributes = geometry.morphAttributes;\n\t\t\t\tvar keys = Object.keys( morphAttributes );\n\n\t\t\t\tif ( keys.length > 0 ) {\n\n\t\t\t\t\tvar morphAttribute = morphAttributes[ keys[ 0 ] ];\n\n\t\t\t\t\tif ( morphAttribute !== undefined ) {\n\n\t\t\t\t\t\tthis.morphTargetInfluences = [];\n\t\t\t\t\t\tthis.morphTargetDictionary = {};\n\n\t\t\t\t\t\tfor ( m = 0, ml = morphAttribute.length; m < ml; m ++ ) {\n\n\t\t\t\t\t\t\tname = morphAttribute[ m ].name || String( m );\n\n\t\t\t\t\t\t\tthis.morphTargetInfluences.push( 0 );\n\t\t\t\t\t\t\tthis.morphTargetDictionary[ name ] = m;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tvar morphTargets = geometry.morphTargets;\n\n\t\t\t\tif ( morphTargets !== undefined && morphTargets.length > 0 ) {\n\n\t\t\t\t\tthis.morphTargetInfluences = [];\n\t\t\t\t\tthis.morphTargetDictionary = {};\n\n\t\t\t\t\tfor ( m = 0, ml = morphTargets.length; m < ml; m ++ ) {\n\n\t\t\t\t\t\tname = morphTargets[ 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},\n\n\t\traycast: ( function () {\n\n\t\t\tvar inverseMatrix = new Matrix4();\n\t\t\tvar ray = new Ray();\n\t\t\tvar sphere = new Sphere();\n\n\t\t\tvar vA = new Vector3();\n\t\t\tvar vB = new Vector3();\n\t\t\tvar vC = new Vector3();\n\n\t\t\tvar tempA = new Vector3();\n\t\t\tvar tempB = new Vector3();\n\t\t\tvar tempC = new Vector3();\n\n\t\t\tvar uvA = new Vector2();\n\t\t\tvar uvB = new Vector2();\n\t\t\tvar uvC = new Vector2();\n\n\t\t\tvar barycoord = new Vector3();\n\n\t\t\tvar intersectionPoint = new Vector3();\n\t\t\tvar intersectionPointWorld = new Vector3();\n\n\t\t\tfunction uvIntersection( point, p1, p2, p3, uv1, uv2, uv3 ) {\n\n\t\t\t\tTriangle.barycoordFromPoint( point, p1, p2, p3, barycoord );\n\n\t\t\t\tuv1.multiplyScalar( barycoord.x );\n\t\t\t\tuv2.multiplyScalar( barycoord.y );\n\t\t\t\tuv3.multiplyScalar( barycoord.z );\n\n\t\t\t\tuv1.add( uv2 ).add( uv3 );\n\n\t\t\t\treturn uv1.clone();\n\n\t\t\t}\n\n\t\t\tfunction checkIntersection( object, material, raycaster, ray, pA, pB, pC, point ) {\n\n\t\t\t\tvar intersect;\n\n\t\t\t\tif ( material.side === BackSide ) {\n\n\t\t\t\t\tintersect = ray.intersectTriangle( pC, pB, pA, true, point );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tintersect = ray.intersectTriangle( pA, pB, pC, material.side !== DoubleSide, point );\n\n\t\t\t\t}\n\n\t\t\t\tif ( intersect === null ) return null;\n\n\t\t\t\tintersectionPointWorld.copy( point );\n\t\t\t\tintersectionPointWorld.applyMatrix4( object.matrixWorld );\n\n\t\t\t\tvar distance = raycaster.ray.origin.distanceTo( intersectionPointWorld );\n\n\t\t\t\tif ( distance < raycaster.near || distance > raycaster.far ) return null;\n\n\t\t\t\treturn {\n\t\t\t\t\tdistance: distance,\n\t\t\t\t\tpoint: intersectionPointWorld.clone(),\n\t\t\t\t\tobject: object\n\t\t\t\t};\n\n\t\t\t}\n\n\t\t\tfunction checkBufferGeometryIntersection( object, raycaster, ray, position, uv, a, b, c ) {\n\n\t\t\t\tvA.fromBufferAttribute( position, a );\n\t\t\t\tvB.fromBufferAttribute( position, b );\n\t\t\t\tvC.fromBufferAttribute( position, c );\n\n\t\t\t\tvar intersection = checkIntersection( object, object.material, raycaster, ray, vA, vB, vC, intersectionPoint );\n\n\t\t\t\tif ( intersection ) {\n\n\t\t\t\t\tif ( uv ) {\n\n\t\t\t\t\t\tuvA.fromBufferAttribute( uv, a );\n\t\t\t\t\t\tuvB.fromBufferAttribute( uv, b );\n\t\t\t\t\t\tuvC.fromBufferAttribute( uv, c );\n\n\t\t\t\t\t\tintersection.uv = uvIntersection( intersectionPoint, vA, vB, vC, uvA, uvB, uvC );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tintersection.face = new Face3( a, b, c, Triangle.normal( vA, vB, vC ) );\n\t\t\t\t\tintersection.faceIndex = a;\n\n\t\t\t\t}\n\n\t\t\t\treturn intersection;\n\n\t\t\t}\n\n\t\t\treturn function raycast( raycaster, intersects ) {\n\n\t\t\t\tvar geometry = this.geometry;\n\t\t\t\tvar material = this.material;\n\t\t\t\tvar matrixWorld = this.matrixWorld;\n\n\t\t\t\tif ( material === undefined ) return;\n\n\t\t\t\t// Checking boundingSphere distance to ray\n\n\t\t\t\tif ( geometry.boundingSphere === null ) geometry.computeBoundingSphere();\n\n\t\t\t\tsphere.copy( geometry.boundingSphere );\n\t\t\t\tsphere.applyMatrix4( matrixWorld );\n\n\t\t\t\tif ( raycaster.ray.intersectsSphere( sphere ) === false ) return;\n\n\t\t\t\t//\n\n\t\t\t\tinverseMatrix.getInverse( matrixWorld );\n\t\t\t\tray.copy( raycaster.ray ).applyMatrix4( inverseMatrix );\n\n\t\t\t\t// Check boundingBox before continuing\n\n\t\t\t\tif ( geometry.boundingBox !== null ) {\n\n\t\t\t\t\tif ( ray.intersectsBox( geometry.boundingBox ) === false ) return;\n\n\t\t\t\t}\n\n\t\t\t\tvar intersection;\n\n\t\t\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\t\t\tvar a, b, c;\n\t\t\t\t\tvar index = geometry.index;\n\t\t\t\t\tvar position = geometry.attributes.position;\n\t\t\t\t\tvar uv = geometry.attributes.uv;\n\t\t\t\t\tvar i, l;\n\n\t\t\t\t\tif ( index !== null ) {\n\n\t\t\t\t\t\t// indexed buffer geometry\n\n\t\t\t\t\t\tfor ( i = 0, l = index.count; i < l; i += 3 ) {\n\n\t\t\t\t\t\t\ta = index.getX( i );\n\t\t\t\t\t\t\tb = index.getX( i + 1 );\n\t\t\t\t\t\t\tc = index.getX( i + 2 );\n\n\t\t\t\t\t\t\tintersection = checkBufferGeometryIntersection( this, raycaster, ray, position, uv, 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( i / 3 ); // triangle number in indices buffer semantics\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} else if ( position !== undefined ) {\n\n\t\t\t\t\t\t// non-indexed buffer geometry\n\n\t\t\t\t\t\tfor ( i = 0, l = position.count; i < l; i += 3 ) {\n\n\t\t\t\t\t\t\ta = i;\n\t\t\t\t\t\t\tb = i + 1;\n\t\t\t\t\t\t\tc = i + 2;\n\n\t\t\t\t\t\t\tintersection = checkBufferGeometryIntersection( this, raycaster, ray, position, uv, a, b, c );\n\n\t\t\t\t\t\t\tif ( intersection ) {\n\n\t\t\t\t\t\t\t\tintersection.index = a; // triangle number in positions buffer semantics\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 if ( geometry.isGeometry ) {\n\n\t\t\t\t\tvar fvA, fvB, fvC;\n\t\t\t\t\tvar isMultiMaterial = Array.isArray( material );\n\n\t\t\t\t\tvar vertices = geometry.vertices;\n\t\t\t\t\tvar faces = geometry.faces;\n\t\t\t\t\tvar uvs;\n\n\t\t\t\t\tvar faceVertexUvs = geometry.faceVertexUvs[ 0 ];\n\t\t\t\t\tif ( faceVertexUvs.length > 0 ) uvs = faceVertexUvs;\n\n\t\t\t\t\tfor ( var f = 0, fl = faces.length; f < fl; f ++ ) {\n\n\t\t\t\t\t\tvar face = faces[ f ];\n\t\t\t\t\t\tvar faceMaterial = isMultiMaterial ? material[ face.materialIndex ] : material;\n\n\t\t\t\t\t\tif ( faceMaterial === undefined ) continue;\n\n\t\t\t\t\t\tfvA = vertices[ face.a ];\n\t\t\t\t\t\tfvB = vertices[ face.b ];\n\t\t\t\t\t\tfvC = vertices[ face.c ];\n\n\t\t\t\t\t\tif ( faceMaterial.morphTargets === true ) {\n\n\t\t\t\t\t\t\tvar morphTargets = geometry.morphTargets;\n\t\t\t\t\t\t\tvar morphInfluences = this.morphTargetInfluences;\n\n\t\t\t\t\t\t\tvA.set( 0, 0, 0 );\n\t\t\t\t\t\t\tvB.set( 0, 0, 0 );\n\t\t\t\t\t\t\tvC.set( 0, 0, 0 );\n\n\t\t\t\t\t\t\tfor ( var t = 0, tl = morphTargets.length; t < tl; t ++ ) {\n\n\t\t\t\t\t\t\t\tvar influence = morphInfluences[ t ];\n\n\t\t\t\t\t\t\t\tif ( influence === 0 ) continue;\n\n\t\t\t\t\t\t\t\tvar targets = morphTargets[ t ].vertices;\n\n\t\t\t\t\t\t\t\tvA.addScaledVector( tempA.subVectors( targets[ face.a ], fvA ), influence );\n\t\t\t\t\t\t\t\tvB.addScaledVector( tempB.subVectors( targets[ face.b ], fvB ), influence );\n\t\t\t\t\t\t\t\tvC.addScaledVector( tempC.subVectors( targets[ face.c ], fvC ), influence );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tvA.add( fvA );\n\t\t\t\t\t\t\tvB.add( fvB );\n\t\t\t\t\t\t\tvC.add( fvC );\n\n\t\t\t\t\t\t\tfvA = vA;\n\t\t\t\t\t\t\tfvB = vB;\n\t\t\t\t\t\t\tfvC = vC;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tintersection = checkIntersection( this, faceMaterial, raycaster, ray, fvA, fvB, fvC, intersectionPoint );\n\n\t\t\t\t\t\tif ( intersection ) {\n\n\t\t\t\t\t\t\tif ( uvs && uvs[ f ] ) {\n\n\t\t\t\t\t\t\t\tvar uvs_f = uvs[ f ];\n\t\t\t\t\t\t\t\tuvA.copy( uvs_f[ 0 ] );\n\t\t\t\t\t\t\t\tuvB.copy( uvs_f[ 1 ] );\n\t\t\t\t\t\t\t\tuvC.copy( uvs_f[ 2 ] );\n\n\t\t\t\t\t\t\t\tintersection.uv = uvIntersection( intersectionPoint, fvA, fvB, fvC, uvA, uvB, uvC );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tintersection.face = face;\n\t\t\t\t\t\t\tintersection.faceIndex = f;\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}() ),\n\n\t\tclone: function () {\n\n\t\t\treturn new this.constructor( this.geometry, this.material ).copy( this );\n\n\t\t}\n\n\t} );\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t */\n\n\tfunction WebGLBackground( renderer, state, geometries, premultipliedAlpha ) {\n\n\t\tvar clearColor = new Color( 0x000000 );\n\t\tvar clearAlpha = 0;\n\n\t\tvar planeCamera, planeMesh;\n\t\tvar boxMesh;\n\n\t\tfunction render( renderList, scene, camera, forceClear ) {\n\n\t\t\tvar background = scene.background;\n\n\t\t\tif ( background === null ) {\n\n\t\t\t\tsetClear( clearColor, clearAlpha );\n\n\t\t\t} else if ( background && background.isColor ) {\n\n\t\t\t\tsetClear( background, 1 );\n\t\t\t\tforceClear = true;\n\n\t\t\t}\n\n\t\t\tif ( renderer.autoClear || forceClear ) {\n\n\t\t\t\trenderer.clear( renderer.autoClearColor, renderer.autoClearDepth, renderer.autoClearStencil );\n\n\t\t\t}\n\n\t\t\tif ( background && background.isCubeTexture ) {\n\n\t\t\t\tif ( boxMesh === undefined ) {\n\n\t\t\t\t\tboxMesh = new Mesh(\n\t\t\t\t\t\tnew BoxBufferGeometry( 1, 1, 1 ),\n\t\t\t\t\t\tnew ShaderMaterial( {\n\t\t\t\t\t\t\tuniforms: ShaderLib.cube.uniforms,\n\t\t\t\t\t\t\tvertexShader: ShaderLib.cube.vertexShader,\n\t\t\t\t\t\t\tfragmentShader: ShaderLib.cube.fragmentShader,\n\t\t\t\t\t\t\tside: BackSide,\n\t\t\t\t\t\t\tdepthTest: true,\n\t\t\t\t\t\t\tdepthWrite: false,\n\t\t\t\t\t\t\tfog: false\n\t\t\t\t\t\t} )\n\t\t\t\t\t);\n\n\t\t\t\t\tboxMesh.geometry.removeAttribute( 'normal' );\n\t\t\t\t\tboxMesh.geometry.removeAttribute( 'uv' );\n\n\t\t\t\t\tboxMesh.onBeforeRender = function ( renderer, scene, camera ) {\n\n\t\t\t\t\t\tthis.matrixWorld.copyPosition( camera.matrixWorld );\n\n\t\t\t\t\t};\n\n\t\t\t\t\tgeometries.update( boxMesh.geometry );\n\n\t\t\t\t}\n\n\t\t\t\tboxMesh.material.uniforms.tCube.value = background;\n\n\t\t\t\trenderList.push( boxMesh, boxMesh.geometry, boxMesh.material, 0, null );\n\n\t\t\t} else if ( background && background.isTexture ) {\n\n\t\t\t\tif ( planeCamera === undefined ) {\n\n\t\t\t\t\tplaneCamera = new OrthographicCamera( - 1, 1, 1, - 1, 0, 1 );\n\n\t\t\t\t\tplaneMesh = new Mesh(\n\t\t\t\t\t\tnew PlaneBufferGeometry( 2, 2 ),\n\t\t\t\t\t\tnew MeshBasicMaterial( { depthTest: false, depthWrite: false, fog: false } )\n\t\t\t\t\t);\n\n\t\t\t\t\tgeometries.update( planeMesh.geometry );\n\n\t\t\t\t}\n\n\t\t\t\tplaneMesh.material.map = background;\n\n\t\t\t\t// TODO Push this to renderList\n\n\t\t\t\trenderer.renderBufferDirect( planeCamera, null, planeMesh.geometry, planeMesh.material, planeMesh, null );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction setClear( color, alpha ) {\n\n\t\t\tstate.buffers.color.setClear( color.r, color.g, color.b, alpha, premultipliedAlpha );\n\n\t\t}\n\n\t\treturn {\n\n\t\t\tgetClearColor: function () {\n\n\t\t\t\treturn clearColor;\n\n\t\t\t},\n\t\t\tsetClearColor: function ( color, alpha ) {\n\n\t\t\t\tclearColor.set( color );\n\t\t\t\tclearAlpha = alpha !== undefined ? alpha : 1;\n\t\t\t\tsetClear( clearColor, clearAlpha );\n\n\t\t\t},\n\t\t\tgetClearAlpha: function () {\n\n\t\t\t\treturn clearAlpha;\n\n\t\t\t},\n\t\t\tsetClearAlpha: function ( alpha ) {\n\n\t\t\t\tclearAlpha = alpha;\n\t\t\t\tsetClear( clearColor, clearAlpha );\n\n\t\t\t},\n\t\t\trender: render\n\n\t\t};\n\n\t}\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t */\n\n\tfunction painterSortStable( a, b ) {\n\n\t\tif ( a.renderOrder !== b.renderOrder ) {\n\n\t\t\treturn a.renderOrder - b.renderOrder;\n\n\t\t} else if ( a.program && b.program && a.program !== b.program ) {\n\n\t\t\treturn a.program.id - b.program.id;\n\n\t\t} else if ( a.material.id !== b.material.id ) {\n\n\t\t\treturn a.material.id - b.material.id;\n\n\t\t} else if ( a.z !== b.z ) {\n\n\t\t\treturn a.z - b.z;\n\n\t\t} else {\n\n\t\t\treturn a.id - b.id;\n\n\t\t}\n\n\t}\n\n\tfunction reversePainterSortStable( a, b ) {\n\n\t\tif ( a.renderOrder !== b.renderOrder ) {\n\n\t\t\treturn a.renderOrder - b.renderOrder;\n\n\t\t} if ( a.z !== b.z ) {\n\n\t\t\treturn b.z - a.z;\n\n\t\t} else {\n\n\t\t\treturn a.id - b.id;\n\n\t\t}\n\n\t}\n\n\tfunction WebGLRenderList() {\n\n\t\tvar renderItems = [];\n\t\tvar renderItemsIndex = 0;\n\n\t\tvar opaque = [];\n\t\tvar transparent = [];\n\n\t\tfunction init() {\n\n\t\t\trenderItemsIndex = 0;\n\n\t\t\topaque.length = 0;\n\t\t\ttransparent.length = 0;\n\n\t\t}\n\n\t\tfunction push( object, geometry, material, z, group ) {\n\n\t\t\tvar renderItem = renderItems[ renderItemsIndex ];\n\n\t\t\tif ( renderItem === undefined ) {\n\n\t\t\t\trenderItem = {\n\t\t\t\t\tid: object.id,\n\t\t\t\t\tobject: object,\n\t\t\t\t\tgeometry: geometry,\n\t\t\t\t\tmaterial: material,\n\t\t\t\t\tprogram: material.program,\n\t\t\t\t\trenderOrder: object.renderOrder,\n\t\t\t\t\tz: z,\n\t\t\t\t\tgroup: group\n\t\t\t\t};\n\n\t\t\t\trenderItems[ renderItemsIndex ] = renderItem;\n\n\t\t\t} else {\n\n\t\t\t\trenderItem.id = object.id;\n\t\t\t\trenderItem.object = object;\n\t\t\t\trenderItem.geometry = geometry;\n\t\t\t\trenderItem.material = material;\n\t\t\t\trenderItem.program = material.program;\n\t\t\t\trenderItem.renderOrder = object.renderOrder;\n\t\t\t\trenderItem.z = z;\n\t\t\t\trenderItem.group = group;\n\n\t\t\t}\n\n\t\t\t( material.transparent === true ? transparent : opaque ).push( renderItem );\n\n\t\t\trenderItemsIndex ++;\n\n\t\t}\n\n\t\tfunction sort() {\n\n\t\t\tif ( opaque.length > 1 ) opaque.sort( painterSortStable );\n\t\t\tif ( transparent.length > 1 ) transparent.sort( reversePainterSortStable );\n\n\t\t}\n\n\t\treturn {\n\t\t\topaque: opaque,\n\t\t\ttransparent: transparent,\n\n\t\t\tinit: init,\n\t\t\tpush: push,\n\n\t\t\tsort: sort\n\t\t};\n\n\t}\n\n\tfunction WebGLRenderLists() {\n\n\t\tvar lists = {};\n\n\t\tfunction get( scene, camera ) {\n\n\t\t\tvar hash = scene.id + ',' + camera.id;\n\t\t\tvar list = lists[ hash ];\n\n\t\t\tif ( list === undefined ) {\n\n\t\t\t\t// console.log( 'THREE.WebGLRenderLists:', hash );\n\n\t\t\t\tlist = new WebGLRenderList();\n\t\t\t\tlists[ hash ] = list;\n\n\t\t\t}\n\n\t\t\treturn list;\n\n\t\t}\n\n\t\tfunction dispose() {\n\n\t\t\tlists = {};\n\n\t\t}\n\n\t\treturn {\n\t\t\tget: get,\n\t\t\tdispose: dispose\n\t\t};\n\n\t}\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t */\n\n\tfunction absNumericalSort( a, b ) {\n\n\t\treturn Math.abs( b[ 1 ] ) - Math.abs( a[ 1 ] );\n\n\t}\n\n\tfunction WebGLMorphtargets( gl ) {\n\n\t\tvar influencesList = {};\n\t\tvar morphInfluences = new Float32Array( 8 );\n\n\t\tfunction update( object, geometry, material, program ) {\n\n\t\t\tvar objectInfluences = object.morphTargetInfluences;\n\n\t\t\tvar length = objectInfluences.length;\n\n\t\t\tvar influences = influencesList[ geometry.id ];\n\n\t\t\tif ( influences === undefined ) {\n\n\t\t\t\t// initialise list\n\n\t\t\t\tinfluences = [];\n\n\t\t\t\tfor ( var i = 0; i < length; i ++ ) {\n\n\t\t\t\t\tinfluences[ i ] = [ i, 0 ];\n\n\t\t\t\t}\n\n\t\t\t\tinfluencesList[ geometry.id ] = influences;\n\n\t\t\t}\n\n\t\t\tvar morphTargets = material.morphTargets && geometry.morphAttributes.position;\n\t\t\tvar morphNormals = material.morphNormals && geometry.morphAttributes.normal;\n\n\t\t\t// Remove current morphAttributes\n\n\t\t\tfor ( var i = 0; i < length; i ++ ) {\n\n\t\t\t\tvar influence = influences[ i ];\n\n\t\t\t\tif ( influence[ 1 ] !== 0 ) {\n\n\t\t\t\t\tif ( morphTargets ) geometry.removeAttribute( 'morphTarget' + i );\n\t\t\t\t\tif ( morphNormals ) geometry.removeAttribute( 'morphNormal' + i );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// Collect influences\n\n\t\t\tfor ( var i = 0; i < length; i ++ ) {\n\n\t\t\t\tvar influence = influences[ i ];\n\n\t\t\t\tinfluence[ 0 ] = i;\n\t\t\t\tinfluence[ 1 ] = objectInfluences[ i ];\n\n\t\t\t}\n\n\t\t\tinfluences.sort( absNumericalSort );\n\n\t\t\t// Add morphAttributes\n\n\t\t\tfor ( var i = 0; i < 8; i ++ ) {\n\n\t\t\t\tvar influence = influences[ i ];\n\n\t\t\t\tif ( influence ) {\n\n\t\t\t\t\tvar index = influence[ 0 ];\n\t\t\t\t\tvar value = influence[ 1 ];\n\n\t\t\t\t\tif ( value ) {\n\n\t\t\t\t\t\tif ( morphTargets ) geometry.addAttribute( 'morphTarget' + i, morphTargets[ index ] );\n\t\t\t\t\t\tif ( morphNormals ) geometry.addAttribute( 'morphNormal' + i, morphNormals[ index ] );\n\n\t\t\t\t\t\tmorphInfluences[ i ] = value;\n\t\t\t\t\t\tcontinue;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tmorphInfluences[ i ] = 0;\n\n\t\t\t}\n\n\t\t\tprogram.getUniforms().setValue( gl, 'morphTargetInfluences', morphInfluences );\n\n\t\t}\n\n\t\treturn {\n\n\t\t\tupdate: update\n\n\t\t};\n\n\t}\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t */\n\n\tfunction WebGLIndexedBufferRenderer( gl, extensions, infoRender ) {\n\n\t\tvar mode;\n\n\t\tfunction setMode( value ) {\n\n\t\t\tmode = value;\n\n\t\t}\n\n\t\tvar type, bytesPerElement;\n\n\t\tfunction setIndex( value ) {\n\n\t\t\ttype = value.type;\n\t\t\tbytesPerElement = value.bytesPerElement;\n\n\t\t}\n\n\t\tfunction render( start, count ) {\n\n\t\t\tgl.drawElements( mode, count, type, start * bytesPerElement );\n\n\t\t\tinfoRender.calls ++;\n\t\t\tinfoRender.vertices += count;\n\n\t\t\tif ( mode === gl.TRIANGLES ) infoRender.faces += count / 3;\n\t\t\telse if ( mode === gl.POINTS ) infoRender.points += count;\n\n\t\t}\n\n\t\tfunction renderInstances( geometry, start, count ) {\n\n\t\t\tvar extension = extensions.get( 'ANGLE_instanced_arrays' );\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\textension.drawElementsInstancedANGLE( mode, count, type, start * bytesPerElement, geometry.maxInstancedCount );\n\n\t\t\tinfoRender.calls ++;\n\t\t\tinfoRender.vertices += count * geometry.maxInstancedCount;\n\n\t\t\tif ( mode === gl.TRIANGLES ) infoRender.faces += geometry.maxInstancedCount * count / 3;\n\t\t\telse if ( mode === gl.POINTS ) infoRender.points += geometry.maxInstancedCount * count;\n\n\t\t}\n\n\t\t//\n\n\t\tthis.setMode = setMode;\n\t\tthis.setIndex = setIndex;\n\t\tthis.render = render;\n\t\tthis.renderInstances = renderInstances;\n\n\t}\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t */\n\n\tfunction WebGLBufferRenderer( gl, extensions, infoRender ) {\n\n\t\tvar mode;\n\n\t\tfunction setMode( value ) {\n\n\t\t\tmode = value;\n\n\t\t}\n\n\t\tfunction render( start, count ) {\n\n\t\t\tgl.drawArrays( mode, start, count );\n\n\t\t\tinfoRender.calls ++;\n\t\t\tinfoRender.vertices += count;\n\n\t\t\tif ( mode === gl.TRIANGLES ) infoRender.faces += count / 3;\n\t\t\telse if ( mode === gl.POINTS ) infoRender.points += count;\n\n\t\t}\n\n\t\tfunction renderInstances( geometry, start, count ) {\n\n\t\t\tvar extension = extensions.get( 'ANGLE_instanced_arrays' );\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\tvar position = geometry.attributes.position;\n\n\t\t\tif ( position.isInterleavedBufferAttribute ) {\n\n\t\t\t\tcount = position.data.count;\n\n\t\t\t\textension.drawArraysInstancedANGLE( mode, 0, count, geometry.maxInstancedCount );\n\n\t\t\t} else {\n\n\t\t\t\textension.drawArraysInstancedANGLE( mode, start, count, geometry.maxInstancedCount );\n\n\t\t\t}\n\n\t\t\tinfoRender.calls ++;\n\t\t\tinfoRender.vertices += count * geometry.maxInstancedCount;\n\n\t\t\tif ( mode === gl.TRIANGLES ) infoRender.faces += geometry.maxInstancedCount * count / 3;\n\t\t\telse if ( mode === gl.POINTS ) infoRender.points += geometry.maxInstancedCount * count;\n\n\t\t}\n\n\t\t//\n\n\t\tthis.setMode = setMode;\n\t\tthis.render = render;\n\t\tthis.renderInstances = renderInstances;\n\n\t}\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t */\n\n\tfunction WebGLGeometries( gl, attributes, infoMemory ) {\n\n\t\tvar geometries = {};\n\t\tvar wireframeAttributes = {};\n\n\t\tfunction onGeometryDispose( event ) {\n\n\t\t\tvar geometry = event.target;\n\t\t\tvar buffergeometry = geometries[ geometry.id ];\n\n\t\t\tif ( buffergeometry.index !== null ) {\n\n\t\t\t\tattributes.remove( buffergeometry.index );\n\n\t\t\t}\n\n\t\t\tfor ( var name in buffergeometry.attributes ) {\n\n\t\t\t\tattributes.remove( buffergeometry.attributes[ name ] );\n\n\t\t\t}\n\n\t\t\tgeometry.removeEventListener( 'dispose', onGeometryDispose );\n\n\t\t\tdelete geometries[ geometry.id ];\n\n\t\t\t// TODO Remove duplicate code\n\n\t\t\tvar attribute = wireframeAttributes[ geometry.id ];\n\n\t\t\tif ( attribute ) {\n\n\t\t\t\tattributes.remove( attribute );\n\t\t\t\tdelete wireframeAttributes[ geometry.id ];\n\n\t\t\t}\n\n\t\t\tattribute = wireframeAttributes[ buffergeometry.id ];\n\n\t\t\tif ( attribute ) {\n\n\t\t\t\tattributes.remove( attribute );\n\t\t\t\tdelete wireframeAttributes[ buffergeometry.id ];\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tinfoMemory.geometries --;\n\n\t\t}\n\n\t\tfunction get( object, geometry ) {\n\n\t\t\tvar buffergeometry = geometries[ geometry.id ];\n\n\t\t\tif ( buffergeometry ) return buffergeometry;\n\n\t\t\tgeometry.addEventListener( 'dispose', onGeometryDispose );\n\n\t\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\t\tbuffergeometry = geometry;\n\n\t\t\t} else if ( geometry.isGeometry ) {\n\n\t\t\t\tif ( geometry._bufferGeometry === undefined ) {\n\n\t\t\t\t\tgeometry._bufferGeometry = new BufferGeometry().setFromObject( object );\n\n\t\t\t\t}\n\n\t\t\t\tbuffergeometry = geometry._bufferGeometry;\n\n\t\t\t}\n\n\t\t\tgeometries[ geometry.id ] = buffergeometry;\n\n\t\t\tinfoMemory.geometries ++;\n\n\t\t\treturn buffergeometry;\n\n\t\t}\n\n\t\tfunction update( geometry ) {\n\n\t\t\tvar index = geometry.index;\n\t\t\tvar geometryAttributes = geometry.attributes;\n\n\t\t\tif ( index !== null ) {\n\n\t\t\t\tattributes.update( index, gl.ELEMENT_ARRAY_BUFFER );\n\n\t\t\t}\n\n\t\t\tfor ( var name in geometryAttributes ) {\n\n\t\t\t\tattributes.update( geometryAttributes[ name ], gl.ARRAY_BUFFER );\n\n\t\t\t}\n\n\t\t\t// morph targets\n\n\t\t\tvar morphAttributes = geometry.morphAttributes;\n\n\t\t\tfor ( var name in morphAttributes ) {\n\n\t\t\t\tvar array = morphAttributes[ name ];\n\n\t\t\t\tfor ( var i = 0, l = array.length; i < l; i ++ ) {\n\n\t\t\t\t\tattributes.update( array[ i ], gl.ARRAY_BUFFER );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction getWireframeAttribute( geometry ) {\n\n\t\t\tvar attribute = wireframeAttributes[ geometry.id ];\n\n\t\t\tif ( attribute ) return attribute;\n\n\t\t\tvar indices = [];\n\n\t\t\tvar geometryIndex = geometry.index;\n\t\t\tvar geometryAttributes = geometry.attributes;\n\n\t\t\t// console.time( 'wireframe' );\n\n\t\t\tif ( geometryIndex !== null ) {\n\n\t\t\t\tvar array = geometryIndex.array;\n\n\t\t\t\tfor ( var i = 0, l = array.length; i < l; i += 3 ) {\n\n\t\t\t\t\tvar a = array[ i + 0 ];\n\t\t\t\t\tvar b = array[ i + 1 ];\n\t\t\t\t\tvar c = array[ i + 2 ];\n\n\t\t\t\t\tindices.push( a, b, b, c, c, a );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tvar array = geometryAttributes.position.array;\n\n\t\t\t\tfor ( var i = 0, l = ( array.length / 3 ) - 1; i < l; i += 3 ) {\n\n\t\t\t\t\tvar a = i + 0;\n\t\t\t\t\tvar b = i + 1;\n\t\t\t\t\tvar c = i + 2;\n\n\t\t\t\t\tindices.push( a, b, b, c, c, a );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// console.timeEnd( 'wireframe' );\n\n\t\t\tattribute = new ( arrayMax( indices ) > 65535 ? Uint32BufferAttribute : Uint16BufferAttribute )( indices, 1 );\n\n\t\t\tattributes.update( attribute, gl.ELEMENT_ARRAY_BUFFER );\n\n\t\t\twireframeAttributes[ geometry.id ] = attribute;\n\n\t\t\treturn attribute;\n\n\t\t}\n\n\t\treturn {\n\n\t\t\tget: get,\n\t\t\tupdate: update,\n\n\t\t\tgetWireframeAttribute: getWireframeAttribute\n\n\t\t};\n\n\t}\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t */\n\n\tfunction UniformsCache() {\n\n\t\tvar lights = {};\n\n\t\treturn {\n\n\t\t\tget: function ( light ) {\n\n\t\t\t\tif ( lights[ light.id ] !== undefined ) {\n\n\t\t\t\t\treturn lights[ light.id ];\n\n\t\t\t\t}\n\n\t\t\t\tvar uniforms;\n\n\t\t\t\tswitch ( light.type ) {\n\n\t\t\t\t\tcase 'DirectionalLight':\n\t\t\t\t\t\tuniforms = {\n\t\t\t\t\t\t\tdirection: new Vector3(),\n\t\t\t\t\t\t\tcolor: new Color(),\n\n\t\t\t\t\t\t\tshadow: false,\n\t\t\t\t\t\t\tshadowBias: 0,\n\t\t\t\t\t\t\tshadowRadius: 1,\n\t\t\t\t\t\t\tshadowMapSize: new Vector2()\n\t\t\t\t\t\t};\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'SpotLight':\n\t\t\t\t\t\tuniforms = {\n\t\t\t\t\t\t\tposition: new Vector3(),\n\t\t\t\t\t\t\tdirection: new Vector3(),\n\t\t\t\t\t\t\tcolor: new Color(),\n\t\t\t\t\t\t\tdistance: 0,\n\t\t\t\t\t\t\tconeCos: 0,\n\t\t\t\t\t\t\tpenumbraCos: 0,\n\t\t\t\t\t\t\tdecay: 0,\n\n\t\t\t\t\t\t\tshadow: false,\n\t\t\t\t\t\t\tshadowBias: 0,\n\t\t\t\t\t\t\tshadowRadius: 1,\n\t\t\t\t\t\t\tshadowMapSize: new Vector2()\n\t\t\t\t\t\t};\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'PointLight':\n\t\t\t\t\t\tuniforms = {\n\t\t\t\t\t\t\tposition: new Vector3(),\n\t\t\t\t\t\t\tcolor: new Color(),\n\t\t\t\t\t\t\tdistance: 0,\n\t\t\t\t\t\t\tdecay: 0,\n\n\t\t\t\t\t\t\tshadow: false,\n\t\t\t\t\t\t\tshadowBias: 0,\n\t\t\t\t\t\t\tshadowRadius: 1,\n\t\t\t\t\t\t\tshadowMapSize: new Vector2(),\n\t\t\t\t\t\t\tshadowCameraNear: 1,\n\t\t\t\t\t\t\tshadowCameraFar: 1000\n\t\t\t\t\t\t};\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'HemisphereLight':\n\t\t\t\t\t\tuniforms = {\n\t\t\t\t\t\t\tdirection: new Vector3(),\n\t\t\t\t\t\t\tskyColor: new Color(),\n\t\t\t\t\t\t\tgroundColor: new Color()\n\t\t\t\t\t\t};\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'RectAreaLight':\n\t\t\t\t\t\tuniforms = {\n\t\t\t\t\t\t\tcolor: new Color(),\n\t\t\t\t\t\t\tposition: new Vector3(),\n\t\t\t\t\t\t\thalfWidth: new Vector3(),\n\t\t\t\t\t\t\thalfHeight: new Vector3()\n\t\t\t\t\t\t\t// TODO (abelnation): set RectAreaLight shadow uniforms\n\t\t\t\t\t\t};\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t\tlights[ light.id ] = uniforms;\n\n\t\t\t\treturn uniforms;\n\n\t\t\t}\n\n\t\t};\n\n\t}\n\n\tfunction WebGLLights() {\n\n\t\tvar cache = new UniformsCache();\n\n\t\tvar state = {\n\n\t\t\thash: '',\n\n\t\t\tambient: [ 0, 0, 0 ],\n\t\t\tdirectional: [],\n\t\t\tdirectionalShadowMap: [],\n\t\t\tdirectionalShadowMatrix: [],\n\t\t\tspot: [],\n\t\t\tspotShadowMap: [],\n\t\t\tspotShadowMatrix: [],\n\t\t\trectArea: [],\n\t\t\tpoint: [],\n\t\t\tpointShadowMap: [],\n\t\t\tpointShadowMatrix: [],\n\t\t\themi: []\n\n\t\t};\n\n\t\tvar vector3 = new Vector3();\n\t\tvar matrix4 = new Matrix4();\n\t\tvar matrix42 = new Matrix4();\n\n\t\tfunction setup( lights, shadows, camera ) {\n\n\t\t\tvar r = 0, g = 0, b = 0;\n\n\t\t\tvar directionalLength = 0;\n\t\t\tvar pointLength = 0;\n\t\t\tvar spotLength = 0;\n\t\t\tvar rectAreaLength = 0;\n\t\t\tvar hemiLength = 0;\n\n\t\t\tvar viewMatrix = camera.matrixWorldInverse;\n\n\t\t\tfor ( var i = 0, l = lights.length; i < l; i ++ ) {\n\n\t\t\t\tvar light = lights[ i ];\n\n\t\t\t\tvar color = light.color;\n\t\t\t\tvar intensity = light.intensity;\n\t\t\t\tvar distance = light.distance;\n\n\t\t\t\tvar shadowMap = ( light.shadow && light.shadow.map ) ? light.shadow.map.texture : null;\n\n\t\t\t\tif ( light.isAmbientLight ) {\n\n\t\t\t\t\tr += color.r * intensity;\n\t\t\t\t\tg += color.g * intensity;\n\t\t\t\t\tb += color.b * intensity;\n\n\t\t\t\t} else if ( light.isDirectionalLight ) {\n\n\t\t\t\t\tvar uniforms = cache.get( light );\n\n\t\t\t\t\tuniforms.color.copy( light.color ).multiplyScalar( light.intensity );\n\t\t\t\t\tuniforms.direction.setFromMatrixPosition( light.matrixWorld );\n\t\t\t\t\tvector3.setFromMatrixPosition( light.target.matrixWorld );\n\t\t\t\t\tuniforms.direction.sub( vector3 );\n\t\t\t\t\tuniforms.direction.transformDirection( viewMatrix );\n\n\t\t\t\t\tuniforms.shadow = light.castShadow;\n\n\t\t\t\t\tif ( light.castShadow ) {\n\n\t\t\t\t\t\tvar shadow = light.shadow;\n\n\t\t\t\t\t\tuniforms.shadowBias = shadow.bias;\n\t\t\t\t\t\tuniforms.shadowRadius = shadow.radius;\n\t\t\t\t\t\tuniforms.shadowMapSize = shadow.mapSize;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tstate.directionalShadowMap[ directionalLength ] = shadowMap;\n\t\t\t\t\tstate.directionalShadowMatrix[ directionalLength ] = light.shadow.matrix;\n\t\t\t\t\tstate.directional[ directionalLength ] = uniforms;\n\n\t\t\t\t\tdirectionalLength ++;\n\n\t\t\t\t} else if ( light.isSpotLight ) {\n\n\t\t\t\t\tvar uniforms = cache.get( light );\n\n\t\t\t\t\tuniforms.position.setFromMatrixPosition( light.matrixWorld );\n\t\t\t\t\tuniforms.position.applyMatrix4( viewMatrix );\n\n\t\t\t\t\tuniforms.color.copy( color ).multiplyScalar( intensity );\n\t\t\t\t\tuniforms.distance = distance;\n\n\t\t\t\t\tuniforms.direction.setFromMatrixPosition( light.matrixWorld );\n\t\t\t\t\tvector3.setFromMatrixPosition( light.target.matrixWorld );\n\t\t\t\t\tuniforms.direction.sub( vector3 );\n\t\t\t\t\tuniforms.direction.transformDirection( viewMatrix );\n\n\t\t\t\t\tuniforms.coneCos = Math.cos( light.angle );\n\t\t\t\t\tuniforms.penumbraCos = Math.cos( light.angle * ( 1 - light.penumbra ) );\n\t\t\t\t\tuniforms.decay = ( light.distance === 0 ) ? 0.0 : light.decay;\n\n\t\t\t\t\tuniforms.shadow = light.castShadow;\n\n\t\t\t\t\tif ( light.castShadow ) {\n\n\t\t\t\t\t\tvar shadow = light.shadow;\n\n\t\t\t\t\t\tuniforms.shadowBias = shadow.bias;\n\t\t\t\t\t\tuniforms.shadowRadius = shadow.radius;\n\t\t\t\t\t\tuniforms.shadowMapSize = shadow.mapSize;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tstate.spotShadowMap[ spotLength ] = shadowMap;\n\t\t\t\t\tstate.spotShadowMatrix[ spotLength ] = light.shadow.matrix;\n\t\t\t\t\tstate.spot[ spotLength ] = uniforms;\n\n\t\t\t\t\tspotLength ++;\n\n\t\t\t\t} else if ( light.isRectAreaLight ) {\n\n\t\t\t\t\tvar uniforms = cache.get( light );\n\n\t\t\t\t\t// (a) intensity controls irradiance of entire light\n\t\t\t\t\tuniforms.color\n\t\t\t\t\t\t.copy( color )\n\t\t\t\t\t\t.multiplyScalar( intensity / ( light.width * light.height ) );\n\n\t\t\t\t\t// (b) intensity controls the radiance per light area\n\t\t\t\t\t// uniforms.color.copy( color ).multiplyScalar( intensity );\n\n\t\t\t\t\tuniforms.position.setFromMatrixPosition( light.matrixWorld );\n\t\t\t\t\tuniforms.position.applyMatrix4( viewMatrix );\n\n\t\t\t\t\t// extract local rotation of light to derive width/height half vectors\n\t\t\t\t\tmatrix42.identity();\n\t\t\t\t\tmatrix4.copy( light.matrixWorld );\n\t\t\t\t\tmatrix4.premultiply( viewMatrix );\n\t\t\t\t\tmatrix42.extractRotation( matrix4 );\n\n\t\t\t\t\tuniforms.halfWidth.set( light.width * 0.5, 0.0, 0.0 );\n\t\t\t\t\tuniforms.halfHeight.set( 0.0, light.height * 0.5, 0.0 );\n\n\t\t\t\t\tuniforms.halfWidth.applyMatrix4( matrix42 );\n\t\t\t\t\tuniforms.halfHeight.applyMatrix4( matrix42 );\n\n\t\t\t\t\t// TODO (abelnation): RectAreaLight distance?\n\t\t\t\t\t// uniforms.distance = distance;\n\n\t\t\t\t\tstate.rectArea[ rectAreaLength ] = uniforms;\n\n\t\t\t\t\trectAreaLength ++;\n\n\t\t\t\t} else if ( light.isPointLight ) {\n\n\t\t\t\t\tvar uniforms = cache.get( light );\n\n\t\t\t\t\tuniforms.position.setFromMatrixPosition( light.matrixWorld );\n\t\t\t\t\tuniforms.position.applyMatrix4( viewMatrix );\n\n\t\t\t\t\tuniforms.color.copy( light.color ).multiplyScalar( light.intensity );\n\t\t\t\t\tuniforms.distance = light.distance;\n\t\t\t\t\tuniforms.decay = ( light.distance === 0 ) ? 0.0 : light.decay;\n\n\t\t\t\t\tuniforms.shadow = light.castShadow;\n\n\t\t\t\t\tif ( light.castShadow ) {\n\n\t\t\t\t\t\tvar shadow = light.shadow;\n\n\t\t\t\t\t\tuniforms.shadowBias = shadow.bias;\n\t\t\t\t\t\tuniforms.shadowRadius = shadow.radius;\n\t\t\t\t\t\tuniforms.shadowMapSize = shadow.mapSize;\n\t\t\t\t\t\tuniforms.shadowCameraNear = shadow.camera.near;\n\t\t\t\t\t\tuniforms.shadowCameraFar = shadow.camera.far;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tstate.pointShadowMap[ pointLength ] = shadowMap;\n\t\t\t\t\tstate.pointShadowMatrix[ pointLength ] = light.shadow.matrix;\n\t\t\t\t\tstate.point[ pointLength ] = uniforms;\n\n\t\t\t\t\tpointLength ++;\n\n\t\t\t\t} else if ( light.isHemisphereLight ) {\n\n\t\t\t\t\tvar uniforms = cache.get( light );\n\n\t\t\t\t\tuniforms.direction.setFromMatrixPosition( light.matrixWorld );\n\t\t\t\t\tuniforms.direction.transformDirection( viewMatrix );\n\t\t\t\t\tuniforms.direction.normalize();\n\n\t\t\t\t\tuniforms.skyColor.copy( light.color ).multiplyScalar( intensity );\n\t\t\t\t\tuniforms.groundColor.copy( light.groundColor ).multiplyScalar( intensity );\n\n\t\t\t\t\tstate.hemi[ hemiLength ] = uniforms;\n\n\t\t\t\t\themiLength ++;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tstate.ambient[ 0 ] = r;\n\t\t\tstate.ambient[ 1 ] = g;\n\t\t\tstate.ambient[ 2 ] = b;\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\t// TODO (sam-g-steel) why aren't we using join\n\t\t\tstate.hash = directionalLength + ',' + pointLength + ',' + spotLength + ',' + rectAreaLength + ',' + hemiLength + ',' + shadows.length;\n\n\t\t}\n\n\t\treturn {\n\t\t\tsetup: setup,\n\t\t\tstate: state\n\t\t};\n\n\t}\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t */\n\n\tfunction WebGLObjects( geometries, infoRender ) {\n\n\t\tvar updateList = {};\n\n\t\tfunction update( object ) {\n\n\t\t\tvar frame = infoRender.frame;\n\n\t\t\tvar geometry = object.geometry;\n\t\t\tvar buffergeometry = geometries.get( object, geometry );\n\n\t\t\t// Update once per frame\n\n\t\t\tif ( updateList[ buffergeometry.id ] !== frame ) {\n\n\t\t\t\tif ( geometry.isGeometry ) {\n\n\t\t\t\t\tbuffergeometry.updateFromObject( object );\n\n\t\t\t\t}\n\n\t\t\t\tgeometries.update( buffergeometry );\n\n\t\t\t\tupdateList[ buffergeometry.id ] = frame;\n\n\t\t\t}\n\n\t\t\treturn buffergeometry;\n\n\t\t}\n\n\t\tfunction clear() {\n\n\t\t\tupdateList = {};\n\n\t\t}\n\n\t\treturn {\n\n\t\t\tupdate: update,\n\t\t\tclear: clear\n\n\t\t};\n\n\t}\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t */\n\n\tfunction addLineNumbers( string ) {\n\n\t\tvar lines = string.split( '\\n' );\n\n\t\tfor ( var i = 0; i < lines.length; i ++ ) {\n\n\t\t\tlines[ i ] = ( i + 1 ) + ': ' + lines[ i ];\n\n\t\t}\n\n\t\treturn lines.join( '\\n' );\n\n\t}\n\n\tfunction WebGLShader( gl, type, string ) {\n\n\t\tvar shader = gl.createShader( type );\n\n\t\tgl.shaderSource( shader, string );\n\t\tgl.compileShader( shader );\n\n\t\tif ( gl.getShaderParameter( shader, gl.COMPILE_STATUS ) === false ) {\n\n\t\t\tconsole.error( 'THREE.WebGLShader: Shader couldn\\'t compile.' );\n\n\t\t}\n\n\t\tif ( gl.getShaderInfoLog( shader ) !== '' ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLShader: gl.getShaderInfoLog()', type === gl.VERTEX_SHADER ? 'vertex' : 'fragment', gl.getShaderInfoLog( shader ), addLineNumbers( string ) );\n\n\t\t}\n\n\t\t// --enable-privileged-webgl-extension\n\t\t// console.log( type, gl.getExtension( 'WEBGL_debug_shaders' ).getTranslatedShaderSource( shader ) );\n\n\t\treturn shader;\n\n\t}\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t */\n\n\tvar programIdCount = 0;\n\n\tfunction getEncodingComponents( encoding ) {\n\n\t\tswitch ( encoding ) {\n\n\t\t\tcase LinearEncoding:\n\t\t\t\treturn [ 'Linear', '( value )' ];\n\t\t\tcase sRGBEncoding:\n\t\t\t\treturn [ 'sRGB', '( value )' ];\n\t\t\tcase RGBEEncoding:\n\t\t\t\treturn [ 'RGBE', '( value )' ];\n\t\t\tcase RGBM7Encoding:\n\t\t\t\treturn [ 'RGBM', '( value, 7.0 )' ];\n\t\t\tcase RGBM16Encoding:\n\t\t\t\treturn [ 'RGBM', '( value, 16.0 )' ];\n\t\t\tcase RGBDEncoding:\n\t\t\t\treturn [ 'RGBD', '( value, 256.0 )' ];\n\t\t\tcase GammaEncoding:\n\t\t\t\treturn [ 'Gamma', '( value, float( GAMMA_FACTOR ) )' ];\n\t\t\tdefault:\n\t\t\t\tthrow new Error( 'unsupported encoding: ' + encoding );\n\n\t\t}\n\n\t}\n\n\tfunction getTexelDecodingFunction( functionName, encoding ) {\n\n\t\tvar components = getEncodingComponents( encoding );\n\t\treturn \"vec4 \" + functionName + \"( vec4 value ) { return \" + components[ 0 ] + \"ToLinear\" + components[ 1 ] + \"; }\";\n\n\t}\n\n\tfunction getTexelEncodingFunction( functionName, encoding ) {\n\n\t\tvar components = getEncodingComponents( encoding );\n\t\treturn \"vec4 \" + functionName + \"( vec4 value ) { return LinearTo\" + components[ 0 ] + components[ 1 ] + \"; }\";\n\n\t}\n\n\tfunction getToneMappingFunction( functionName, toneMapping ) {\n\n\t\tvar toneMappingName;\n\n\t\tswitch ( toneMapping ) {\n\n\t\t\tcase LinearToneMapping:\n\t\t\t\ttoneMappingName = \"Linear\";\n\t\t\t\tbreak;\n\n\t\t\tcase ReinhardToneMapping:\n\t\t\t\ttoneMappingName = \"Reinhard\";\n\t\t\t\tbreak;\n\n\t\t\tcase Uncharted2ToneMapping:\n\t\t\t\ttoneMappingName = \"Uncharted2\";\n\t\t\t\tbreak;\n\n\t\t\tcase CineonToneMapping:\n\t\t\t\ttoneMappingName = \"OptimizedCineon\";\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tthrow new Error( 'unsupported toneMapping: ' + toneMapping );\n\n\t\t}\n\n\t\treturn \"vec3 \" + functionName + \"( vec3 color ) { return \" + toneMappingName + \"ToneMapping( color ); }\";\n\n\t}\n\n\tfunction generateExtensions( extensions, parameters, rendererExtensions ) {\n\n\t\textensions = extensions || {};\n\n\t\tvar chunks = [\n\t\t\t( extensions.derivatives || parameters.envMapCubeUV || parameters.bumpMap || parameters.normalMap || parameters.flatShading ) ? '#extension GL_OES_standard_derivatives : enable' : '',\n\t\t\t( extensions.fragDepth || parameters.logarithmicDepthBuffer ) && rendererExtensions.get( 'EXT_frag_depth' ) ? '#extension GL_EXT_frag_depth : enable' : '',\n\t\t\t( extensions.drawBuffers ) && rendererExtensions.get( 'WEBGL_draw_buffers' ) ? '#extension GL_EXT_draw_buffers : require' : '',\n\t\t\t( extensions.shaderTextureLOD || parameters.envMap ) && rendererExtensions.get( 'EXT_shader_texture_lod' ) ? '#extension GL_EXT_shader_texture_lod : enable' : ''\n\t\t];\n\n\t\treturn chunks.filter( filterEmptyLine ).join( '\\n' );\n\n\t}\n\n\tfunction generateDefines( defines ) {\n\n\t\tvar chunks = [];\n\n\t\tfor ( var name in defines ) {\n\n\t\t\tvar value = defines[ name ];\n\n\t\t\tif ( value === false ) continue;\n\n\t\t\tchunks.push( '#define ' + name + ' ' + value );\n\n\t\t}\n\n\t\treturn chunks.join( '\\n' );\n\n\t}\n\n\tfunction fetchAttributeLocations( gl, program ) {\n\n\t\tvar attributes = {};\n\n\t\tvar n = gl.getProgramParameter( program, gl.ACTIVE_ATTRIBUTES );\n\n\t\tfor ( var i = 0; i < n; i ++ ) {\n\n\t\t\tvar info = gl.getActiveAttrib( program, i );\n\t\t\tvar name = info.name;\n\n\t\t\t// console.log( 'THREE.WebGLProgram: ACTIVE VERTEX ATTRIBUTE:', name, i );\n\n\t\t\tattributes[ name ] = gl.getAttribLocation( program, name );\n\n\t\t}\n\n\t\treturn attributes;\n\n\t}\n\n\tfunction filterEmptyLine( string ) {\n\n\t\treturn string !== '';\n\n\t}\n\n\tfunction replaceLightNums( string, parameters ) {\n\n\t\treturn string\n\t\t\t.replace( /NUM_DIR_LIGHTS/g, parameters.numDirLights )\n\t\t\t.replace( /NUM_SPOT_LIGHTS/g, parameters.numSpotLights )\n\t\t\t.replace( /NUM_RECT_AREA_LIGHTS/g, parameters.numRectAreaLights )\n\t\t\t.replace( /NUM_POINT_LIGHTS/g, parameters.numPointLights )\n\t\t\t.replace( /NUM_HEMI_LIGHTS/g, parameters.numHemiLights );\n\n\t}\n\n\tfunction parseIncludes( string ) {\n\n\t\tvar pattern = /^[ \\t]*#include +<([\\w\\d.]+)>/gm;\n\n\t\tfunction replace( match, include ) {\n\n\t\t\tvar replace = ShaderChunk[ include ];\n\n\t\t\tif ( replace === undefined ) {\n\n\t\t\t\tthrow new Error( 'Can not resolve #include <' + include + '>' );\n\n\t\t\t}\n\n\t\t\treturn parseIncludes( replace );\n\n\t\t}\n\n\t\treturn string.replace( pattern, replace );\n\n\t}\n\n\tfunction unrollLoops( string ) {\n\n\t\tvar pattern = /for \\( int i \\= (\\d+)\\; i < (\\d+)\\; i \\+\\+ \\) \\{([\\s\\S]+?)(?=\\})\\}/g;\n\n\t\tfunction replace( match, start, end, snippet ) {\n\n\t\t\tvar unroll = '';\n\n\t\t\tfor ( var i = parseInt( start ); i < parseInt( end ); i ++ ) {\n\n\t\t\t\tunroll += snippet.replace( /\\[ i \\]/g, '[ ' + i + ' ]' );\n\n\t\t\t}\n\n\t\t\treturn unroll;\n\n\t\t}\n\n\t\treturn string.replace( pattern, replace );\n\n\t}\n\n\tfunction WebGLProgram( renderer, extensions, code, material, shader, parameters ) {\n\n\t\tvar gl = renderer.context;\n\n\t\tvar defines = material.defines;\n\n\t\tvar vertexShader = shader.vertexShader;\n\t\tvar fragmentShader = shader.fragmentShader;\n\n\t\tvar shadowMapTypeDefine = 'SHADOWMAP_TYPE_BASIC';\n\n\t\tif ( parameters.shadowMapType === PCFShadowMap ) {\n\n\t\t\tshadowMapTypeDefine = 'SHADOWMAP_TYPE_PCF';\n\n\t\t} else if ( parameters.shadowMapType === PCFSoftShadowMap ) {\n\n\t\t\tshadowMapTypeDefine = 'SHADOWMAP_TYPE_PCF_SOFT';\n\n\t\t}\n\n\t\tvar envMapTypeDefine = 'ENVMAP_TYPE_CUBE';\n\t\tvar envMapModeDefine = 'ENVMAP_MODE_REFLECTION';\n\t\tvar envMapBlendingDefine = 'ENVMAP_BLENDING_MULTIPLY';\n\n\t\tif ( parameters.envMap ) {\n\n\t\t\tswitch ( material.envMap.mapping ) {\n\n\t\t\t\tcase CubeReflectionMapping:\n\t\t\t\tcase CubeRefractionMapping:\n\t\t\t\t\tenvMapTypeDefine = 'ENVMAP_TYPE_CUBE';\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase CubeUVReflectionMapping:\n\t\t\t\tcase CubeUVRefractionMapping:\n\t\t\t\t\tenvMapTypeDefine = 'ENVMAP_TYPE_CUBE_UV';\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase EquirectangularReflectionMapping:\n\t\t\t\tcase EquirectangularRefractionMapping:\n\t\t\t\t\tenvMapTypeDefine = 'ENVMAP_TYPE_EQUIREC';\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase SphericalReflectionMapping:\n\t\t\t\t\tenvMapTypeDefine = 'ENVMAP_TYPE_SPHERE';\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tswitch ( material.envMap.mapping ) {\n\n\t\t\t\tcase CubeRefractionMapping:\n\t\t\t\tcase EquirectangularRefractionMapping:\n\t\t\t\t\tenvMapModeDefine = 'ENVMAP_MODE_REFRACTION';\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tswitch ( material.combine ) {\n\n\t\t\t\tcase MultiplyOperation:\n\t\t\t\t\tenvMapBlendingDefine = 'ENVMAP_BLENDING_MULTIPLY';\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase MixOperation:\n\t\t\t\t\tenvMapBlendingDefine = 'ENVMAP_BLENDING_MIX';\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase AddOperation:\n\t\t\t\t\tenvMapBlendingDefine = 'ENVMAP_BLENDING_ADD';\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t\tvar gammaFactorDefine = ( renderer.gammaFactor > 0 ) ? renderer.gammaFactor : 1.0;\n\n\t\t// console.log( 'building new program ' );\n\n\t\t//\n\n\t\tvar customExtensions = generateExtensions( material.extensions, parameters, extensions );\n\n\t\tvar customDefines = generateDefines( defines );\n\n\t\t//\n\n\t\tvar program = gl.createProgram();\n\n\t\tvar prefixVertex, prefixFragment;\n\n\t\tif ( material.isRawShaderMaterial ) {\n\n\t\t\tprefixVertex = [\n\n\t\t\t\tcustomDefines\n\n\t\t\t].filter( filterEmptyLine ).join( '\\n' );\n\n\t\t\tif ( prefixVertex.length > 0 ) {\n\n\t\t\t\tprefixVertex += '\\n';\n\n\t\t\t}\n\n\t\t\tprefixFragment = [\n\n\t\t\t\tcustomExtensions,\n\t\t\t\tcustomDefines\n\n\t\t\t].filter( filterEmptyLine ).join( '\\n' );\n\n\t\t\tif ( prefixFragment.length > 0 ) {\n\n\t\t\t\tprefixFragment += '\\n';\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tprefixVertex = [\n\n\t\t\t\t'precision ' + parameters.precision + ' float;',\n\t\t\t\t'precision ' + parameters.precision + ' int;',\n\n\t\t\t\t'#define SHADER_NAME ' + shader.name,\n\n\t\t\t\tcustomDefines,\n\n\t\t\t\tparameters.supportsVertexTextures ? '#define VERTEX_TEXTURES' : '',\n\n\t\t\t\t'#define GAMMA_FACTOR ' + gammaFactorDefine,\n\n\t\t\t\t'#define MAX_BONES ' + parameters.maxBones,\n\t\t\t\t( parameters.useFog && parameters.fog ) ? '#define USE_FOG' : '',\n\t\t\t\t( parameters.useFog && parameters.fogExp ) ? '#define FOG_EXP2' : '',\n\n\t\t\t\tparameters.map ? '#define USE_MAP' : '',\n\t\t\t\tparameters.envMap ? '#define USE_ENVMAP' : '',\n\t\t\t\tparameters.envMap ? '#define ' + envMapModeDefine : '',\n\t\t\t\tparameters.lightMap ? '#define USE_LIGHTMAP' : '',\n\t\t\t\tparameters.aoMap ? '#define USE_AOMAP' : '',\n\t\t\t\tparameters.emissiveMap ? '#define USE_EMISSIVEMAP' : '',\n\t\t\t\tparameters.bumpMap ? '#define USE_BUMPMAP' : '',\n\t\t\t\tparameters.normalMap ? '#define USE_NORMALMAP' : '',\n\t\t\t\tparameters.displacementMap && parameters.supportsVertexTextures ? '#define USE_DISPLACEMENTMAP' : '',\n\t\t\t\tparameters.specularMap ? '#define USE_SPECULARMAP' : '',\n\t\t\t\tparameters.roughnessMap ? '#define USE_ROUGHNESSMAP' : '',\n\t\t\t\tparameters.metalnessMap ? '#define USE_METALNESSMAP' : '',\n\t\t\t\tparameters.alphaMap ? '#define USE_ALPHAMAP' : '',\n\t\t\t\tparameters.vertexColors ? '#define USE_COLOR' : '',\n\n\t\t\t\tparameters.flatShading ? '#define FLAT_SHADED' : '',\n\n\t\t\t\tparameters.skinning ? '#define USE_SKINNING' : '',\n\t\t\t\tparameters.useVertexTexture ? '#define BONE_TEXTURE' : '',\n\n\t\t\t\tparameters.morphTargets ? '#define USE_MORPHTARGETS' : '',\n\t\t\t\tparameters.morphNormals && parameters.flatShading === false ? '#define USE_MORPHNORMALS' : '',\n\t\t\t\tparameters.doubleSided ? '#define DOUBLE_SIDED' : '',\n\t\t\t\tparameters.flipSided ? '#define FLIP_SIDED' : '',\n\n\t\t\t\t'#define NUM_CLIPPING_PLANES ' + parameters.numClippingPlanes,\n\n\t\t\t\tparameters.shadowMapEnabled ? '#define USE_SHADOWMAP' : '',\n\t\t\t\tparameters.shadowMapEnabled ? '#define ' + shadowMapTypeDefine : '',\n\n\t\t\t\tparameters.sizeAttenuation ? '#define USE_SIZEATTENUATION' : '',\n\n\t\t\t\tparameters.logarithmicDepthBuffer ? '#define USE_LOGDEPTHBUF' : '',\n\t\t\t\tparameters.logarithmicDepthBuffer && extensions.get( 'EXT_frag_depth' ) ? '#define USE_LOGDEPTHBUF_EXT' : '',\n\n\t\t\t\t'uniform mat4 modelMatrix;',\n\t\t\t\t'uniform mat4 modelViewMatrix;',\n\t\t\t\t'uniform mat4 projectionMatrix;',\n\t\t\t\t'uniform mat4 viewMatrix;',\n\t\t\t\t'uniform mat3 normalMatrix;',\n\t\t\t\t'uniform vec3 cameraPosition;',\n\n\t\t\t\t'attribute vec3 position;',\n\t\t\t\t'attribute vec3 normal;',\n\t\t\t\t'attribute vec2 uv;',\n\n\t\t\t\t'#ifdef USE_COLOR',\n\n\t\t\t\t'\tattribute vec3 color;',\n\n\t\t\t\t'#endif',\n\n\t\t\t\t'#ifdef USE_MORPHTARGETS',\n\n\t\t\t\t'\tattribute vec3 morphTarget0;',\n\t\t\t\t'\tattribute vec3 morphTarget1;',\n\t\t\t\t'\tattribute vec3 morphTarget2;',\n\t\t\t\t'\tattribute vec3 morphTarget3;',\n\n\t\t\t\t'\t#ifdef USE_MORPHNORMALS',\n\n\t\t\t\t'\t\tattribute vec3 morphNormal0;',\n\t\t\t\t'\t\tattribute vec3 morphNormal1;',\n\t\t\t\t'\t\tattribute vec3 morphNormal2;',\n\t\t\t\t'\t\tattribute vec3 morphNormal3;',\n\n\t\t\t\t'\t#else',\n\n\t\t\t\t'\t\tattribute vec3 morphTarget4;',\n\t\t\t\t'\t\tattribute vec3 morphTarget5;',\n\t\t\t\t'\t\tattribute vec3 morphTarget6;',\n\t\t\t\t'\t\tattribute vec3 morphTarget7;',\n\n\t\t\t\t'\t#endif',\n\n\t\t\t\t'#endif',\n\n\t\t\t\t'#ifdef USE_SKINNING',\n\n\t\t\t\t'\tattribute vec4 skinIndex;',\n\t\t\t\t'\tattribute vec4 skinWeight;',\n\n\t\t\t\t'#endif',\n\n\t\t\t\t'\\n'\n\n\t\t\t].filter( filterEmptyLine ).join( '\\n' );\n\n\t\t\tprefixFragment = [\n\n\t\t\t\tcustomExtensions,\n\n\t\t\t\t'precision ' + parameters.precision + ' float;',\n\t\t\t\t'precision ' + parameters.precision + ' int;',\n\n\t\t\t\t'#define SHADER_NAME ' + shader.name,\n\n\t\t\t\tcustomDefines,\n\n\t\t\t\tparameters.alphaTest ? '#define ALPHATEST ' + parameters.alphaTest : '',\n\n\t\t\t\t'#define GAMMA_FACTOR ' + gammaFactorDefine,\n\n\t\t\t\t( parameters.useFog && parameters.fog ) ? '#define USE_FOG' : '',\n\t\t\t\t( parameters.useFog && parameters.fogExp ) ? '#define FOG_EXP2' : '',\n\n\t\t\t\tparameters.map ? '#define USE_MAP' : '',\n\t\t\t\tparameters.envMap ? '#define USE_ENVMAP' : '',\n\t\t\t\tparameters.envMap ? '#define ' + envMapTypeDefine : '',\n\t\t\t\tparameters.envMap ? '#define ' + envMapModeDefine : '',\n\t\t\t\tparameters.envMap ? '#define ' + envMapBlendingDefine : '',\n\t\t\t\tparameters.lightMap ? '#define USE_LIGHTMAP' : '',\n\t\t\t\tparameters.aoMap ? '#define USE_AOMAP' : '',\n\t\t\t\tparameters.emissiveMap ? '#define USE_EMISSIVEMAP' : '',\n\t\t\t\tparameters.bumpMap ? '#define USE_BUMPMAP' : '',\n\t\t\t\tparameters.normalMap ? '#define USE_NORMALMAP' : '',\n\t\t\t\tparameters.specularMap ? '#define USE_SPECULARMAP' : '',\n\t\t\t\tparameters.roughnessMap ? '#define USE_ROUGHNESSMAP' : '',\n\t\t\t\tparameters.metalnessMap ? '#define USE_METALNESSMAP' : '',\n\t\t\t\tparameters.alphaMap ? '#define USE_ALPHAMAP' : '',\n\t\t\t\tparameters.vertexColors ? '#define USE_COLOR' : '',\n\n\t\t\t\tparameters.gradientMap ? '#define USE_GRADIENTMAP' : '',\n\n\t\t\t\tparameters.flatShading ? '#define FLAT_SHADED' : '',\n\n\t\t\t\tparameters.doubleSided ? '#define DOUBLE_SIDED' : '',\n\t\t\t\tparameters.flipSided ? '#define FLIP_SIDED' : '',\n\n\t\t\t\t'#define NUM_CLIPPING_PLANES ' + parameters.numClippingPlanes,\n\t\t\t\t'#define UNION_CLIPPING_PLANES ' + ( parameters.numClippingPlanes - parameters.numClipIntersection ),\n\n\t\t\t\tparameters.shadowMapEnabled ? '#define USE_SHADOWMAP' : '',\n\t\t\t\tparameters.shadowMapEnabled ? '#define ' + shadowMapTypeDefine : '',\n\n\t\t\t\tparameters.premultipliedAlpha ? \"#define PREMULTIPLIED_ALPHA\" : '',\n\n\t\t\t\tparameters.physicallyCorrectLights ? \"#define PHYSICALLY_CORRECT_LIGHTS\" : '',\n\n\t\t\t\tparameters.logarithmicDepthBuffer ? '#define USE_LOGDEPTHBUF' : '',\n\t\t\t\tparameters.logarithmicDepthBuffer && extensions.get( 'EXT_frag_depth' ) ? '#define USE_LOGDEPTHBUF_EXT' : '',\n\n\t\t\t\tparameters.envMap && extensions.get( 'EXT_shader_texture_lod' ) ? '#define TEXTURE_LOD_EXT' : '',\n\n\t\t\t\t'uniform mat4 viewMatrix;',\n\t\t\t\t'uniform vec3 cameraPosition;',\n\n\t\t\t\t( parameters.toneMapping !== NoToneMapping ) ? \"#define TONE_MAPPING\" : '',\n\t\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\t( parameters.toneMapping !== NoToneMapping ) ? getToneMappingFunction( \"toneMapping\", parameters.toneMapping ) : '',\n\n\t\t\t\tparameters.dithering ? '#define DITHERING' : '',\n\n\t\t\t\t( parameters.outputEncoding || parameters.mapEncoding || parameters.envMapEncoding || parameters.emissiveMapEncoding ) ? ShaderChunk[ 'encodings_pars_fragment' ] : '', // this code is required here because it is used by the various encoding/decoding function defined below\n\t\t\t\tparameters.mapEncoding ? getTexelDecodingFunction( 'mapTexelToLinear', parameters.mapEncoding ) : '',\n\t\t\t\tparameters.envMapEncoding ? getTexelDecodingFunction( 'envMapTexelToLinear', parameters.envMapEncoding ) : '',\n\t\t\t\tparameters.emissiveMapEncoding ? getTexelDecodingFunction( 'emissiveMapTexelToLinear', parameters.emissiveMapEncoding ) : '',\n\t\t\t\tparameters.outputEncoding ? getTexelEncodingFunction( \"linearToOutputTexel\", parameters.outputEncoding ) : '',\n\n\t\t\t\tparameters.depthPacking ? \"#define DEPTH_PACKING \" + material.depthPacking : '',\n\n\t\t\t\t'\\n'\n\n\t\t\t].filter( filterEmptyLine ).join( '\\n' );\n\n\t\t}\n\n\t\tvertexShader = parseIncludes( vertexShader );\n\t\tvertexShader = replaceLightNums( vertexShader, parameters );\n\n\t\tfragmentShader = parseIncludes( fragmentShader );\n\t\tfragmentShader = replaceLightNums( fragmentShader, parameters );\n\n\t\tif ( ! material.isShaderMaterial ) {\n\n\t\t\tvertexShader = unrollLoops( vertexShader );\n\t\t\tfragmentShader = unrollLoops( fragmentShader );\n\n\t\t}\n\n\t\tvar vertexGlsl = prefixVertex + vertexShader;\n\t\tvar fragmentGlsl = prefixFragment + fragmentShader;\n\n\t\t// console.log( '*VERTEX*', vertexGlsl );\n\t\t// console.log( '*FRAGMENT*', fragmentGlsl );\n\n\t\tvar glVertexShader = WebGLShader( gl, gl.VERTEX_SHADER, vertexGlsl );\n\t\tvar glFragmentShader = WebGLShader( gl, gl.FRAGMENT_SHADER, fragmentGlsl );\n\n\t\tgl.attachShader( program, glVertexShader );\n\t\tgl.attachShader( program, glFragmentShader );\n\n\t\t// Force a particular attribute to index 0.\n\n\t\tif ( material.index0AttributeName !== undefined ) {\n\n\t\t\tgl.bindAttribLocation( program, 0, material.index0AttributeName );\n\n\t\t} else if ( parameters.morphTargets === true ) {\n\n\t\t\t// programs with morphTargets displace position out of attribute 0\n\t\t\tgl.bindAttribLocation( program, 0, 'position' );\n\n\t\t}\n\n\t\tgl.linkProgram( program );\n\n\t\tvar programLog = gl.getProgramInfoLog( program );\n\t\tvar vertexLog = gl.getShaderInfoLog( glVertexShader );\n\t\tvar fragmentLog = gl.getShaderInfoLog( glFragmentShader );\n\n\t\tvar runnable = true;\n\t\tvar haveDiagnostics = true;\n\n\t\t// console.log( '**VERTEX**', gl.getExtension( 'WEBGL_debug_shaders' ).getTranslatedShaderSource( glVertexShader ) );\n\t\t// console.log( '**FRAGMENT**', gl.getExtension( 'WEBGL_debug_shaders' ).getTranslatedShaderSource( glFragmentShader ) );\n\n\t\tif ( gl.getProgramParameter( program, gl.LINK_STATUS ) === false ) {\n\n\t\t\trunnable = false;\n\n\t\t\tconsole.error( 'THREE.WebGLProgram: shader error: ', gl.getError(), 'gl.VALIDATE_STATUS', gl.getProgramParameter( program, gl.VALIDATE_STATUS ), 'gl.getProgramInfoLog', programLog, vertexLog, fragmentLog );\n\n\t\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\t\t\t\tmaterial: material,\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\t// clean up\n\n\t\tgl.deleteShader( glVertexShader );\n\t\tgl.deleteShader( glFragmentShader );\n\n\t\t// set up caching for uniform locations\n\n\t\tvar cachedUniforms;\n\n\t\tthis.getUniforms = function () {\n\n\t\t\tif ( cachedUniforms === undefined ) {\n\n\t\t\t\tcachedUniforms = new WebGLUniforms( gl, program, renderer );\n\n\t\t\t}\n\n\t\t\treturn cachedUniforms;\n\n\t\t};\n\n\t\t// set up caching for attribute locations\n\n\t\tvar cachedAttributes;\n\n\t\tthis.getAttributes = function () {\n\n\t\t\tif ( cachedAttributes === undefined ) {\n\n\t\t\t\tcachedAttributes = fetchAttributeLocations( gl, program );\n\n\t\t\t}\n\n\t\t\treturn cachedAttributes;\n\n\t\t};\n\n\t\t// free resource\n\n\t\tthis.destroy = function () {\n\n\t\t\tgl.deleteProgram( program );\n\t\t\tthis.program = undefined;\n\n\t\t};\n\n\t\t// DEPRECATED\n\n\t\tObject.defineProperties( this, {\n\n\t\t\tuniforms: {\n\t\t\t\tget: function () {\n\n\t\t\t\t\tconsole.warn( 'THREE.WebGLProgram: .uniforms is now .getUniforms().' );\n\t\t\t\t\treturn this.getUniforms();\n\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tattributes: {\n\t\t\t\tget: function () {\n\n\t\t\t\t\tconsole.warn( 'THREE.WebGLProgram: .attributes is now .getAttributes().' );\n\t\t\t\t\treturn this.getAttributes();\n\n\t\t\t\t}\n\t\t\t}\n\n\t\t} );\n\n\n\t\t//\n\n\t\tthis.id = programIdCount ++;\n\t\tthis.code = code;\n\t\tthis.usedTimes = 1;\n\t\tthis.program = program;\n\t\tthis.vertexShader = glVertexShader;\n\t\tthis.fragmentShader = glFragmentShader;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t */\n\n\tfunction WebGLPrograms( renderer, extensions, capabilities ) {\n\n\t\tvar programs = [];\n\n\t\tvar shaderIDs = {\n\t\t\tMeshDepthMaterial: 'depth',\n\t\t\tMeshDistanceMaterial: 'distanceRGBA',\n\t\t\tMeshNormalMaterial: 'normal',\n\t\t\tMeshBasicMaterial: 'basic',\n\t\t\tMeshLambertMaterial: 'lambert',\n\t\t\tMeshPhongMaterial: 'phong',\n\t\t\tMeshToonMaterial: 'phong',\n\t\t\tMeshStandardMaterial: 'physical',\n\t\t\tMeshPhysicalMaterial: 'physical',\n\t\t\tLineBasicMaterial: 'basic',\n\t\t\tLineDashedMaterial: 'dashed',\n\t\t\tPointsMaterial: 'points',\n\t\t\tShadowMaterial: 'shadow'\n\t\t};\n\n\t\tvar parameterNames = [\n\t\t\t\"precision\", \"supportsVertexTextures\", \"map\", \"mapEncoding\", \"envMap\", \"envMapMode\", \"envMapEncoding\",\n\t\t\t\"lightMap\", \"aoMap\", \"emissiveMap\", \"emissiveMapEncoding\", \"bumpMap\", \"normalMap\", \"displacementMap\", \"specularMap\",\n\t\t\t\"roughnessMap\", \"metalnessMap\", \"gradientMap\",\n\t\t\t\"alphaMap\", \"combine\", \"vertexColors\", \"fog\", \"useFog\", \"fogExp\",\n\t\t\t\"flatShading\", \"sizeAttenuation\", \"logarithmicDepthBuffer\", \"skinning\",\n\t\t\t\"maxBones\", \"useVertexTexture\", \"morphTargets\", \"morphNormals\",\n\t\t\t\"maxMorphTargets\", \"maxMorphNormals\", \"premultipliedAlpha\",\n\t\t\t\"numDirLights\", \"numPointLights\", \"numSpotLights\", \"numHemiLights\", \"numRectAreaLights\",\n\t\t\t\"shadowMapEnabled\", \"shadowMapType\", \"toneMapping\", 'physicallyCorrectLights',\n\t\t\t\"alphaTest\", \"doubleSided\", \"flipSided\", \"numClippingPlanes\", \"numClipIntersection\", \"depthPacking\", \"dithering\"\n\t\t];\n\n\n\t\tfunction allocateBones( object ) {\n\n\t\t\tvar skeleton = object.skeleton;\n\t\t\tvar bones = skeleton.bones;\n\n\t\t\tif ( capabilities.floatVertexTextures ) {\n\n\t\t\t\treturn 1024;\n\n\t\t\t} else {\n\n\t\t\t\t// default for when object is not specified\n\t\t\t\t// ( for example when prebuilding shader to be used with multiple objects )\n\t\t\t\t//\n\t\t\t\t// - leave some extra space for other uniforms\n\t\t\t\t// - limit here is ANGLE's 254 max uniform vectors\n\t\t\t\t// (up to 54 should be safe)\n\n\t\t\t\tvar nVertexUniforms = capabilities.maxVertexUniforms;\n\t\t\t\tvar nVertexMatrices = Math.floor( ( nVertexUniforms - 20 ) / 4 );\n\n\t\t\t\tvar maxBones = Math.min( nVertexMatrices, bones.length );\n\n\t\t\t\tif ( maxBones < bones.length ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Skeleton has ' + bones.length + ' bones. This GPU supports ' + maxBones + '.' );\n\t\t\t\t\treturn 0;\n\n\t\t\t\t}\n\n\t\t\t\treturn maxBones;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction getTextureEncodingFromMap( map, gammaOverrideLinear ) {\n\n\t\t\tvar encoding;\n\n\t\t\tif ( ! map ) {\n\n\t\t\t\tencoding = LinearEncoding;\n\n\t\t\t} else if ( map.isTexture ) {\n\n\t\t\t\tencoding = map.encoding;\n\n\t\t\t} else if ( map.isWebGLRenderTarget ) {\n\n\t\t\t\tconsole.warn( \"THREE.WebGLPrograms.getTextureEncodingFromMap: don't use render targets as textures. Use their .texture property instead.\" );\n\t\t\t\tencoding = map.texture.encoding;\n\n\t\t\t}\n\n\t\t\t// add backwards compatibility for WebGLRenderer.gammaInput/gammaOutput parameter, should probably be removed at some point.\n\t\t\tif ( encoding === LinearEncoding && gammaOverrideLinear ) {\n\n\t\t\t\tencoding = GammaEncoding;\n\n\t\t\t}\n\n\t\t\treturn encoding;\n\n\t\t}\n\n\t\tthis.getParameters = function ( material, lights, shadows, fog, nClipPlanes, nClipIntersection, object ) {\n\n\t\t\tvar shaderID = shaderIDs[ material.type ];\n\n\t\t\t// heuristics to create shader parameters according to lights in the scene\n\t\t\t// (not to blow over maxLights budget)\n\n\t\t\tvar maxBones = object.isSkinnedMesh ? allocateBones( object ) : 0;\n\t\t\tvar precision = capabilities.precision;\n\n\t\t\tif ( material.precision !== null ) {\n\n\t\t\t\tprecision = capabilities.getMaxPrecision( material.precision );\n\n\t\t\t\tif ( precision !== material.precision ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.WebGLProgram.getParameters:', material.precision, 'not supported, using', precision, 'instead.' );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tvar currentRenderTarget = renderer.getRenderTarget();\n\n\t\t\tvar parameters = {\n\n\t\t\t\tshaderID: shaderID,\n\n\t\t\t\tprecision: precision,\n\t\t\t\tsupportsVertexTextures: capabilities.vertexTextures,\n\t\t\t\toutputEncoding: getTextureEncodingFromMap( ( ! currentRenderTarget ) ? null : currentRenderTarget.texture, renderer.gammaOutput ),\n\t\t\t\tmap: !! material.map,\n\t\t\t\tmapEncoding: getTextureEncodingFromMap( material.map, renderer.gammaInput ),\n\t\t\t\tenvMap: !! material.envMap,\n\t\t\t\tenvMapMode: material.envMap && material.envMap.mapping,\n\t\t\t\tenvMapEncoding: getTextureEncodingFromMap( material.envMap, renderer.gammaInput ),\n\t\t\t\tenvMapCubeUV: ( !! material.envMap ) && ( ( material.envMap.mapping === CubeUVReflectionMapping ) || ( material.envMap.mapping === CubeUVRefractionMapping ) ),\n\t\t\t\tlightMap: !! material.lightMap,\n\t\t\t\taoMap: !! material.aoMap,\n\t\t\t\temissiveMap: !! material.emissiveMap,\n\t\t\t\temissiveMapEncoding: getTextureEncodingFromMap( material.emissiveMap, renderer.gammaInput ),\n\t\t\t\tbumpMap: !! material.bumpMap,\n\t\t\t\tnormalMap: !! material.normalMap,\n\t\t\t\tdisplacementMap: !! material.displacementMap,\n\t\t\t\troughnessMap: !! material.roughnessMap,\n\t\t\t\tmetalnessMap: !! material.metalnessMap,\n\t\t\t\tspecularMap: !! material.specularMap,\n\t\t\t\talphaMap: !! material.alphaMap,\n\n\t\t\t\tgradientMap: !! material.gradientMap,\n\n\t\t\t\tcombine: material.combine,\n\n\t\t\t\tvertexColors: material.vertexColors,\n\n\t\t\t\tfog: !! fog,\n\t\t\t\tuseFog: material.fog,\n\t\t\t\tfogExp: ( fog && fog.isFogExp2 ),\n\n\t\t\t\tflatShading: material.flatShading,\n\n\t\t\t\tsizeAttenuation: material.sizeAttenuation,\n\t\t\t\tlogarithmicDepthBuffer: capabilities.logarithmicDepthBuffer,\n\n\t\t\t\tskinning: material.skinning && maxBones > 0,\n\t\t\t\tmaxBones: maxBones,\n\t\t\t\tuseVertexTexture: capabilities.floatVertexTextures,\n\n\t\t\t\tmorphTargets: material.morphTargets,\n\t\t\t\tmorphNormals: material.morphNormals,\n\t\t\t\tmaxMorphTargets: renderer.maxMorphTargets,\n\t\t\t\tmaxMorphNormals: renderer.maxMorphNormals,\n\n\t\t\t\tnumDirLights: lights.directional.length,\n\t\t\t\tnumPointLights: lights.point.length,\n\t\t\t\tnumSpotLights: lights.spot.length,\n\t\t\t\tnumRectAreaLights: lights.rectArea.length,\n\t\t\t\tnumHemiLights: lights.hemi.length,\n\n\t\t\t\tnumClippingPlanes: nClipPlanes,\n\t\t\t\tnumClipIntersection: nClipIntersection,\n\n\t\t\t\tdithering: material.dithering,\n\n\t\t\t\tshadowMapEnabled: renderer.shadowMap.enabled && object.receiveShadow && shadows.length > 0,\n\t\t\t\tshadowMapType: renderer.shadowMap.type,\n\n\t\t\t\ttoneMapping: renderer.toneMapping,\n\t\t\t\tphysicallyCorrectLights: renderer.physicallyCorrectLights,\n\n\t\t\t\tpremultipliedAlpha: material.premultipliedAlpha,\n\n\t\t\t\talphaTest: material.alphaTest,\n\t\t\t\tdoubleSided: material.side === DoubleSide,\n\t\t\t\tflipSided: material.side === BackSide,\n\n\t\t\t\tdepthPacking: ( material.depthPacking !== undefined ) ? material.depthPacking : false\n\n\t\t\t};\n\n\t\t\treturn parameters;\n\n\t\t};\n\n\t\tthis.getProgramCode = function ( material, parameters ) {\n\n\t\t\tvar array = [];\n\n\t\t\tif ( parameters.shaderID ) {\n\n\t\t\t\tarray.push( parameters.shaderID );\n\n\t\t\t} else {\n\n\t\t\t\tarray.push( material.fragmentShader );\n\t\t\t\tarray.push( material.vertexShader );\n\n\t\t\t}\n\n\t\t\tif ( material.defines !== undefined ) {\n\n\t\t\t\tfor ( var name in material.defines ) {\n\n\t\t\t\t\tarray.push( name );\n\t\t\t\t\tarray.push( material.defines[ name ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tfor ( var 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( material.onBeforeCompile.toString() );\n\n\t\t\tarray.push( renderer.gammaOutput );\n\n\t\t\treturn array.join();\n\n\t\t};\n\n\t\tthis.acquireProgram = function ( material, shader, parameters, code ) {\n\n\t\t\tvar program;\n\n\t\t\t// Check if code has been already compiled\n\t\t\tfor ( var p = 0, pl = programs.length; p < pl; p ++ ) {\n\n\t\t\t\tvar programInfo = programs[ p ];\n\n\t\t\t\tif ( programInfo.code === code ) {\n\n\t\t\t\t\tprogram = programInfo;\n\t\t\t\t\t++ program.usedTimes;\n\n\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( program === undefined ) {\n\n\t\t\t\tprogram = new WebGLProgram( renderer, extensions, code, material, shader, parameters );\n\t\t\t\tprograms.push( program );\n\n\t\t\t}\n\n\t\t\treturn program;\n\n\t\t};\n\n\t\tthis.releaseProgram = function ( program ) {\n\n\t\t\tif ( -- program.usedTimes === 0 ) {\n\n\t\t\t\t// Remove from unordered set\n\t\t\t\tvar i = programs.indexOf( program );\n\t\t\t\tprograms[ i ] = programs[ programs.length - 1 ];\n\t\t\t\tprograms.pop();\n\n\t\t\t\t// Free WebGL resources\n\t\t\t\tprogram.destroy();\n\n\t\t\t}\n\n\t\t};\n\n\t\t// Exposed for resource monitoring & error feedback via renderer.info:\n\t\tthis.programs = programs;\n\n\t}\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t */\n\n\tfunction WebGLTextures( _gl, extensions, state, properties, capabilities, utils, infoMemory ) {\n\n\t\tvar _isWebGL2 = ( typeof WebGL2RenderingContext !== 'undefined' && _gl instanceof window.WebGL2RenderingContext );\n\n\t\t//\n\n\t\tfunction clampToMaxSize( image, maxSize ) {\n\n\t\t\tif ( image.width > maxSize || image.height > maxSize ) {\n\n\t\t\t\t// Warning: Scaling through the canvas will only work with images that use\n\t\t\t\t// premultiplied alpha.\n\n\t\t\t\tvar scale = maxSize / Math.max( image.width, image.height );\n\n\t\t\t\tvar canvas = document.createElementNS( 'http://www.w3.org/1999/xhtml', 'canvas' );\n\t\t\t\tcanvas.width = Math.floor( image.width * scale );\n\t\t\t\tcanvas.height = Math.floor( image.height * scale );\n\n\t\t\t\tvar context = canvas.getContext( '2d' );\n\t\t\t\tcontext.drawImage( image, 0, 0, image.width, image.height, 0, 0, canvas.width, canvas.height );\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: image is too big (' + image.width + 'x' + image.height + '). Resized to ' + canvas.width + 'x' + canvas.height, image );\n\n\t\t\t\treturn canvas;\n\n\t\t\t}\n\n\t\t\treturn image;\n\n\t\t}\n\n\t\tfunction isPowerOfTwo( image ) {\n\n\t\t\treturn _Math.isPowerOfTwo( image.width ) && _Math.isPowerOfTwo( image.height );\n\n\t\t}\n\n\t\tfunction makePowerOfTwo( image ) {\n\n\t\t\tif ( image instanceof HTMLImageElement || image instanceof HTMLCanvasElement || image instanceof ImageBitmap ) {\n\n\t\t\t\tvar canvas = document.createElementNS( 'http://www.w3.org/1999/xhtml', 'canvas' );\n\t\t\t\tcanvas.width = _Math.floorPowerOfTwo( image.width );\n\t\t\t\tcanvas.height = _Math.floorPowerOfTwo( image.height );\n\n\t\t\t\tvar context = canvas.getContext( '2d' );\n\t\t\t\tcontext.drawImage( image, 0, 0, canvas.width, canvas.height );\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: image is not power of two (' + image.width + 'x' + image.height + '). Resized to ' + canvas.width + 'x' + canvas.height, image );\n\n\t\t\t\treturn canvas;\n\n\t\t\t}\n\n\t\t\treturn image;\n\n\t\t}\n\n\t\tfunction textureNeedsPowerOfTwo( texture ) {\n\n\t\t\treturn ( texture.wrapS !== ClampToEdgeWrapping || texture.wrapT !== ClampToEdgeWrapping ) ||\n\t\t\t\t( texture.minFilter !== NearestFilter && texture.minFilter !== LinearFilter );\n\n\t\t}\n\n\t\tfunction textureNeedsGenerateMipmaps( texture, isPowerOfTwo ) {\n\n\t\t\treturn texture.generateMipmaps && isPowerOfTwo &&\n\t\t\t\ttexture.minFilter !== NearestFilter && texture.minFilter !== LinearFilter;\n\n\t\t}\n\n\t\t// Fallback filters for non-power-of-2 textures\n\n\t\tfunction filterFallback( f ) {\n\n\t\t\tif ( f === NearestFilter || f === NearestMipMapNearestFilter || f === NearestMipMapLinearFilter ) {\n\n\t\t\t\treturn _gl.NEAREST;\n\n\t\t\t}\n\n\t\t\treturn _gl.LINEAR;\n\n\t\t}\n\n\t\t//\n\n\t\tfunction onTextureDispose( event ) {\n\n\t\t\tvar texture = event.target;\n\n\t\t\ttexture.removeEventListener( 'dispose', onTextureDispose );\n\n\t\t\tdeallocateTexture( texture );\n\n\t\t\tinfoMemory.textures --;\n\n\n\t\t}\n\n\t\tfunction onRenderTargetDispose( event ) {\n\n\t\t\tvar renderTarget = event.target;\n\n\t\t\trenderTarget.removeEventListener( 'dispose', onRenderTargetDispose );\n\n\t\t\tdeallocateRenderTarget( renderTarget );\n\n\t\t\tinfoMemory.textures --;\n\n\t\t}\n\n\t\t//\n\n\t\tfunction deallocateTexture( texture ) {\n\n\t\t\tvar textureProperties = properties.get( texture );\n\n\t\t\tif ( texture.image && textureProperties.__image__webglTextureCube ) {\n\n\t\t\t\t// cube texture\n\n\t\t\t\t_gl.deleteTexture( textureProperties.__image__webglTextureCube );\n\n\t\t\t} else {\n\n\t\t\t\t// 2D texture\n\n\t\t\t\tif ( textureProperties.__webglInit === undefined ) return;\n\n\t\t\t\t_gl.deleteTexture( textureProperties.__webglTexture );\n\n\t\t\t}\n\n\t\t\t// remove all webgl properties\n\t\t\tproperties.remove( texture );\n\n\t\t}\n\n\t\tfunction deallocateRenderTarget( renderTarget ) {\n\n\t\t\tvar renderTargetProperties = properties.get( renderTarget );\n\t\t\tvar textureProperties = properties.get( renderTarget.texture );\n\n\t\t\tif ( ! renderTarget ) return;\n\n\t\t\tif ( textureProperties.__webglTexture !== undefined ) {\n\n\t\t\t\t_gl.deleteTexture( textureProperties.__webglTexture );\n\n\t\t\t}\n\n\t\t\tif ( renderTarget.depthTexture ) {\n\n\t\t\t\trenderTarget.depthTexture.dispose();\n\n\t\t\t}\n\n\t\t\tif ( renderTarget.isWebGLRenderTargetCube ) {\n\n\t\t\t\tfor ( var i = 0; i < 6; i ++ ) {\n\n\t\t\t\t\t_gl.deleteFramebuffer( renderTargetProperties.__webglFramebuffer[ i ] );\n\t\t\t\t\tif ( renderTargetProperties.__webglDepthbuffer ) _gl.deleteRenderbuffer( renderTargetProperties.__webglDepthbuffer[ i ] );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t_gl.deleteFramebuffer( renderTargetProperties.__webglFramebuffer );\n\t\t\t\tif ( renderTargetProperties.__webglDepthbuffer ) _gl.deleteRenderbuffer( renderTargetProperties.__webglDepthbuffer );\n\n\t\t\t}\n\n\t\t\tproperties.remove( renderTarget.texture );\n\t\t\tproperties.remove( renderTarget );\n\n\t\t}\n\n\t\t//\n\n\n\n\t\tfunction setTexture2D( texture, slot ) {\n\n\t\t\tvar textureProperties = properties.get( texture );\n\n\t\t\tif ( texture.version > 0 && textureProperties.__version !== texture.version ) {\n\n\t\t\t\tvar image = texture.image;\n\n\t\t\t\tif ( image === undefined ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Texture marked for update but image is undefined', texture );\n\n\t\t\t\t} else if ( image.complete === false ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Texture marked for update but image is incomplete', texture );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tuploadTexture( textureProperties, texture, slot );\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tstate.activeTexture( _gl.TEXTURE0 + slot );\n\t\t\tstate.bindTexture( _gl.TEXTURE_2D, textureProperties.__webglTexture );\n\n\t\t}\n\n\t\tfunction setTextureCube( texture, slot ) {\n\n\t\t\tvar textureProperties = properties.get( texture );\n\n\t\t\tif ( texture.image.length === 6 ) {\n\n\t\t\t\tif ( texture.version > 0 && textureProperties.__version !== texture.version ) {\n\n\t\t\t\t\tif ( ! textureProperties.__image__webglTextureCube ) {\n\n\t\t\t\t\t\ttexture.addEventListener( 'dispose', onTextureDispose );\n\n\t\t\t\t\t\ttextureProperties.__image__webglTextureCube = _gl.createTexture();\n\n\t\t\t\t\t\tinfoMemory.textures ++;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tstate.activeTexture( _gl.TEXTURE0 + slot );\n\t\t\t\t\tstate.bindTexture( _gl.TEXTURE_CUBE_MAP, textureProperties.__image__webglTextureCube );\n\n\t\t\t\t\t_gl.pixelStorei( _gl.UNPACK_FLIP_Y_WEBGL, texture.flipY );\n\n\t\t\t\t\tvar isCompressed = ( texture && texture.isCompressedTexture );\n\t\t\t\t\tvar isDataTexture = ( texture.image[ 0 ] && texture.image[ 0 ].isDataTexture );\n\n\t\t\t\t\tvar cubeImage = [];\n\n\t\t\t\t\tfor ( var i = 0; i < 6; i ++ ) {\n\n\t\t\t\t\t\tif ( ! isCompressed && ! isDataTexture ) {\n\n\t\t\t\t\t\t\tcubeImage[ i ] = clampToMaxSize( texture.image[ i ], capabilities.maxCubemapSize );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tcubeImage[ i ] = isDataTexture ? texture.image[ i ].image : texture.image[ i ];\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tvar image = cubeImage[ 0 ],\n\t\t\t\t\t\tisPowerOfTwoImage = isPowerOfTwo( image ),\n\t\t\t\t\t\tglFormat = utils.convert( texture.format ),\n\t\t\t\t\t\tglType = utils.convert( texture.type );\n\n\t\t\t\t\tsetTextureParameters( _gl.TEXTURE_CUBE_MAP, texture, isPowerOfTwoImage );\n\n\t\t\t\t\tfor ( var i = 0; i < 6; i ++ ) {\n\n\t\t\t\t\t\tif ( ! isCompressed ) {\n\n\t\t\t\t\t\t\tif ( isDataTexture ) {\n\n\t\t\t\t\t\t\t\tstate.texImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, glFormat, cubeImage[ i ].width, cubeImage[ i ].height, 0, glFormat, glType, cubeImage[ i ].data );\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tstate.texImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, glFormat, glFormat, glType, cubeImage[ i ] );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tvar mipmap, mipmaps = cubeImage[ i ].mipmaps;\n\n\t\t\t\t\t\t\tfor ( var j = 0, jl = mipmaps.length; j < jl; j ++ ) {\n\n\t\t\t\t\t\t\t\tmipmap = mipmaps[ j ];\n\n\t\t\t\t\t\t\t\tif ( texture.format !== RGBAFormat && texture.format !== RGBFormat ) {\n\n\t\t\t\t\t\t\t\t\tif ( state.getCompressedTextureFormats().indexOf( glFormat ) > - 1 ) {\n\n\t\t\t\t\t\t\t\t\t\tstate.compressedTexImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j, glFormat, mipmap.width, mipmap.height, 0, mipmap.data );\n\n\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .setTextureCube()' );\n\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\tstate.texImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j, glFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data );\n\n\t\t\t\t\t\t\t\t}\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 ( textureNeedsGenerateMipmaps( texture, isPowerOfTwoImage ) ) {\n\n\t\t\t\t\t\t_gl.generateMipmap( _gl.TEXTURE_CUBE_MAP );\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttextureProperties.__version = texture.version;\n\n\t\t\t\t\tif ( texture.onUpdate ) texture.onUpdate( texture );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tstate.activeTexture( _gl.TEXTURE0 + slot );\n\t\t\t\t\tstate.bindTexture( _gl.TEXTURE_CUBE_MAP, textureProperties.__image__webglTextureCube );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction setTextureCubeDynamic( texture, slot ) {\n\n\t\t\tstate.activeTexture( _gl.TEXTURE0 + slot );\n\t\t\tstate.bindTexture( _gl.TEXTURE_CUBE_MAP, properties.get( texture ).__webglTexture );\n\n\t\t}\n\n\t\tfunction setTextureParameters( textureType, texture, isPowerOfTwoImage ) {\n\n\t\t\tvar extension;\n\n\t\t\tif ( isPowerOfTwoImage ) {\n\n\t\t\t\t_gl.texParameteri( textureType, _gl.TEXTURE_WRAP_S, utils.convert( texture.wrapS ) );\n\t\t\t\t_gl.texParameteri( textureType, _gl.TEXTURE_WRAP_T, utils.convert( texture.wrapT ) );\n\n\t\t\t\t_gl.texParameteri( textureType, _gl.TEXTURE_MAG_FILTER, utils.convert( texture.magFilter ) );\n\t\t\t\t_gl.texParameteri( textureType, _gl.TEXTURE_MIN_FILTER, utils.convert( texture.minFilter ) );\n\n\t\t\t} else {\n\n\t\t\t\t_gl.texParameteri( textureType, _gl.TEXTURE_WRAP_S, _gl.CLAMP_TO_EDGE );\n\t\t\t\t_gl.texParameteri( textureType, _gl.TEXTURE_WRAP_T, _gl.CLAMP_TO_EDGE );\n\n\t\t\t\tif ( texture.wrapS !== ClampToEdgeWrapping || texture.wrapT !== ClampToEdgeWrapping ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Texture is not power of two. Texture.wrapS and Texture.wrapT should be set to THREE.ClampToEdgeWrapping.', texture );\n\n\t\t\t\t}\n\n\t\t\t\t_gl.texParameteri( textureType, _gl.TEXTURE_MAG_FILTER, filterFallback( texture.magFilter ) );\n\t\t\t\t_gl.texParameteri( textureType, _gl.TEXTURE_MIN_FILTER, filterFallback( texture.minFilter ) );\n\n\t\t\t\tif ( texture.minFilter !== NearestFilter && texture.minFilter !== LinearFilter ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Texture is not power of two. Texture.minFilter should be set to THREE.NearestFilter or THREE.LinearFilter.', texture );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\textension = extensions.get( 'EXT_texture_filter_anisotropic' );\n\n\t\t\tif ( extension ) {\n\n\t\t\t\tif ( texture.type === FloatType && extensions.get( 'OES_texture_float_linear' ) === null ) return;\n\t\t\t\tif ( texture.type === HalfFloatType && extensions.get( 'OES_texture_half_float_linear' ) === null ) return;\n\n\t\t\t\tif ( texture.anisotropy > 1 || properties.get( texture ).__currentAnisotropy ) {\n\n\t\t\t\t\t_gl.texParameterf( textureType, extension.TEXTURE_MAX_ANISOTROPY_EXT, Math.min( texture.anisotropy, capabilities.getMaxAnisotropy() ) );\n\t\t\t\t\tproperties.get( texture ).__currentAnisotropy = texture.anisotropy;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction uploadTexture( textureProperties, texture, slot ) {\n\n\t\t\tif ( textureProperties.__webglInit === undefined ) {\n\n\t\t\t\ttextureProperties.__webglInit = true;\n\n\t\t\t\ttexture.addEventListener( 'dispose', onTextureDispose );\n\n\t\t\t\ttextureProperties.__webglTexture = _gl.createTexture();\n\n\t\t\t\tinfoMemory.textures ++;\n\n\t\t\t}\n\n\t\t\tstate.activeTexture( _gl.TEXTURE0 + slot );\n\t\t\tstate.bindTexture( _gl.TEXTURE_2D, textureProperties.__webglTexture );\n\n\t\t\t_gl.pixelStorei( _gl.UNPACK_FLIP_Y_WEBGL, texture.flipY );\n\t\t\t_gl.pixelStorei( _gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, texture.premultiplyAlpha );\n\t\t\t_gl.pixelStorei( _gl.UNPACK_ALIGNMENT, texture.unpackAlignment );\n\n\t\t\tvar image = clampToMaxSize( texture.image, capabilities.maxTextureSize );\n\n\t\t\tif ( textureNeedsPowerOfTwo( texture ) && isPowerOfTwo( image ) === false ) {\n\n\t\t\t\timage = makePowerOfTwo( image );\n\n\t\t\t}\n\n\t\t\tvar isPowerOfTwoImage = isPowerOfTwo( image ),\n\t\t\t\tglFormat = utils.convert( texture.format ),\n\t\t\t\tglType = utils.convert( texture.type );\n\n\t\t\tsetTextureParameters( _gl.TEXTURE_2D, texture, isPowerOfTwoImage );\n\n\t\t\tvar mipmap, mipmaps = texture.mipmaps;\n\n\t\t\tif ( texture.isDepthTexture ) {\n\n\t\t\t\t// populate depth texture with dummy data\n\n\t\t\t\tvar internalFormat = _gl.DEPTH_COMPONENT;\n\n\t\t\t\tif ( texture.type === FloatType ) {\n\n\t\t\t\t\tif ( ! _isWebGL2 ) throw new Error( 'Float Depth Texture only supported in WebGL2.0' );\n\t\t\t\t\tinternalFormat = _gl.DEPTH_COMPONENT32F;\n\n\t\t\t\t} else if ( _isWebGL2 ) {\n\n\t\t\t\t\t// WebGL 2.0 requires signed internalformat for glTexImage2D\n\t\t\t\t\tinternalFormat = _gl.DEPTH_COMPONENT16;\n\n\t\t\t\t}\n\n\t\t\t\tif ( texture.format === DepthFormat && internalFormat === _gl.DEPTH_COMPONENT ) {\n\n\t\t\t\t\t// The error INVALID_OPERATION is generated by texImage2D if format and internalformat are\n\t\t\t\t\t// DEPTH_COMPONENT and type is not UNSIGNED_SHORT or UNSIGNED_INT\n\t\t\t\t\t// (https://www.khronos.org/registry/webgl/extensions/WEBGL_depth_texture/)\n\t\t\t\t\tif ( texture.type !== UnsignedShortType && texture.type !== UnsignedIntType ) {\n\n\t\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Use UnsignedShortType or UnsignedIntType for DepthFormat DepthTexture.' );\n\n\t\t\t\t\t\ttexture.type = UnsignedShortType;\n\t\t\t\t\t\tglType = utils.convert( texture.type );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\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\tif ( texture.format === DepthStencilFormat ) {\n\n\t\t\t\t\tinternalFormat = _gl.DEPTH_STENCIL;\n\n\t\t\t\t\t// The error INVALID_OPERATION is generated by texImage2D if format and internalformat are\n\t\t\t\t\t// DEPTH_STENCIL and type is not UNSIGNED_INT_24_8_WEBGL.\n\t\t\t\t\t// (https://www.khronos.org/registry/webgl/extensions/WEBGL_depth_texture/)\n\t\t\t\t\tif ( texture.type !== UnsignedInt248Type ) {\n\n\t\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Use UnsignedInt248Type for DepthStencilFormat DepthTexture.' );\n\n\t\t\t\t\t\ttexture.type = UnsignedInt248Type;\n\t\t\t\t\t\tglType = utils.convert( texture.type );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tstate.texImage2D( _gl.TEXTURE_2D, 0, internalFormat, image.width, image.height, 0, glFormat, glType, null );\n\n\t\t\t} else if ( texture.isDataTexture ) {\n\n\t\t\t\t// use manually created mipmaps if available\n\t\t\t\t// if there are no manual mipmaps\n\t\t\t\t// set 0 level mipmap and then use GL to generate other mipmap levels\n\n\t\t\t\tif ( mipmaps.length > 0 && isPowerOfTwoImage ) {\n\n\t\t\t\t\tfor ( var i = 0, il = mipmaps.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tmipmap = mipmaps[ i ];\n\t\t\t\t\t\tstate.texImage2D( _gl.TEXTURE_2D, i, glFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data );\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttexture.generateMipmaps = false;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tstate.texImage2D( _gl.TEXTURE_2D, 0, glFormat, image.width, image.height, 0, glFormat, glType, image.data );\n\n\t\t\t\t}\n\n\t\t\t} else if ( texture.isCompressedTexture ) {\n\n\t\t\t\tfor ( var i = 0, il = mipmaps.length; i < il; i ++ ) {\n\n\t\t\t\t\tmipmap = mipmaps[ i ];\n\n\t\t\t\t\tif ( texture.format !== RGBAFormat && texture.format !== RGBFormat ) {\n\n\t\t\t\t\t\tif ( state.getCompressedTextureFormats().indexOf( glFormat ) > - 1 ) {\n\n\t\t\t\t\t\t\tstate.compressedTexImage2D( _gl.TEXTURE_2D, i, glFormat, mipmap.width, mipmap.height, 0, mipmap.data );\n\n\t\t\t\t\t\t} else {\n\n\t\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\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tstate.texImage2D( _gl.TEXTURE_2D, i, glFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// regular Texture (image, video, canvas)\n\n\t\t\t\t// use manually created mipmaps if available\n\t\t\t\t// if there are no manual mipmaps\n\t\t\t\t// set 0 level mipmap and then use GL to generate other mipmap levels\n\n\t\t\t\tif ( mipmaps.length > 0 && isPowerOfTwoImage ) {\n\n\t\t\t\t\tfor ( var i = 0, il = mipmaps.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tmipmap = mipmaps[ i ];\n\t\t\t\t\t\tstate.texImage2D( _gl.TEXTURE_2D, i, glFormat, glFormat, glType, mipmap );\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttexture.generateMipmaps = false;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tstate.texImage2D( _gl.TEXTURE_2D, 0, glFormat, glFormat, glType, image );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( textureNeedsGenerateMipmaps( texture, isPowerOfTwoImage ) ) _gl.generateMipmap( _gl.TEXTURE_2D );\n\n\t\t\ttextureProperties.__version = texture.version;\n\n\t\t\tif ( texture.onUpdate ) texture.onUpdate( texture );\n\n\t\t}\n\n\t\t// Render targets\n\n\t\t// Setup storage for target texture and bind it to correct framebuffer\n\t\tfunction setupFrameBufferTexture( framebuffer, renderTarget, attachment, textureTarget ) {\n\n\t\t\tvar glFormat = utils.convert( renderTarget.texture.format );\n\t\t\tvar glType = utils.convert( renderTarget.texture.type );\n\t\t\tstate.texImage2D( textureTarget, 0, glFormat, renderTarget.width, renderTarget.height, 0, glFormat, glType, null );\n\t\t\t_gl.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer );\n\t\t\t_gl.framebufferTexture2D( _gl.FRAMEBUFFER, attachment, textureTarget, properties.get( renderTarget.texture ).__webglTexture, 0 );\n\t\t\t_gl.bindFramebuffer( _gl.FRAMEBUFFER, null );\n\n\t\t}\n\n\t\t// Setup storage for internal depth/stencil buffers and bind to correct framebuffer\n\t\tfunction setupRenderBufferStorage( renderbuffer, renderTarget ) {\n\n\t\t\t_gl.bindRenderbuffer( _gl.RENDERBUFFER, renderbuffer );\n\n\t\t\tif ( renderTarget.depthBuffer && ! renderTarget.stencilBuffer ) {\n\n\t\t\t\t_gl.renderbufferStorage( _gl.RENDERBUFFER, _gl.DEPTH_COMPONENT16, renderTarget.width, renderTarget.height );\n\t\t\t\t_gl.framebufferRenderbuffer( _gl.FRAMEBUFFER, _gl.DEPTH_ATTACHMENT, _gl.RENDERBUFFER, renderbuffer );\n\n\t\t\t} else if ( renderTarget.depthBuffer && renderTarget.stencilBuffer ) {\n\n\t\t\t\t_gl.renderbufferStorage( _gl.RENDERBUFFER, _gl.DEPTH_STENCIL, renderTarget.width, renderTarget.height );\n\t\t\t\t_gl.framebufferRenderbuffer( _gl.FRAMEBUFFER, _gl.DEPTH_STENCIL_ATTACHMENT, _gl.RENDERBUFFER, renderbuffer );\n\n\t\t\t} else {\n\n\t\t\t\t// FIXME: We don't support !depth !stencil\n\t\t\t\t_gl.renderbufferStorage( _gl.RENDERBUFFER, _gl.RGBA4, renderTarget.width, renderTarget.height );\n\n\t\t\t}\n\n\t\t\t_gl.bindRenderbuffer( _gl.RENDERBUFFER, null );\n\n\t\t}\n\n\t\t// Setup resources for a Depth Texture for a FBO (needs an extension)\n\t\tfunction setupDepthTexture( framebuffer, renderTarget ) {\n\n\t\t\tvar isCube = ( renderTarget && renderTarget.isWebGLRenderTargetCube );\n\t\t\tif ( isCube ) throw new Error( 'Depth Texture with cube render targets is not supported' );\n\n\t\t\t_gl.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer );\n\n\t\t\tif ( ! ( renderTarget.depthTexture && renderTarget.depthTexture.isDepthTexture ) ) {\n\n\t\t\t\tthrow new Error( 'renderTarget.depthTexture must be an instance of THREE.DepthTexture' );\n\n\t\t\t}\n\n\t\t\t// upload an empty depth texture with framebuffer size\n\t\t\tif ( ! properties.get( renderTarget.depthTexture ).__webglTexture ||\n\t\t\t\t\trenderTarget.depthTexture.image.width !== renderTarget.width ||\n\t\t\t\t\trenderTarget.depthTexture.image.height !== renderTarget.height ) {\n\n\t\t\t\trenderTarget.depthTexture.image.width = renderTarget.width;\n\t\t\t\trenderTarget.depthTexture.image.height = renderTarget.height;\n\t\t\t\trenderTarget.depthTexture.needsUpdate = true;\n\n\t\t\t}\n\n\t\t\tsetTexture2D( renderTarget.depthTexture, 0 );\n\n\t\t\tvar webglDepthTexture = properties.get( renderTarget.depthTexture ).__webglTexture;\n\n\t\t\tif ( renderTarget.depthTexture.format === DepthFormat ) {\n\n\t\t\t\t_gl.framebufferTexture2D( _gl.FRAMEBUFFER, _gl.DEPTH_ATTACHMENT, _gl.TEXTURE_2D, webglDepthTexture, 0 );\n\n\t\t\t} else if ( renderTarget.depthTexture.format === DepthStencilFormat ) {\n\n\t\t\t\t_gl.framebufferTexture2D( _gl.FRAMEBUFFER, _gl.DEPTH_STENCIL_ATTACHMENT, _gl.TEXTURE_2D, webglDepthTexture, 0 );\n\n\t\t\t} else {\n\n\t\t\t\tthrow new Error( 'Unknown depthTexture format' );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Setup GL resources for a non-texture depth buffer\n\t\tfunction setupDepthRenderbuffer( renderTarget ) {\n\n\t\t\tvar renderTargetProperties = properties.get( renderTarget );\n\n\t\t\tvar isCube = ( renderTarget.isWebGLRenderTargetCube === true );\n\n\t\t\tif ( renderTarget.depthTexture ) {\n\n\t\t\t\tif ( isCube ) throw new Error( 'target.depthTexture not supported in Cube render targets' );\n\n\t\t\t\tsetupDepthTexture( renderTargetProperties.__webglFramebuffer, renderTarget );\n\n\t\t\t} else {\n\n\t\t\t\tif ( isCube ) {\n\n\t\t\t\t\trenderTargetProperties.__webglDepthbuffer = [];\n\n\t\t\t\t\tfor ( var i = 0; i < 6; i ++ ) {\n\n\t\t\t\t\t\t_gl.bindFramebuffer( _gl.FRAMEBUFFER, renderTargetProperties.__webglFramebuffer[ i ] );\n\t\t\t\t\t\trenderTargetProperties.__webglDepthbuffer[ i ] = _gl.createRenderbuffer();\n\t\t\t\t\t\tsetupRenderBufferStorage( renderTargetProperties.__webglDepthbuffer[ i ], renderTarget );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\t_gl.bindFramebuffer( _gl.FRAMEBUFFER, renderTargetProperties.__webglFramebuffer );\n\t\t\t\t\trenderTargetProperties.__webglDepthbuffer = _gl.createRenderbuffer();\n\t\t\t\t\tsetupRenderBufferStorage( renderTargetProperties.__webglDepthbuffer, renderTarget );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t_gl.bindFramebuffer( _gl.FRAMEBUFFER, null );\n\n\t\t}\n\n\t\t// Set up GL resources for the render target\n\t\tfunction setupRenderTarget( renderTarget ) {\n\n\t\t\tvar renderTargetProperties = properties.get( renderTarget );\n\t\t\tvar textureProperties = properties.get( renderTarget.texture );\n\n\t\t\trenderTarget.addEventListener( 'dispose', onRenderTargetDispose );\n\n\t\t\ttextureProperties.__webglTexture = _gl.createTexture();\n\n\t\t\tinfoMemory.textures ++;\n\n\t\t\tvar isCube = ( renderTarget.isWebGLRenderTargetCube === true );\n\t\t\tvar isTargetPowerOfTwo = isPowerOfTwo( renderTarget );\n\n\t\t\t// Setup framebuffer\n\n\t\t\tif ( isCube ) {\n\n\t\t\t\trenderTargetProperties.__webglFramebuffer = [];\n\n\t\t\t\tfor ( var i = 0; i < 6; i ++ ) {\n\n\t\t\t\t\trenderTargetProperties.__webglFramebuffer[ i ] = _gl.createFramebuffer();\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\trenderTargetProperties.__webglFramebuffer = _gl.createFramebuffer();\n\n\t\t\t}\n\n\t\t\t// Setup color buffer\n\n\t\t\tif ( isCube ) {\n\n\t\t\t\tstate.bindTexture( _gl.TEXTURE_CUBE_MAP, textureProperties.__webglTexture );\n\t\t\t\tsetTextureParameters( _gl.TEXTURE_CUBE_MAP, renderTarget.texture, isTargetPowerOfTwo );\n\n\t\t\t\tfor ( var i = 0; i < 6; i ++ ) {\n\n\t\t\t\t\tsetupFrameBufferTexture( renderTargetProperties.__webglFramebuffer[ i ], renderTarget, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i );\n\n\t\t\t\t}\n\n\t\t\t\tif ( textureNeedsGenerateMipmaps( renderTarget.texture, isTargetPowerOfTwo ) ) _gl.generateMipmap( _gl.TEXTURE_CUBE_MAP );\n\t\t\t\tstate.bindTexture( _gl.TEXTURE_CUBE_MAP, null );\n\n\t\t\t} else {\n\n\t\t\t\tstate.bindTexture( _gl.TEXTURE_2D, textureProperties.__webglTexture );\n\t\t\t\tsetTextureParameters( _gl.TEXTURE_2D, renderTarget.texture, isTargetPowerOfTwo );\n\t\t\t\tsetupFrameBufferTexture( renderTargetProperties.__webglFramebuffer, renderTarget, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_2D );\n\n\t\t\t\tif ( textureNeedsGenerateMipmaps( renderTarget.texture, isTargetPowerOfTwo ) ) _gl.generateMipmap( _gl.TEXTURE_2D );\n\t\t\t\tstate.bindTexture( _gl.TEXTURE_2D, null );\n\n\t\t\t}\n\n\t\t\t// Setup depth and stencil buffers\n\n\t\t\tif ( renderTarget.depthBuffer ) {\n\n\t\t\t\tsetupDepthRenderbuffer( renderTarget );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction updateRenderTargetMipmap( renderTarget ) {\n\n\t\t\tvar texture = renderTarget.texture;\n\t\t\tvar isTargetPowerOfTwo = isPowerOfTwo( renderTarget );\n\n\t\t\tif ( textureNeedsGenerateMipmaps( texture, isTargetPowerOfTwo ) ) {\n\n\t\t\t\tvar target = renderTarget.isWebGLRenderTargetCube ? _gl.TEXTURE_CUBE_MAP : _gl.TEXTURE_2D;\n\t\t\t\tvar webglTexture = properties.get( texture ).__webglTexture;\n\n\t\t\t\tstate.bindTexture( target, webglTexture );\n\t\t\t\t_gl.generateMipmap( target );\n\t\t\t\tstate.bindTexture( target, null );\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.setTexture2D = setTexture2D;\n\t\tthis.setTextureCube = setTextureCube;\n\t\tthis.setTextureCubeDynamic = setTextureCubeDynamic;\n\t\tthis.setupRenderTarget = setupRenderTarget;\n\t\tthis.updateRenderTargetMipmap = updateRenderTargetMipmap;\n\n\t}\n\n\t/**\n\t * @author fordacious / fordacious.github.io\n\t */\n\n\tfunction WebGLProperties() {\n\n\t\tvar properties = {};\n\n\t\tfunction get( object ) {\n\n\t\t\tvar uuid = object.uuid;\n\t\t\tvar map = properties[ uuid ];\n\n\t\t\tif ( map === undefined ) {\n\n\t\t\t\tmap = {};\n\t\t\t\tproperties[ uuid ] = map;\n\n\t\t\t}\n\n\t\t\treturn map;\n\n\t\t}\n\n\t\tfunction remove( object ) {\n\n\t\t\tdelete properties[ object.uuid ];\n\n\t\t}\n\n\t\tfunction clear() {\n\n\t\t\tproperties = {};\n\n\t\t}\n\n\t\treturn {\n\t\t\tget: get,\n\t\t\tremove: remove,\n\t\t\tclear: clear\n\t\t};\n\n\t}\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t */\n\n\tfunction WebGLState( gl, extensions, utils ) {\n\n\t\tfunction ColorBuffer() {\n\n\t\t\tvar locked = false;\n\n\t\t\tvar color = new Vector4();\n\t\t\tvar currentColorMask = null;\n\t\t\tvar currentColorClear = new Vector4( 0, 0, 0, 0 );\n\n\t\t\treturn {\n\n\t\t\t\tsetMask: function ( colorMask ) {\n\n\t\t\t\t\tif ( currentColorMask !== colorMask && ! locked ) {\n\n\t\t\t\t\t\tgl.colorMask( colorMask, colorMask, colorMask, colorMask );\n\t\t\t\t\t\tcurrentColorMask = colorMask;\n\n\t\t\t\t\t}\n\n\t\t\t\t},\n\n\t\t\t\tsetLocked: function ( lock ) {\n\n\t\t\t\t\tlocked = lock;\n\n\t\t\t\t},\n\n\t\t\t\tsetClear: function ( r, g, b, a, premultipliedAlpha ) {\n\n\t\t\t\t\tif ( premultipliedAlpha === true ) {\n\n\t\t\t\t\t\tr *= a; g *= a; b *= a;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tcolor.set( r, g, b, a );\n\n\t\t\t\t\tif ( currentColorClear.equals( color ) === false ) {\n\n\t\t\t\t\t\tgl.clearColor( r, g, b, a );\n\t\t\t\t\t\tcurrentColorClear.copy( color );\n\n\t\t\t\t\t}\n\n\t\t\t\t},\n\n\t\t\t\treset: function () {\n\n\t\t\t\t\tlocked = false;\n\n\t\t\t\t\tcurrentColorMask = null;\n\t\t\t\t\tcurrentColorClear.set( - 1, 0, 0, 0 ); // set to invalid state\n\n\t\t\t\t}\n\n\t\t\t};\n\n\t\t}\n\n\t\tfunction DepthBuffer() {\n\n\t\t\tvar locked = false;\n\n\t\t\tvar currentDepthMask = null;\n\t\t\tvar currentDepthFunc = null;\n\t\t\tvar currentDepthClear = null;\n\n\t\t\treturn {\n\n\t\t\t\tsetTest: function ( depthTest ) {\n\n\t\t\t\t\tif ( depthTest ) {\n\n\t\t\t\t\t\tenable( gl.DEPTH_TEST );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tdisable( gl.DEPTH_TEST );\n\n\t\t\t\t\t}\n\n\t\t\t\t},\n\n\t\t\t\tsetMask: function ( depthMask ) {\n\n\t\t\t\t\tif ( currentDepthMask !== depthMask && ! locked ) {\n\n\t\t\t\t\t\tgl.depthMask( depthMask );\n\t\t\t\t\t\tcurrentDepthMask = depthMask;\n\n\t\t\t\t\t}\n\n\t\t\t\t},\n\n\t\t\t\tsetFunc: function ( depthFunc ) {\n\n\t\t\t\t\tif ( currentDepthFunc !== depthFunc ) {\n\n\t\t\t\t\t\tif ( depthFunc ) {\n\n\t\t\t\t\t\t\tswitch ( depthFunc ) {\n\n\t\t\t\t\t\t\t\tcase NeverDepth:\n\n\t\t\t\t\t\t\t\t\tgl.depthFunc( gl.NEVER );\n\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\tcase AlwaysDepth:\n\n\t\t\t\t\t\t\t\t\tgl.depthFunc( gl.ALWAYS );\n\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\tcase LessDepth:\n\n\t\t\t\t\t\t\t\t\tgl.depthFunc( gl.LESS );\n\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\tcase LessEqualDepth:\n\n\t\t\t\t\t\t\t\t\tgl.depthFunc( gl.LEQUAL );\n\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\tcase EqualDepth:\n\n\t\t\t\t\t\t\t\t\tgl.depthFunc( gl.EQUAL );\n\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\tcase GreaterEqualDepth:\n\n\t\t\t\t\t\t\t\t\tgl.depthFunc( gl.GEQUAL );\n\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\tcase GreaterDepth:\n\n\t\t\t\t\t\t\t\t\tgl.depthFunc( gl.GREATER );\n\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\tcase NotEqualDepth:\n\n\t\t\t\t\t\t\t\t\tgl.depthFunc( gl.NOTEQUAL );\n\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\tdefault:\n\n\t\t\t\t\t\t\t\t\tgl.depthFunc( gl.LEQUAL );\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\tgl.depthFunc( gl.LEQUAL );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tcurrentDepthFunc = depthFunc;\n\n\t\t\t\t\t}\n\n\t\t\t\t},\n\n\t\t\t\tsetLocked: function ( lock ) {\n\n\t\t\t\t\tlocked = lock;\n\n\t\t\t\t},\n\n\t\t\t\tsetClear: function ( depth ) {\n\n\t\t\t\t\tif ( currentDepthClear !== depth ) {\n\n\t\t\t\t\t\tgl.clearDepth( depth );\n\t\t\t\t\t\tcurrentDepthClear = depth;\n\n\t\t\t\t\t}\n\n\t\t\t\t},\n\n\t\t\t\treset: function () {\n\n\t\t\t\t\tlocked = false;\n\n\t\t\t\t\tcurrentDepthMask = null;\n\t\t\t\t\tcurrentDepthFunc = null;\n\t\t\t\t\tcurrentDepthClear = null;\n\n\t\t\t\t}\n\n\t\t\t};\n\n\t\t}\n\n\t\tfunction StencilBuffer() {\n\n\t\t\tvar locked = false;\n\n\t\t\tvar currentStencilMask = null;\n\t\t\tvar currentStencilFunc = null;\n\t\t\tvar currentStencilRef = null;\n\t\t\tvar currentStencilFuncMask = null;\n\t\t\tvar currentStencilFail = null;\n\t\t\tvar currentStencilZFail = null;\n\t\t\tvar currentStencilZPass = null;\n\t\t\tvar currentStencilClear = null;\n\n\t\t\treturn {\n\n\t\t\t\tsetTest: function ( stencilTest ) {\n\n\t\t\t\t\tif ( stencilTest ) {\n\n\t\t\t\t\t\tenable( gl.STENCIL_TEST );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tdisable( gl.STENCIL_TEST );\n\n\t\t\t\t\t}\n\n\t\t\t\t},\n\n\t\t\t\tsetMask: function ( stencilMask ) {\n\n\t\t\t\t\tif ( currentStencilMask !== stencilMask && ! locked ) {\n\n\t\t\t\t\t\tgl.stencilMask( stencilMask );\n\t\t\t\t\t\tcurrentStencilMask = stencilMask;\n\n\t\t\t\t\t}\n\n\t\t\t\t},\n\n\t\t\t\tsetFunc: function ( stencilFunc, stencilRef, stencilMask ) {\n\n\t\t\t\t\tif ( currentStencilFunc !== stencilFunc ||\n\t\t\t\t\t currentStencilRef \t!== stencilRef \t||\n\t\t\t\t\t currentStencilFuncMask !== stencilMask ) {\n\n\t\t\t\t\t\tgl.stencilFunc( stencilFunc, stencilRef, stencilMask );\n\n\t\t\t\t\t\tcurrentStencilFunc = stencilFunc;\n\t\t\t\t\t\tcurrentStencilRef = stencilRef;\n\t\t\t\t\t\tcurrentStencilFuncMask = stencilMask;\n\n\t\t\t\t\t}\n\n\t\t\t\t},\n\n\t\t\t\tsetOp: function ( stencilFail, stencilZFail, stencilZPass ) {\n\n\t\t\t\t\tif ( currentStencilFail\t !== stencilFail \t||\n\t\t\t\t\t currentStencilZFail !== stencilZFail ||\n\t\t\t\t\t currentStencilZPass !== stencilZPass ) {\n\n\t\t\t\t\t\tgl.stencilOp( stencilFail, stencilZFail, stencilZPass );\n\n\t\t\t\t\t\tcurrentStencilFail = stencilFail;\n\t\t\t\t\t\tcurrentStencilZFail = stencilZFail;\n\t\t\t\t\t\tcurrentStencilZPass = stencilZPass;\n\n\t\t\t\t\t}\n\n\t\t\t\t},\n\n\t\t\t\tsetLocked: function ( lock ) {\n\n\t\t\t\t\tlocked = lock;\n\n\t\t\t\t},\n\n\t\t\t\tsetClear: function ( stencil ) {\n\n\t\t\t\t\tif ( currentStencilClear !== stencil ) {\n\n\t\t\t\t\t\tgl.clearStencil( stencil );\n\t\t\t\t\t\tcurrentStencilClear = stencil;\n\n\t\t\t\t\t}\n\n\t\t\t\t},\n\n\t\t\t\treset: function () {\n\n\t\t\t\t\tlocked = false;\n\n\t\t\t\t\tcurrentStencilMask = null;\n\t\t\t\t\tcurrentStencilFunc = null;\n\t\t\t\t\tcurrentStencilRef = null;\n\t\t\t\t\tcurrentStencilFuncMask = null;\n\t\t\t\t\tcurrentStencilFail = null;\n\t\t\t\t\tcurrentStencilZFail = null;\n\t\t\t\t\tcurrentStencilZPass = null;\n\t\t\t\t\tcurrentStencilClear = null;\n\n\t\t\t\t}\n\n\t\t\t};\n\n\t\t}\n\n\t\t//\n\n\t\tvar colorBuffer = new ColorBuffer();\n\t\tvar depthBuffer = new DepthBuffer();\n\t\tvar stencilBuffer = new StencilBuffer();\n\n\t\tvar maxVertexAttributes = gl.getParameter( gl.MAX_VERTEX_ATTRIBS );\n\t\tvar newAttributes = new Uint8Array( maxVertexAttributes );\n\t\tvar enabledAttributes = new Uint8Array( maxVertexAttributes );\n\t\tvar attributeDivisors = new Uint8Array( maxVertexAttributes );\n\n\t\tvar capabilities = {};\n\n\t\tvar compressedTextureFormats = null;\n\n\t\tvar currentProgram = null;\n\n\t\tvar currentBlending = null;\n\t\tvar currentBlendEquation = null;\n\t\tvar currentBlendSrc = null;\n\t\tvar currentBlendDst = null;\n\t\tvar currentBlendEquationAlpha = null;\n\t\tvar currentBlendSrcAlpha = null;\n\t\tvar currentBlendDstAlpha = null;\n\t\tvar currentPremultipledAlpha = false;\n\n\t\tvar currentFlipSided = null;\n\t\tvar currentCullFace = null;\n\n\t\tvar currentLineWidth = null;\n\n\t\tvar currentPolygonOffsetFactor = null;\n\t\tvar currentPolygonOffsetUnits = null;\n\n\t\tvar maxTextures = gl.getParameter( gl.MAX_COMBINED_TEXTURE_IMAGE_UNITS );\n\n\t\tvar version = parseFloat( /^WebGL\\ ([0-9])/.exec( gl.getParameter( gl.VERSION ) )[ 1 ] );\n\t\tvar lineWidthAvailable = parseFloat( version ) >= 1.0;\n\n\t\tvar currentTextureSlot = null;\n\t\tvar currentBoundTextures = {};\n\n\t\tvar currentScissor = new Vector4();\n\t\tvar currentViewport = new Vector4();\n\n\t\tfunction createTexture( type, target, count ) {\n\n\t\t\tvar data = new Uint8Array( 4 ); // 4 is required to match default unpack alignment of 4.\n\t\t\tvar texture = gl.createTexture();\n\n\t\t\tgl.bindTexture( type, texture );\n\t\t\tgl.texParameteri( type, gl.TEXTURE_MIN_FILTER, gl.NEAREST );\n\t\t\tgl.texParameteri( type, gl.TEXTURE_MAG_FILTER, gl.NEAREST );\n\n\t\t\tfor ( var i = 0; i < count; i ++ ) {\n\n\t\t\t\tgl.texImage2D( target + i, 0, gl.RGBA, 1, 1, 0, gl.RGBA, gl.UNSIGNED_BYTE, data );\n\n\t\t\t}\n\n\t\t\treturn texture;\n\n\t\t}\n\n\t\tvar emptyTextures = {};\n\t\temptyTextures[ gl.TEXTURE_2D ] = createTexture( gl.TEXTURE_2D, gl.TEXTURE_2D, 1 );\n\t\temptyTextures[ gl.TEXTURE_CUBE_MAP ] = createTexture( gl.TEXTURE_CUBE_MAP, gl.TEXTURE_CUBE_MAP_POSITIVE_X, 6 );\n\n\t\t// init\n\n\t\tcolorBuffer.setClear( 0, 0, 0, 1 );\n\t\tdepthBuffer.setClear( 1 );\n\t\tstencilBuffer.setClear( 0 );\n\n\t\tenable( gl.DEPTH_TEST );\n\t\tdepthBuffer.setFunc( LessEqualDepth );\n\n\t\tsetFlipSided( false );\n\t\tsetCullFace( CullFaceBack );\n\t\tenable( gl.CULL_FACE );\n\n\t\tenable( gl.BLEND );\n\t\tsetBlending( NormalBlending );\n\n\t\t//\n\n\t\tfunction initAttributes() {\n\n\t\t\tfor ( var i = 0, l = newAttributes.length; i < l; i ++ ) {\n\n\t\t\t\tnewAttributes[ i ] = 0;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction enableAttribute( attribute ) {\n\n\t\t\tnewAttributes[ attribute ] = 1;\n\n\t\t\tif ( enabledAttributes[ attribute ] === 0 ) {\n\n\t\t\t\tgl.enableVertexAttribArray( attribute );\n\t\t\t\tenabledAttributes[ attribute ] = 1;\n\n\t\t\t}\n\n\t\t\tif ( attributeDivisors[ attribute ] !== 0 ) {\n\n\t\t\t\tvar extension = extensions.get( 'ANGLE_instanced_arrays' );\n\n\t\t\t\textension.vertexAttribDivisorANGLE( attribute, 0 );\n\t\t\t\tattributeDivisors[ attribute ] = 0;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction enableAttributeAndDivisor( attribute, meshPerAttribute ) {\n\n\t\t\tnewAttributes[ attribute ] = 1;\n\n\t\t\tif ( enabledAttributes[ attribute ] === 0 ) {\n\n\t\t\t\tgl.enableVertexAttribArray( attribute );\n\t\t\t\tenabledAttributes[ attribute ] = 1;\n\n\t\t\t}\n\n\t\t\tif ( attributeDivisors[ attribute ] !== meshPerAttribute ) {\n\n\t\t\t\tvar extension = extensions.get( 'ANGLE_instanced_arrays' );\n\n\t\t\t\textension.vertexAttribDivisorANGLE( attribute, meshPerAttribute );\n\t\t\t\tattributeDivisors[ attribute ] = meshPerAttribute;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction disableUnusedAttributes() {\n\n\t\t\tfor ( var i = 0, l = enabledAttributes.length; i !== l; ++ i ) {\n\n\t\t\t\tif ( enabledAttributes[ i ] !== newAttributes[ i ] ) {\n\n\t\t\t\t\tgl.disableVertexAttribArray( i );\n\t\t\t\t\tenabledAttributes[ i ] = 0;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction enable( id ) {\n\n\t\t\tif ( capabilities[ id ] !== true ) {\n\n\t\t\t\tgl.enable( id );\n\t\t\t\tcapabilities[ id ] = true;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction disable( id ) {\n\n\t\t\tif ( capabilities[ id ] !== false ) {\n\n\t\t\t\tgl.disable( id );\n\t\t\t\tcapabilities[ id ] = false;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction getCompressedTextureFormats() {\n\n\t\t\tif ( compressedTextureFormats === null ) {\n\n\t\t\t\tcompressedTextureFormats = [];\n\n\t\t\t\tif ( extensions.get( 'WEBGL_compressed_texture_pvrtc' ) ||\n\t\t\t\t extensions.get( 'WEBGL_compressed_texture_s3tc' ) ||\n\t\t\t\t extensions.get( 'WEBGL_compressed_texture_etc1' ) ) {\n\n\t\t\t\t\tvar formats = gl.getParameter( gl.COMPRESSED_TEXTURE_FORMATS );\n\n\t\t\t\t\tfor ( var i = 0; i < formats.length; i ++ ) {\n\n\t\t\t\t\t\tcompressedTextureFormats.push( formats[ i ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn compressedTextureFormats;\n\n\t\t}\n\n\t\tfunction useProgram( program ) {\n\n\t\t\tif ( currentProgram !== program ) {\n\n\t\t\t\tgl.useProgram( program );\n\n\t\t\t\tcurrentProgram = program;\n\n\t\t\t\treturn true;\n\n\t\t\t}\n\n\t\t\treturn false;\n\n\t\t}\n\n\t\tfunction setBlending( blending, blendEquation, blendSrc, blendDst, blendEquationAlpha, blendSrcAlpha, blendDstAlpha, premultipliedAlpha ) {\n\n\t\t\tif ( blending !== NoBlending ) {\n\n\t\t\t\tenable( gl.BLEND );\n\n\t\t\t} else {\n\n\t\t\t\tdisable( gl.BLEND );\n\n\t\t\t}\n\n\t\t\tif ( blending !== CustomBlending ) {\n\n\t\t\t\tif ( blending !== currentBlending || premultipliedAlpha !== currentPremultipledAlpha ) {\n\n\t\t\t\t\tswitch ( blending ) {\n\n\t\t\t\t\t\tcase AdditiveBlending:\n\n\t\t\t\t\t\t\tif ( premultipliedAlpha ) {\n\n\t\t\t\t\t\t\t\tgl.blendEquationSeparate( gl.FUNC_ADD, gl.FUNC_ADD );\n\t\t\t\t\t\t\t\tgl.blendFuncSeparate( gl.ONE, gl.ONE, gl.ONE, gl.ONE );\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tgl.blendEquation( gl.FUNC_ADD );\n\t\t\t\t\t\t\t\tgl.blendFunc( gl.SRC_ALPHA, gl.ONE );\n\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase SubtractiveBlending:\n\n\t\t\t\t\t\t\tif ( premultipliedAlpha ) {\n\n\t\t\t\t\t\t\t\tgl.blendEquationSeparate( gl.FUNC_ADD, gl.FUNC_ADD );\n\t\t\t\t\t\t\t\tgl.blendFuncSeparate( gl.ZERO, gl.ZERO, gl.ONE_MINUS_SRC_COLOR, gl.ONE_MINUS_SRC_ALPHA );\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tgl.blendEquation( gl.FUNC_ADD );\n\t\t\t\t\t\t\t\tgl.blendFunc( gl.ZERO, gl.ONE_MINUS_SRC_COLOR );\n\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase MultiplyBlending:\n\n\t\t\t\t\t\t\tif ( premultipliedAlpha ) {\n\n\t\t\t\t\t\t\t\tgl.blendEquationSeparate( gl.FUNC_ADD, gl.FUNC_ADD );\n\t\t\t\t\t\t\t\tgl.blendFuncSeparate( gl.ZERO, gl.SRC_COLOR, gl.ZERO, gl.SRC_ALPHA );\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tgl.blendEquation( gl.FUNC_ADD );\n\t\t\t\t\t\t\t\tgl.blendFunc( gl.ZERO, gl.SRC_COLOR );\n\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tdefault:\n\n\t\t\t\t\t\t\tif ( premultipliedAlpha ) {\n\n\t\t\t\t\t\t\t\tgl.blendEquationSeparate( gl.FUNC_ADD, gl.FUNC_ADD );\n\t\t\t\t\t\t\t\tgl.blendFuncSeparate( gl.ONE, gl.ONE_MINUS_SRC_ALPHA, gl.ONE, gl.ONE_MINUS_SRC_ALPHA );\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tgl.blendEquationSeparate( gl.FUNC_ADD, gl.FUNC_ADD );\n\t\t\t\t\t\t\t\tgl.blendFuncSeparate( gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA, gl.ONE, gl.ONE_MINUS_SRC_ALPHA );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tcurrentBlendEquation = null;\n\t\t\t\tcurrentBlendSrc = null;\n\t\t\t\tcurrentBlendDst = null;\n\t\t\t\tcurrentBlendEquationAlpha = null;\n\t\t\t\tcurrentBlendSrcAlpha = null;\n\t\t\t\tcurrentBlendDstAlpha = null;\n\n\t\t\t} else {\n\n\t\t\t\tblendEquationAlpha = blendEquationAlpha || blendEquation;\n\t\t\t\tblendSrcAlpha = blendSrcAlpha || blendSrc;\n\t\t\t\tblendDstAlpha = blendDstAlpha || blendDst;\n\n\t\t\t\tif ( blendEquation !== currentBlendEquation || blendEquationAlpha !== currentBlendEquationAlpha ) {\n\n\t\t\t\t\tgl.blendEquationSeparate( utils.convert( blendEquation ), utils.convert( blendEquationAlpha ) );\n\n\t\t\t\t\tcurrentBlendEquation = blendEquation;\n\t\t\t\t\tcurrentBlendEquationAlpha = blendEquationAlpha;\n\n\t\t\t\t}\n\n\t\t\t\tif ( blendSrc !== currentBlendSrc || blendDst !== currentBlendDst || blendSrcAlpha !== currentBlendSrcAlpha || blendDstAlpha !== currentBlendDstAlpha ) {\n\n\t\t\t\t\tgl.blendFuncSeparate( utils.convert( blendSrc ), utils.convert( blendDst ), utils.convert( blendSrcAlpha ), utils.convert( blendDstAlpha ) );\n\n\t\t\t\t\tcurrentBlendSrc = blendSrc;\n\t\t\t\t\tcurrentBlendDst = blendDst;\n\t\t\t\t\tcurrentBlendSrcAlpha = blendSrcAlpha;\n\t\t\t\t\tcurrentBlendDstAlpha = blendDstAlpha;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tcurrentBlending = blending;\n\t\t\tcurrentPremultipledAlpha = premultipliedAlpha;\n\n\t\t}\n\n\t\tfunction setMaterial( material ) {\n\n\t\t\tmaterial.side === DoubleSide\n\t\t\t\t? disable( gl.CULL_FACE )\n\t\t\t\t: enable( gl.CULL_FACE );\n\n\t\t\tsetFlipSided( material.side === BackSide );\n\n\t\t\tmaterial.transparent === true\n\t\t\t\t? setBlending( material.blending, material.blendEquation, material.blendSrc, material.blendDst, material.blendEquationAlpha, material.blendSrcAlpha, material.blendDstAlpha, material.premultipliedAlpha )\n\t\t\t\t: setBlending( NoBlending );\n\n\t\t\tdepthBuffer.setFunc( material.depthFunc );\n\t\t\tdepthBuffer.setTest( material.depthTest );\n\t\t\tdepthBuffer.setMask( material.depthWrite );\n\t\t\tcolorBuffer.setMask( material.colorWrite );\n\n\t\t\tsetPolygonOffset( material.polygonOffset, material.polygonOffsetFactor, material.polygonOffsetUnits );\n\n\t\t}\n\n\t\t//\n\n\t\tfunction setFlipSided( flipSided ) {\n\n\t\t\tif ( currentFlipSided !== flipSided ) {\n\n\t\t\t\tif ( flipSided ) {\n\n\t\t\t\t\tgl.frontFace( gl.CW );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tgl.frontFace( gl.CCW );\n\n\t\t\t\t}\n\n\t\t\t\tcurrentFlipSided = flipSided;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction setCullFace( cullFace ) {\n\n\t\t\tif ( cullFace !== CullFaceNone ) {\n\n\t\t\t\tenable( gl.CULL_FACE );\n\n\t\t\t\tif ( cullFace !== currentCullFace ) {\n\n\t\t\t\t\tif ( cullFace === CullFaceBack ) {\n\n\t\t\t\t\t\tgl.cullFace( gl.BACK );\n\n\t\t\t\t\t} else if ( cullFace === CullFaceFront ) {\n\n\t\t\t\t\t\tgl.cullFace( gl.FRONT );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tgl.cullFace( gl.FRONT_AND_BACK );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tdisable( gl.CULL_FACE );\n\n\t\t\t}\n\n\t\t\tcurrentCullFace = cullFace;\n\n\t\t}\n\n\t\tfunction setLineWidth( width ) {\n\n\t\t\tif ( width !== currentLineWidth ) {\n\n\t\t\t\tif ( lineWidthAvailable ) gl.lineWidth( width );\n\n\t\t\t\tcurrentLineWidth = width;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction setPolygonOffset( polygonOffset, factor, units ) {\n\n\t\t\tif ( polygonOffset ) {\n\n\t\t\t\tenable( gl.POLYGON_OFFSET_FILL );\n\n\t\t\t\tif ( currentPolygonOffsetFactor !== factor || currentPolygonOffsetUnits !== units ) {\n\n\t\t\t\t\tgl.polygonOffset( factor, units );\n\n\t\t\t\t\tcurrentPolygonOffsetFactor = factor;\n\t\t\t\t\tcurrentPolygonOffsetUnits = units;\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tdisable( gl.POLYGON_OFFSET_FILL );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction setScissorTest( scissorTest ) {\n\n\t\t\tif ( scissorTest ) {\n\n\t\t\t\tenable( gl.SCISSOR_TEST );\n\n\t\t\t} else {\n\n\t\t\t\tdisable( gl.SCISSOR_TEST );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// texture\n\n\t\tfunction activeTexture( webglSlot ) {\n\n\t\t\tif ( webglSlot === undefined ) webglSlot = gl.TEXTURE0 + maxTextures - 1;\n\n\t\t\tif ( currentTextureSlot !== webglSlot ) {\n\n\t\t\t\tgl.activeTexture( webglSlot );\n\t\t\t\tcurrentTextureSlot = webglSlot;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction bindTexture( webglType, webglTexture ) {\n\n\t\t\tif ( currentTextureSlot === null ) {\n\n\t\t\t\tactiveTexture();\n\n\t\t\t}\n\n\t\t\tvar boundTexture = currentBoundTextures[ currentTextureSlot ];\n\n\t\t\tif ( boundTexture === undefined ) {\n\n\t\t\t\tboundTexture = { type: undefined, texture: undefined };\n\t\t\t\tcurrentBoundTextures[ currentTextureSlot ] = boundTexture;\n\n\t\t\t}\n\n\t\t\tif ( boundTexture.type !== webglType || boundTexture.texture !== webglTexture ) {\n\n\t\t\t\tgl.bindTexture( webglType, webglTexture || emptyTextures[ webglType ] );\n\n\t\t\t\tboundTexture.type = webglType;\n\t\t\t\tboundTexture.texture = webglTexture;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction compressedTexImage2D() {\n\n\t\t\ttry {\n\n\t\t\t\tgl.compressedTexImage2D.apply( gl, arguments );\n\n\t\t\t} catch ( error ) {\n\n\t\t\t\tconsole.error( 'THREE.WebGLState:', error );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction texImage2D() {\n\n\t\t\ttry {\n\n\t\t\t\tgl.texImage2D.apply( gl, arguments );\n\n\t\t\t} catch ( error ) {\n\n\t\t\t\tconsole.error( 'THREE.WebGLState:', error );\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\n\t\tfunction scissor( scissor ) {\n\n\t\t\tif ( currentScissor.equals( scissor ) === false ) {\n\n\t\t\t\tgl.scissor( scissor.x, scissor.y, scissor.z, scissor.w );\n\t\t\t\tcurrentScissor.copy( scissor );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction viewport( viewport ) {\n\n\t\t\tif ( currentViewport.equals( viewport ) === false ) {\n\n\t\t\t\tgl.viewport( viewport.x, viewport.y, viewport.z, viewport.w );\n\t\t\t\tcurrentViewport.copy( viewport );\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\n\t\tfunction reset() {\n\n\t\t\tfor ( var i = 0; i < enabledAttributes.length; i ++ ) {\n\n\t\t\t\tif ( enabledAttributes[ i ] === 1 ) {\n\n\t\t\t\t\tgl.disableVertexAttribArray( i );\n\t\t\t\t\tenabledAttributes[ i ] = 0;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tcapabilities = {};\n\n\t\t\tcompressedTextureFormats = null;\n\n\t\t\tcurrentTextureSlot = null;\n\t\t\tcurrentBoundTextures = {};\n\n\t\t\tcurrentProgram = null;\n\n\t\t\tcurrentBlending = null;\n\n\t\t\tcurrentFlipSided = null;\n\t\t\tcurrentCullFace = null;\n\n\t\t\tcolorBuffer.reset();\n\t\t\tdepthBuffer.reset();\n\t\t\tstencilBuffer.reset();\n\n\t\t}\n\n\t\treturn {\n\n\t\t\tbuffers: {\n\t\t\t\tcolor: colorBuffer,\n\t\t\t\tdepth: depthBuffer,\n\t\t\t\tstencil: stencilBuffer\n\t\t\t},\n\n\t\t\tinitAttributes: initAttributes,\n\t\t\tenableAttribute: enableAttribute,\n\t\t\tenableAttributeAndDivisor: enableAttributeAndDivisor,\n\t\t\tdisableUnusedAttributes: disableUnusedAttributes,\n\t\t\tenable: enable,\n\t\t\tdisable: disable,\n\t\t\tgetCompressedTextureFormats: getCompressedTextureFormats,\n\n\t\t\tuseProgram: useProgram,\n\n\t\t\tsetBlending: setBlending,\n\t\t\tsetMaterial: setMaterial,\n\n\t\t\tsetFlipSided: setFlipSided,\n\t\t\tsetCullFace: setCullFace,\n\n\t\t\tsetLineWidth: setLineWidth,\n\t\t\tsetPolygonOffset: setPolygonOffset,\n\n\t\t\tsetScissorTest: setScissorTest,\n\n\t\t\tactiveTexture: activeTexture,\n\t\t\tbindTexture: bindTexture,\n\t\t\tcompressedTexImage2D: compressedTexImage2D,\n\t\t\ttexImage2D: texImage2D,\n\n\t\t\tscissor: scissor,\n\t\t\tviewport: viewport,\n\n\t\t\treset: reset\n\n\t\t};\n\n\t}\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t */\n\n\tfunction WebGLCapabilities( gl, extensions, parameters ) {\n\n\t\tvar maxAnisotropy;\n\n\t\tfunction getMaxAnisotropy() {\n\n\t\t\tif ( maxAnisotropy !== undefined ) return maxAnisotropy;\n\n\t\t\tvar extension = extensions.get( 'EXT_texture_filter_anisotropic' );\n\n\t\t\tif ( extension !== null ) {\n\n\t\t\t\tmaxAnisotropy = gl.getParameter( extension.MAX_TEXTURE_MAX_ANISOTROPY_EXT );\n\n\t\t\t} else {\n\n\t\t\t\tmaxAnisotropy = 0;\n\n\t\t\t}\n\n\t\t\treturn maxAnisotropy;\n\n\t\t}\n\n\t\tfunction getMaxPrecision( precision ) {\n\n\t\t\tif ( precision === 'highp' ) {\n\n\t\t\t\tif ( gl.getShaderPrecisionFormat( gl.VERTEX_SHADER, gl.HIGH_FLOAT ).precision > 0 &&\n\t\t\t\t gl.getShaderPrecisionFormat( gl.FRAGMENT_SHADER, gl.HIGH_FLOAT ).precision > 0 ) {\n\n\t\t\t\t\treturn 'highp';\n\n\t\t\t\t}\n\n\t\t\t\tprecision = 'mediump';\n\n\t\t\t}\n\n\t\t\tif ( precision === 'mediump' ) {\n\n\t\t\t\tif ( gl.getShaderPrecisionFormat( gl.VERTEX_SHADER, gl.MEDIUM_FLOAT ).precision > 0 &&\n\t\t\t\t gl.getShaderPrecisionFormat( gl.FRAGMENT_SHADER, gl.MEDIUM_FLOAT ).precision > 0 ) {\n\n\t\t\t\t\treturn 'mediump';\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn 'lowp';\n\n\t\t}\n\n\t\tvar precision = parameters.precision !== undefined ? parameters.precision : 'highp';\n\t\tvar maxPrecision = getMaxPrecision( precision );\n\n\t\tif ( maxPrecision !== precision ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer:', precision, 'not supported, using', maxPrecision, 'instead.' );\n\t\t\tprecision = maxPrecision;\n\n\t\t}\n\n\t\tvar logarithmicDepthBuffer = parameters.logarithmicDepthBuffer === true;\n\n\t\tvar maxTextures = gl.getParameter( gl.MAX_TEXTURE_IMAGE_UNITS );\n\t\tvar maxVertexTextures = gl.getParameter( gl.MAX_VERTEX_TEXTURE_IMAGE_UNITS );\n\t\tvar maxTextureSize = gl.getParameter( gl.MAX_TEXTURE_SIZE );\n\t\tvar maxCubemapSize = gl.getParameter( gl.MAX_CUBE_MAP_TEXTURE_SIZE );\n\n\t\tvar maxAttributes = gl.getParameter( gl.MAX_VERTEX_ATTRIBS );\n\t\tvar maxVertexUniforms = gl.getParameter( gl.MAX_VERTEX_UNIFORM_VECTORS );\n\t\tvar maxVaryings = gl.getParameter( gl.MAX_VARYING_VECTORS );\n\t\tvar maxFragmentUniforms = gl.getParameter( gl.MAX_FRAGMENT_UNIFORM_VECTORS );\n\n\t\tvar vertexTextures = maxVertexTextures > 0;\n\t\tvar floatFragmentTextures = !! extensions.get( 'OES_texture_float' );\n\t\tvar floatVertexTextures = vertexTextures && floatFragmentTextures;\n\n\t\treturn {\n\n\t\t\tgetMaxAnisotropy: getMaxAnisotropy,\n\t\t\tgetMaxPrecision: getMaxPrecision,\n\n\t\t\tprecision: precision,\n\t\t\tlogarithmicDepthBuffer: logarithmicDepthBuffer,\n\n\t\t\tmaxTextures: maxTextures,\n\t\t\tmaxVertexTextures: maxVertexTextures,\n\t\t\tmaxTextureSize: maxTextureSize,\n\t\t\tmaxCubemapSize: maxCubemapSize,\n\n\t\t\tmaxAttributes: maxAttributes,\n\t\t\tmaxVertexUniforms: maxVertexUniforms,\n\t\t\tmaxVaryings: maxVaryings,\n\t\t\tmaxFragmentUniforms: maxFragmentUniforms,\n\n\t\t\tvertexTextures: vertexTextures,\n\t\t\tfloatFragmentTextures: floatFragmentTextures,\n\t\t\tfloatVertexTextures: floatVertexTextures\n\n\t\t};\n\n\t}\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t * @author greggman / http://games.greggman.com/\n\t * @author zz85 / http://www.lab4games.net/zz85/blog\n\t * @author tschw\n\t */\n\n\tfunction PerspectiveCamera( fov, aspect, near, far ) {\n\n\t\tCamera.call( this );\n\n\t\tthis.type = 'PerspectiveCamera';\n\n\t\tthis.fov = fov !== undefined ? fov : 50;\n\t\tthis.zoom = 1;\n\n\t\tthis.near = near !== undefined ? near : 0.1;\n\t\tthis.far = far !== undefined ? far : 2000;\n\t\tthis.focus = 10;\n\n\t\tthis.aspect = aspect !== undefined ? aspect : 1;\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\tPerspectiveCamera.prototype = Object.assign( Object.create( Camera.prototype ), {\n\n\t\tconstructor: PerspectiveCamera,\n\n\t\tisPerspectiveCamera: true,\n\n\t\tcopy: function ( source, recursive ) {\n\n\t\t\tCamera.prototype.copy.call( this, source, recursive );\n\n\t\t\tthis.fov = source.fov;\n\t\t\tthis.zoom = source.zoom;\n\n\t\t\tthis.near = source.near;\n\t\t\tthis.far = source.far;\n\t\t\tthis.focus = source.focus;\n\n\t\t\tthis.aspect = source.aspect;\n\t\t\tthis.view = source.view === null ? null : Object.assign( {}, source.view );\n\n\t\t\tthis.filmGauge = source.filmGauge;\n\t\t\tthis.filmOffset = source.filmOffset;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\t/**\n\t\t * Sets the FOV by focal length in respect to the current .filmGauge.\n\t\t *\n\t\t * The default film gauge is 35, so that the focal length can be specified for\n\t\t * a 35mm (full frame) camera.\n\t\t *\n\t\t * Values for focal length and film gauge must have the same unit.\n\t\t */\n\t\tsetFocalLength: function ( focalLength ) {\n\n\t\t\t// see http://www.bobatkins.com/photography/technical/field_of_view.html\n\t\t\tvar vExtentSlope = 0.5 * this.getFilmHeight() / focalLength;\n\n\t\t\tthis.fov = _Math.RAD2DEG * 2 * Math.atan( vExtentSlope );\n\t\t\tthis.updateProjectionMatrix();\n\n\t\t},\n\n\t\t/**\n\t\t * Calculates the focal length from the current .fov and .filmGauge.\n\t\t */\n\t\tgetFocalLength: function () {\n\n\t\t\tvar vExtentSlope = Math.tan( _Math.DEG2RAD * 0.5 * this.fov );\n\n\t\t\treturn 0.5 * this.getFilmHeight() / vExtentSlope;\n\n\t\t},\n\n\t\tgetEffectiveFOV: function () {\n\n\t\t\treturn _Math.RAD2DEG * 2 * Math.atan(\n\t\t\t\tMath.tan( _Math.DEG2RAD * 0.5 * this.fov ) / this.zoom );\n\n\t\t},\n\n\t\tgetFilmWidth: function () {\n\n\t\t\t// film not completely covered in portrait format (aspect < 1)\n\t\t\treturn this.filmGauge * Math.min( this.aspect, 1 );\n\n\t\t},\n\n\t\tgetFilmHeight: function () {\n\n\t\t\t// film not completely covered in landscape format (aspect > 1)\n\t\t\treturn this.filmGauge / Math.max( this.aspect, 1 );\n\n\t\t},\n\n\t\t/**\n\t\t * Sets an offset in a larger frustum. This is useful for multi-window or\n\t\t * multi-monitor/multi-machine setups.\n\t\t *\n\t\t * For example, if you have 3x2 monitors and each monitor is 1920x1080 and\n\t\t * the monitors are in grid like this\n\t\t *\n\t\t * +---+---+---+\n\t\t * | A | B | C |\n\t\t * +---+---+---+\n\t\t * | D | E | F |\n\t\t * +---+---+---+\n\t\t *\n\t\t * then for each monitor you would call it like this\n\t\t *\n\t\t * var w = 1920;\n\t\t * var h = 1080;\n\t\t * var fullWidth = w * 3;\n\t\t * var fullHeight = h * 2;\n\t\t *\n\t\t * --A--\n\t\t * camera.setOffset( fullWidth, fullHeight, w * 0, h * 0, w, h );\n\t\t * --B--\n\t\t * camera.setOffset( fullWidth, fullHeight, w * 1, h * 0, w, h );\n\t\t * --C--\n\t\t * camera.setOffset( fullWidth, fullHeight, w * 2, h * 0, w, h );\n\t\t * --D--\n\t\t * camera.setOffset( fullWidth, fullHeight, w * 0, h * 1, w, h );\n\t\t * --E--\n\t\t * camera.setOffset( fullWidth, fullHeight, w * 1, h * 1, w, h );\n\t\t * --F--\n\t\t * camera.setOffset( fullWidth, fullHeight, w * 2, h * 1, w, h );\n\t\t *\n\t\t * Note there is no reason monitors have to be the same size or in a grid.\n\t\t */\n\t\tsetViewOffset: function ( fullWidth, fullHeight, x, y, width, height ) {\n\n\t\t\tthis.aspect = fullWidth / fullHeight;\n\n\t\t\tif ( this.view === null ) {\n\n\t\t\t\tthis.view = {\n\t\t\t\t\tenabled: true,\n\t\t\t\t\tfullWidth: 1,\n\t\t\t\t\tfullHeight: 1,\n\t\t\t\t\toffsetX: 0,\n\t\t\t\t\toffsetY: 0,\n\t\t\t\t\twidth: 1,\n\t\t\t\t\theight: 1\n\t\t\t\t};\n\n\t\t\t}\n\n\t\t\tthis.view.enabled = true;\n\t\t\tthis.view.fullWidth = fullWidth;\n\t\t\tthis.view.fullHeight = fullHeight;\n\t\t\tthis.view.offsetX = x;\n\t\t\tthis.view.offsetY = y;\n\t\t\tthis.view.width = width;\n\t\t\tthis.view.height = height;\n\n\t\t\tthis.updateProjectionMatrix();\n\n\t\t},\n\n\t\tclearViewOffset: function () {\n\n\t\t\tif ( this.view !== null ) {\n\n\t\t\t\tthis.view.enabled = false;\n\n\t\t\t}\n\n\t\t\tthis.updateProjectionMatrix();\n\n\t\t},\n\n\t\tupdateProjectionMatrix: function () {\n\n\t\t\tvar near = this.near,\n\t\t\t\ttop = near * Math.tan(\n\t\t\t\t\t_Math.DEG2RAD * 0.5 * this.fov ) / this.zoom,\n\t\t\t\theight = 2 * top,\n\t\t\t\twidth = this.aspect * height,\n\t\t\t\tleft = - 0.5 * width,\n\t\t\t\tview = this.view;\n\n\t\t\tif ( this.view !== null && this.view.enabled ) {\n\n\t\t\t\tvar fullWidth = view.fullWidth,\n\t\t\t\t\tfullHeight = view.fullHeight;\n\n\t\t\t\tleft += view.offsetX * width / fullWidth;\n\t\t\t\ttop -= view.offsetY * height / fullHeight;\n\t\t\t\twidth *= view.width / fullWidth;\n\t\t\t\theight *= view.height / fullHeight;\n\n\t\t\t}\n\n\t\t\tvar skew = this.filmOffset;\n\t\t\tif ( skew !== 0 ) left += near * skew / this.getFilmWidth();\n\n\t\t\tthis.projectionMatrix.makePerspective( left, left + width, top, top - height, near, this.far );\n\n\t\t},\n\n\t\ttoJSON: function ( meta ) {\n\n\t\t\tvar data = Object3D.prototype.toJSON.call( this, meta );\n\n\t\t\tdata.object.fov = this.fov;\n\t\t\tdata.object.zoom = this.zoom;\n\n\t\t\tdata.object.near = this.near;\n\t\t\tdata.object.far = this.far;\n\t\t\tdata.object.focus = this.focus;\n\n\t\t\tdata.object.aspect = this.aspect;\n\n\t\t\tif ( this.view !== null ) data.object.view = Object.assign( {}, this.view );\n\n\t\t\tdata.object.filmGauge = this.filmGauge;\n\t\t\tdata.object.filmOffset = this.filmOffset;\n\n\t\t\treturn data;\n\n\t\t}\n\n\t} );\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t */\n\n\tfunction ArrayCamera( array ) {\n\n\t\tPerspectiveCamera.call( this );\n\n\t\tthis.cameras = array || [];\n\n\t}\n\n\tArrayCamera.prototype = Object.assign( Object.create( PerspectiveCamera.prototype ), {\n\n\t\tconstructor: ArrayCamera,\n\n\t\tisArrayCamera: true\n\n\t} );\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t */\n\n\tfunction WebVRManager( renderer ) {\n\n\t\tvar scope = this;\n\n\t\tvar device = null;\n\t\tvar frameData = null;\n\n\t\tif ( typeof window !== 'undefined' && 'VRFrameData' in window ) {\n\n\t\t\tframeData = new window.VRFrameData();\n\n\t\t}\n\n\t\tvar matrixWorldInverse = new Matrix4();\n\n\t\tvar standingMatrix = new Matrix4();\n\t\tvar standingMatrixInverse = new Matrix4();\n\n\t\tvar cameraL = new PerspectiveCamera();\n\t\tcameraL.bounds = new Vector4( 0.0, 0.0, 0.5, 1.0 );\n\t\tcameraL.layers.enable( 1 );\n\n\t\tvar cameraR = new PerspectiveCamera();\n\t\tcameraR.bounds = new Vector4( 0.5, 0.0, 0.5, 1.0 );\n\t\tcameraR.layers.enable( 2 );\n\n\t\tvar cameraVR = new ArrayCamera( [ cameraL, cameraR ] );\n\t\tcameraVR.layers.enable( 1 );\n\t\tcameraVR.layers.enable( 2 );\n\n\t\t//\n\n\t\tvar currentSize, currentPixelRatio;\n\n\t\tfunction onVRDisplayPresentChange() {\n\n\t\t\tif ( device !== null && device.isPresenting ) {\n\n\t\t\t\tvar eyeParameters = device.getEyeParameters( 'left' );\n\t\t\t\tvar renderWidth = eyeParameters.renderWidth;\n\t\t\t\tvar renderHeight = eyeParameters.renderHeight;\n\n\t\t\t\tcurrentPixelRatio = renderer.getPixelRatio();\n\t\t\t\tcurrentSize = renderer.getSize();\n\n\t\t\t\trenderer.setDrawingBufferSize( renderWidth * 2, renderHeight, 1 );\n\n\t\t\t} else if ( scope.enabled ) {\n\n\t\t\t\trenderer.setDrawingBufferSize( currentSize.width, currentSize.height, currentPixelRatio );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( typeof window !== 'undefined' ) {\n\n\t\t\twindow.addEventListener( 'vrdisplaypresentchange', onVRDisplayPresentChange, false );\n\n\t\t}\n\n\t\t//\n\n\t\tthis.enabled = false;\n\t\tthis.standing = false;\n\n\t\tthis.getDevice = function () {\n\n\t\t\treturn device;\n\n\t\t};\n\n\t\tthis.setDevice = function ( value ) {\n\n\t\t\tif ( value !== undefined ) device = value;\n\n\t\t};\n\n\t\tthis.getCamera = function ( camera ) {\n\n\t\t\tif ( device === null ) return camera;\n\n\t\t\tdevice.depthNear = camera.near;\n\t\t\tdevice.depthFar = camera.far;\n\n\t\t\tdevice.getFrameData( frameData );\n\n\t\t\t//\n\n\t\t\tvar pose = frameData.pose;\n\n\t\t\tif ( pose.position !== null ) {\n\n\t\t\t\tcamera.position.fromArray( pose.position );\n\n\t\t\t} else {\n\n\t\t\t\tcamera.position.set( 0, 0, 0 );\n\n\t\t\t}\n\n\t\t\tif ( pose.orientation !== null ) {\n\n\t\t\t\tcamera.quaternion.fromArray( pose.orientation );\n\n\t\t\t}\n\n\t\t\tcamera.updateMatrixWorld();\n\n\t\t\tvar stageParameters = device.stageParameters;\n\n\t\t\tif ( this.standing && stageParameters ) {\n\n\t\t\t\tstandingMatrix.fromArray( stageParameters.sittingToStandingTransform );\n\t\t\t\tstandingMatrixInverse.getInverse( standingMatrix );\n\n\t\t\t\tcamera.matrixWorld.multiply( standingMatrix );\n\t\t\t\tcamera.matrixWorldInverse.multiply( standingMatrixInverse );\n\n\t\t\t}\n\n\t\t\tif ( device.isPresenting === false ) return camera;\n\n\t\t\t//\n\n\t\t\tcameraL.near = camera.near;\n\t\t\tcameraR.near = camera.near;\n\n\t\t\tcameraL.far = camera.far;\n\t\t\tcameraR.far = camera.far;\n\n\t\t\tcameraVR.matrixWorld.copy( camera.matrixWorld );\n\t\t\tcameraVR.matrixWorldInverse.copy( camera.matrixWorldInverse );\n\n\t\t\tcameraL.matrixWorldInverse.fromArray( frameData.leftViewMatrix );\n\t\t\tcameraR.matrixWorldInverse.fromArray( frameData.rightViewMatrix );\n\n\t\t\tif ( this.standing && stageParameters ) {\n\n\t\t\t\tcameraL.matrixWorldInverse.multiply( standingMatrixInverse );\n\t\t\t\tcameraR.matrixWorldInverse.multiply( standingMatrixInverse );\n\n\t\t\t}\n\n\t\t\tvar parent = camera.parent;\n\n\t\t\tif ( parent !== null ) {\n\n\t\t\t\tmatrixWorldInverse.getInverse( parent.matrixWorld );\n\n\t\t\t\tcameraL.matrixWorldInverse.multiply( matrixWorldInverse );\n\t\t\t\tcameraR.matrixWorldInverse.multiply( matrixWorldInverse );\n\n\t\t\t}\n\n\t\t\t// envMap and Mirror needs camera.matrixWorld\n\n\t\t\tcameraL.matrixWorld.getInverse( cameraL.matrixWorldInverse );\n\t\t\tcameraR.matrixWorld.getInverse( cameraR.matrixWorldInverse );\n\n\t\t\tcameraL.projectionMatrix.fromArray( frameData.leftProjectionMatrix );\n\t\t\tcameraR.projectionMatrix.fromArray( frameData.rightProjectionMatrix );\n\n\t\t\t// HACK @mrdoob\n\t\t\t// https://github.com/w3c/webvr/issues/203\n\n\t\t\tcameraVR.projectionMatrix.copy( cameraL.projectionMatrix );\n\n\t\t\t//\n\n\t\t\tvar layers = device.getLayers();\n\n\t\t\tif ( layers.length ) {\n\n\t\t\t\tvar layer = layers[ 0 ];\n\n\t\t\t\tif ( layer.leftBounds !== null && layer.leftBounds.length === 4 ) {\n\n\t\t\t\t\tcameraL.bounds.fromArray( layer.leftBounds );\n\n\t\t\t\t}\n\n\t\t\t\tif ( layer.rightBounds !== null && layer.rightBounds.length === 4 ) {\n\n\t\t\t\t\tcameraR.bounds.fromArray( layer.rightBounds );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn cameraVR;\n\n\t\t};\n\n\t\tthis.getStandingMatrix = function () {\n\n\t\t\treturn standingMatrix;\n\n\t\t};\n\n\t\tthis.submitFrame = function () {\n\n\t\t\tif ( device && device.isPresenting ) device.submitFrame();\n\n\t\t};\n\n\t\tthis.dispose = function () {\n\n\t\t\tif ( typeof window !== 'undefined' ) {\n\n\t\t\t\twindow.removeEventListener( 'vrdisplaypresentchange', onVRDisplayPresentChange );\n\n\t\t\t}\n\n\t\t};\n\n\t}\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t */\n\n\tfunction WebGLExtensions( gl ) {\n\n\t\tvar extensions = {};\n\n\t\treturn {\n\n\t\t\tget: function ( name ) {\n\n\t\t\t\tif ( extensions[ name ] !== undefined ) {\n\n\t\t\t\t\treturn extensions[ name ];\n\n\t\t\t\t}\n\n\t\t\t\tvar extension;\n\n\t\t\t\tswitch ( name ) {\n\n\t\t\t\t\tcase 'WEBGL_depth_texture':\n\t\t\t\t\t\textension = gl.getExtension( 'WEBGL_depth_texture' ) || gl.getExtension( 'MOZ_WEBGL_depth_texture' ) || gl.getExtension( 'WEBKIT_WEBGL_depth_texture' );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'EXT_texture_filter_anisotropic':\n\t\t\t\t\t\textension = gl.getExtension( 'EXT_texture_filter_anisotropic' ) || gl.getExtension( 'MOZ_EXT_texture_filter_anisotropic' ) || gl.getExtension( 'WEBKIT_EXT_texture_filter_anisotropic' );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'WEBGL_compressed_texture_s3tc':\n\t\t\t\t\t\textension = gl.getExtension( 'WEBGL_compressed_texture_s3tc' ) || gl.getExtension( 'MOZ_WEBGL_compressed_texture_s3tc' ) || gl.getExtension( 'WEBKIT_WEBGL_compressed_texture_s3tc' );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'WEBGL_compressed_texture_pvrtc':\n\t\t\t\t\t\textension = gl.getExtension( 'WEBGL_compressed_texture_pvrtc' ) || gl.getExtension( 'WEBKIT_WEBGL_compressed_texture_pvrtc' );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'WEBGL_compressed_texture_etc1':\n\t\t\t\t\t\textension = gl.getExtension( 'WEBGL_compressed_texture_etc1' );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\textension = gl.getExtension( name );\n\n\t\t\t\t}\n\n\t\t\t\tif ( extension === null ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: ' + name + ' extension not supported.' );\n\n\t\t\t\t}\n\n\t\t\t\textensions[ name ] = extension;\n\n\t\t\t\treturn extension;\n\n\t\t\t}\n\n\t\t};\n\n\t}\n\n\t/**\n\t * @author tschw\n\t */\n\n\tfunction WebGLClipping() {\n\n\t\tvar scope = this,\n\n\t\t\tglobalState = null,\n\t\t\tnumGlobalPlanes = 0,\n\t\t\tlocalClippingEnabled = false,\n\t\t\trenderingShadows = false,\n\n\t\t\tplane = new Plane(),\n\t\t\tviewNormalMatrix = new Matrix3(),\n\n\t\t\tuniform = { value: null, needsUpdate: false };\n\n\t\tthis.uniform = uniform;\n\t\tthis.numPlanes = 0;\n\t\tthis.numIntersection = 0;\n\n\t\tthis.init = function ( planes, enableLocalClipping, camera ) {\n\n\t\t\tvar enabled =\n\t\t\t\tplanes.length !== 0 ||\n\t\t\t\tenableLocalClipping ||\n\t\t\t\t// enable state of previous frame - the clipping code has to\n\t\t\t\t// run another frame in order to reset the state:\n\t\t\t\tnumGlobalPlanes !== 0 ||\n\t\t\t\tlocalClippingEnabled;\n\n\t\t\tlocalClippingEnabled = enableLocalClipping;\n\n\t\t\tglobalState = projectPlanes( planes, camera, 0 );\n\t\t\tnumGlobalPlanes = planes.length;\n\n\t\t\treturn enabled;\n\n\t\t};\n\n\t\tthis.beginShadows = function () {\n\n\t\t\trenderingShadows = true;\n\t\t\tprojectPlanes( null );\n\n\t\t};\n\n\t\tthis.endShadows = function () {\n\n\t\t\trenderingShadows = false;\n\t\t\tresetGlobalState();\n\n\t\t};\n\n\t\tthis.setState = function ( planes, clipIntersection, clipShadows, camera, cache, fromCache ) {\n\n\t\t\tif ( ! localClippingEnabled || planes === null || planes.length === 0 || renderingShadows && ! clipShadows ) {\n\n\t\t\t\t// there's no local clipping\n\n\t\t\t\tif ( renderingShadows ) {\n\n\t\t\t\t\t// there's no global clipping\n\n\t\t\t\t\tprojectPlanes( null );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tresetGlobalState();\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tvar nGlobal = renderingShadows ? 0 : numGlobalPlanes,\n\t\t\t\t\tlGlobal = nGlobal * 4,\n\n\t\t\t\t\tdstArray = cache.clippingState || null;\n\n\t\t\t\tuniform.value = dstArray; // ensure unique state\n\n\t\t\t\tdstArray = projectPlanes( planes, camera, lGlobal, fromCache );\n\n\t\t\t\tfor ( var i = 0; i !== lGlobal; ++ i ) {\n\n\t\t\t\t\tdstArray[ i ] = globalState[ i ];\n\n\t\t\t\t}\n\n\t\t\t\tcache.clippingState = dstArray;\n\t\t\t\tthis.numIntersection = clipIntersection ? this.numPlanes : 0;\n\t\t\t\tthis.numPlanes += nGlobal;\n\n\t\t\t}\n\n\n\t\t};\n\n\t\tfunction resetGlobalState() {\n\n\t\t\tif ( uniform.value !== globalState ) {\n\n\t\t\t\tuniform.value = globalState;\n\t\t\t\tuniform.needsUpdate = numGlobalPlanes > 0;\n\n\t\t\t}\n\n\t\t\tscope.numPlanes = numGlobalPlanes;\n\t\t\tscope.numIntersection = 0;\n\n\t\t}\n\n\t\tfunction projectPlanes( planes, camera, dstOffset, skipTransform ) {\n\n\t\t\tvar nPlanes = planes !== null ? planes.length : 0,\n\t\t\t\tdstArray = null;\n\n\t\t\tif ( nPlanes !== 0 ) {\n\n\t\t\t\tdstArray = uniform.value;\n\n\t\t\t\tif ( skipTransform !== true || dstArray === null ) {\n\n\t\t\t\t\tvar flatSize = dstOffset + nPlanes * 4,\n\t\t\t\t\t\tviewMatrix = camera.matrixWorldInverse;\n\n\t\t\t\t\tviewNormalMatrix.getNormalMatrix( viewMatrix );\n\n\t\t\t\t\tif ( dstArray === null || dstArray.length < flatSize ) {\n\n\t\t\t\t\t\tdstArray = new Float32Array( flatSize );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tfor ( var i = 0, i4 = dstOffset; i !== nPlanes; ++ i, i4 += 4 ) {\n\n\t\t\t\t\t\tplane.copy( planes[ i ] ).applyMatrix4( viewMatrix, viewNormalMatrix );\n\n\t\t\t\t\t\tplane.normal.toArray( dstArray, i4 );\n\t\t\t\t\t\tdstArray[ i4 + 3 ] = plane.constant;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tuniform.value = dstArray;\n\t\t\t\tuniform.needsUpdate = true;\n\n\t\t\t}\n\n\t\t\tscope.numPlanes = nPlanes;\n\n\t\t\treturn dstArray;\n\n\t\t}\n\n\t}\n\n\t/**\n\t * @author thespite / http://www.twitter.com/thespite\n\t */\n\n\tfunction WebGLUtils( gl, extensions ) {\n\n\t\tfunction convert( p ) {\n\n\t\t\tvar extension;\n\n\t\t\tif ( p === RepeatWrapping ) return gl.REPEAT;\n\t\t\tif ( p === ClampToEdgeWrapping ) return gl.CLAMP_TO_EDGE;\n\t\t\tif ( p === MirroredRepeatWrapping ) return gl.MIRRORED_REPEAT;\n\n\t\t\tif ( p === NearestFilter ) return gl.NEAREST;\n\t\t\tif ( p === NearestMipMapNearestFilter ) return gl.NEAREST_MIPMAP_NEAREST;\n\t\t\tif ( p === NearestMipMapLinearFilter ) return gl.NEAREST_MIPMAP_LINEAR;\n\n\t\t\tif ( p === LinearFilter ) return gl.LINEAR;\n\t\t\tif ( p === LinearMipMapNearestFilter ) return gl.LINEAR_MIPMAP_NEAREST;\n\t\t\tif ( p === LinearMipMapLinearFilter ) return gl.LINEAR_MIPMAP_LINEAR;\n\n\t\t\tif ( p === UnsignedByteType ) return gl.UNSIGNED_BYTE;\n\t\t\tif ( p === UnsignedShort4444Type ) return gl.UNSIGNED_SHORT_4_4_4_4;\n\t\t\tif ( p === UnsignedShort5551Type ) return gl.UNSIGNED_SHORT_5_5_5_1;\n\t\t\tif ( p === UnsignedShort565Type ) return gl.UNSIGNED_SHORT_5_6_5;\n\n\t\t\tif ( p === ByteType ) return gl.BYTE;\n\t\t\tif ( p === ShortType ) return gl.SHORT;\n\t\t\tif ( p === UnsignedShortType ) return gl.UNSIGNED_SHORT;\n\t\t\tif ( p === IntType ) return gl.INT;\n\t\t\tif ( p === UnsignedIntType ) return gl.UNSIGNED_INT;\n\t\t\tif ( p === FloatType ) return gl.FLOAT;\n\n\t\t\tif ( p === HalfFloatType ) {\n\n\t\t\t\textension = extensions.get( 'OES_texture_half_float' );\n\n\t\t\t\tif ( extension !== null ) return extension.HALF_FLOAT_OES;\n\n\t\t\t}\n\n\t\t\tif ( p === AlphaFormat ) return gl.ALPHA;\n\t\t\tif ( p === RGBFormat ) return gl.RGB;\n\t\t\tif ( p === RGBAFormat ) return gl.RGBA;\n\t\t\tif ( p === LuminanceFormat ) return gl.LUMINANCE;\n\t\t\tif ( p === LuminanceAlphaFormat ) return gl.LUMINANCE_ALPHA;\n\t\t\tif ( p === DepthFormat ) return gl.DEPTH_COMPONENT;\n\t\t\tif ( p === DepthStencilFormat ) return gl.DEPTH_STENCIL;\n\n\t\t\tif ( p === AddEquation ) return gl.FUNC_ADD;\n\t\t\tif ( p === SubtractEquation ) return gl.FUNC_SUBTRACT;\n\t\t\tif ( p === ReverseSubtractEquation ) return gl.FUNC_REVERSE_SUBTRACT;\n\n\t\t\tif ( p === ZeroFactor ) return gl.ZERO;\n\t\t\tif ( p === OneFactor ) return gl.ONE;\n\t\t\tif ( p === SrcColorFactor ) return gl.SRC_COLOR;\n\t\t\tif ( p === OneMinusSrcColorFactor ) return gl.ONE_MINUS_SRC_COLOR;\n\t\t\tif ( p === SrcAlphaFactor ) return gl.SRC_ALPHA;\n\t\t\tif ( p === OneMinusSrcAlphaFactor ) return gl.ONE_MINUS_SRC_ALPHA;\n\t\t\tif ( p === DstAlphaFactor ) return gl.DST_ALPHA;\n\t\t\tif ( p === OneMinusDstAlphaFactor ) return gl.ONE_MINUS_DST_ALPHA;\n\n\t\t\tif ( p === DstColorFactor ) return gl.DST_COLOR;\n\t\t\tif ( p === OneMinusDstColorFactor ) return gl.ONE_MINUS_DST_COLOR;\n\t\t\tif ( p === SrcAlphaSaturateFactor ) return gl.SRC_ALPHA_SATURATE;\n\n\t\t\tif ( p === RGB_S3TC_DXT1_Format || p === RGBA_S3TC_DXT1_Format ||\n\t\t\t\tp === RGBA_S3TC_DXT3_Format || p === RGBA_S3TC_DXT5_Format ) {\n\n\t\t\t\textension = extensions.get( 'WEBGL_compressed_texture_s3tc' );\n\n\t\t\t\tif ( extension !== null ) {\n\n\t\t\t\t\tif ( p === RGB_S3TC_DXT1_Format ) return extension.COMPRESSED_RGB_S3TC_DXT1_EXT;\n\t\t\t\t\tif ( p === RGBA_S3TC_DXT1_Format ) return extension.COMPRESSED_RGBA_S3TC_DXT1_EXT;\n\t\t\t\t\tif ( p === RGBA_S3TC_DXT3_Format ) return extension.COMPRESSED_RGBA_S3TC_DXT3_EXT;\n\t\t\t\t\tif ( p === RGBA_S3TC_DXT5_Format ) return extension.COMPRESSED_RGBA_S3TC_DXT5_EXT;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( p === RGB_PVRTC_4BPPV1_Format || p === RGB_PVRTC_2BPPV1_Format ||\n\t\t\t\tp === RGBA_PVRTC_4BPPV1_Format || p === RGBA_PVRTC_2BPPV1_Format ) {\n\n\t\t\t\textension = extensions.get( 'WEBGL_compressed_texture_pvrtc' );\n\n\t\t\t\tif ( extension !== null ) {\n\n\t\t\t\t\tif ( p === RGB_PVRTC_4BPPV1_Format ) return extension.COMPRESSED_RGB_PVRTC_4BPPV1_IMG;\n\t\t\t\t\tif ( p === RGB_PVRTC_2BPPV1_Format ) return extension.COMPRESSED_RGB_PVRTC_2BPPV1_IMG;\n\t\t\t\t\tif ( p === RGBA_PVRTC_4BPPV1_Format ) return extension.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG;\n\t\t\t\t\tif ( p === RGBA_PVRTC_2BPPV1_Format ) return extension.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( p === RGB_ETC1_Format ) {\n\n\t\t\t\textension = extensions.get( 'WEBGL_compressed_texture_etc1' );\n\n\t\t\t\tif ( extension !== null ) return extension.COMPRESSED_RGB_ETC1_WEBGL;\n\n\t\t\t}\n\n\t\t\tif ( p === MinEquation || p === MaxEquation ) {\n\n\t\t\t\textension = extensions.get( 'EXT_blend_minmax' );\n\n\t\t\t\tif ( extension !== null ) {\n\n\t\t\t\t\tif ( p === MinEquation ) return extension.MIN_EXT;\n\t\t\t\t\tif ( p === MaxEquation ) return extension.MAX_EXT;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( p === UnsignedInt248Type ) {\n\n\t\t\t\textension = extensions.get( 'WEBGL_depth_texture' );\n\n\t\t\t\tif ( extension !== null ) return extension.UNSIGNED_INT_24_8_WEBGL;\n\n\t\t\t}\n\n\t\t\treturn 0;\n\n\t\t}\n\n\t\treturn { convert: convert };\n\n\t}\n\n\t/**\n\t * @author supereggbert / http://www.paulbrunt.co.uk/\n\t * @author mrdoob / http://mrdoob.com/\n\t * @author alteredq / http://alteredqualia.com/\n\t * @author szimek / https://github.com/szimek/\n\t * @author tschw\n\t */\n\n\tfunction WebGLRenderer( parameters ) {\n\n\t\tconsole.log( 'THREE.WebGLRenderer', REVISION );\n\n\t\tparameters = parameters || {};\n\n\t\tvar _canvas = parameters.canvas !== undefined ? parameters.canvas : document.createElementNS( 'http://www.w3.org/1999/xhtml', 'canvas' ),\n\t\t\t_context = parameters.context !== undefined ? parameters.context : null,\n\n\t\t\t_alpha = parameters.alpha !== undefined ? parameters.alpha : false,\n\t\t\t_depth = parameters.depth !== undefined ? parameters.depth : true,\n\t\t\t_stencil = parameters.stencil !== undefined ? parameters.stencil : true,\n\t\t\t_antialias = parameters.antialias !== undefined ? parameters.antialias : false,\n\t\t\t_premultipliedAlpha = parameters.premultipliedAlpha !== undefined ? parameters.premultipliedAlpha : true,\n\t\t\t_preserveDrawingBuffer = parameters.preserveDrawingBuffer !== undefined ? parameters.preserveDrawingBuffer : false;\n\n\t\tvar lightsArray = [];\n\t\tvar shadowsArray = [];\n\n\t\tvar currentRenderList = null;\n\n\t\tvar spritesArray = [];\n\t\tvar flaresArray = [];\n\n\t\t// public properties\n\n\t\tthis.domElement = _canvas;\n\t\tthis.context = null;\n\n\t\t// clearing\n\n\t\tthis.autoClear = true;\n\t\tthis.autoClearColor = true;\n\t\tthis.autoClearDepth = true;\n\t\tthis.autoClearStencil = true;\n\n\t\t// scene graph\n\n\t\tthis.sortObjects = true;\n\n\t\t// user-defined clipping\n\n\t\tthis.clippingPlanes = [];\n\t\tthis.localClippingEnabled = false;\n\n\t\t// physically based shading\n\n\t\tthis.gammaFactor = 2.0;\t// for backwards compatibility\n\t\tthis.gammaInput = false;\n\t\tthis.gammaOutput = false;\n\n\t\t// physical lights\n\n\t\tthis.physicallyCorrectLights = false;\n\n\t\t// tone mapping\n\n\t\tthis.toneMapping = LinearToneMapping;\n\t\tthis.toneMappingExposure = 1.0;\n\t\tthis.toneMappingWhitePoint = 1.0;\n\n\t\t// morphs\n\n\t\tthis.maxMorphTargets = 8;\n\t\tthis.maxMorphNormals = 4;\n\n\t\t// internal properties\n\n\t\tvar _this = this,\n\n\t\t\t_isContextLost = false,\n\n\t\t\t// internal state cache\n\n\t\t\t_currentRenderTarget = null,\n\t\t\t_currentFramebuffer = null,\n\t\t\t_currentMaterialId = - 1,\n\t\t\t_currentGeometryProgram = '',\n\n\t\t\t_currentCamera = null,\n\t\t\t_currentArrayCamera = null,\n\n\t\t\t_currentViewport = new Vector4(),\n\t\t\t_currentScissor = new Vector4(),\n\t\t\t_currentScissorTest = null,\n\n\t\t\t//\n\n\t\t\t_usedTextureUnits = 0,\n\n\t\t\t//\n\n\t\t\t_width = _canvas.width,\n\t\t\t_height = _canvas.height,\n\n\t\t\t_pixelRatio = 1,\n\n\t\t\t_viewport = new Vector4( 0, 0, _width, _height ),\n\t\t\t_scissor = new Vector4( 0, 0, _width, _height ),\n\t\t\t_scissorTest = false,\n\n\t\t\t// frustum\n\n\t\t\t_frustum = new Frustum(),\n\n\t\t\t// clipping\n\n\t\t\t_clipping = new WebGLClipping(),\n\t\t\t_clippingEnabled = false,\n\t\t\t_localClippingEnabled = false,\n\n\t\t\t// camera matrices cache\n\n\t\t\t_projScreenMatrix = new Matrix4(),\n\n\t\t\t_vector3 = new Vector3(),\n\n\t\t\t// info\n\n\t\t\t_infoMemory = {\n\t\t\t\tgeometries: 0,\n\t\t\t\ttextures: 0\n\t\t\t},\n\n\t\t\t_infoRender = {\n\n\t\t\t\tframe: 0,\n\t\t\t\tcalls: 0,\n\t\t\t\tvertices: 0,\n\t\t\t\tfaces: 0,\n\t\t\t\tpoints: 0\n\n\t\t\t};\n\n\t\tthis.info = {\n\n\t\t\trender: _infoRender,\n\t\t\tmemory: _infoMemory,\n\t\t\tprograms: null\n\n\t\t};\n\n\t\tfunction getTargetPixelRatio() {\n\n\t\t\treturn _currentRenderTarget === null ? _pixelRatio : 1;\n\n\t\t}\n\n\t\t// initialize\n\n\t\tvar _gl;\n\n\t\ttry {\n\n\t\t\tvar contextAttributes = {\n\t\t\t\talpha: _alpha,\n\t\t\t\tdepth: _depth,\n\t\t\t\tstencil: _stencil,\n\t\t\t\tantialias: _antialias,\n\t\t\t\tpremultipliedAlpha: _premultipliedAlpha,\n\t\t\t\tpreserveDrawingBuffer: _preserveDrawingBuffer\n\t\t\t};\n\n\t\t\t_gl = _context || _canvas.getContext( 'webgl', contextAttributes ) || _canvas.getContext( 'experimental-webgl', contextAttributes );\n\n\t\t\tif ( _gl === null ) {\n\n\t\t\t\tif ( _canvas.getContext( 'webgl' ) !== null ) {\n\n\t\t\t\t\tthrow 'Error creating WebGL context with your selected attributes.';\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthrow 'Error creating WebGL context.';\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// Some experimental-webgl implementations do not have getShaderPrecisionFormat\n\n\t\t\tif ( _gl.getShaderPrecisionFormat === undefined ) {\n\n\t\t\t\t_gl.getShaderPrecisionFormat = function () {\n\n\t\t\t\t\treturn { 'rangeMin': 1, 'rangeMax': 1, 'precision': 1 };\n\n\t\t\t\t};\n\n\t\t\t}\n\n\t\t\t_canvas.addEventListener( 'webglcontextlost', onContextLost, false );\n\t\t\t_canvas.addEventListener( 'webglcontextrestored', onContextRestore, false );\n\n\t\t} catch ( error ) {\n\n\t\t\tconsole.error( 'THREE.WebGLRenderer: ' + error );\n\n\t\t}\n\n\t\tvar extensions, capabilities, state;\n\t\tvar properties, textures, attributes, geometries, objects, lights;\n\t\tvar programCache, renderLists;\n\n\t\tvar background, morphtargets, bufferRenderer, indexedBufferRenderer;\n\t\tvar flareRenderer, spriteRenderer;\n\n\t\tvar utils;\n\n\t\tfunction initGLContext() {\n\n\t\t\textensions = new WebGLExtensions( _gl );\n\t\t\textensions.get( 'WEBGL_depth_texture' );\n\t\t\textensions.get( 'OES_texture_float' );\n\t\t\textensions.get( 'OES_texture_float_linear' );\n\t\t\textensions.get( 'OES_texture_half_float' );\n\t\t\textensions.get( 'OES_texture_half_float_linear' );\n\t\t\textensions.get( 'OES_standard_derivatives' );\n\t\t\textensions.get( 'OES_element_index_uint' );\n\t\t\textensions.get( 'ANGLE_instanced_arrays' );\n\n\t\t\tutils = new WebGLUtils( _gl, extensions );\n\n\t\t\tcapabilities = new WebGLCapabilities( _gl, extensions, parameters );\n\n\t\t\tstate = new WebGLState( _gl, extensions, utils );\n\t\t\tstate.scissor( _currentScissor.copy( _scissor ).multiplyScalar( _pixelRatio ) );\n\t\t\tstate.viewport( _currentViewport.copy( _viewport ).multiplyScalar( _pixelRatio ) );\n\n\t\t\tproperties = new WebGLProperties();\n\t\t\ttextures = new WebGLTextures( _gl, extensions, state, properties, capabilities, utils, _infoMemory );\n\t\t\tattributes = new WebGLAttributes( _gl );\n\t\t\tgeometries = new WebGLGeometries( _gl, attributes, _infoMemory );\n\t\t\tobjects = new WebGLObjects( geometries, _infoRender );\n\t\t\tmorphtargets = new WebGLMorphtargets( _gl );\n\t\t\tprogramCache = new WebGLPrograms( _this, extensions, capabilities );\n\t\t\tlights = new WebGLLights();\n\t\t\trenderLists = new WebGLRenderLists();\n\n\t\t\tbackground = new WebGLBackground( _this, state, geometries, _premultipliedAlpha );\n\n\t\t\tbufferRenderer = new WebGLBufferRenderer( _gl, extensions, _infoRender );\n\t\t\tindexedBufferRenderer = new WebGLIndexedBufferRenderer( _gl, extensions, _infoRender );\n\n\t\t\tflareRenderer = new WebGLFlareRenderer( _this, _gl, state, textures, capabilities );\n\t\t\tspriteRenderer = new WebGLSpriteRenderer( _this, _gl, state, textures, capabilities );\n\n\t\t\t_this.info.programs = programCache.programs;\n\n\t\t\t_this.context = _gl;\n\t\t\t_this.capabilities = capabilities;\n\t\t\t_this.extensions = extensions;\n\t\t\t_this.properties = properties;\n\t\t\t_this.renderLists = renderLists;\n\t\t\t_this.state = state;\n\n\t\t}\n\n\t\tinitGLContext();\n\n\t\t// vr\n\n\t\tvar vr = new WebVRManager( _this );\n\n\t\tthis.vr = vr;\n\n\t\t// shadow map\n\n\t\tvar shadowMap = new WebGLShadowMap( _this, objects, capabilities.maxTextureSize );\n\n\t\tthis.shadowMap = shadowMap;\n\n\t\t// API\n\n\t\tthis.getContext = function () {\n\n\t\t\treturn _gl;\n\n\t\t};\n\n\t\tthis.getContextAttributes = function () {\n\n\t\t\treturn _gl.getContextAttributes();\n\n\t\t};\n\n\t\tthis.forceContextLoss = function () {\n\n\t\t\tvar extension = extensions.get( 'WEBGL_lose_context' );\n\t\t\tif ( extension ) extension.loseContext();\n\n\t\t};\n\n\t\tthis.forceContextRestore = function () {\n\n\t\t\tvar extension = extensions.get( 'WEBGL_lose_context' );\n\t\t\tif ( extension ) extension.restoreContext();\n\n\t\t};\n\n\t\tthis.getPixelRatio = function () {\n\n\t\t\treturn _pixelRatio;\n\n\t\t};\n\n\t\tthis.setPixelRatio = function ( value ) {\n\n\t\t\tif ( value === undefined ) return;\n\n\t\t\t_pixelRatio = value;\n\n\t\t\tthis.setSize( _width, _height, false );\n\n\t\t};\n\n\t\tthis.getSize = function () {\n\n\t\t\treturn {\n\t\t\t\twidth: _width,\n\t\t\t\theight: _height\n\t\t\t};\n\n\t\t};\n\n\t\tthis.setSize = function ( width, height, updateStyle ) {\n\n\t\t\tvar device = vr.getDevice();\n\n\t\t\tif ( device && device.isPresenting ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Can\\'t change size while VR device is presenting.' );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\t_width = width;\n\t\t\t_height = height;\n\n\t\t\t_canvas.width = width * _pixelRatio;\n\t\t\t_canvas.height = height * _pixelRatio;\n\n\t\t\tif ( updateStyle !== false ) {\n\n\t\t\t\t_canvas.style.width = width + 'px';\n\t\t\t\t_canvas.style.height = height + 'px';\n\n\t\t\t}\n\n\t\t\tthis.setViewport( 0, 0, width, height );\n\n\t\t};\n\n\t\tthis.getDrawingBufferSize = function () {\n\n\t\t\treturn {\n\t\t\t\twidth: _width * _pixelRatio,\n\t\t\t\theight: _height * _pixelRatio\n\t\t\t};\n\n\t\t};\n\n\t\tthis.setDrawingBufferSize = function ( width, height, pixelRatio ) {\n\n\t\t\t_width = width;\n\t\t\t_height = height;\n\n\t\t\t_pixelRatio = pixelRatio;\n\n\t\t\t_canvas.width = width * pixelRatio;\n\t\t\t_canvas.height = height * pixelRatio;\n\n\t\t\tthis.setViewport( 0, 0, width, height );\n\n\t\t};\n\n\t\tthis.setViewport = function ( x, y, width, height ) {\n\n\t\t\t_viewport.set( x, _height - y - height, width, height );\n\t\t\tstate.viewport( _currentViewport.copy( _viewport ).multiplyScalar( _pixelRatio ) );\n\n\t\t};\n\n\t\tthis.setScissor = function ( x, y, width, height ) {\n\n\t\t\t_scissor.set( x, _height - y - height, width, height );\n\t\t\tstate.scissor( _currentScissor.copy( _scissor ).multiplyScalar( _pixelRatio ) );\n\n\t\t};\n\n\t\tthis.setScissorTest = function ( boolean ) {\n\n\t\t\tstate.setScissorTest( _scissorTest = boolean );\n\n\t\t};\n\n\t\t// Clearing\n\n\t\tthis.getClearColor = function () {\n\n\t\t\treturn background.getClearColor();\n\n\t\t};\n\n\t\tthis.setClearColor = function () {\n\n\t\t\tbackground.setClearColor.apply( background, arguments );\n\n\t\t};\n\n\t\tthis.getClearAlpha = function () {\n\n\t\t\treturn background.getClearAlpha();\n\n\t\t};\n\n\t\tthis.setClearAlpha = function () {\n\n\t\t\tbackground.setClearAlpha.apply( background, arguments );\n\n\t\t};\n\n\t\tthis.clear = function ( color, depth, stencil ) {\n\n\t\t\tvar bits = 0;\n\n\t\t\tif ( color === undefined || color ) bits |= _gl.COLOR_BUFFER_BIT;\n\t\t\tif ( depth === undefined || depth ) bits |= _gl.DEPTH_BUFFER_BIT;\n\t\t\tif ( stencil === undefined || stencil ) bits |= _gl.STENCIL_BUFFER_BIT;\n\n\t\t\t_gl.clear( bits );\n\n\t\t};\n\n\t\tthis.clearColor = function () {\n\n\t\t\tthis.clear( true, false, false );\n\n\t\t};\n\n\t\tthis.clearDepth = function () {\n\n\t\t\tthis.clear( false, true, false );\n\n\t\t};\n\n\t\tthis.clearStencil = function () {\n\n\t\t\tthis.clear( false, false, true );\n\n\t\t};\n\n\t\tthis.clearTarget = function ( renderTarget, color, depth, stencil ) {\n\n\t\t\tthis.setRenderTarget( renderTarget );\n\t\t\tthis.clear( color, depth, stencil );\n\n\t\t};\n\n\t\t//\n\n\t\tthis.dispose = function () {\n\n\t\t\t_canvas.removeEventListener( 'webglcontextlost', onContextLost, false );\n\t\t\t_canvas.removeEventListener( 'webglcontextrestored', onContextRestore, false );\n\n\t\t\trenderLists.dispose();\n\n\t\t\tvr.dispose();\n\n\t\t};\n\n\t\t// Events\n\n\t\tfunction onContextLost( event ) {\n\n\t\t\tevent.preventDefault();\n\n\t\t\tconsole.log( 'THREE.WebGLRenderer: Context Lost.' );\n\n\t\t\t_isContextLost = true;\n\n\t\t}\n\n\t\tfunction onContextRestore( /* event */ ) {\n\n\t\t\tconsole.log( 'THREE.WebGLRenderer: Context Restored.' );\n\n\t\t\t_isContextLost = false;\n\n\t\t\tinitGLContext();\n\n\t\t}\n\n\t\tfunction onMaterialDispose( event ) {\n\n\t\t\tvar material = event.target;\n\n\t\t\tmaterial.removeEventListener( 'dispose', onMaterialDispose );\n\n\t\t\tdeallocateMaterial( material );\n\n\t\t}\n\n\t\t// Buffer deallocation\n\n\t\tfunction deallocateMaterial( material ) {\n\n\t\t\treleaseMaterialProgramReference( material );\n\n\t\t\tproperties.remove( material );\n\n\t\t}\n\n\n\t\tfunction releaseMaterialProgramReference( material ) {\n\n\t\t\tvar programInfo = properties.get( material ).program;\n\n\t\t\tmaterial.program = undefined;\n\n\t\t\tif ( programInfo !== undefined ) {\n\n\t\t\t\tprogramCache.releaseProgram( programInfo );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Buffer rendering\n\n\t\tfunction renderObjectImmediate( object, program, material ) {\n\n\t\t\tobject.render( function ( object ) {\n\n\t\t\t\t_this.renderBufferImmediate( object, program, material );\n\n\t\t\t} );\n\n\t\t}\n\n\t\tthis.renderBufferImmediate = function ( object, program, material ) {\n\n\t\t\tstate.initAttributes();\n\n\t\t\tvar buffers = properties.get( object );\n\n\t\t\tif ( object.hasPositions && ! buffers.position ) buffers.position = _gl.createBuffer();\n\t\t\tif ( object.hasNormals && ! buffers.normal ) buffers.normal = _gl.createBuffer();\n\t\t\tif ( object.hasUvs && ! buffers.uv ) buffers.uv = _gl.createBuffer();\n\t\t\tif ( object.hasColors && ! buffers.color ) buffers.color = _gl.createBuffer();\n\n\t\t\tvar programAttributes = program.getAttributes();\n\n\t\t\tif ( object.hasPositions ) {\n\n\t\t\t\t_gl.bindBuffer( _gl.ARRAY_BUFFER, buffers.position );\n\t\t\t\t_gl.bufferData( _gl.ARRAY_BUFFER, object.positionArray, _gl.DYNAMIC_DRAW );\n\n\t\t\t\tstate.enableAttribute( programAttributes.position );\n\t\t\t\t_gl.vertexAttribPointer( programAttributes.position, 3, _gl.FLOAT, false, 0, 0 );\n\n\t\t\t}\n\n\t\t\tif ( object.hasNormals ) {\n\n\t\t\t\t_gl.bindBuffer( _gl.ARRAY_BUFFER, buffers.normal );\n\n\t\t\t\tif ( ! material.isMeshPhongMaterial &&\n\t\t\t\t\t! material.isMeshStandardMaterial &&\n\t\t\t\t\t! material.isMeshNormalMaterial &&\n\t\t\t\t\tmaterial.flatShading === true ) {\n\n\t\t\t\t\tfor ( var i = 0, l = object.count * 3; i < l; i += 9 ) {\n\n\t\t\t\t\t\tvar array = object.normalArray;\n\n\t\t\t\t\t\tvar nx = ( array[ i + 0 ] + array[ i + 3 ] + array[ i + 6 ] ) / 3;\n\t\t\t\t\t\tvar ny = ( array[ i + 1 ] + array[ i + 4 ] + array[ i + 7 ] ) / 3;\n\t\t\t\t\t\tvar nz = ( array[ i + 2 ] + array[ i + 5 ] + array[ i + 8 ] ) / 3;\n\n\t\t\t\t\t\tarray[ i + 0 ] = nx;\n\t\t\t\t\t\tarray[ i + 1 ] = ny;\n\t\t\t\t\t\tarray[ i + 2 ] = nz;\n\n\t\t\t\t\t\tarray[ i + 3 ] = nx;\n\t\t\t\t\t\tarray[ i + 4 ] = ny;\n\t\t\t\t\t\tarray[ i + 5 ] = nz;\n\n\t\t\t\t\t\tarray[ i + 6 ] = nx;\n\t\t\t\t\t\tarray[ i + 7 ] = ny;\n\t\t\t\t\t\tarray[ i + 8 ] = nz;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t_gl.bufferData( _gl.ARRAY_BUFFER, object.normalArray, _gl.DYNAMIC_DRAW );\n\n\t\t\t\tstate.enableAttribute( programAttributes.normal );\n\n\t\t\t\t_gl.vertexAttribPointer( programAttributes.normal, 3, _gl.FLOAT, false, 0, 0 );\n\n\t\t\t}\n\n\t\t\tif ( object.hasUvs && material.map ) {\n\n\t\t\t\t_gl.bindBuffer( _gl.ARRAY_BUFFER, buffers.uv );\n\t\t\t\t_gl.bufferData( _gl.ARRAY_BUFFER, object.uvArray, _gl.DYNAMIC_DRAW );\n\n\t\t\t\tstate.enableAttribute( programAttributes.uv );\n\n\t\t\t\t_gl.vertexAttribPointer( programAttributes.uv, 2, _gl.FLOAT, false, 0, 0 );\n\n\t\t\t}\n\n\t\t\tif ( object.hasColors && material.vertexColors !== NoColors ) {\n\n\t\t\t\t_gl.bindBuffer( _gl.ARRAY_BUFFER, buffers.color );\n\t\t\t\t_gl.bufferData( _gl.ARRAY_BUFFER, object.colorArray, _gl.DYNAMIC_DRAW );\n\n\t\t\t\tstate.enableAttribute( programAttributes.color );\n\n\t\t\t\t_gl.vertexAttribPointer( programAttributes.color, 3, _gl.FLOAT, false, 0, 0 );\n\n\t\t\t}\n\n\t\t\tstate.disableUnusedAttributes();\n\n\t\t\t_gl.drawArrays( _gl.TRIANGLES, 0, object.count );\n\n\t\t\tobject.count = 0;\n\n\t\t};\n\n\t\tthis.renderBufferDirect = function ( camera, fog, geometry, material, object, group ) {\n\n\t\t\tstate.setMaterial( material );\n\n\t\t\tvar program = setProgram( camera, fog, material, object );\n\t\t\tvar geometryProgram = geometry.id + '_' + program.id + '_' + ( material.wireframe === true );\n\n\t\t\tvar updateBuffers = false;\n\n\t\t\tif ( geometryProgram !== _currentGeometryProgram ) {\n\n\t\t\t\t_currentGeometryProgram = geometryProgram;\n\t\t\t\tupdateBuffers = true;\n\n\t\t\t}\n\n\t\t\tif ( object.morphTargetInfluences ) {\n\n\t\t\t\tmorphtargets.update( object, geometry, material, program );\n\n\t\t\t\tupdateBuffers = true;\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tvar index = geometry.index;\n\t\t\tvar position = geometry.attributes.position;\n\t\t\tvar rangeFactor = 1;\n\n\t\t\tif ( material.wireframe === true ) {\n\n\t\t\t\tindex = geometries.getWireframeAttribute( geometry );\n\t\t\t\trangeFactor = 2;\n\n\t\t\t}\n\n\t\t\tvar attribute;\n\t\t\tvar renderer = bufferRenderer;\n\n\t\t\tif ( index !== null ) {\n\n\t\t\t\tattribute = attributes.get( index );\n\n\t\t\t\trenderer = indexedBufferRenderer;\n\t\t\t\trenderer.setIndex( attribute );\n\n\t\t\t}\n\n\t\t\tif ( updateBuffers ) {\n\n\t\t\t\tsetupVertexAttributes( material, program, geometry );\n\n\t\t\t\tif ( index !== null ) {\n\n\t\t\t\t\t_gl.bindBuffer( _gl.ELEMENT_ARRAY_BUFFER, attribute.buffer );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tvar dataCount = 0;\n\n\t\t\tif ( index !== null ) {\n\n\t\t\t\tdataCount = index.count;\n\n\t\t\t} else if ( position !== undefined ) {\n\n\t\t\t\tdataCount = position.count;\n\n\t\t\t}\n\n\t\t\tvar rangeStart = geometry.drawRange.start * rangeFactor;\n\t\t\tvar rangeCount = geometry.drawRange.count * rangeFactor;\n\n\t\t\tvar groupStart = group !== null ? group.start * rangeFactor : 0;\n\t\t\tvar groupCount = group !== null ? group.count * rangeFactor : Infinity;\n\n\t\t\tvar drawStart = Math.max( rangeStart, groupStart );\n\t\t\tvar drawEnd = Math.min( dataCount, rangeStart + rangeCount, groupStart + groupCount ) - 1;\n\n\t\t\tvar drawCount = Math.max( 0, drawEnd - drawStart + 1 );\n\n\t\t\tif ( drawCount === 0 ) return;\n\n\t\t\t//\n\n\t\t\tif ( object.isMesh ) {\n\n\t\t\t\tif ( material.wireframe === true ) {\n\n\t\t\t\t\tstate.setLineWidth( material.wireframeLinewidth * getTargetPixelRatio() );\n\t\t\t\t\trenderer.setMode( _gl.LINES );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tswitch ( object.drawMode ) {\n\n\t\t\t\t\t\tcase TrianglesDrawMode:\n\t\t\t\t\t\t\trenderer.setMode( _gl.TRIANGLES );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase TriangleStripDrawMode:\n\t\t\t\t\t\t\trenderer.setMode( _gl.TRIANGLE_STRIP );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase TriangleFanDrawMode:\n\t\t\t\t\t\t\trenderer.setMode( _gl.TRIANGLE_FAN );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\n\t\t\t} else if ( object.isLine ) {\n\n\t\t\t\tvar lineWidth = material.linewidth;\n\n\t\t\t\tif ( lineWidth === undefined ) lineWidth = 1; // Not using Line*Material\n\n\t\t\t\tstate.setLineWidth( lineWidth * getTargetPixelRatio() );\n\n\t\t\t\tif ( object.isLineSegments ) {\n\n\t\t\t\t\trenderer.setMode( _gl.LINES );\n\n\t\t\t\t} else if ( object.isLineLoop ) {\n\n\t\t\t\t\trenderer.setMode( _gl.LINE_LOOP );\n\n\t\t\t\t} else {\n\n\t\t\t\t\trenderer.setMode( _gl.LINE_STRIP );\n\n\t\t\t\t}\n\n\t\t\t} else if ( object.isPoints ) {\n\n\t\t\t\trenderer.setMode( _gl.POINTS );\n\n\t\t\t}\n\n\t\t\tif ( geometry && geometry.isInstancedBufferGeometry ) {\n\n\t\t\t\tif ( geometry.maxInstancedCount > 0 ) {\n\n\t\t\t\t\trenderer.renderInstances( geometry, drawStart, drawCount );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\trenderer.render( drawStart, drawCount );\n\n\t\t\t}\n\n\t\t};\n\n\t\tfunction setupVertexAttributes( material, program, geometry, startIndex ) {\n\n\t\t\tif ( geometry && geometry.isInstancedBufferGeometry ) {\n\n\t\t\t\tif ( extensions.get( 'ANGLE_instanced_arrays' ) === null ) {\n\n\t\t\t\t\tconsole.error( 'THREE.WebGLRenderer.setupVertexAttributes: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.' );\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( startIndex === undefined ) startIndex = 0;\n\n\t\t\tstate.initAttributes();\n\n\t\t\tvar geometryAttributes = geometry.attributes;\n\n\t\t\tvar programAttributes = program.getAttributes();\n\n\t\t\tvar materialDefaultAttributeValues = material.defaultAttributeValues;\n\n\t\t\tfor ( var name in programAttributes ) {\n\n\t\t\t\tvar programAttribute = programAttributes[ name ];\n\n\t\t\t\tif ( programAttribute >= 0 ) {\n\n\t\t\t\t\tvar geometryAttribute = geometryAttributes[ name ];\n\n\t\t\t\t\tif ( geometryAttribute !== undefined ) {\n\n\t\t\t\t\t\tvar normalized = geometryAttribute.normalized;\n\t\t\t\t\t\tvar size = geometryAttribute.itemSize;\n\n\t\t\t\t\t\tvar attribute = attributes.get( geometryAttribute );\n\n\t\t\t\t\t\t// TODO Attribute may not be available on context restore\n\n\t\t\t\t\t\tif ( attribute === undefined ) continue;\n\n\t\t\t\t\t\tvar buffer = attribute.buffer;\n\t\t\t\t\t\tvar type = attribute.type;\n\t\t\t\t\t\tvar bytesPerElement = attribute.bytesPerElement;\n\n\t\t\t\t\t\tif ( geometryAttribute.isInterleavedBufferAttribute ) {\n\n\t\t\t\t\t\t\tvar data = geometryAttribute.data;\n\t\t\t\t\t\t\tvar stride = data.stride;\n\t\t\t\t\t\t\tvar offset = geometryAttribute.offset;\n\n\t\t\t\t\t\t\tif ( data && data.isInstancedInterleavedBuffer ) {\n\n\t\t\t\t\t\t\t\tstate.enableAttributeAndDivisor( programAttribute, data.meshPerAttribute );\n\n\t\t\t\t\t\t\t\tif ( geometry.maxInstancedCount === undefined ) {\n\n\t\t\t\t\t\t\t\t\tgeometry.maxInstancedCount = data.meshPerAttribute * data.count;\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tstate.enableAttribute( programAttribute );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t_gl.bindBuffer( _gl.ARRAY_BUFFER, buffer );\n\t\t\t\t\t\t\t_gl.vertexAttribPointer( programAttribute, size, type, normalized, stride * bytesPerElement, ( startIndex * stride + offset ) * bytesPerElement );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tif ( geometryAttribute.isInstancedBufferAttribute ) {\n\n\t\t\t\t\t\t\t\tstate.enableAttributeAndDivisor( programAttribute, geometryAttribute.meshPerAttribute );\n\n\t\t\t\t\t\t\t\tif ( geometry.maxInstancedCount === undefined ) {\n\n\t\t\t\t\t\t\t\t\tgeometry.maxInstancedCount = geometryAttribute.meshPerAttribute * geometryAttribute.count;\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tstate.enableAttribute( programAttribute );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t_gl.bindBuffer( _gl.ARRAY_BUFFER, buffer );\n\t\t\t\t\t\t\t_gl.vertexAttribPointer( programAttribute, size, type, normalized, 0, startIndex * size * bytesPerElement );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else if ( materialDefaultAttributeValues !== undefined ) {\n\n\t\t\t\t\t\tvar value = materialDefaultAttributeValues[ name ];\n\n\t\t\t\t\t\tif ( value !== undefined ) {\n\n\t\t\t\t\t\t\tswitch ( value.length ) {\n\n\t\t\t\t\t\t\t\tcase 2:\n\t\t\t\t\t\t\t\t\t_gl.vertexAttrib2fv( programAttribute, value );\n\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\tcase 3:\n\t\t\t\t\t\t\t\t\t_gl.vertexAttrib3fv( programAttribute, value );\n\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\tcase 4:\n\t\t\t\t\t\t\t\t\t_gl.vertexAttrib4fv( programAttribute, value );\n\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\t_gl.vertexAttrib1fv( programAttribute, value );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tstate.disableUnusedAttributes();\n\n\t\t}\n\n\t\t// Compile\n\n\t\tthis.compile = function ( scene, camera ) {\n\n\t\t\tlightsArray.length = 0;\n\t\t\tshadowsArray.length = 0;\n\n\t\t\tscene.traverse( function ( object ) {\n\n\t\t\t\tif ( object.isLight ) {\n\n\t\t\t\t\tlightsArray.push( object );\n\n\t\t\t\t\tif ( object.castShadow ) {\n\n\t\t\t\t\t\tshadowsArray.push( object );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t\tlights.setup( lightsArray, shadowsArray, camera );\n\n\t\t\tscene.traverse( function ( object ) {\n\n\t\t\t\tif ( object.material ) {\n\n\t\t\t\t\tif ( Array.isArray( object.material ) ) {\n\n\t\t\t\t\t\tfor ( var i = 0; i < object.material.length; i ++ ) {\n\n\t\t\t\t\t\t\tinitMaterial( object.material[ i ], scene.fog, object );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tinitMaterial( object.material, scene.fog, object );\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// Animation Loop\n\n\t\tvar isAnimating = false;\n\t\tvar onAnimationFrame = null;\n\n\t\tfunction start() {\n\n\t\t\tif ( isAnimating ) return;\n\n\t\t\tvar device = vr.getDevice();\n\t\t\t\n\t\t\tif ( device && device.isPresenting ) {\n\n\t\t\t\tdevice.requestAnimationFrame( loop );\n\n\t\t\t} else {\n\n\t\t\t\twindow.requestAnimationFrame( loop );\n\n\t\t\t}\n\n\t\t\tisAnimating = true;\n\n\t\t}\n\n\t\tfunction loop( time ) {\n\n\t\t\tif ( onAnimationFrame !== null ) onAnimationFrame( time );\n\n\t\t\tvar device = vr.getDevice();\n\t\t\t\n\t\t\tif ( device && device.isPresenting ) {\n\n\t\t\t\tdevice.requestAnimationFrame( loop );\n\n\t\t\t} else {\n\n\t\t\t\twindow.requestAnimationFrame( loop );\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.animate = function ( callback ) {\n\n\t\t\tonAnimationFrame = callback;\n\t\t\tstart();\n\n\t\t};\n\n\t\t// Rendering\n\n\t\tthis.render = function ( scene, camera, renderTarget, forceClear ) {\n\n\t\t\tif ( ! ( camera && camera.isCamera ) ) {\n\n\t\t\t\tconsole.error( 'THREE.WebGLRenderer.render: camera is not an instance of THREE.Camera.' );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tif ( _isContextLost ) return;\n\n\t\t\t// reset caching for this frame\n\n\t\t\t_currentGeometryProgram = '';\n\t\t\t_currentMaterialId = - 1;\n\t\t\t_currentCamera = null;\n\n\t\t\t// update scene graph\n\n\t\t\tif ( scene.autoUpdate === true ) scene.updateMatrixWorld();\n\n\t\t\t// update camera matrices and frustum\n\n\t\t\tif ( camera.parent === null ) camera.updateMatrixWorld();\n\n\t\t\tif ( vr.enabled ) {\n\n\t\t\t\tcamera = vr.getCamera( camera );\n\n\t\t\t}\n\n\t\t\t_projScreenMatrix.multiplyMatrices( camera.projectionMatrix, camera.matrixWorldInverse );\n\t\t\t_frustum.setFromMatrix( _projScreenMatrix );\n\n\t\t\tlightsArray.length = 0;\n\t\t\tshadowsArray.length = 0;\n\n\t\t\tspritesArray.length = 0;\n\t\t\tflaresArray.length = 0;\n\n\t\t\t_localClippingEnabled = this.localClippingEnabled;\n\t\t\t_clippingEnabled = _clipping.init( this.clippingPlanes, _localClippingEnabled, camera );\n\n\t\t\tcurrentRenderList = renderLists.get( scene, camera );\n\t\t\tcurrentRenderList.init();\n\n\t\t\tprojectObject( scene, camera, _this.sortObjects );\n\n\t\t\tif ( _this.sortObjects === true ) {\n\n\t\t\t\tcurrentRenderList.sort();\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tif ( _clippingEnabled ) _clipping.beginShadows();\n\n\t\t\tshadowMap.render( shadowsArray, scene, camera );\n\n\t\t\tlights.setup( lightsArray, shadowsArray, camera );\n\n\t\t\tif ( _clippingEnabled ) _clipping.endShadows();\n\n\t\t\t//\n\n\t\t\t_infoRender.frame ++;\n\t\t\t_infoRender.calls = 0;\n\t\t\t_infoRender.vertices = 0;\n\t\t\t_infoRender.faces = 0;\n\t\t\t_infoRender.points = 0;\n\n\t\t\tif ( renderTarget === undefined ) {\n\n\t\t\t\trenderTarget = null;\n\n\t\t\t}\n\n\t\t\tthis.setRenderTarget( renderTarget );\n\n\t\t\t//\n\n\t\t\tbackground.render( currentRenderList, scene, camera, forceClear );\n\n\t\t\t// render scene\n\n\t\t\tvar opaqueObjects = currentRenderList.opaque;\n\t\t\tvar transparentObjects = currentRenderList.transparent;\n\n\t\t\tif ( scene.overrideMaterial ) {\n\n\t\t\t\tvar overrideMaterial = scene.overrideMaterial;\n\n\t\t\t\tif ( opaqueObjects.length ) renderObjects( opaqueObjects, scene, camera, overrideMaterial );\n\t\t\t\tif ( transparentObjects.length ) renderObjects( transparentObjects, scene, camera, overrideMaterial );\n\n\t\t\t} else {\n\n\t\t\t\t// opaque pass (front-to-back order)\n\n\t\t\t\tif ( opaqueObjects.length ) renderObjects( opaqueObjects, scene, camera );\n\n\t\t\t\t// transparent pass (back-to-front order)\n\n\t\t\t\tif ( transparentObjects.length ) renderObjects( transparentObjects, scene, camera );\n\n\t\t\t}\n\n\t\t\t// custom renderers\n\n\t\t\tspriteRenderer.render( spritesArray, scene, camera );\n\t\t\tflareRenderer.render( flaresArray, scene, camera, _currentViewport );\n\n\t\t\t// Generate mipmap if we're using any kind of mipmap filtering\n\n\t\t\tif ( renderTarget ) {\n\n\t\t\t\ttextures.updateRenderTargetMipmap( renderTarget );\n\n\t\t\t}\n\n\t\t\t// Ensure depth buffer writing is enabled so it can be cleared on next render\n\n\t\t\tstate.buffers.depth.setTest( true );\n\t\t\tstate.buffers.depth.setMask( true );\n\t\t\tstate.buffers.color.setMask( true );\n\n\t\t\tstate.setPolygonOffset( false );\n\n\t\t\tif ( vr.enabled ) {\n\n\t\t\t\tvr.submitFrame();\n\n\t\t\t}\n\n\t\t\t// _gl.finish();\n\n\t\t};\n\n\t\t/*\n\t\t// TODO Duplicated code (Frustum)\n\n\t\tvar _sphere = new Sphere();\n\n\t\tfunction isObjectViewable( object ) {\n\n\t\t\tvar geometry = object.geometry;\n\n\t\t\tif ( geometry.boundingSphere === null )\n\t\t\t\tgeometry.computeBoundingSphere();\n\n\t\t\t_sphere.copy( geometry.boundingSphere ).\n\t\t\tapplyMatrix4( object.matrixWorld );\n\n\t\t\treturn isSphereViewable( _sphere );\n\n\t\t}\n\n\t\tfunction isSpriteViewable( sprite ) {\n\n\t\t\t_sphere.center.set( 0, 0, 0 );\n\t\t\t_sphere.radius = 0.7071067811865476;\n\t\t\t_sphere.applyMatrix4( sprite.matrixWorld );\n\n\t\t\treturn isSphereViewable( _sphere );\n\n\t\t}\n\n\t\tfunction isSphereViewable( sphere ) {\n\n\t\t\tif ( ! _frustum.intersectsSphere( sphere ) ) return false;\n\n\t\t\tvar numPlanes = _clipping.numPlanes;\n\n\t\t\tif ( numPlanes === 0 ) return true;\n\n\t\t\tvar planes = _this.clippingPlanes,\n\n\t\t\t\tcenter = sphere.center,\n\t\t\t\tnegRad = - sphere.radius,\n\t\t\t\ti = 0;\n\n\t\t\tdo {\n\n\t\t\t\t// out when deeper than radius in the negative halfspace\n\t\t\t\tif ( planes[ i ].distanceToPoint( center ) < negRad ) return false;\n\n\t\t\t} while ( ++ i !== numPlanes );\n\n\t\t\treturn true;\n\n\t\t}\n\t\t*/\n\n\t\tfunction projectObject( object, camera, sortObjects ) {\n\n\t\t\tif ( object.visible === false ) return;\n\n\t\t\tvar visible = object.layers.test( camera.layers );\n\n\t\t\tif ( visible ) {\n\n\t\t\t\tif ( object.isLight ) {\n\n\t\t\t\t\tlightsArray.push( object );\n\n\t\t\t\t\tif ( object.castShadow ) {\n\n\t\t\t\t\t\tshadowsArray.push( object );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( object.isSprite ) {\n\n\t\t\t\t\tif ( ! object.frustumCulled || _frustum.intersectsSprite( object ) ) {\n\n\t\t\t\t\t\tspritesArray.push( object );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( object.isLensFlare ) {\n\n\t\t\t\t\tflaresArray.push( object );\n\n\t\t\t\t} else if ( object.isImmediateRenderObject ) {\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\tcurrentRenderList.push( object, null, object.material, _vector3.z, null );\n\n\t\t\t\t} else if ( object.isMesh || object.isLine || object.isPoints ) {\n\n\t\t\t\t\tif ( object.isSkinnedMesh ) {\n\n\t\t\t\t\t\tobject.skeleton.update();\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( ! object.frustumCulled || _frustum.intersectsObject( object ) ) {\n\n\t\t\t\t\t\tif ( sortObjects ) {\n\n\t\t\t\t\t\t\t_vector3.setFromMatrixPosition( object.matrixWorld )\n\t\t\t\t\t\t\t\t.applyMatrix4( _projScreenMatrix );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar geometry = objects.update( object );\n\t\t\t\t\t\tvar material = object.material;\n\n\t\t\t\t\t\tif ( Array.isArray( material ) ) {\n\n\t\t\t\t\t\t\tvar groups = geometry.groups;\n\n\t\t\t\t\t\t\tfor ( var i = 0, l = groups.length; i < l; i ++ ) {\n\n\t\t\t\t\t\t\t\tvar group = groups[ i ];\n\t\t\t\t\t\t\t\tvar groupMaterial = material[ group.materialIndex ];\n\n\t\t\t\t\t\t\t\tif ( groupMaterial && groupMaterial.visible ) {\n\n\t\t\t\t\t\t\t\t\tcurrentRenderList.push( object, geometry, groupMaterial, _vector3.z, group );\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else if ( material.visible ) {\n\n\t\t\t\t\t\t\tcurrentRenderList.push( object, geometry, material, _vector3.z, null );\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\tvar children = object.children;\n\n\t\t\tfor ( var i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\t\tprojectObject( children[ i ], camera, sortObjects );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction renderObjects( renderList, scene, camera, overrideMaterial ) {\n\n\t\t\tfor ( var i = 0, l = renderList.length; i < l; i ++ ) {\n\n\t\t\t\tvar renderItem = renderList[ i ];\n\n\t\t\t\tvar object = renderItem.object;\n\t\t\t\tvar geometry = renderItem.geometry;\n\t\t\t\tvar material = overrideMaterial === undefined ? renderItem.material : overrideMaterial;\n\t\t\t\tvar group = renderItem.group;\n\n\t\t\t\tif ( camera.isArrayCamera ) {\n\n\t\t\t\t\t_currentArrayCamera = camera;\n\n\t\t\t\t\tvar cameras = camera.cameras;\n\n\t\t\t\t\tfor ( var j = 0, jl = cameras.length; j < jl; j ++ ) {\n\n\t\t\t\t\t\tvar camera2 = cameras[ j ];\n\n\t\t\t\t\t\tif ( object.layers.test( camera2.layers ) ) {\n\n\t\t\t\t\t\t\tvar bounds = camera2.bounds;\n\n\t\t\t\t\t\t\tvar x = bounds.x * _width;\n\t\t\t\t\t\t\tvar y = bounds.y * _height;\n\t\t\t\t\t\t\tvar width = bounds.z * _width;\n\t\t\t\t\t\t\tvar height = bounds.w * _height;\n\n\t\t\t\t\t\t\tstate.viewport( _currentViewport.set( x, y, width, height ).multiplyScalar( _pixelRatio ) );\n\n\t\t\t\t\t\t\trenderObject( object, scene, camera2, geometry, material, group );\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_currentArrayCamera = null;\n\n\t\t\t\t\trenderObject( object, scene, camera, geometry, material, group );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction renderObject( object, scene, camera, geometry, material, group ) {\n\n\t\t\tobject.onBeforeRender( _this, scene, camera, geometry, material, group );\n\n\t\t\tobject.modelViewMatrix.multiplyMatrices( camera.matrixWorldInverse, object.matrixWorld );\n\t\t\tobject.normalMatrix.getNormalMatrix( object.modelViewMatrix );\n\n\t\t\tif ( object.isImmediateRenderObject ) {\n\n\t\t\t\tstate.setMaterial( material );\n\n\t\t\t\tvar program = setProgram( camera, scene.fog, material, object );\n\n\t\t\t\t_currentGeometryProgram = '';\n\n\t\t\t\trenderObjectImmediate( object, program, material );\n\n\t\t\t} else {\n\n\t\t\t\t_this.renderBufferDirect( camera, scene.fog, geometry, material, object, group );\n\n\t\t\t}\n\n\t\t\tobject.onAfterRender( _this, scene, camera, geometry, material, group );\n\n\t\t}\n\n\t\tfunction initMaterial( material, fog, object ) {\n\n\t\t\tvar materialProperties = properties.get( material );\n\n\t\t\tvar parameters = programCache.getParameters(\n\t\t\t\tmaterial, lights.state, shadowsArray, fog, _clipping.numPlanes, _clipping.numIntersection, object );\n\n\t\t\tvar code = programCache.getProgramCode( material, parameters );\n\n\t\t\tvar program = materialProperties.program;\n\t\t\tvar programChange = true;\n\n\t\t\tif ( program === undefined ) {\n\n\t\t\t\t// new material\n\t\t\t\tmaterial.addEventListener( 'dispose', onMaterialDispose );\n\n\t\t\t} else if ( program.code !== code ) {\n\n\t\t\t\t// changed glsl or parameters\n\t\t\t\treleaseMaterialProgramReference( material );\n\n\t\t\t} else if ( parameters.shaderID !== undefined ) {\n\n\t\t\t\t// same glsl and uniform list\n\t\t\t\treturn;\n\n\t\t\t} else {\n\n\t\t\t\t// only rebuild uniform list\n\t\t\t\tprogramChange = false;\n\n\t\t\t}\n\n\t\t\tif ( programChange ) {\n\n\t\t\t\tif ( parameters.shaderID ) {\n\n\t\t\t\t\tvar shader = ShaderLib[ parameters.shaderID ];\n\n\t\t\t\t\tmaterialProperties.shader = {\n\t\t\t\t\t\tname: material.type,\n\t\t\t\t\t\tuniforms: UniformsUtils.clone( shader.uniforms ),\n\t\t\t\t\t\tvertexShader: shader.vertexShader,\n\t\t\t\t\t\tfragmentShader: shader.fragmentShader\n\t\t\t\t\t};\n\n\t\t\t\t} else {\n\n\t\t\t\t\tmaterialProperties.shader = {\n\t\t\t\t\t\tname: material.type,\n\t\t\t\t\t\tuniforms: material.uniforms,\n\t\t\t\t\t\tvertexShader: material.vertexShader,\n\t\t\t\t\t\tfragmentShader: material.fragmentShader\n\t\t\t\t\t};\n\n\t\t\t\t}\n\n\t\t\t\tmaterial.onBeforeCompile( materialProperties.shader );\n\n\t\t\t\tprogram = programCache.acquireProgram( material, materialProperties.shader, parameters, code );\n\n\t\t\t\tmaterialProperties.program = program;\n\t\t\t\tmaterial.program = program;\n\n\t\t\t}\n\n\t\t\tvar programAttributes = program.getAttributes();\n\n\t\t\tif ( material.morphTargets ) {\n\n\t\t\t\tmaterial.numSupportedMorphTargets = 0;\n\n\t\t\t\tfor ( var i = 0; i < _this.maxMorphTargets; i ++ ) {\n\n\t\t\t\t\tif ( programAttributes[ 'morphTarget' + i ] >= 0 ) {\n\n\t\t\t\t\t\tmaterial.numSupportedMorphTargets ++;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( material.morphNormals ) {\n\n\t\t\t\tmaterial.numSupportedMorphNormals = 0;\n\n\t\t\t\tfor ( var i = 0; i < _this.maxMorphNormals; i ++ ) {\n\n\t\t\t\t\tif ( programAttributes[ 'morphNormal' + i ] >= 0 ) {\n\n\t\t\t\t\t\tmaterial.numSupportedMorphNormals ++;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tvar uniforms = materialProperties.shader.uniforms;\n\n\t\t\tif ( ! material.isShaderMaterial &&\n\t\t\t\t! material.isRawShaderMaterial ||\n\t\t\t\tmaterial.clipping === true ) {\n\n\t\t\t\tmaterialProperties.numClippingPlanes = _clipping.numPlanes;\n\t\t\t\tmaterialProperties.numIntersection = _clipping.numIntersection;\n\t\t\t\tuniforms.clippingPlanes = _clipping.uniform;\n\n\t\t\t}\n\n\t\t\tmaterialProperties.fog = fog;\n\n\t\t\t// store the light setup it was created for\n\n\t\t\tmaterialProperties.lightsHash = lights.state.hash;\n\n\t\t\tif ( material.lights ) {\n\n\t\t\t\t// wire up the material to this renderer's lighting state\n\n\t\t\t\tuniforms.ambientLightColor.value = lights.state.ambient;\n\t\t\t\tuniforms.directionalLights.value = lights.state.directional;\n\t\t\t\tuniforms.spotLights.value = lights.state.spot;\n\t\t\t\tuniforms.rectAreaLights.value = lights.state.rectArea;\n\t\t\t\tuniforms.pointLights.value = lights.state.point;\n\t\t\t\tuniforms.hemisphereLights.value = lights.state.hemi;\n\n\t\t\t\tuniforms.directionalShadowMap.value = lights.state.directionalShadowMap;\n\t\t\t\tuniforms.directionalShadowMatrix.value = lights.state.directionalShadowMatrix;\n\t\t\t\tuniforms.spotShadowMap.value = lights.state.spotShadowMap;\n\t\t\t\tuniforms.spotShadowMatrix.value = lights.state.spotShadowMatrix;\n\t\t\t\tuniforms.pointShadowMap.value = lights.state.pointShadowMap;\n\t\t\t\tuniforms.pointShadowMatrix.value = lights.state.pointShadowMatrix;\n\t\t\t\t// TODO (abelnation): add area lights shadow info to uniforms\n\n\t\t\t}\n\n\t\t\tvar progUniforms = materialProperties.program.getUniforms(),\n\t\t\t\tuniformsList =\n\t\t\t\t\tWebGLUniforms.seqWithValue( progUniforms.seq, uniforms );\n\n\t\t\tmaterialProperties.uniformsList = uniformsList;\n\n\t\t}\n\n\t\tfunction setProgram( camera, fog, material, object ) {\n\n\t\t\t_usedTextureUnits = 0;\n\n\t\t\tvar materialProperties = properties.get( material );\n\n\t\t\tif ( _clippingEnabled ) {\n\n\t\t\t\tif ( _localClippingEnabled || camera !== _currentCamera ) {\n\n\t\t\t\t\tvar useCache =\n\t\t\t\t\t\tcamera === _currentCamera &&\n\t\t\t\t\t\tmaterial.id === _currentMaterialId;\n\n\t\t\t\t\t// we might want to call this function with some ClippingGroup\n\t\t\t\t\t// object instead of the material, once it becomes feasible\n\t\t\t\t\t// (#8465, #8379)\n\t\t\t\t\t_clipping.setState(\n\t\t\t\t\t\tmaterial.clippingPlanes, material.clipIntersection, material.clipShadows,\n\t\t\t\t\t\tcamera, materialProperties, useCache );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( material.needsUpdate === false ) {\n\n\t\t\t\tif ( materialProperties.program === undefined ) {\n\n\t\t\t\t\tmaterial.needsUpdate = true;\n\n\t\t\t\t} else if ( material.fog && materialProperties.fog !== fog ) {\n\n\t\t\t\t\tmaterial.needsUpdate = true;\n\n\t\t\t\t} else if ( material.lights && materialProperties.lightsHash !== lights.state.hash ) {\n\n\t\t\t\t\tmaterial.needsUpdate = true;\n\n\t\t\t\t} else if ( materialProperties.numClippingPlanes !== undefined &&\n\t\t\t\t\t( materialProperties.numClippingPlanes !== _clipping.numPlanes ||\n\t\t\t\t\tmaterialProperties.numIntersection !== _clipping.numIntersection ) ) {\n\n\t\t\t\t\tmaterial.needsUpdate = true;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( material.needsUpdate ) {\n\n\t\t\t\tinitMaterial( material, fog, object );\n\t\t\t\tmaterial.needsUpdate = false;\n\n\t\t\t}\n\n\t\t\tvar refreshProgram = false;\n\t\t\tvar refreshMaterial = false;\n\t\t\tvar refreshLights = false;\n\n\t\t\tvar program = materialProperties.program,\n\t\t\t\tp_uniforms = program.getUniforms(),\n\t\t\t\tm_uniforms = materialProperties.shader.uniforms;\n\n\t\t\tif ( state.useProgram( program.program ) ) {\n\n\t\t\t\trefreshProgram = true;\n\t\t\t\trefreshMaterial = true;\n\t\t\t\trefreshLights = true;\n\n\t\t\t}\n\n\t\t\tif ( material.id !== _currentMaterialId ) {\n\n\t\t\t\t_currentMaterialId = material.id;\n\n\t\t\t\trefreshMaterial = true;\n\n\t\t\t}\n\n\t\t\tif ( refreshProgram || camera !== _currentCamera ) {\n\n\t\t\t\tp_uniforms.setValue( _gl, 'projectionMatrix', camera.projectionMatrix );\n\n\t\t\t\tif ( capabilities.logarithmicDepthBuffer ) {\n\n\t\t\t\t\tp_uniforms.setValue( _gl, 'logDepthBufFC',\n\t\t\t\t\t\t2.0 / ( Math.log( camera.far + 1.0 ) / Math.LN2 ) );\n\n\t\t\t\t}\n\n\t\t\t\t// Avoid unneeded uniform updates per ArrayCamera's sub-camera\n\n\t\t\t\tif ( _currentCamera !== ( _currentArrayCamera || camera ) ) {\n\n\t\t\t\t\t_currentCamera = ( _currentArrayCamera || camera );\n\n\t\t\t\t\t// lighting uniforms depend on the camera so enforce an update\n\t\t\t\t\t// now, in case this material supports lights - or later, when\n\t\t\t\t\t// the next material that does gets activated:\n\n\t\t\t\t\trefreshMaterial = true;\t\t// set to true on material change\n\t\t\t\t\trefreshLights = true;\t\t// remains set until update done\n\n\t\t\t\t}\n\n\t\t\t\t// load material specific uniforms\n\t\t\t\t// (shader material also gets them for the sake of genericity)\n\n\t\t\t\tif ( material.isShaderMaterial ||\n\t\t\t\t\tmaterial.isMeshPhongMaterial ||\n\t\t\t\t\tmaterial.isMeshStandardMaterial ||\n\t\t\t\t\tmaterial.envMap ) {\n\n\t\t\t\t\tvar uCamPos = p_uniforms.map.cameraPosition;\n\n\t\t\t\t\tif ( uCamPos !== undefined ) {\n\n\t\t\t\t\t\tuCamPos.setValue( _gl,\n\t\t\t\t\t\t\t_vector3.setFromMatrixPosition( camera.matrixWorld ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( material.isMeshPhongMaterial ||\n\t\t\t\t\tmaterial.isMeshLambertMaterial ||\n\t\t\t\t\tmaterial.isMeshBasicMaterial ||\n\t\t\t\t\tmaterial.isMeshStandardMaterial ||\n\t\t\t\t\tmaterial.isShaderMaterial ||\n\t\t\t\t\tmaterial.skinning ) {\n\n\t\t\t\t\tp_uniforms.setValue( _gl, 'viewMatrix', camera.matrixWorldInverse );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// skinning uniforms must be set even if material didn't change\n\t\t\t// auto-setting of texture unit for bone texture must go before other textures\n\t\t\t// not sure why, but otherwise weird things happen\n\n\t\t\tif ( material.skinning ) {\n\n\t\t\t\tp_uniforms.setOptional( _gl, object, 'bindMatrix' );\n\t\t\t\tp_uniforms.setOptional( _gl, object, 'bindMatrixInverse' );\n\n\t\t\t\tvar skeleton = object.skeleton;\n\n\t\t\t\tif ( skeleton ) {\n\n\t\t\t\t\tvar bones = skeleton.bones;\n\n\t\t\t\t\tif ( capabilities.floatVertexTextures ) {\n\n\t\t\t\t\t\tif ( skeleton.boneTexture === undefined ) {\n\n\t\t\t\t\t\t\t// layout (1 matrix = 4 pixels)\n\t\t\t\t\t\t\t// RGBA RGBA RGBA RGBA (=> column1, column2, column3, column4)\n\t\t\t\t\t\t\t// with 8x8 pixel texture max 16 bones * 4 pixels = (8 * 8)\n\t\t\t\t\t\t\t// 16x16 pixel texture max 64 bones * 4 pixels = (16 * 16)\n\t\t\t\t\t\t\t// 32x32 pixel texture max 256 bones * 4 pixels = (32 * 32)\n\t\t\t\t\t\t\t// 64x64 pixel texture max 1024 bones * 4 pixels = (64 * 64)\n\n\n\t\t\t\t\t\t\tvar size = Math.sqrt( bones.length * 4 ); // 4 pixels needed for 1 matrix\n\t\t\t\t\t\t\tsize = _Math.ceilPowerOfTwo( size );\n\t\t\t\t\t\t\tsize = Math.max( size, 4 );\n\n\t\t\t\t\t\t\tvar boneMatrices = new Float32Array( size * size * 4 ); // 4 floats per RGBA pixel\n\t\t\t\t\t\t\tboneMatrices.set( skeleton.boneMatrices ); // copy current values\n\n\t\t\t\t\t\t\tvar boneTexture = new DataTexture( boneMatrices, size, size, RGBAFormat, FloatType );\n\n\t\t\t\t\t\t\tskeleton.boneMatrices = boneMatrices;\n\t\t\t\t\t\t\tskeleton.boneTexture = boneTexture;\n\t\t\t\t\t\t\tskeleton.boneTextureSize = size;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tp_uniforms.setValue( _gl, 'boneTexture', skeleton.boneTexture );\n\t\t\t\t\t\tp_uniforms.setValue( _gl, 'boneTextureSize', skeleton.boneTextureSize );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tp_uniforms.setOptional( _gl, skeleton, 'boneMatrices' );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( refreshMaterial ) {\n\n\t\t\t\tp_uniforms.setValue( _gl, 'toneMappingExposure', _this.toneMappingExposure );\n\t\t\t\tp_uniforms.setValue( _gl, 'toneMappingWhitePoint', _this.toneMappingWhitePoint );\n\n\t\t\t\tif ( material.lights ) {\n\n\t\t\t\t\t// the current material requires lighting info\n\n\t\t\t\t\t// note: all lighting uniforms are always set correctly\n\t\t\t\t\t// they simply reference the renderer's state for their\n\t\t\t\t\t// values\n\t\t\t\t\t//\n\t\t\t\t\t// use the current material's .needsUpdate flags to set\n\t\t\t\t\t// the GL state when required\n\n\t\t\t\t\tmarkUniformsLightsNeedsUpdate( m_uniforms, refreshLights );\n\n\t\t\t\t}\n\n\t\t\t\t// refresh uniforms common to several materials\n\n\t\t\t\tif ( fog && material.fog ) {\n\n\t\t\t\t\trefreshUniformsFog( m_uniforms, fog );\n\n\t\t\t\t}\n\n\t\t\t\tif ( material.isMeshBasicMaterial ) {\n\n\t\t\t\t\trefreshUniformsCommon( m_uniforms, material );\n\n\t\t\t\t} else if ( material.isMeshLambertMaterial ) {\n\n\t\t\t\t\trefreshUniformsCommon( m_uniforms, material );\n\t\t\t\t\trefreshUniformsLambert( m_uniforms, material );\n\n\t\t\t\t} else if ( material.isMeshPhongMaterial ) {\n\n\t\t\t\t\trefreshUniformsCommon( m_uniforms, material );\n\n\t\t\t\t\tif ( material.isMeshToonMaterial ) {\n\n\t\t\t\t\t\trefreshUniformsToon( m_uniforms, material );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\trefreshUniformsPhong( m_uniforms, material );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( material.isMeshStandardMaterial ) {\n\n\t\t\t\t\trefreshUniformsCommon( m_uniforms, material );\n\n\t\t\t\t\tif ( material.isMeshPhysicalMaterial ) {\n\n\t\t\t\t\t\trefreshUniformsPhysical( m_uniforms, material );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\trefreshUniformsStandard( m_uniforms, material );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( material.isMeshDepthMaterial ) {\n\n\t\t\t\t\trefreshUniformsCommon( m_uniforms, material );\n\t\t\t\t\trefreshUniformsDepth( m_uniforms, material );\n\n\t\t\t\t} else if ( material.isMeshDistanceMaterial ) {\n\n\t\t\t\t\trefreshUniformsCommon( m_uniforms, material );\n\t\t\t\t\trefreshUniformsDistance( m_uniforms, material );\n\n\t\t\t\t} else if ( material.isMeshNormalMaterial ) {\n\n\t\t\t\t\trefreshUniformsCommon( m_uniforms, material );\n\t\t\t\t\trefreshUniformsNormal( m_uniforms, material );\n\n\t\t\t\t} else if ( material.isLineBasicMaterial ) {\n\n\t\t\t\t\trefreshUniformsLine( m_uniforms, material );\n\n\t\t\t\t\tif ( material.isLineDashedMaterial ) {\n\n\t\t\t\t\t\trefreshUniformsDash( m_uniforms, material );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( material.isPointsMaterial ) {\n\n\t\t\t\t\trefreshUniformsPoints( m_uniforms, material );\n\n\t\t\t\t} else if ( material.isShadowMaterial ) {\n\n\t\t\t\t\tm_uniforms.color.value = material.color;\n\t\t\t\t\tm_uniforms.opacity.value = material.opacity;\n\n\t\t\t\t}\n\n\t\t\t\t// RectAreaLight Texture\n\t\t\t\t// TODO (mrdoob): Find a nicer implementation\n\n\t\t\t\tif ( m_uniforms.ltcMat !== undefined ) m_uniforms.ltcMat.value = UniformsLib.LTC_MAT_TEXTURE;\n\t\t\t\tif ( m_uniforms.ltcMag !== undefined ) m_uniforms.ltcMag.value = UniformsLib.LTC_MAG_TEXTURE;\n\n\t\t\t\tWebGLUniforms.upload(\n\t\t\t\t\t_gl, materialProperties.uniformsList, m_uniforms, _this );\n\n\t\t\t}\n\n\n\t\t\t// common matrices\n\n\t\t\tp_uniforms.setValue( _gl, 'modelViewMatrix', object.modelViewMatrix );\n\t\t\tp_uniforms.setValue( _gl, 'normalMatrix', object.normalMatrix );\n\t\t\tp_uniforms.setValue( _gl, 'modelMatrix', object.matrixWorld );\n\n\t\t\treturn program;\n\n\t\t}\n\n\t\t// Uniforms (refresh uniforms objects)\n\n\t\tfunction refreshUniformsCommon( uniforms, material ) {\n\n\t\t\tuniforms.opacity.value = material.opacity;\n\n\t\t\tif ( material.color ) {\n\n\t\t\t\tuniforms.diffuse.value = material.color;\n\n\t\t\t}\n\n\t\t\tif ( material.emissive ) {\n\n\t\t\t\tuniforms.emissive.value.copy( material.emissive ).multiplyScalar( material.emissiveIntensity );\n\n\t\t\t}\n\n\t\t\tif ( material.map ) {\n\n\t\t\t\tuniforms.map.value = material.map;\n\n\t\t\t}\n\n\t\t\tif ( material.alphaMap ) {\n\n\t\t\t\tuniforms.alphaMap.value = material.alphaMap;\n\n\t\t\t}\n\n\t\t\tif ( material.specularMap ) {\n\n\t\t\t\tuniforms.specularMap.value = material.specularMap;\n\n\t\t\t}\n\n\t\t\tif ( material.envMap ) {\n\n\t\t\t\tuniforms.envMap.value = material.envMap;\n\n\t\t\t\t// don't flip CubeTexture envMaps, flip everything else:\n\t\t\t\t// WebGLRenderTargetCube will be flipped for backwards compatibility\n\t\t\t\t// WebGLRenderTargetCube.texture will be flipped because it's a Texture and NOT a CubeTexture\n\t\t\t\t// this check must be handled differently, or removed entirely, if WebGLRenderTargetCube uses a CubeTexture in the future\n\t\t\t\tuniforms.flipEnvMap.value = ( ! ( material.envMap && material.envMap.isCubeTexture ) ) ? 1 : - 1;\n\n\t\t\t\tuniforms.reflectivity.value = material.reflectivity;\n\t\t\t\tuniforms.refractionRatio.value = material.refractionRatio;\n\n\t\t\t}\n\n\t\t\tif ( material.lightMap ) {\n\n\t\t\t\tuniforms.lightMap.value = material.lightMap;\n\t\t\t\tuniforms.lightMapIntensity.value = material.lightMapIntensity;\n\n\t\t\t}\n\n\t\t\tif ( material.aoMap ) {\n\n\t\t\t\tuniforms.aoMap.value = material.aoMap;\n\t\t\t\tuniforms.aoMapIntensity.value = material.aoMapIntensity;\n\n\t\t\t}\n\n\t\t\t// uv repeat and offset setting priorities\n\t\t\t// 1. color map\n\t\t\t// 2. specular map\n\t\t\t// 3. normal map\n\t\t\t// 4. bump map\n\t\t\t// 5. alpha map\n\t\t\t// 6. emissive map\n\n\t\t\tvar uvScaleMap;\n\n\t\t\tif ( material.map ) {\n\n\t\t\t\tuvScaleMap = material.map;\n\n\t\t\t} else if ( material.specularMap ) {\n\n\t\t\t\tuvScaleMap = material.specularMap;\n\n\t\t\t} else if ( material.displacementMap ) {\n\n\t\t\t\tuvScaleMap = material.displacementMap;\n\n\t\t\t} else if ( material.normalMap ) {\n\n\t\t\t\tuvScaleMap = material.normalMap;\n\n\t\t\t} else if ( material.bumpMap ) {\n\n\t\t\t\tuvScaleMap = material.bumpMap;\n\n\t\t\t} else if ( material.roughnessMap ) {\n\n\t\t\t\tuvScaleMap = material.roughnessMap;\n\n\t\t\t} else if ( material.metalnessMap ) {\n\n\t\t\t\tuvScaleMap = material.metalnessMap;\n\n\t\t\t} else if ( material.alphaMap ) {\n\n\t\t\t\tuvScaleMap = material.alphaMap;\n\n\t\t\t} else if ( material.emissiveMap ) {\n\n\t\t\t\tuvScaleMap = material.emissiveMap;\n\n\t\t\t}\n\n\t\t\tif ( uvScaleMap !== undefined ) {\n\n\t\t\t\t// backwards compatibility\n\t\t\t\tif ( uvScaleMap.isWebGLRenderTarget ) {\n\n\t\t\t\t\tuvScaleMap = uvScaleMap.texture;\n\n\t\t\t\t}\n\n\t\t\t\tif ( uvScaleMap.matrixAutoUpdate === true ) {\n\n\t\t\t\t\tvar offset = uvScaleMap.offset;\n\t\t\t\t\tvar repeat = uvScaleMap.repeat;\n\t\t\t\t\tvar rotation = uvScaleMap.rotation;\n\t\t\t\t\tvar center = uvScaleMap.center;\n\n\t\t\t\t\tuvScaleMap.matrix.setUvTransform( offset.x, offset.y, repeat.x, repeat.y, rotation, center.x, center.y );\n\n\t\t\t\t}\n\n\t\t\t\tuniforms.uvTransform.value.copy( uvScaleMap.matrix );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction refreshUniformsLine( uniforms, material ) {\n\n\t\t\tuniforms.diffuse.value = material.color;\n\t\t\tuniforms.opacity.value = material.opacity;\n\n\t\t}\n\n\t\tfunction refreshUniformsDash( uniforms, material ) {\n\n\t\t\tuniforms.dashSize.value = material.dashSize;\n\t\t\tuniforms.totalSize.value = material.dashSize + material.gapSize;\n\t\t\tuniforms.scale.value = material.scale;\n\n\t\t}\n\n\t\tfunction refreshUniformsPoints( uniforms, material ) {\n\n\t\t\tuniforms.diffuse.value = material.color;\n\t\t\tuniforms.opacity.value = material.opacity;\n\t\t\tuniforms.size.value = material.size * _pixelRatio;\n\t\t\tuniforms.scale.value = _height * 0.5;\n\n\t\t\tuniforms.map.value = material.map;\n\n\t\t\tif ( material.map !== null ) {\n\n\t\t\t\tif ( material.map.matrixAutoUpdate === true ) {\n\n\t\t\t\t\tvar offset = material.map.offset;\n\t\t\t\t\tvar repeat = material.map.repeat;\n\t\t\t\t\tvar rotation = material.map.rotation;\n\t\t\t\t\tvar center = material.map.center;\n\n\t\t\t\t\tmaterial.map.matrix.setUvTransform( offset.x, offset.y, repeat.x, repeat.y, rotation, center.x, center.y );\n\n\t\t\t\t}\n\n\t\t\t\tuniforms.uvTransform.value.copy( material.map.matrix );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction refreshUniformsFog( uniforms, fog ) {\n\n\t\t\tuniforms.fogColor.value = fog.color;\n\n\t\t\tif ( fog.isFog ) {\n\n\t\t\t\tuniforms.fogNear.value = fog.near;\n\t\t\t\tuniforms.fogFar.value = fog.far;\n\n\t\t\t} else if ( fog.isFogExp2 ) {\n\n\t\t\t\tuniforms.fogDensity.value = fog.density;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction refreshUniformsLambert( uniforms, material ) {\n\n\t\t\tif ( material.emissiveMap ) {\n\n\t\t\t\tuniforms.emissiveMap.value = material.emissiveMap;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction refreshUniformsPhong( uniforms, material ) {\n\n\t\t\tuniforms.specular.value = material.specular;\n\t\t\tuniforms.shininess.value = Math.max( material.shininess, 1e-4 ); // to prevent pow( 0.0, 0.0 )\n\n\t\t\tif ( material.emissiveMap ) {\n\n\t\t\t\tuniforms.emissiveMap.value = material.emissiveMap;\n\n\t\t\t}\n\n\t\t\tif ( material.bumpMap ) {\n\n\t\t\t\tuniforms.bumpMap.value = material.bumpMap;\n\t\t\t\tuniforms.bumpScale.value = material.bumpScale;\n\n\t\t\t}\n\n\t\t\tif ( material.normalMap ) {\n\n\t\t\t\tuniforms.normalMap.value = material.normalMap;\n\t\t\t\tuniforms.normalScale.value.copy( material.normalScale );\n\n\t\t\t}\n\n\t\t\tif ( material.displacementMap ) {\n\n\t\t\t\tuniforms.displacementMap.value = material.displacementMap;\n\t\t\t\tuniforms.displacementScale.value = material.displacementScale;\n\t\t\t\tuniforms.displacementBias.value = material.displacementBias;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction refreshUniformsToon( uniforms, material ) {\n\n\t\t\trefreshUniformsPhong( uniforms, material );\n\n\t\t\tif ( material.gradientMap ) {\n\n\t\t\t\tuniforms.gradientMap.value = material.gradientMap;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction refreshUniformsStandard( uniforms, material ) {\n\n\t\t\tuniforms.roughness.value = material.roughness;\n\t\t\tuniforms.metalness.value = material.metalness;\n\n\t\t\tif ( material.roughnessMap ) {\n\n\t\t\t\tuniforms.roughnessMap.value = material.roughnessMap;\n\n\t\t\t}\n\n\t\t\tif ( material.metalnessMap ) {\n\n\t\t\t\tuniforms.metalnessMap.value = material.metalnessMap;\n\n\t\t\t}\n\n\t\t\tif ( material.emissiveMap ) {\n\n\t\t\t\tuniforms.emissiveMap.value = material.emissiveMap;\n\n\t\t\t}\n\n\t\t\tif ( material.bumpMap ) {\n\n\t\t\t\tuniforms.bumpMap.value = material.bumpMap;\n\t\t\t\tuniforms.bumpScale.value = material.bumpScale;\n\n\t\t\t}\n\n\t\t\tif ( material.normalMap ) {\n\n\t\t\t\tuniforms.normalMap.value = material.normalMap;\n\t\t\t\tuniforms.normalScale.value.copy( material.normalScale );\n\n\t\t\t}\n\n\t\t\tif ( material.displacementMap ) {\n\n\t\t\t\tuniforms.displacementMap.value = material.displacementMap;\n\t\t\t\tuniforms.displacementScale.value = material.displacementScale;\n\t\t\t\tuniforms.displacementBias.value = material.displacementBias;\n\n\t\t\t}\n\n\t\t\tif ( material.envMap ) {\n\n\t\t\t\t//uniforms.envMap.value = material.envMap; // part of uniforms common\n\t\t\t\tuniforms.envMapIntensity.value = material.envMapIntensity;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction refreshUniformsPhysical( uniforms, material ) {\n\n\t\t\tuniforms.clearCoat.value = material.clearCoat;\n\t\t\tuniforms.clearCoatRoughness.value = material.clearCoatRoughness;\n\n\t\t\trefreshUniformsStandard( uniforms, material );\n\n\t\t}\n\n\t\tfunction refreshUniformsDepth( uniforms, material ) {\n\n\t\t\tif ( material.displacementMap ) {\n\n\t\t\t\tuniforms.displacementMap.value = material.displacementMap;\n\t\t\t\tuniforms.displacementScale.value = material.displacementScale;\n\t\t\t\tuniforms.displacementBias.value = material.displacementBias;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction refreshUniformsDistance( uniforms, material ) {\n\n\t\t\tif ( material.displacementMap ) {\n\n\t\t\t\tuniforms.displacementMap.value = material.displacementMap;\n\t\t\t\tuniforms.displacementScale.value = material.displacementScale;\n\t\t\t\tuniforms.displacementBias.value = material.displacementBias;\n\n\t\t\t}\n\n\t\t\tuniforms.referencePosition.value.copy( material.referencePosition );\n\t\t\tuniforms.nearDistance.value = material.nearDistance;\n\t\t\tuniforms.farDistance.value = material.farDistance;\n\n\t\t}\n\n\t\tfunction refreshUniformsNormal( uniforms, material ) {\n\n\t\t\tif ( material.bumpMap ) {\n\n\t\t\t\tuniforms.bumpMap.value = material.bumpMap;\n\t\t\t\tuniforms.bumpScale.value = material.bumpScale;\n\n\t\t\t}\n\n\t\t\tif ( material.normalMap ) {\n\n\t\t\t\tuniforms.normalMap.value = material.normalMap;\n\t\t\t\tuniforms.normalScale.value.copy( material.normalScale );\n\n\t\t\t}\n\n\t\t\tif ( material.displacementMap ) {\n\n\t\t\t\tuniforms.displacementMap.value = material.displacementMap;\n\t\t\t\tuniforms.displacementScale.value = material.displacementScale;\n\t\t\t\tuniforms.displacementBias.value = material.displacementBias;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// If uniforms are marked as clean, they don't need to be loaded to the GPU.\n\n\t\tfunction markUniformsLightsNeedsUpdate( uniforms, value ) {\n\n\t\t\tuniforms.ambientLightColor.needsUpdate = value;\n\n\t\t\tuniforms.directionalLights.needsUpdate = value;\n\t\t\tuniforms.pointLights.needsUpdate = value;\n\t\t\tuniforms.spotLights.needsUpdate = value;\n\t\t\tuniforms.rectAreaLights.needsUpdate = value;\n\t\t\tuniforms.hemisphereLights.needsUpdate = value;\n\n\t\t}\n\n\t\t// GL state setting\n\n\t\tthis.setFaceCulling = function ( cullFace, frontFaceDirection ) {\n\n\t\t\tstate.setCullFace( cullFace );\n\t\t\tstate.setFlipSided( frontFaceDirection === FrontFaceDirectionCW );\n\n\t\t};\n\n\t\t// Textures\n\n\t\tfunction allocTextureUnit() {\n\n\t\t\tvar textureUnit = _usedTextureUnits;\n\n\t\t\tif ( textureUnit >= capabilities.maxTextures ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Trying to use ' + textureUnit + ' texture units while this GPU supports only ' + capabilities.maxTextures );\n\n\t\t\t}\n\n\t\t\t_usedTextureUnits += 1;\n\n\t\t\treturn textureUnit;\n\n\t\t}\n\n\t\tthis.allocTextureUnit = allocTextureUnit;\n\n\t\t// this.setTexture2D = setTexture2D;\n\t\tthis.setTexture2D = ( function () {\n\n\t\t\tvar warned = false;\n\n\t\t\t// backwards compatibility: peel texture.texture\n\t\t\treturn function setTexture2D( texture, slot ) {\n\n\t\t\t\tif ( texture && texture.isWebGLRenderTarget ) {\n\n\t\t\t\t\tif ( ! warned ) {\n\n\t\t\t\t\t\tconsole.warn( \"THREE.WebGLRenderer.setTexture2D: don't use render targets as textures. Use their .texture property instead.\" );\n\t\t\t\t\t\twarned = true;\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttexture = texture.texture;\n\n\t\t\t\t}\n\n\t\t\t\ttextures.setTexture2D( texture, slot );\n\n\t\t\t};\n\n\t\t}() );\n\n\t\tthis.setTexture = ( function () {\n\n\t\t\tvar warned = false;\n\n\t\t\treturn function setTexture( texture, slot ) {\n\n\t\t\t\tif ( ! warned ) {\n\n\t\t\t\t\tconsole.warn( \"THREE.WebGLRenderer: .setTexture is deprecated, use setTexture2D instead.\" );\n\t\t\t\t\twarned = true;\n\n\t\t\t\t}\n\n\t\t\t\ttextures.setTexture2D( texture, slot );\n\n\t\t\t};\n\n\t\t}() );\n\n\t\tthis.setTextureCube = ( function () {\n\n\t\t\tvar warned = false;\n\n\t\t\treturn function setTextureCube( texture, slot ) {\n\n\t\t\t\t// backwards compatibility: peel texture.texture\n\t\t\t\tif ( texture && texture.isWebGLRenderTargetCube ) {\n\n\t\t\t\t\tif ( ! warned ) {\n\n\t\t\t\t\t\tconsole.warn( \"THREE.WebGLRenderer.setTextureCube: don't use cube render targets as textures. Use their .texture property instead.\" );\n\t\t\t\t\t\twarned = true;\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttexture = texture.texture;\n\n\t\t\t\t}\n\n\t\t\t\t// currently relying on the fact that WebGLRenderTargetCube.texture is a Texture and NOT a CubeTexture\n\t\t\t\t// TODO: unify these code paths\n\t\t\t\tif ( ( texture && texture.isCubeTexture ) ||\n\t\t\t\t\t( Array.isArray( texture.image ) && texture.image.length === 6 ) ) {\n\n\t\t\t\t\t// CompressedTexture can have Array in image :/\n\n\t\t\t\t\t// this function alone should take care of cube textures\n\t\t\t\t\ttextures.setTextureCube( texture, slot );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// assumed: texture property of THREE.WebGLRenderTargetCube\n\n\t\t\t\t\ttextures.setTextureCubeDynamic( texture, slot );\n\n\t\t\t\t}\n\n\t\t\t};\n\n\t\t}() );\n\n\t\tthis.getRenderTarget = function () {\n\n\t\t\treturn _currentRenderTarget;\n\n\t\t};\n\n\t\tthis.setRenderTarget = function ( renderTarget ) {\n\n\t\t\t_currentRenderTarget = renderTarget;\n\n\t\t\tif ( renderTarget && properties.get( renderTarget ).__webglFramebuffer === undefined ) {\n\n\t\t\t\ttextures.setupRenderTarget( renderTarget );\n\n\t\t\t}\n\n\t\t\tvar framebuffer = null;\n\t\t\tvar isCube = false;\n\n\t\t\tif ( renderTarget ) {\n\n\t\t\t\tvar __webglFramebuffer = properties.get( renderTarget ).__webglFramebuffer;\n\n\t\t\t\tif ( renderTarget.isWebGLRenderTargetCube ) {\n\n\t\t\t\t\tframebuffer = __webglFramebuffer[ renderTarget.activeCubeFace ];\n\t\t\t\t\tisCube = true;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tframebuffer = __webglFramebuffer;\n\n\t\t\t\t}\n\n\t\t\t\t_currentViewport.copy( renderTarget.viewport );\n\t\t\t\t_currentScissor.copy( renderTarget.scissor );\n\t\t\t\t_currentScissorTest = renderTarget.scissorTest;\n\n\t\t\t} else {\n\n\t\t\t\t_currentViewport.copy( _viewport ).multiplyScalar( _pixelRatio );\n\t\t\t\t_currentScissor.copy( _scissor ).multiplyScalar( _pixelRatio );\n\t\t\t\t_currentScissorTest = _scissorTest;\n\n\t\t\t}\n\n\t\t\tif ( _currentFramebuffer !== framebuffer ) {\n\n\t\t\t\t_gl.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer );\n\t\t\t\t_currentFramebuffer = framebuffer;\n\n\t\t\t}\n\n\t\t\tstate.viewport( _currentViewport );\n\t\t\tstate.scissor( _currentScissor );\n\t\t\tstate.setScissorTest( _currentScissorTest );\n\n\t\t\tif ( isCube ) {\n\n\t\t\t\tvar textureProperties = properties.get( renderTarget.texture );\n\t\t\t\t_gl.framebufferTexture2D( _gl.FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_CUBE_MAP_POSITIVE_X + renderTarget.activeCubeFace, textureProperties.__webglTexture, renderTarget.activeMipMapLevel );\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.readRenderTargetPixels = function ( renderTarget, x, y, width, height, buffer ) {\n\n\t\t\tif ( ! ( renderTarget && renderTarget.isWebGLRenderTarget ) ) {\n\n\t\t\t\tconsole.error( 'THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.' );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tvar framebuffer = properties.get( renderTarget ).__webglFramebuffer;\n\n\t\t\tif ( framebuffer ) {\n\n\t\t\t\tvar restore = false;\n\n\t\t\t\tif ( framebuffer !== _currentFramebuffer ) {\n\n\t\t\t\t\t_gl.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer );\n\n\t\t\t\t\trestore = true;\n\n\t\t\t\t}\n\n\t\t\t\ttry {\n\n\t\t\t\t\tvar texture = renderTarget.texture;\n\t\t\t\t\tvar textureFormat = texture.format;\n\t\t\t\t\tvar textureType = texture.type;\n\n\t\t\t\t\tif ( textureFormat !== RGBAFormat && utils.convert( textureFormat ) !== _gl.getParameter( _gl.IMPLEMENTATION_COLOR_READ_FORMAT ) ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format.' );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( textureType !== UnsignedByteType && utils.convert( textureType ) !== _gl.getParameter( _gl.IMPLEMENTATION_COLOR_READ_TYPE ) && // IE11, Edge and Chrome Mac < 52 (#9513)\n\t\t\t\t\t\t! ( textureType === FloatType && ( extensions.get( 'OES_texture_float' ) || extensions.get( 'WEBGL_color_buffer_float' ) ) ) && // Chrome Mac >= 52 and Firefox\n\t\t\t\t\t\t! ( textureType === HalfFloatType && extensions.get( 'EXT_color_buffer_half_float' ) ) ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.' );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( _gl.checkFramebufferStatus( _gl.FRAMEBUFFER ) === _gl.FRAMEBUFFER_COMPLETE ) {\n\n\t\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\t\tif ( ( x >= 0 && x <= ( renderTarget.width - width ) ) && ( y >= 0 && y <= ( renderTarget.height - height ) ) ) {\n\n\t\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\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tconsole.error( 'THREE.WebGLRenderer.readRenderTargetPixels: readPixels from renderTarget failed. Framebuffer not complete.' );\n\n\t\t\t\t\t}\n\n\t\t\t\t} finally {\n\n\t\t\t\t\tif ( restore ) {\n\n\t\t\t\t\t\t_gl.bindFramebuffer( _gl.FRAMEBUFFER, _currentFramebuffer );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t};\n\n\t}\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t * @author alteredq / http://alteredqualia.com/\n\t */\n\n\tfunction FogExp2( color, density ) {\n\n\t\tthis.name = '';\n\n\t\tthis.color = new Color( color );\n\t\tthis.density = ( density !== undefined ) ? density : 0.00025;\n\n\t}\n\n\tFogExp2.prototype.isFogExp2 = true;\n\n\tFogExp2.prototype.clone = function () {\n\n\t\treturn new FogExp2( this.color.getHex(), this.density );\n\n\t};\n\n\tFogExp2.prototype.toJSON = function ( /* meta */ ) {\n\n\t\treturn {\n\t\t\ttype: 'FogExp2',\n\t\t\tcolor: this.color.getHex(),\n\t\t\tdensity: this.density\n\t\t};\n\n\t};\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t * @author alteredq / http://alteredqualia.com/\n\t */\n\n\tfunction Fog( color, near, far ) {\n\n\t\tthis.name = '';\n\n\t\tthis.color = new Color( color );\n\n\t\tthis.near = ( near !== undefined ) ? near : 1;\n\t\tthis.far = ( far !== undefined ) ? far : 1000;\n\n\t}\n\n\tFog.prototype.isFog = true;\n\n\tFog.prototype.clone = function () {\n\n\t\treturn new Fog( this.color.getHex(), this.near, this.far );\n\n\t};\n\n\tFog.prototype.toJSON = function ( /* meta */ ) {\n\n\t\treturn {\n\t\t\ttype: 'Fog',\n\t\t\tcolor: this.color.getHex(),\n\t\t\tnear: this.near,\n\t\t\tfar: this.far\n\t\t};\n\n\t};\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t */\n\n\tfunction Scene() {\n\n\t\tObject3D.call( this );\n\n\t\tthis.type = 'Scene';\n\n\t\tthis.background = null;\n\t\tthis.fog = null;\n\t\tthis.overrideMaterial = null;\n\n\t\tthis.autoUpdate = true; // checked by the renderer\n\n\t}\n\n\tScene.prototype = Object.assign( Object.create( Object3D.prototype ), {\n\n\t\tconstructor: Scene,\n\n\t\tcopy: function ( source, recursive ) {\n\n\t\t\tObject3D.prototype.copy.call( this, source, recursive );\n\n\t\t\tif ( source.background !== null ) this.background = source.background.clone();\n\t\t\tif ( source.fog !== null ) this.fog = source.fog.clone();\n\t\t\tif ( source.overrideMaterial !== null ) this.overrideMaterial = source.overrideMaterial.clone();\n\n\t\t\tthis.autoUpdate = source.autoUpdate;\n\t\t\tthis.matrixAutoUpdate = source.matrixAutoUpdate;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\ttoJSON: function ( meta ) {\n\n\t\t\tvar data = Object3D.prototype.toJSON.call( this, meta );\n\n\t\t\tif ( this.background !== null ) data.object.background = this.background.toJSON( meta );\n\t\t\tif ( this.fog !== null ) data.object.fog = this.fog.toJSON();\n\n\t\t\treturn data;\n\n\t\t}\n\n\t} );\n\n\t/**\n\t * @author mikael emtinger / http://gomo.se/\n\t * @author alteredq / http://alteredqualia.com/\n\t */\n\n\tfunction LensFlare( texture, size, distance, blending, color ) {\n\n\t\tObject3D.call( this );\n\n\t\tthis.lensFlares = [];\n\n\t\tthis.positionScreen = new Vector3();\n\t\tthis.customUpdateCallback = undefined;\n\n\t\tif ( texture !== undefined ) {\n\n\t\t\tthis.add( texture, size, distance, blending, color );\n\n\t\t}\n\n\t}\n\n\tLensFlare.prototype = Object.assign( Object.create( Object3D.prototype ), {\n\n\t\tconstructor: LensFlare,\n\n\t\tisLensFlare: true,\n\n\t\tcopy: function ( source ) {\n\n\t\t\tObject3D.prototype.copy.call( this, source );\n\n\t\t\tthis.positionScreen.copy( source.positionScreen );\n\t\t\tthis.customUpdateCallback = source.customUpdateCallback;\n\n\t\t\tfor ( var i = 0, l = source.lensFlares.length; i < l; i ++ ) {\n\n\t\t\t\tthis.lensFlares.push( source.lensFlares[ i ] );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tadd: function ( texture, size, distance, blending, color, opacity ) {\n\n\t\t\tif ( size === undefined ) size = - 1;\n\t\t\tif ( distance === undefined ) distance = 0;\n\t\t\tif ( opacity === undefined ) opacity = 1;\n\t\t\tif ( color === undefined ) color = new Color( 0xffffff );\n\t\t\tif ( blending === undefined ) blending = NormalBlending;\n\n\t\t\tdistance = Math.min( distance, Math.max( 0, distance ) );\n\n\t\t\tthis.lensFlares.push( {\n\t\t\t\ttexture: texture,\t// THREE.Texture\n\t\t\t\tsize: size, \t\t// size in pixels (-1 = use texture.width)\n\t\t\t\tdistance: distance, \t// distance (0-1) from light source (0=at light source)\n\t\t\t\tx: 0, y: 0, z: 0,\t// screen position (-1 => 1) z = 0 is in front z = 1 is back\n\t\t\t\tscale: 1, \t\t// scale\n\t\t\t\trotation: 0, \t\t// rotation\n\t\t\t\topacity: opacity,\t// opacity\n\t\t\t\tcolor: color,\t\t// color\n\t\t\t\tblending: blending\t// blending\n\t\t\t} );\n\n\t\t},\n\n\t\t/*\n\t\t * Update lens flares update positions on all flares based on the screen position\n\t\t * Set myLensFlare.customUpdateCallback to alter the flares in your project specific way.\n\t\t */\n\n\t\tupdateLensFlares: function () {\n\n\t\t\tvar f, fl = this.lensFlares.length;\n\t\t\tvar flare;\n\t\t\tvar vecX = - this.positionScreen.x * 2;\n\t\t\tvar vecY = - this.positionScreen.y * 2;\n\n\t\t\tfor ( f = 0; f < fl; f ++ ) {\n\n\t\t\t\tflare = this.lensFlares[ f ];\n\n\t\t\t\tflare.x = this.positionScreen.x + vecX * flare.distance;\n\t\t\t\tflare.y = this.positionScreen.y + vecY * flare.distance;\n\n\t\t\t\tflare.wantedRotation = flare.x * Math.PI * 0.25;\n\t\t\t\tflare.rotation += ( flare.wantedRotation - flare.rotation ) * 0.25;\n\n\t\t\t}\n\n\t\t}\n\n\t} );\n\n\t/**\n\t * @author alteredq / http://alteredqualia.com/\n\t *\n\t * parameters = {\n\t * color: ,\n\t * opacity: ,\n\t * map: new THREE.Texture( ),\n\t *\n\t *\tuvOffset: new THREE.Vector2(),\n\t *\tuvScale: new THREE.Vector2()\n\t * }\n\t */\n\n\tfunction SpriteMaterial( parameters ) {\n\n\t\tMaterial.call( this );\n\n\t\tthis.type = 'SpriteMaterial';\n\n\t\tthis.color = new Color( 0xffffff );\n\t\tthis.map = null;\n\n\t\tthis.rotation = 0;\n\n\t\tthis.fog = false;\n\t\tthis.lights = false;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tSpriteMaterial.prototype = Object.create( Material.prototype );\n\tSpriteMaterial.prototype.constructor = SpriteMaterial;\n\tSpriteMaterial.prototype.isSpriteMaterial = true;\n\n\tSpriteMaterial.prototype.copy = function ( source ) {\n\n\t\tMaterial.prototype.copy.call( this, source );\n\n\t\tthis.color.copy( source.color );\n\t\tthis.map = source.map;\n\n\t\tthis.rotation = source.rotation;\n\n\t\treturn this;\n\n\t};\n\n\t/**\n\t * @author mikael emtinger / http://gomo.se/\n\t * @author alteredq / http://alteredqualia.com/\n\t */\n\n\tfunction Sprite( material ) {\n\n\t\tObject3D.call( this );\n\n\t\tthis.type = 'Sprite';\n\n\t\tthis.material = ( material !== undefined ) ? material : new SpriteMaterial();\n\n\t}\n\n\tSprite.prototype = Object.assign( Object.create( Object3D.prototype ), {\n\n\t\tconstructor: Sprite,\n\n\t\tisSprite: true,\n\n\t\traycast: ( function () {\n\n\t\t\tvar intersectPoint = new Vector3();\n\t\t\tvar worldPosition = new Vector3();\n\t\t\tvar worldScale = new Vector3();\n\n\t\t\treturn function raycast( raycaster, intersects ) {\n\n\t\t\t\tworldPosition.setFromMatrixPosition( this.matrixWorld );\n\t\t\t\traycaster.ray.closestPointToPoint( worldPosition, intersectPoint );\n\n\t\t\t\tworldScale.setFromMatrixScale( this.matrixWorld );\n\t\t\t\tvar guessSizeSq = worldScale.x * worldScale.y / 4;\n\n\t\t\t\tif ( worldPosition.distanceToSquared( intersectPoint ) > guessSizeSq ) return;\n\n\t\t\t\tvar distance = raycaster.ray.origin.distanceTo( intersectPoint );\n\n\t\t\t\tif ( distance < raycaster.near || distance > raycaster.far ) return;\n\n\t\t\t\tintersects.push( {\n\n\t\t\t\t\tdistance: distance,\n\t\t\t\t\tpoint: intersectPoint.clone(),\n\t\t\t\t\tface: null,\n\t\t\t\t\tobject: this\n\n\t\t\t\t} );\n\n\t\t\t};\n\n\t\t}() ),\n\n\t\tclone: function () {\n\n\t\t\treturn new this.constructor( this.material ).copy( this );\n\n\t\t}\n\n\t} );\n\n\t/**\n\t * @author mikael emtinger / http://gomo.se/\n\t * @author alteredq / http://alteredqualia.com/\n\t * @author mrdoob / http://mrdoob.com/\n\t */\n\n\tfunction LOD() {\n\n\t\tObject3D.call( this );\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} );\n\n\t}\n\n\tLOD.prototype = Object.assign( Object.create( Object3D.prototype ), {\n\n\t\tconstructor: LOD,\n\n\t\tcopy: function ( source ) {\n\n\t\t\tObject3D.prototype.copy.call( this, source, false );\n\n\t\t\tvar levels = source.levels;\n\n\t\t\tfor ( var i = 0, l = levels.length; i < l; i ++ ) {\n\n\t\t\t\tvar level = levels[ i ];\n\n\t\t\t\tthis.addLevel( level.object.clone(), level.distance );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\taddLevel: function ( object, distance ) {\n\n\t\t\tif ( distance === undefined ) distance = 0;\n\n\t\t\tdistance = Math.abs( distance );\n\n\t\t\tvar levels = this.levels;\n\n\t\t\tfor ( var l = 0; l < levels.length; l ++ ) {\n\n\t\t\t\tif ( distance < levels[ l ].distance ) {\n\n\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tlevels.splice( l, 0, { distance: distance, object: object } );\n\n\t\t\tthis.add( object );\n\n\t\t},\n\n\t\tgetObjectForDistance: function ( distance ) {\n\n\t\t\tvar levels = this.levels;\n\n\t\t\tfor ( var 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\traycast: ( function () {\n\n\t\t\tvar matrixPosition = new Vector3();\n\n\t\t\treturn function raycast( raycaster, intersects ) {\n\n\t\t\t\tmatrixPosition.setFromMatrixPosition( this.matrixWorld );\n\n\t\t\t\tvar distance = raycaster.ray.origin.distanceTo( matrixPosition );\n\n\t\t\t\tthis.getObjectForDistance( distance ).raycast( raycaster, intersects );\n\n\t\t\t};\n\n\t\t}() ),\n\n\t\tupdate: function () {\n\n\t\t\tvar v1 = new Vector3();\n\t\t\tvar v2 = new Vector3();\n\n\t\t\treturn function update( camera ) {\n\n\t\t\t\tvar levels = this.levels;\n\n\t\t\t\tif ( levels.length > 1 ) {\n\n\t\t\t\t\tv1.setFromMatrixPosition( camera.matrixWorld );\n\t\t\t\t\tv2.setFromMatrixPosition( this.matrixWorld );\n\n\t\t\t\t\tvar distance = v1.distanceTo( v2 );\n\n\t\t\t\t\tlevels[ 0 ].object.visible = true;\n\n\t\t\t\t\tfor ( var i = 1, l = levels.length; i < l; i ++ ) {\n\n\t\t\t\t\t\tif ( distance >= levels[ i ].distance ) {\n\n\t\t\t\t\t\t\tlevels[ i - 1 ].object.visible = false;\n\t\t\t\t\t\t\tlevels[ i ].object.visible = true;\n\n\t\t\t\t\t\t} else {\n\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\tfor ( ; i < l; i ++ ) {\n\n\t\t\t\t\t\tlevels[ i ].object.visible = 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\ttoJSON: function ( meta ) {\n\n\t\t\tvar data = Object3D.prototype.toJSON.call( this, meta );\n\n\t\t\tdata.object.levels = [];\n\n\t\t\tvar levels = this.levels;\n\n\t\t\tfor ( var i = 0, l = levels.length; i < l; i ++ ) {\n\n\t\t\t\tvar level = levels[ i ];\n\n\t\t\t\tdata.object.levels.push( {\n\t\t\t\t\tobject: level.object.uuid,\n\t\t\t\t\tdistance: level.distance\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t} );\n\n\t/**\n\t * @author mikael emtinger / http://gomo.se/\n\t * @author alteredq / http://alteredqualia.com/\n\t * @author michael guerrero / http://realitymeltdown.com\n\t * @author ikerr / http://verold.com\n\t */\n\n\tfunction Skeleton( bones, boneInverses ) {\n\n\t\t// copy the bone array\n\n\t\tbones = bones || [];\n\n\t\tthis.bones = bones.slice( 0 );\n\t\tthis.boneMatrices = new Float32Array( this.bones.length * 16 );\n\n\t\t// use the supplied bone inverses or calculate the inverses\n\n\t\tif ( boneInverses === undefined ) {\n\n\t\t\tthis.calculateInverses();\n\n\t\t} else {\n\n\t\t\tif ( this.bones.length === boneInverses.length ) {\n\n\t\t\t\tthis.boneInverses = boneInverses.slice( 0 );\n\n\t\t\t} else {\n\n\t\t\t\tconsole.warn( 'THREE.Skeleton boneInverses is the wrong length.' );\n\n\t\t\t\tthis.boneInverses = [];\n\n\t\t\t\tfor ( var 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\tObject.assign( Skeleton.prototype, {\n\n\t\tcalculateInverses: function () {\n\n\t\t\tthis.boneInverses = [];\n\n\t\t\tfor ( var i = 0, il = this.bones.length; i < il; i ++ ) {\n\n\t\t\t\tvar inverse = new Matrix4();\n\n\t\t\t\tif ( this.bones[ i ] ) {\n\n\t\t\t\t\tinverse.getInverse( this.bones[ i ].matrixWorld );\n\n\t\t\t\t}\n\n\t\t\t\tthis.boneInverses.push( inverse );\n\n\t\t\t}\n\n\t\t},\n\n\t\tpose: function () {\n\n\t\t\tvar bone, i, il;\n\n\t\t\t// recover the bind-time world matrices\n\n\t\t\tfor ( i = 0, il = this.bones.length; i < il; i ++ ) {\n\n\t\t\t\tbone = this.bones[ i ];\n\n\t\t\t\tif ( bone ) {\n\n\t\t\t\t\tbone.matrixWorld.getInverse( this.boneInverses[ i ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// compute the local matrices, positions, rotations and scales\n\n\t\t\tfor ( i = 0, il = this.bones.length; i < il; i ++ ) {\n\n\t\t\t\tbone = this.bones[ i ];\n\n\t\t\t\tif ( bone ) {\n\n\t\t\t\t\tif ( bone.parent && bone.parent.isBone ) {\n\n\t\t\t\t\t\tbone.matrix.getInverse( bone.parent.matrixWorld );\n\t\t\t\t\t\tbone.matrix.multiply( bone.matrixWorld );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tbone.matrix.copy( bone.matrixWorld );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbone.matrix.decompose( bone.position, bone.quaternion, bone.scale );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t},\n\n\t\tupdate: ( function () {\n\n\t\t\tvar offsetMatrix = new Matrix4();\n\t\t\tvar identityMatrix = new Matrix4();\n\n\t\t\treturn function update() {\n\n\t\t\t\tvar bones = this.bones;\n\t\t\t\tvar boneInverses = this.boneInverses;\n\t\t\t\tvar boneMatrices = this.boneMatrices;\n\t\t\t\tvar boneTexture = this.boneTexture;\n\n\t\t\t\t// flatten bone matrices to array\n\n\t\t\t\tfor ( var i = 0, il = bones.length; i < il; i ++ ) {\n\n\t\t\t\t\t// compute the offset between the current and the original transform\n\n\t\t\t\t\tvar matrix = bones[ i ] ? bones[ i ].matrixWorld : identityMatrix;\n\n\t\t\t\t\toffsetMatrix.multiplyMatrices( matrix, boneInverses[ i ] );\n\t\t\t\t\toffsetMatrix.toArray( boneMatrices, i * 16 );\n\n\t\t\t\t}\n\n\t\t\t\tif ( boneTexture !== undefined ) {\n\n\t\t\t\t\tboneTexture.needsUpdate = true;\n\n\t\t\t\t}\n\n\t\t\t};\n\n\t\t} )(),\n\n\t\tclone: function () {\n\n\t\t\treturn new Skeleton( this.bones, this.boneInverses );\n\n\t\t}\n\n\t} );\n\n\t/**\n\t * @author mikael emtinger / http://gomo.se/\n\t * @author alteredq / http://alteredqualia.com/\n\t * @author ikerr / http://verold.com\n\t */\n\n\tfunction Bone() {\n\n\t\tObject3D.call( this );\n\n\t\tthis.type = 'Bone';\n\n\t}\n\n\tBone.prototype = Object.assign( Object.create( Object3D.prototype ), {\n\n\t\tconstructor: Bone,\n\n\t\tisBone: true\n\n\t} );\n\n\t/**\n\t * @author mikael emtinger / http://gomo.se/\n\t * @author alteredq / http://alteredqualia.com/\n\t * @author ikerr / http://verold.com\n\t */\n\n\tfunction SkinnedMesh( geometry, material ) {\n\n\t\tMesh.call( this, 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\tvar bones = this.initBones();\n\t\tvar skeleton = new Skeleton( bones );\n\n\t\tthis.bind( skeleton, this.matrixWorld );\n\n\t\tthis.normalizeSkinWeights();\n\n\t}\n\n\tSkinnedMesh.prototype = Object.assign( Object.create( Mesh.prototype ), {\n\n\t\tconstructor: SkinnedMesh,\n\n\t\tisSkinnedMesh: true,\n\n\t\tinitBones: function () {\n\n\t\t\tvar bones = [], bone, gbone;\n\t\t\tvar i, il;\n\n\t\t\tif ( this.geometry && this.geometry.bones !== undefined ) {\n\n\t\t\t\t// first, create array of 'Bone' objects from geometry data\n\n\t\t\t\tfor ( i = 0, il = this.geometry.bones.length; i < il; i ++ ) {\n\n\t\t\t\t\tgbone = this.geometry.bones[ i ];\n\n\t\t\t\t\t// create new 'Bone' object\n\n\t\t\t\t\tbone = new Bone();\n\t\t\t\t\tbones.push( bone );\n\n\t\t\t\t\t// apply values\n\n\t\t\t\t\tbone.name = gbone.name;\n\t\t\t\t\tbone.position.fromArray( gbone.pos );\n\t\t\t\t\tbone.quaternion.fromArray( gbone.rotq );\n\t\t\t\t\tif ( gbone.scl !== undefined ) bone.scale.fromArray( gbone.scl );\n\n\t\t\t\t}\n\n\t\t\t\t// second, create bone hierarchy\n\n\t\t\t\tfor ( i = 0, il = this.geometry.bones.length; i < il; i ++ ) {\n\n\t\t\t\t\tgbone = this.geometry.bones[ i ];\n\n\t\t\t\t\tif ( ( gbone.parent !== - 1 ) && ( gbone.parent !== null ) && ( bones[ gbone.parent ] !== undefined ) ) {\n\n\t\t\t\t\t\t// subsequent bones in the hierarchy\n\n\t\t\t\t\t\tbones[ gbone.parent ].add( bones[ i ] );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// topmost bone, immediate child of the skinned mesh\n\n\t\t\t\t\t\tthis.add( bones[ i ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// now the bones are part of the scene graph and children of the skinned mesh.\n\t\t\t// let's update the corresponding matrices\n\n\t\t\tthis.updateMatrixWorld( true );\n\n\t\t\treturn bones;\n\n\t\t},\n\n\t\tbind: function ( skeleton, bindMatrix ) {\n\n\t\t\tthis.skeleton = skeleton;\n\n\t\t\tif ( bindMatrix === undefined ) {\n\n\t\t\t\tthis.updateMatrixWorld( true );\n\n\t\t\t\tthis.skeleton.calculateInverses();\n\n\t\t\t\tbindMatrix = this.matrixWorld;\n\n\t\t\t}\n\n\t\t\tthis.bindMatrix.copy( bindMatrix );\n\t\t\tthis.bindMatrixInverse.getInverse( bindMatrix );\n\n\t\t},\n\n\t\tpose: function () {\n\n\t\t\tthis.skeleton.pose();\n\n\t\t},\n\n\t\tnormalizeSkinWeights: function () {\n\n\t\t\tvar scale, i;\n\n\t\t\tif ( this.geometry && this.geometry.isGeometry ) {\n\n\t\t\t\tfor ( i = 0; i < this.geometry.skinWeights.length; i ++ ) {\n\n\t\t\t\t\tvar sw = this.geometry.skinWeights[ i ];\n\n\t\t\t\t\tscale = 1.0 / sw.manhattanLength();\n\n\t\t\t\t\tif ( scale !== Infinity ) {\n\n\t\t\t\t\t\tsw.multiplyScalar( scale );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tsw.set( 1, 0, 0, 0 ); // do something reasonable\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else if ( this.geometry && this.geometry.isBufferGeometry ) {\n\n\t\t\t\tvar vec = new Vector4();\n\n\t\t\t\tvar skinWeight = this.geometry.attributes.skinWeight;\n\n\t\t\t\tfor ( i = 0; i < skinWeight.count; i ++ ) {\n\n\t\t\t\t\tvec.x = skinWeight.getX( i );\n\t\t\t\t\tvec.y = skinWeight.getY( i );\n\t\t\t\t\tvec.z = skinWeight.getZ( i );\n\t\t\t\t\tvec.w = skinWeight.getW( i );\n\n\t\t\t\t\tscale = 1.0 / vec.manhattanLength();\n\n\t\t\t\t\tif ( scale !== Infinity ) {\n\n\t\t\t\t\t\tvec.multiplyScalar( scale );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tvec.set( 1, 0, 0, 0 ); // do something reasonable\n\n\t\t\t\t\t}\n\n\t\t\t\t\tskinWeight.setXYZW( i, vec.x, vec.y, vec.z, vec.w );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t},\n\n\t\tupdateMatrixWorld: function ( force ) {\n\n\t\t\tMesh.prototype.updateMatrixWorld.call( this, force );\n\n\t\t\tif ( this.bindMode === 'attached' ) {\n\n\t\t\t\tthis.bindMatrixInverse.getInverse( this.matrixWorld );\n\n\t\t\t} else if ( this.bindMode === 'detached' ) {\n\n\t\t\t\tthis.bindMatrixInverse.getInverse( this.bindMatrix );\n\n\t\t\t} else {\n\n\t\t\t\tconsole.warn( 'THREE.SkinnedMesh: Unrecognized bindMode: ' + this.bindMode );\n\n\t\t\t}\n\n\t\t},\n\n\t\tclone: function () {\n\n\t\t\treturn new this.constructor( this.geometry, this.material ).copy( this );\n\n\t\t}\n\n\t} );\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t * @author alteredq / http://alteredqualia.com/\n\t *\n\t * parameters = {\n\t * color: ,\n\t * opacity: ,\n\t *\n\t * linewidth: ,\n\t * linecap: \"round\",\n\t * linejoin: \"round\"\n\t * }\n\t */\n\n\tfunction LineBasicMaterial( parameters ) {\n\n\t\tMaterial.call( this );\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.lights = false;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tLineBasicMaterial.prototype = Object.create( Material.prototype );\n\tLineBasicMaterial.prototype.constructor = LineBasicMaterial;\n\n\tLineBasicMaterial.prototype.isLineBasicMaterial = true;\n\n\tLineBasicMaterial.prototype.copy = function ( source ) {\n\n\t\tMaterial.prototype.copy.call( this, 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\treturn this;\n\n\t};\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t */\n\n\tfunction Line( geometry, material, mode ) {\n\n\t\tif ( mode === 1 ) {\n\n\t\t\tconsole.warn( 'THREE.Line: parameter THREE.LinePieces no longer supported. Created THREE.LineSegments instead.' );\n\t\t\treturn new LineSegments( geometry, material );\n\n\t\t}\n\n\t\tObject3D.call( this );\n\n\t\tthis.type = 'Line';\n\n\t\tthis.geometry = geometry !== undefined ? geometry : new BufferGeometry();\n\t\tthis.material = material !== undefined ? material : new LineBasicMaterial( { color: Math.random() * 0xffffff } );\n\n\t}\n\n\tLine.prototype = Object.assign( Object.create( Object3D.prototype ), {\n\n\t\tconstructor: Line,\n\n\t\tisLine: true,\n\n\t\traycast: ( function () {\n\n\t\t\tvar inverseMatrix = new Matrix4();\n\t\t\tvar ray = new Ray();\n\t\t\tvar sphere = new Sphere();\n\n\t\t\treturn function raycast( raycaster, intersects ) {\n\n\t\t\t\tvar precision = raycaster.linePrecision;\n\t\t\t\tvar precisionSq = precision * precision;\n\n\t\t\t\tvar geometry = this.geometry;\n\t\t\t\tvar matrixWorld = this.matrixWorld;\n\n\t\t\t\t// Checking boundingSphere distance to ray\n\n\t\t\t\tif ( geometry.boundingSphere === null ) geometry.computeBoundingSphere();\n\n\t\t\t\tsphere.copy( geometry.boundingSphere );\n\t\t\t\tsphere.applyMatrix4( matrixWorld );\n\n\t\t\t\tif ( raycaster.ray.intersectsSphere( sphere ) === false ) return;\n\n\t\t\t\t//\n\n\t\t\t\tinverseMatrix.getInverse( matrixWorld );\n\t\t\t\tray.copy( raycaster.ray ).applyMatrix4( inverseMatrix );\n\n\t\t\t\tvar vStart = new Vector3();\n\t\t\t\tvar vEnd = new Vector3();\n\t\t\t\tvar interSegment = new Vector3();\n\t\t\t\tvar interRay = new Vector3();\n\t\t\t\tvar step = ( this && this.isLineSegments ) ? 2 : 1;\n\n\t\t\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\t\t\tvar index = geometry.index;\n\t\t\t\t\tvar attributes = geometry.attributes;\n\t\t\t\t\tvar positions = attributes.position.array;\n\n\t\t\t\t\tif ( index !== null ) {\n\n\t\t\t\t\t\tvar indices = index.array;\n\n\t\t\t\t\t\tfor ( var i = 0, l = indices.length - 1; i < l; i += step ) {\n\n\t\t\t\t\t\t\tvar a = indices[ i ];\n\t\t\t\t\t\t\tvar b = indices[ i + 1 ];\n\n\t\t\t\t\t\t\tvStart.fromArray( positions, a * 3 );\n\t\t\t\t\t\t\tvEnd.fromArray( positions, b * 3 );\n\n\t\t\t\t\t\t\tvar distSq = ray.distanceSqToSegment( vStart, vEnd, interRay, interSegment );\n\n\t\t\t\t\t\t\tif ( distSq > precisionSq ) continue;\n\n\t\t\t\t\t\t\tinterRay.applyMatrix4( this.matrixWorld ); //Move back to world space for distance calculation\n\n\t\t\t\t\t\t\tvar distance = raycaster.ray.origin.distanceTo( interRay );\n\n\t\t\t\t\t\t\tif ( distance < raycaster.near || distance > raycaster.far ) continue;\n\n\t\t\t\t\t\t\tintersects.push( {\n\n\t\t\t\t\t\t\t\tdistance: distance,\n\t\t\t\t\t\t\t\t// What do we want? intersection point on the ray or on the segment??\n\t\t\t\t\t\t\t\t// point: raycaster.ray.at( distance ),\n\t\t\t\t\t\t\t\tpoint: interSegment.clone().applyMatrix4( this.matrixWorld ),\n\t\t\t\t\t\t\t\tindex: i,\n\t\t\t\t\t\t\t\tface: null,\n\t\t\t\t\t\t\t\tfaceIndex: null,\n\t\t\t\t\t\t\t\tobject: this\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 {\n\n\t\t\t\t\t\tfor ( var i = 0, l = positions.length / 3 - 1; i < l; i += step ) {\n\n\t\t\t\t\t\t\tvStart.fromArray( positions, 3 * i );\n\t\t\t\t\t\t\tvEnd.fromArray( positions, 3 * i + 3 );\n\n\t\t\t\t\t\t\tvar distSq = ray.distanceSqToSegment( vStart, vEnd, interRay, interSegment );\n\n\t\t\t\t\t\t\tif ( distSq > precisionSq ) continue;\n\n\t\t\t\t\t\t\tinterRay.applyMatrix4( this.matrixWorld ); //Move back to world space for distance calculation\n\n\t\t\t\t\t\t\tvar distance = raycaster.ray.origin.distanceTo( interRay );\n\n\t\t\t\t\t\t\tif ( distance < raycaster.near || distance > raycaster.far ) continue;\n\n\t\t\t\t\t\t\tintersects.push( {\n\n\t\t\t\t\t\t\t\tdistance: distance,\n\t\t\t\t\t\t\t\t// What do we want? intersection point on the ray or on the segment??\n\t\t\t\t\t\t\t\t// point: raycaster.ray.at( distance ),\n\t\t\t\t\t\t\t\tpoint: interSegment.clone().applyMatrix4( this.matrixWorld ),\n\t\t\t\t\t\t\t\tindex: i,\n\t\t\t\t\t\t\t\tface: null,\n\t\t\t\t\t\t\t\tfaceIndex: null,\n\t\t\t\t\t\t\t\tobject: this\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 if ( geometry.isGeometry ) {\n\n\t\t\t\t\tvar vertices = geometry.vertices;\n\t\t\t\t\tvar nbVertices = vertices.length;\n\n\t\t\t\t\tfor ( var i = 0; i < nbVertices - 1; i += step ) {\n\n\t\t\t\t\t\tvar distSq = ray.distanceSqToSegment( vertices[ i ], vertices[ i + 1 ], interRay, interSegment );\n\n\t\t\t\t\t\tif ( distSq > precisionSq ) continue;\n\n\t\t\t\t\t\tinterRay.applyMatrix4( this.matrixWorld ); //Move back to world space for distance calculation\n\n\t\t\t\t\t\tvar distance = raycaster.ray.origin.distanceTo( interRay );\n\n\t\t\t\t\t\tif ( distance < raycaster.near || distance > raycaster.far ) continue;\n\n\t\t\t\t\t\tintersects.push( {\n\n\t\t\t\t\t\t\tdistance: distance,\n\t\t\t\t\t\t\t// What do we want? intersection point on the ray or on the segment??\n\t\t\t\t\t\t\t// point: raycaster.ray.at( distance ),\n\t\t\t\t\t\t\tpoint: interSegment.clone().applyMatrix4( this.matrixWorld ),\n\t\t\t\t\t\t\tindex: i,\n\t\t\t\t\t\t\tface: null,\n\t\t\t\t\t\t\tfaceIndex: null,\n\t\t\t\t\t\t\tobject: this\n\n\t\t\t\t\t\t} );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t};\n\n\t\t}() ),\n\n\t\tclone: function () {\n\n\t\t\treturn new this.constructor( this.geometry, this.material ).copy( this );\n\n\t\t}\n\n\t} );\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t */\n\n\tfunction LineSegments( geometry, material ) {\n\n\t\tLine.call( this, geometry, material );\n\n\t\tthis.type = 'LineSegments';\n\n\t}\n\n\tLineSegments.prototype = Object.assign( Object.create( Line.prototype ), {\n\n\t\tconstructor: LineSegments,\n\n\t\tisLineSegments: true\n\n\t} );\n\n\t/**\n\t * @author mgreter / http://github.com/mgreter\n\t */\n\n\tfunction LineLoop( geometry, material ) {\n\n\t\tLine.call( this, geometry, material );\n\n\t\tthis.type = 'LineLoop';\n\n\t}\n\n\tLineLoop.prototype = Object.assign( Object.create( Line.prototype ), {\n\n\t\tconstructor: LineLoop,\n\n\t\tisLineLoop: true,\n\n\t} );\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t * @author alteredq / http://alteredqualia.com/\n\t *\n\t * parameters = {\n\t * color: ,\n\t * opacity: ,\n\t * map: new THREE.Texture( ),\n\t *\n\t * size: ,\n\t * sizeAttenuation: \n\t * }\n\t */\n\n\tfunction PointsMaterial( parameters ) {\n\n\t\tMaterial.call( this );\n\n\t\tthis.type = 'PointsMaterial';\n\n\t\tthis.color = new Color( 0xffffff );\n\n\t\tthis.map = null;\n\n\t\tthis.size = 1;\n\t\tthis.sizeAttenuation = true;\n\n\t\tthis.lights = false;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tPointsMaterial.prototype = Object.create( Material.prototype );\n\tPointsMaterial.prototype.constructor = PointsMaterial;\n\n\tPointsMaterial.prototype.isPointsMaterial = true;\n\n\tPointsMaterial.prototype.copy = function ( source ) {\n\n\t\tMaterial.prototype.copy.call( this, source );\n\n\t\tthis.color.copy( source.color );\n\n\t\tthis.map = source.map;\n\n\t\tthis.size = source.size;\n\t\tthis.sizeAttenuation = source.sizeAttenuation;\n\n\t\treturn this;\n\n\t};\n\n\t/**\n\t * @author alteredq / http://alteredqualia.com/\n\t */\n\n\tfunction Points( geometry, material ) {\n\n\t\tObject3D.call( this );\n\n\t\tthis.type = 'Points';\n\n\t\tthis.geometry = geometry !== undefined ? geometry : new BufferGeometry();\n\t\tthis.material = material !== undefined ? material : new PointsMaterial( { color: Math.random() * 0xffffff } );\n\n\t}\n\n\tPoints.prototype = Object.assign( Object.create( Object3D.prototype ), {\n\n\t\tconstructor: Points,\n\n\t\tisPoints: true,\n\n\t\traycast: ( function () {\n\n\t\t\tvar inverseMatrix = new Matrix4();\n\t\t\tvar ray = new Ray();\n\t\t\tvar sphere = new Sphere();\n\n\t\t\treturn function raycast( raycaster, intersects ) {\n\n\t\t\t\tvar object = this;\n\t\t\t\tvar geometry = this.geometry;\n\t\t\t\tvar matrixWorld = this.matrixWorld;\n\t\t\t\tvar threshold = raycaster.params.Points.threshold;\n\n\t\t\t\t// Checking boundingSphere distance to ray\n\n\t\t\t\tif ( geometry.boundingSphere === null ) geometry.computeBoundingSphere();\n\n\t\t\t\tsphere.copy( geometry.boundingSphere );\n\t\t\t\tsphere.applyMatrix4( matrixWorld );\n\t\t\t\tsphere.radius += threshold;\n\n\t\t\t\tif ( raycaster.ray.intersectsSphere( sphere ) === false ) return;\n\n\t\t\t\t//\n\n\t\t\t\tinverseMatrix.getInverse( matrixWorld );\n\t\t\t\tray.copy( raycaster.ray ).applyMatrix4( inverseMatrix );\n\n\t\t\t\tvar localThreshold = threshold / ( ( this.scale.x + this.scale.y + this.scale.z ) / 3 );\n\t\t\t\tvar localThresholdSq = localThreshold * localThreshold;\n\t\t\t\tvar position = new Vector3();\n\n\t\t\t\tfunction testPoint( point, index ) {\n\n\t\t\t\t\tvar rayPointDistanceSq = ray.distanceSqToPoint( point );\n\n\t\t\t\t\tif ( rayPointDistanceSq < localThresholdSq ) {\n\n\t\t\t\t\t\tvar intersectPoint = ray.closestPointToPoint( point );\n\t\t\t\t\t\tintersectPoint.applyMatrix4( matrixWorld );\n\n\t\t\t\t\t\tvar distance = raycaster.ray.origin.distanceTo( intersectPoint );\n\n\t\t\t\t\t\tif ( distance < raycaster.near || distance > raycaster.far ) return;\n\n\t\t\t\t\t\tintersects.push( {\n\n\t\t\t\t\t\t\tdistance: distance,\n\t\t\t\t\t\t\tdistanceToRay: Math.sqrt( rayPointDistanceSq ),\n\t\t\t\t\t\t\tpoint: intersectPoint.clone(),\n\t\t\t\t\t\t\tindex: index,\n\t\t\t\t\t\t\tface: null,\n\t\t\t\t\t\t\tobject: object\n\n\t\t\t\t\t\t} );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\t\t\tvar index = geometry.index;\n\t\t\t\t\tvar attributes = geometry.attributes;\n\t\t\t\t\tvar positions = attributes.position.array;\n\n\t\t\t\t\tif ( index !== null ) {\n\n\t\t\t\t\t\tvar indices = index.array;\n\n\t\t\t\t\t\tfor ( var i = 0, il = indices.length; i < il; i ++ ) {\n\n\t\t\t\t\t\t\tvar a = indices[ i ];\n\n\t\t\t\t\t\t\tposition.fromArray( positions, a * 3 );\n\n\t\t\t\t\t\t\ttestPoint( position, a );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tfor ( var i = 0, l = positions.length / 3; i < l; i ++ ) {\n\n\t\t\t\t\t\t\tposition.fromArray( positions, i * 3 );\n\n\t\t\t\t\t\t\ttestPoint( position, 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\tvar vertices = geometry.vertices;\n\n\t\t\t\t\tfor ( var i = 0, l = vertices.length; i < l; i ++ ) {\n\n\t\t\t\t\t\ttestPoint( vertices[ i ], i );\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\tclone: function () {\n\n\t\t\treturn new this.constructor( this.geometry, this.material ).copy( this );\n\n\t\t}\n\n\t} );\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t */\n\n\tfunction Group() {\n\n\t\tObject3D.call( this );\n\n\t\tthis.type = 'Group';\n\n\t}\n\n\tGroup.prototype = Object.assign( Object.create( Object3D.prototype ), {\n\n\t\tconstructor: Group\n\n\t} );\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t */\n\n\tfunction VideoTexture( video, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy ) {\n\n\t\tTexture.call( this, video, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy );\n\n\t\tthis.generateMipmaps = false;\n\n\t\tvar scope = this;\n\n\t\tfunction update() {\n\n\t\t\tvar video = scope.image;\n\n\t\t\tif ( video.readyState >= video.HAVE_CURRENT_DATA ) {\n\n\t\t\t\tscope.needsUpdate = true;\n\n\t\t\t}\n\n\t\t\trequestAnimationFrame( update );\n\n\t\t}\n\n\t\trequestAnimationFrame( update );\n\n\t}\n\n\tVideoTexture.prototype = Object.create( Texture.prototype );\n\tVideoTexture.prototype.constructor = VideoTexture;\n\n\t/**\n\t * @author alteredq / http://alteredqualia.com/\n\t */\n\n\tfunction CompressedTexture( mipmaps, width, height, format, type, mapping, wrapS, wrapT, magFilter, minFilter, anisotropy, encoding ) {\n\n\t\tTexture.call( this, 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\tCompressedTexture.prototype = Object.create( Texture.prototype );\n\tCompressedTexture.prototype.constructor = CompressedTexture;\n\n\tCompressedTexture.prototype.isCompressedTexture = true;\n\n\t/**\n\t * @author Matt DesLauriers / @mattdesl\n\t * @author atix / arthursilber.de\n\t */\n\n\tfunction DepthTexture( 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\tTexture.call( this, 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\tDepthTexture.prototype = Object.create( Texture.prototype );\n\tDepthTexture.prototype.constructor = DepthTexture;\n\tDepthTexture.prototype.isDepthTexture = true;\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t * @author Mugen87 / https://github.com/Mugen87\n\t */\n\n\tfunction WireframeGeometry( geometry ) {\n\n\t\tBufferGeometry.call( this );\n\n\t\tthis.type = 'WireframeGeometry';\n\n\t\t// buffer\n\n\t\tvar vertices = [];\n\n\t\t// helper variables\n\n\t\tvar i, j, l, o, ol;\n\t\tvar edge = [ 0, 0 ], edges = {}, e, edge1, edge2;\n\t\tvar key, keys = [ 'a', 'b', 'c' ];\n\t\tvar vertex;\n\n\t\t// different logic for Geometry and BufferGeometry\n\n\t\tif ( geometry && geometry.isGeometry ) {\n\n\t\t\t// create a data structure that contains all edges without duplicates\n\n\t\t\tvar faces = geometry.faces;\n\n\t\t\tfor ( i = 0, l = faces.length; i < l; i ++ ) {\n\n\t\t\t\tvar face = faces[ i ];\n\n\t\t\t\tfor ( j = 0; j < 3; j ++ ) {\n\n\t\t\t\t\tedge1 = face[ keys[ j ] ];\n\t\t\t\t\tedge2 = face[ keys[ ( j + 1 ) % 3 ] ];\n\t\t\t\t\tedge[ 0 ] = Math.min( edge1, edge2 ); // sorting prevents duplicates\n\t\t\t\t\tedge[ 1 ] = Math.max( edge1, edge2 );\n\n\t\t\t\t\tkey = edge[ 0 ] + ',' + edge[ 1 ];\n\n\t\t\t\t\tif ( edges[ key ] === undefined ) {\n\n\t\t\t\t\t\tedges[ key ] = { index1: edge[ 0 ], index2: edge[ 1 ] };\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// generate vertices\n\n\t\t\tfor ( key in edges ) {\n\n\t\t\t\te = edges[ key ];\n\n\t\t\t\tvertex = geometry.vertices[ e.index1 ];\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\tvertex = geometry.vertices[ e.index2 ];\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t}\n\n\t\t} else if ( geometry && geometry.isBufferGeometry ) {\n\n\t\t\tvar position, indices, groups;\n\t\t\tvar group, start, count;\n\t\t\tvar index1, index2;\n\n\t\t\tvertex = new Vector3();\n\n\t\t\tif ( geometry.index !== null ) {\n\n\t\t\t\t// indexed BufferGeometry\n\n\t\t\t\tposition = geometry.attributes.position;\n\t\t\t\tindices = geometry.index;\n\t\t\t\tgroups = geometry.groups;\n\n\t\t\t\tif ( groups.length === 0 ) {\n\n\t\t\t\t\tgroups = [ { start: 0, count: indices.count, materialIndex: 0 } ];\n\n\t\t\t\t}\n\n\t\t\t\t// create a data structure that contains all eges without duplicates\n\n\t\t\t\tfor ( o = 0, ol = groups.length; o < ol; ++ o ) {\n\n\t\t\t\t\tgroup = groups[ o ];\n\n\t\t\t\t\tstart = group.start;\n\t\t\t\t\tcount = group.count;\n\n\t\t\t\t\tfor ( i = start, l = ( start + count ); i < l; i += 3 ) {\n\n\t\t\t\t\t\tfor ( j = 0; j < 3; j ++ ) {\n\n\t\t\t\t\t\t\tedge1 = indices.getX( i + j );\n\t\t\t\t\t\t\tedge2 = indices.getX( i + ( j + 1 ) % 3 );\n\t\t\t\t\t\t\tedge[ 0 ] = Math.min( edge1, edge2 ); // sorting prevents duplicates\n\t\t\t\t\t\t\tedge[ 1 ] = Math.max( edge1, edge2 );\n\n\t\t\t\t\t\t\tkey = edge[ 0 ] + ',' + edge[ 1 ];\n\n\t\t\t\t\t\t\tif ( edges[ key ] === undefined ) {\n\n\t\t\t\t\t\t\t\tedges[ key ] = { index1: edge[ 0 ], index2: edge[ 1 ] };\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t// generate vertices\n\n\t\t\t\tfor ( key in edges ) {\n\n\t\t\t\t\te = edges[ key ];\n\n\t\t\t\t\tvertex.fromBufferAttribute( position, e.index1 );\n\t\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t\tvertex.fromBufferAttribute( position, e.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} else {\n\n\t\t\t\t// non-indexed BufferGeometry\n\n\t\t\t\tposition = geometry.attributes.position;\n\n\t\t\t\tfor ( i = 0, l = ( position.count / 3 ); i < l; i ++ ) {\n\n\t\t\t\t\tfor ( j = 0; j < 3; j ++ ) {\n\n\t\t\t\t\t\t// three edges per triangle, an edge is represented as (index1, index2)\n\t\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\t\tindex1 = 3 * i + j;\n\t\t\t\t\t\tvertex.fromBufferAttribute( position, index1 );\n\t\t\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t\t\tindex2 = 3 * i + ( ( j + 1 ) % 3 );\n\t\t\t\t\t\tvertex.fromBufferAttribute( position, index2 );\n\t\t\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\n\t}\n\n\tWireframeGeometry.prototype = Object.create( BufferGeometry.prototype );\n\tWireframeGeometry.prototype.constructor = WireframeGeometry;\n\n\t/**\n\t * @author zz85 / https://github.com/zz85\n\t * @author Mugen87 / https://github.com/Mugen87\n\t *\n\t * Parametric Surfaces Geometry\n\t * based on the brilliant article by @prideout http://prideout.net/blog/?p=44\n\t */\n\n\t// ParametricGeometry\n\n\tfunction ParametricGeometry( func, slices, stacks ) {\n\n\t\tGeometry.call( this );\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\tthis.fromBufferGeometry( new ParametricBufferGeometry( func, slices, stacks ) );\n\t\tthis.mergeVertices();\n\n\t}\n\n\tParametricGeometry.prototype = Object.create( Geometry.prototype );\n\tParametricGeometry.prototype.constructor = ParametricGeometry;\n\n\t// ParametricBufferGeometry\n\n\tfunction ParametricBufferGeometry( func, slices, stacks ) {\n\n\t\tBufferGeometry.call( this );\n\n\t\tthis.type = 'ParametricBufferGeometry';\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\tvar indices = [];\n\t\tvar vertices = [];\n\t\tvar normals = [];\n\t\tvar uvs = [];\n\n\t\tvar EPS = 0.00001;\n\n\t\tvar normal = new Vector3();\n\n\t\tvar p0 = new Vector3(), p1 = new Vector3();\n\t\tvar pu = new Vector3(), pv = new Vector3();\n\n\t\tvar i, j;\n\n\t\t// generate vertices, normals and uvs\n\n\t\tvar sliceCount = slices + 1;\n\n\t\tfor ( i = 0; i <= stacks; i ++ ) {\n\n\t\t\tvar v = i / stacks;\n\n\t\t\tfor ( j = 0; j <= slices; j ++ ) {\n\n\t\t\t\tvar u = j / slices;\n\n\t\t\t\t// vertex\n\n\t\t\t\tp0 = func( 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\tp1 = func( 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\tp1 = func( 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\tp1 = func( 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\tp1 = func( 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 ( i = 0; i < stacks; i ++ ) {\n\n\t\t\tfor ( j = 0; j < slices; j ++ ) {\n\n\t\t\t\tvar a = i * sliceCount + j;\n\t\t\t\tvar b = i * sliceCount + j + 1;\n\t\t\t\tvar c = ( i + 1 ) * sliceCount + j + 1;\n\t\t\t\tvar 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.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.addAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.addAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t}\n\n\tParametricBufferGeometry.prototype = Object.create( BufferGeometry.prototype );\n\tParametricBufferGeometry.prototype.constructor = ParametricBufferGeometry;\n\n\t/**\n\t * @author clockworkgeek / https://github.com/clockworkgeek\n\t * @author timothypratley / https://github.com/timothypratley\n\t * @author WestLangley / http://github.com/WestLangley\n\t * @author Mugen87 / https://github.com/Mugen87\n\t */\n\n\t// PolyhedronGeometry\n\n\tfunction PolyhedronGeometry( vertices, indices, radius, detail ) {\n\n\t\tGeometry.call( this );\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\tthis.fromBufferGeometry( new PolyhedronBufferGeometry( vertices, indices, radius, detail ) );\n\t\tthis.mergeVertices();\n\n\t}\n\n\tPolyhedronGeometry.prototype = Object.create( Geometry.prototype );\n\tPolyhedronGeometry.prototype.constructor = PolyhedronGeometry;\n\n\t// PolyhedronBufferGeometry\n\n\tfunction PolyhedronBufferGeometry( vertices, indices, radius, detail ) {\n\n\t\tBufferGeometry.call( this );\n\n\t\tthis.type = 'PolyhedronBufferGeometry';\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\tradius = radius || 1;\n\t\tdetail = detail || 0;\n\n\t\t// default buffer data\n\n\t\tvar vertexBuffer = [];\n\t\tvar 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\tappplyRadius( 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.addAttribute( 'position', new Float32BufferAttribute( vertexBuffer, 3 ) );\n\t\tthis.addAttribute( 'normal', new Float32BufferAttribute( vertexBuffer.slice(), 3 ) );\n\t\tthis.addAttribute( '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\tvar a = new Vector3();\n\t\t\tvar b = new Vector3();\n\t\t\tvar 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 ( var 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\tvar cols = Math.pow( 2, detail );\n\n\t\t\t// we use this multidimensional array as a data structure for creating the subdivision\n\n\t\t\tvar v = [];\n\n\t\t\tvar i, j;\n\n\t\t\t// construct all of the vertices for this subdivision\n\n\t\t\tfor ( i = 0; i <= cols; i ++ ) {\n\n\t\t\t\tv[ i ] = [];\n\n\t\t\t\tvar aj = a.clone().lerp( c, i / cols );\n\t\t\t\tvar bj = b.clone().lerp( c, i / cols );\n\n\t\t\t\tvar rows = cols - i;\n\n\t\t\t\tfor ( 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 ( i = 0; i < cols; i ++ ) {\n\n\t\t\t\tfor ( j = 0; j < 2 * ( cols - i ) - 1; j ++ ) {\n\n\t\t\t\t\tvar 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 appplyRadius( radius ) {\n\n\t\t\tvar 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 ( var 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\tvar vertex = new Vector3();\n\n\t\t\tfor ( var 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\tvar u = azimuth( vertex ) / 2 / Math.PI + 0.5;\n\t\t\t\tvar 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 ( var i = 0; i < uvBuffer.length; i += 6 ) {\n\n\t\t\t\t// uv data of a single face\n\n\t\t\t\tvar x0 = uvBuffer[ i + 0 ];\n\t\t\t\tvar x1 = uvBuffer[ i + 2 ];\n\t\t\t\tvar x2 = uvBuffer[ i + 4 ];\n\n\t\t\t\tvar max = Math.max( x0, x1, x2 );\n\t\t\t\tvar 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\tvar 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\tvar a = new Vector3();\n\t\t\tvar b = new Vector3();\n\t\t\tvar c = new Vector3();\n\n\t\t\tvar centroid = new Vector3();\n\n\t\t\tvar uvA = new Vector2();\n\t\t\tvar uvB = new Vector2();\n\t\t\tvar uvC = new Vector2();\n\n\t\t\tfor ( var 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\tvar 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\tPolyhedronBufferGeometry.prototype = Object.create( BufferGeometry.prototype );\n\tPolyhedronBufferGeometry.prototype.constructor = PolyhedronBufferGeometry;\n\n\t/**\n\t * @author timothypratley / https://github.com/timothypratley\n\t * @author Mugen87 / https://github.com/Mugen87\n\t */\n\n\t// TetrahedronGeometry\n\n\tfunction TetrahedronGeometry( radius, detail ) {\n\n\t\tGeometry.call( this );\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\tthis.fromBufferGeometry( new TetrahedronBufferGeometry( radius, detail ) );\n\t\tthis.mergeVertices();\n\n\t}\n\n\tTetrahedronGeometry.prototype = Object.create( Geometry.prototype );\n\tTetrahedronGeometry.prototype.constructor = TetrahedronGeometry;\n\n\t// TetrahedronBufferGeometry\n\n\tfunction TetrahedronBufferGeometry( radius, detail ) {\n\n\t\tvar vertices = [\n\t\t\t1, 1, 1, \t- 1, - 1, 1, \t- 1, 1, - 1, \t1, - 1, - 1\n\t\t];\n\n\t\tvar indices = [\n\t\t\t2, 1, 0, \t0, 3, 2,\t1, 3, 0,\t2, 3, 1\n\t\t];\n\n\t\tPolyhedronBufferGeometry.call( this, vertices, indices, radius, detail );\n\n\t\tthis.type = 'TetrahedronBufferGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\tdetail: detail\n\t\t};\n\n\t}\n\n\tTetrahedronBufferGeometry.prototype = Object.create( PolyhedronBufferGeometry.prototype );\n\tTetrahedronBufferGeometry.prototype.constructor = TetrahedronBufferGeometry;\n\n\t/**\n\t * @author timothypratley / https://github.com/timothypratley\n\t * @author Mugen87 / https://github.com/Mugen87\n\t */\n\n\t// OctahedronGeometry\n\n\tfunction OctahedronGeometry( radius, detail ) {\n\n\t\tGeometry.call( this );\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\tthis.fromBufferGeometry( new OctahedronBufferGeometry( radius, detail ) );\n\t\tthis.mergeVertices();\n\n\t}\n\n\tOctahedronGeometry.prototype = Object.create( Geometry.prototype );\n\tOctahedronGeometry.prototype.constructor = OctahedronGeometry;\n\n\t// OctahedronBufferGeometry\n\n\tfunction OctahedronBufferGeometry( radius, detail ) {\n\n\t\tvar 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\tvar 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\tPolyhedronBufferGeometry.call( this, vertices, indices, radius, detail );\n\n\t\tthis.type = 'OctahedronBufferGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\tdetail: detail\n\t\t};\n\n\t}\n\n\tOctahedronBufferGeometry.prototype = Object.create( PolyhedronBufferGeometry.prototype );\n\tOctahedronBufferGeometry.prototype.constructor = OctahedronBufferGeometry;\n\n\t/**\n\t * @author timothypratley / https://github.com/timothypratley\n\t * @author Mugen87 / https://github.com/Mugen87\n\t */\n\n\t// IcosahedronGeometry\n\n\tfunction IcosahedronGeometry( radius, detail ) {\n\n\t\tGeometry.call( this );\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\tthis.fromBufferGeometry( new IcosahedronBufferGeometry( radius, detail ) );\n\t\tthis.mergeVertices();\n\n\t}\n\n\tIcosahedronGeometry.prototype = Object.create( Geometry.prototype );\n\tIcosahedronGeometry.prototype.constructor = IcosahedronGeometry;\n\n\t// IcosahedronBufferGeometry\n\n\tfunction IcosahedronBufferGeometry( radius, detail ) {\n\n\t\tvar t = ( 1 + Math.sqrt( 5 ) ) / 2;\n\n\t\tvar vertices = [\n\t\t\t- 1, t, 0, \t1, t, 0, \t- 1, - t, 0, \t1, - t, 0,\n\t\t\t 0, - 1, t, \t0, 1, t,\t0, - 1, - t, \t0, 1, - t,\n\t\t\t t, 0, - 1, \tt, 0, 1, \t- t, 0, - 1, \t- t, 0, 1\n\t\t];\n\n\t\tvar indices = [\n\t\t\t 0, 11, 5, \t0, 5, 1, \t0, 1, 7, \t0, 7, 10, \t0, 10, 11,\n\t\t\t 1, 5, 9, \t5, 11, 4,\t11, 10, 2,\t10, 7, 6,\t7, 1, 8,\n\t\t\t 3, 9, 4, \t3, 4, 2,\t3, 2, 6,\t3, 6, 8,\t3, 8, 9,\n\t\t\t 4, 9, 5, \t2, 4, 11,\t6, 2, 10,\t8, 6, 7,\t9, 8, 1\n\t\t];\n\n\t\tPolyhedronBufferGeometry.call( this, vertices, indices, radius, detail );\n\n\t\tthis.type = 'IcosahedronBufferGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\tdetail: detail\n\t\t};\n\n\t}\n\n\tIcosahedronBufferGeometry.prototype = Object.create( PolyhedronBufferGeometry.prototype );\n\tIcosahedronBufferGeometry.prototype.constructor = IcosahedronBufferGeometry;\n\n\t/**\n\t * @author Abe Pazos / https://hamoid.com\n\t * @author Mugen87 / https://github.com/Mugen87\n\t */\n\n\t// DodecahedronGeometry\n\n\tfunction DodecahedronGeometry( radius, detail ) {\n\n\t\tGeometry.call( this );\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\tthis.fromBufferGeometry( new DodecahedronBufferGeometry( radius, detail ) );\n\t\tthis.mergeVertices();\n\n\t}\n\n\tDodecahedronGeometry.prototype = Object.create( Geometry.prototype );\n\tDodecahedronGeometry.prototype.constructor = DodecahedronGeometry;\n\n\t// DodecahedronBufferGeometry\n\n\tfunction DodecahedronBufferGeometry( radius, detail ) {\n\n\t\tvar t = ( 1 + Math.sqrt( 5 ) ) / 2;\n\t\tvar r = 1 / t;\n\n\t\tvar 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\t 0, - r, - t, 0, - r, t,\n\t\t\t 0, 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\t r, - 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\tvar 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\tPolyhedronBufferGeometry.call( this, vertices, indices, radius, detail );\n\n\t\tthis.type = 'DodecahedronBufferGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\tdetail: detail\n\t\t};\n\n\t}\n\n\tDodecahedronBufferGeometry.prototype = Object.create( PolyhedronBufferGeometry.prototype );\n\tDodecahedronBufferGeometry.prototype.constructor = DodecahedronBufferGeometry;\n\n\t/**\n\t * @author oosmoxiecode / https://github.com/oosmoxiecode\n\t * @author WestLangley / https://github.com/WestLangley\n\t * @author zz85 / https://github.com/zz85\n\t * @author miningold / https://github.com/miningold\n\t * @author jonobr1 / https://github.com/jonobr1\n\t * @author Mugen87 / https://github.com/Mugen87\n\t *\n\t */\n\n\t// TubeGeometry\n\n\tfunction TubeGeometry( path, tubularSegments, radius, radialSegments, closed, taper ) {\n\n\t\tGeometry.call( this );\n\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\tif ( taper !== undefined ) console.warn( 'THREE.TubeGeometry: taper has been removed.' );\n\n\t\tvar bufferGeometry = new TubeBufferGeometry( path, tubularSegments, radius, radialSegments, closed );\n\n\t\t// expose internals\n\n\t\tthis.tangents = bufferGeometry.tangents;\n\t\tthis.normals = bufferGeometry.normals;\n\t\tthis.binormals = bufferGeometry.binormals;\n\n\t\t// create geometry\n\n\t\tthis.fromBufferGeometry( bufferGeometry );\n\t\tthis.mergeVertices();\n\n\t}\n\n\tTubeGeometry.prototype = Object.create( Geometry.prototype );\n\tTubeGeometry.prototype.constructor = TubeGeometry;\n\n\t// TubeBufferGeometry\n\n\tfunction TubeBufferGeometry( path, tubularSegments, radius, radialSegments, closed ) {\n\n\t\tBufferGeometry.call( this );\n\n\t\tthis.type = 'TubeBufferGeometry';\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\ttubularSegments = tubularSegments || 64;\n\t\tradius = radius || 1;\n\t\tradialSegments = radialSegments || 8;\n\t\tclosed = closed || false;\n\n\t\tvar 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\tvar vertex = new Vector3();\n\t\tvar normal = new Vector3();\n\t\tvar uv = new Vector2();\n\t\tvar P = new Vector3();\n\n\t\tvar i, j;\n\n\t\t// buffer\n\n\t\tvar vertices = [];\n\t\tvar normals = [];\n\t\tvar uvs = [];\n\t\tvar 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.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.addAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.addAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t\t// functions\n\n\t\tfunction generateBufferData() {\n\n\t\t\tfor ( 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\tvar N = frames.normals[ i ];\n\t\t\tvar B = frames.binormals[ i ];\n\n\t\t\t// generate normals and vertices for the current segment\n\n\t\t\tfor ( j = 0; j <= radialSegments; j ++ ) {\n\n\t\t\t\tvar v = j / radialSegments * Math.PI * 2;\n\n\t\t\t\tvar sin = Math.sin( v );\n\t\t\t\tvar 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 ( j = 1; j <= tubularSegments; j ++ ) {\n\n\t\t\t\tfor ( i = 1; i <= radialSegments; i ++ ) {\n\n\t\t\t\t\tvar a = ( radialSegments + 1 ) * ( j - 1 ) + ( i - 1 );\n\t\t\t\t\tvar b = ( radialSegments + 1 ) * j + ( i - 1 );\n\t\t\t\t\tvar c = ( radialSegments + 1 ) * j + i;\n\t\t\t\t\tvar 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 ( i = 0; i <= tubularSegments; i ++ ) {\n\n\t\t\t\tfor ( 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\n\tTubeBufferGeometry.prototype = Object.create( BufferGeometry.prototype );\n\tTubeBufferGeometry.prototype.constructor = TubeBufferGeometry;\n\n\t/**\n\t * @author oosmoxiecode\n\t * @author Mugen87 / https://github.com/Mugen87\n\t *\n\t * based on http://www.blackpawn.com/texts/pqtorus/\n\t */\n\n\t// TorusKnotGeometry\n\n\tfunction TorusKnotGeometry( radius, tube, tubularSegments, radialSegments, p, q, heightScale ) {\n\n\t\tGeometry.call( this );\n\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\tif ( heightScale !== undefined ) console.warn( 'THREE.TorusKnotGeometry: heightScale has been deprecated. Use .scale( x, y, z ) instead.' );\n\n\t\tthis.fromBufferGeometry( new TorusKnotBufferGeometry( radius, tube, tubularSegments, radialSegments, p, q ) );\n\t\tthis.mergeVertices();\n\n\t}\n\n\tTorusKnotGeometry.prototype = Object.create( Geometry.prototype );\n\tTorusKnotGeometry.prototype.constructor = TorusKnotGeometry;\n\n\t// TorusKnotBufferGeometry\n\n\tfunction TorusKnotBufferGeometry( radius, tube, tubularSegments, radialSegments, p, q ) {\n\n\t\tBufferGeometry.call( this );\n\n\t\tthis.type = 'TorusKnotBufferGeometry';\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\tradius = radius || 1;\n\t\ttube = tube || 0.4;\n\t\ttubularSegments = Math.floor( tubularSegments ) || 64;\n\t\tradialSegments = Math.floor( radialSegments ) || 8;\n\t\tp = p || 2;\n\t\tq = q || 3;\n\n\t\t// buffers\n\n\t\tvar indices = [];\n\t\tvar vertices = [];\n\t\tvar normals = [];\n\t\tvar uvs = [];\n\n\t\t// helper variables\n\n\t\tvar i, j;\n\n\t\tvar vertex = new Vector3();\n\t\tvar normal = new Vector3();\n\n\t\tvar P1 = new Vector3();\n\t\tvar P2 = new Vector3();\n\n\t\tvar B = new Vector3();\n\t\tvar T = new Vector3();\n\t\tvar N = new Vector3();\n\n\t\t// generate vertices, normals and uvs\n\n\t\tfor ( 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\tvar 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 ( 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\tvar v = j / radialSegments * Math.PI * 2;\n\t\t\t\tvar cx = - tube * Math.cos( v );\n\t\t\t\tvar 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 ( j = 1; j <= tubularSegments; j ++ ) {\n\n\t\t\tfor ( i = 1; i <= radialSegments; i ++ ) {\n\n\t\t\t\t// indices\n\n\t\t\t\tvar a = ( radialSegments + 1 ) * ( j - 1 ) + ( i - 1 );\n\t\t\t\tvar b = ( radialSegments + 1 ) * j + ( i - 1 );\n\t\t\t\tvar c = ( radialSegments + 1 ) * j + i;\n\t\t\t\tvar d = ( radialSegments + 1 ) * ( j - 1 ) + i;\n\n\t\t\t\t// faces\n\n\t\t\t\tindices.push( a, b, d );\n\t\t\t\tindices.push( b, c, d );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.addAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.addAttribute( '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\tvar cu = Math.cos( u );\n\t\t\tvar su = Math.sin( u );\n\t\t\tvar quOverP = q / p * u;\n\t\t\tvar 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\tTorusKnotBufferGeometry.prototype = Object.create( BufferGeometry.prototype );\n\tTorusKnotBufferGeometry.prototype.constructor = TorusKnotBufferGeometry;\n\n\t/**\n\t * @author oosmoxiecode\n\t * @author mrdoob / http://mrdoob.com/\n\t * @author Mugen87 / https://github.com/Mugen87\n\t */\n\n\t// TorusGeometry\n\n\tfunction TorusGeometry( radius, tube, radialSegments, tubularSegments, arc ) {\n\n\t\tGeometry.call( this );\n\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\tthis.fromBufferGeometry( new TorusBufferGeometry( radius, tube, radialSegments, tubularSegments, arc ) );\n\t\tthis.mergeVertices();\n\n\t}\n\n\tTorusGeometry.prototype = Object.create( Geometry.prototype );\n\tTorusGeometry.prototype.constructor = TorusGeometry;\n\n\t// TorusBufferGeometry\n\n\tfunction TorusBufferGeometry( radius, tube, radialSegments, tubularSegments, arc ) {\n\n\t\tBufferGeometry.call( this );\n\n\t\tthis.type = 'TorusBufferGeometry';\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\tradius = radius || 1;\n\t\ttube = tube || 0.4;\n\t\tradialSegments = Math.floor( radialSegments ) || 8;\n\t\ttubularSegments = Math.floor( tubularSegments ) || 6;\n\t\tarc = arc || Math.PI * 2;\n\n\t\t// buffers\n\n\t\tvar indices = [];\n\t\tvar vertices = [];\n\t\tvar normals = [];\n\t\tvar uvs = [];\n\n\t\t// helper variables\n\n\t\tvar center = new Vector3();\n\t\tvar vertex = new Vector3();\n\t\tvar normal = new Vector3();\n\n\t\tvar j, i;\n\n\t\t// generate vertices, normals and uvs\n\n\t\tfor ( j = 0; j <= radialSegments; j ++ ) {\n\n\t\t\tfor ( i = 0; i <= tubularSegments; i ++ ) {\n\n\t\t\t\tvar u = i / tubularSegments * arc;\n\t\t\t\tvar 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 ( j = 1; j <= radialSegments; j ++ ) {\n\n\t\t\tfor ( i = 1; i <= tubularSegments; i ++ ) {\n\n\t\t\t\t// indices\n\n\t\t\t\tvar a = ( tubularSegments + 1 ) * j + i - 1;\n\t\t\t\tvar b = ( tubularSegments + 1 ) * ( j - 1 ) + i - 1;\n\t\t\t\tvar c = ( tubularSegments + 1 ) * ( j - 1 ) + i;\n\t\t\t\tvar 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.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.addAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.addAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t}\n\n\tTorusBufferGeometry.prototype = Object.create( BufferGeometry.prototype );\n\tTorusBufferGeometry.prototype.constructor = TorusBufferGeometry;\n\n\t/**\n\t * @author zz85 / http://www.lab4games.net/zz85/blog\n\t */\n\n\tvar ShapeUtils = {\n\n\t\t// calculate area of the contour polygon\n\n\t\tarea: function ( contour ) {\n\n\t\t\tvar n = contour.length;\n\t\t\tvar a = 0.0;\n\n\t\t\tfor ( var p = n - 1, q = 0; q < n; p = q ++ ) {\n\n\t\t\t\ta += contour[ p ].x * contour[ q ].y - contour[ q ].x * contour[ p ].y;\n\n\t\t\t}\n\n\t\t\treturn a * 0.5;\n\n\t\t},\n\n\t\ttriangulate: ( function () {\n\n\t\t\t/**\n\t\t\t * This code is a quick port of code written in C++ which was submitted to\n\t\t\t * flipcode.com by John W. Ratcliff // July 22, 2000\n\t\t\t * See original code and more information here:\n\t\t\t * http://www.flipcode.com/archives/Efficient_Polygon_Triangulation.shtml\n\t\t\t *\n\t\t\t * ported to actionscript by Zevan Rosser\n\t\t\t * www.actionsnippet.com\n\t\t\t *\n\t\t\t * ported to javascript by Joshua Koo\n\t\t\t * http://www.lab4games.net/zz85/blog\n\t\t\t *\n\t\t\t */\n\n\t\t\tfunction snip( contour, u, v, w, n, verts ) {\n\n\t\t\t\tvar p;\n\t\t\t\tvar ax, ay, bx, by;\n\t\t\t\tvar cx, cy, px, py;\n\n\t\t\t\tax = contour[ verts[ u ] ].x;\n\t\t\t\tay = contour[ verts[ u ] ].y;\n\n\t\t\t\tbx = contour[ verts[ v ] ].x;\n\t\t\t\tby = contour[ verts[ v ] ].y;\n\n\t\t\t\tcx = contour[ verts[ w ] ].x;\n\t\t\t\tcy = contour[ verts[ w ] ].y;\n\n\t\t\t\tif ( ( bx - ax ) * ( cy - ay ) - ( by - ay ) * ( cx - ax ) <= 0 ) return false;\n\n\t\t\t\tvar aX, aY, bX, bY, cX, cY;\n\t\t\t\tvar apx, apy, bpx, bpy, cpx, cpy;\n\t\t\t\tvar cCROSSap, bCROSScp, aCROSSbp;\n\n\t\t\t\taX = cx - bx; aY = cy - by;\n\t\t\t\tbX = ax - cx; bY = ay - cy;\n\t\t\t\tcX = bx - ax; cY = by - ay;\n\n\t\t\t\tfor ( p = 0; p < n; p ++ ) {\n\n\t\t\t\t\tpx = contour[ verts[ p ] ].x;\n\t\t\t\t\tpy = contour[ verts[ p ] ].y;\n\n\t\t\t\t\tif ( ( ( px === ax ) && ( py === ay ) ) ||\n\t\t\t\t\t\t ( ( px === bx ) && ( py === by ) ) ||\n\t\t\t\t\t\t ( ( px === cx ) && ( py === cy ) ) )\tcontinue;\n\n\t\t\t\t\tapx = px - ax; apy = py - ay;\n\t\t\t\t\tbpx = px - bx; bpy = py - by;\n\t\t\t\t\tcpx = px - cx; cpy = py - cy;\n\n\t\t\t\t\t// see if p is inside triangle abc\n\n\t\t\t\t\taCROSSbp = aX * bpy - aY * bpx;\n\t\t\t\t\tcCROSSap = cX * apy - cY * apx;\n\t\t\t\t\tbCROSScp = bX * cpy - bY * cpx;\n\n\t\t\t\t\tif ( ( aCROSSbp >= - Number.EPSILON ) && ( bCROSScp >= - Number.EPSILON ) && ( cCROSSap >= - Number.EPSILON ) ) return false;\n\n\t\t\t\t}\n\n\t\t\t\treturn true;\n\n\t\t\t}\n\n\t\t\t// takes in an contour array and returns\n\n\t\t\treturn function triangulate( contour, indices ) {\n\n\t\t\t\tvar n = contour.length;\n\n\t\t\t\tif ( n < 3 ) return null;\n\n\t\t\t\tvar result = [],\n\t\t\t\t\tverts = [],\n\t\t\t\t\tvertIndices = [];\n\n\t\t\t\t/* we want a counter-clockwise polygon in verts */\n\n\t\t\t\tvar u, v, w;\n\n\t\t\t\tif ( ShapeUtils.area( contour ) > 0.0 ) {\n\n\t\t\t\t\tfor ( v = 0; v < n; v ++ ) verts[ v ] = v;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tfor ( v = 0; v < n; v ++ ) verts[ v ] = ( n - 1 ) - v;\n\n\t\t\t\t}\n\n\t\t\t\tvar nv = n;\n\n\t\t\t\t/* remove nv - 2 vertices, creating 1 triangle every time */\n\n\t\t\t\tvar count = 2 * nv; /* error detection */\n\n\t\t\t\tfor ( v = nv - 1; nv > 2; ) {\n\n\t\t\t\t\t/* if we loop, it is probably a non-simple polygon */\n\n\t\t\t\t\tif ( ( count -- ) <= 0 ) {\n\n\t\t\t\t\t\t//** Triangulate: ERROR - probable bad polygon!\n\n\t\t\t\t\t\t//throw ( \"Warning, unable to triangulate polygon!\" );\n\t\t\t\t\t\t//return null;\n\t\t\t\t\t\t// Sometimes warning is fine, especially polygons are triangulated in reverse.\n\t\t\t\t\t\tconsole.warn( 'THREE.ShapeUtils: Unable to triangulate polygon! in triangulate()' );\n\n\t\t\t\t\t\tif ( indices ) return vertIndices;\n\t\t\t\t\t\treturn result;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t/* three consecutive vertices in current polygon, */\n\n\t\t\t\t\tu = v; if ( nv <= u ) u = 0; /* previous */\n\t\t\t\t\tv = u + 1; if ( nv <= v ) v = 0; /* new v */\n\t\t\t\t\tw = v + 1; if ( nv <= w ) w = 0; /* next */\n\n\t\t\t\t\tif ( snip( contour, u, v, w, nv, verts ) ) {\n\n\t\t\t\t\t\tvar a, b, c, s, t;\n\n\t\t\t\t\t\t/* true names of the vertices */\n\n\t\t\t\t\t\ta = verts[ u ];\n\t\t\t\t\t\tb = verts[ v ];\n\t\t\t\t\t\tc = verts[ w ];\n\n\t\t\t\t\t\t/* output Triangle */\n\n\t\t\t\t\t\tresult.push( [ contour[ a ],\n\t\t\t\t\t\t\tcontour[ b ],\n\t\t\t\t\t\t\tcontour[ c ] ] );\n\n\n\t\t\t\t\t\tvertIndices.push( [ verts[ u ], verts[ v ], verts[ w ] ] );\n\n\t\t\t\t\t\t/* remove v from the remaining polygon */\n\n\t\t\t\t\t\tfor ( s = v, t = v + 1; t < nv; s ++, t ++ ) {\n\n\t\t\t\t\t\t\tverts[ s ] = verts[ t ];\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tnv --;\n\n\t\t\t\t\t\t/* reset error detection counter */\n\n\t\t\t\t\t\tcount = 2 * nv;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( indices ) return vertIndices;\n\t\t\t\treturn result;\n\n\t\t\t};\n\n\t\t} )(),\n\n\t\ttriangulateShape: function ( contour, holes ) {\n\n\t\t\tfunction removeDupEndPts( points ) {\n\n\t\t\t\tvar l = points.length;\n\n\t\t\t\tif ( l > 2 && points[ l - 1 ].equals( points[ 0 ] ) ) {\n\n\t\t\t\t\tpoints.pop();\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tremoveDupEndPts( contour );\n\t\t\tholes.forEach( removeDupEndPts );\n\n\t\t\tfunction point_in_segment_2D_colin( inSegPt1, inSegPt2, inOtherPt ) {\n\n\t\t\t\t// inOtherPt needs to be collinear to the inSegment\n\t\t\t\tif ( inSegPt1.x !== inSegPt2.x ) {\n\n\t\t\t\t\tif ( inSegPt1.x < inSegPt2.x ) {\n\n\t\t\t\t\t\treturn\t( ( inSegPt1.x <= inOtherPt.x ) && ( inOtherPt.x <= inSegPt2.x ) );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\treturn\t( ( inSegPt2.x <= inOtherPt.x ) && ( inOtherPt.x <= inSegPt1.x ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( inSegPt1.y < inSegPt2.y ) {\n\n\t\t\t\t\t\treturn\t( ( inSegPt1.y <= inOtherPt.y ) && ( inOtherPt.y <= inSegPt2.y ) );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\treturn\t( ( inSegPt2.y <= inOtherPt.y ) && ( inOtherPt.y <= inSegPt1.y ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tfunction intersect_segments_2D( inSeg1Pt1, inSeg1Pt2, inSeg2Pt1, inSeg2Pt2, inExcludeAdjacentSegs ) {\n\n\t\t\t\tvar seg1dx = inSeg1Pt2.x - inSeg1Pt1.x, seg1dy = inSeg1Pt2.y - inSeg1Pt1.y;\n\t\t\t\tvar seg2dx = inSeg2Pt2.x - inSeg2Pt1.x, seg2dy = inSeg2Pt2.y - inSeg2Pt1.y;\n\n\t\t\t\tvar seg1seg2dx = inSeg1Pt1.x - inSeg2Pt1.x;\n\t\t\t\tvar seg1seg2dy = inSeg1Pt1.y - inSeg2Pt1.y;\n\n\t\t\t\tvar limit\t\t= seg1dy * seg2dx - seg1dx * seg2dy;\n\t\t\t\tvar perpSeg1\t= seg1dy * seg1seg2dx - seg1dx * seg1seg2dy;\n\n\t\t\t\tif ( Math.abs( limit ) > Number.EPSILON ) {\n\n\t\t\t\t\t// not parallel\n\n\t\t\t\t\tvar perpSeg2;\n\t\t\t\t\tif ( limit > 0 ) {\n\n\t\t\t\t\t\tif ( ( perpSeg1 < 0 ) || ( perpSeg1 > limit ) ) \t\treturn [];\n\t\t\t\t\t\tperpSeg2 = seg2dy * seg1seg2dx - seg2dx * seg1seg2dy;\n\t\t\t\t\t\tif ( ( perpSeg2 < 0 ) || ( perpSeg2 > limit ) ) \t\treturn [];\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tif ( ( perpSeg1 > 0 ) || ( perpSeg1 < limit ) ) \t\treturn [];\n\t\t\t\t\t\tperpSeg2 = seg2dy * seg1seg2dx - seg2dx * seg1seg2dy;\n\t\t\t\t\t\tif ( ( perpSeg2 > 0 ) || ( perpSeg2 < limit ) ) \t\treturn [];\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// i.e. to reduce rounding errors\n\t\t\t\t\t// intersection at endpoint of segment#1?\n\t\t\t\t\tif ( perpSeg2 === 0 ) {\n\n\t\t\t\t\t\tif ( ( inExcludeAdjacentSegs ) &&\n\t\t\t\t\t\t\t ( ( perpSeg1 === 0 ) || ( perpSeg1 === limit ) ) )\t\treturn [];\n\t\t\t\t\t\treturn [ inSeg1Pt1 ];\n\n\t\t\t\t\t}\n\t\t\t\t\tif ( perpSeg2 === limit ) {\n\n\t\t\t\t\t\tif ( ( inExcludeAdjacentSegs ) &&\n\t\t\t\t\t\t\t ( ( perpSeg1 === 0 ) || ( perpSeg1 === limit ) ) )\t\treturn [];\n\t\t\t\t\t\treturn [ inSeg1Pt2 ];\n\n\t\t\t\t\t}\n\t\t\t\t\t// intersection at endpoint of segment#2?\n\t\t\t\t\tif ( perpSeg1 === 0 )\t\treturn [ inSeg2Pt1 ];\n\t\t\t\t\tif ( perpSeg1 === limit )\treturn [ inSeg2Pt2 ];\n\n\t\t\t\t\t// return real intersection point\n\t\t\t\t\tvar factorSeg1 = perpSeg2 / limit;\n\t\t\t\t\treturn\t[ { x: inSeg1Pt1.x + factorSeg1 * seg1dx, y: inSeg1Pt1.y + factorSeg1 * seg1dy } ];\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// parallel or collinear\n\t\t\t\t\tif ( ( perpSeg1 !== 0 ) ||\n\t\t\t\t\t\t ( seg2dy * seg1seg2dx !== seg2dx * seg1seg2dy ) ) \t\t\treturn [];\n\n\t\t\t\t\t// they are collinear or degenerate\n\t\t\t\t\tvar seg1Pt = ( ( seg1dx === 0 ) && ( seg1dy === 0 ) );\t// segment1 is just a point?\n\t\t\t\t\tvar seg2Pt = ( ( seg2dx === 0 ) && ( seg2dy === 0 ) );\t// segment2 is just a point?\n\t\t\t\t\t// both segments are points\n\t\t\t\t\tif ( seg1Pt && seg2Pt ) {\n\n\t\t\t\t\t\tif ( ( inSeg1Pt1.x !== inSeg2Pt1.x ) ||\n\t\t\t\t\t\t\t ( inSeg1Pt1.y !== inSeg2Pt1.y ) )\t\treturn [];\t// they are distinct points\n\t\t\t\t\t\treturn [ inSeg1Pt1 ];\t// they are the same point\n\n\t\t\t\t\t}\n\t\t\t\t\t// segment#1 is a single point\n\t\t\t\t\tif ( seg1Pt ) {\n\n\t\t\t\t\t\tif ( ! point_in_segment_2D_colin( inSeg2Pt1, inSeg2Pt2, inSeg1Pt1 ) )\t\treturn [];\t\t// but not in segment#2\n\t\t\t\t\t\treturn [ inSeg1Pt1 ];\n\n\t\t\t\t\t}\n\t\t\t\t\t// segment#2 is a single point\n\t\t\t\t\tif ( seg2Pt ) {\n\n\t\t\t\t\t\tif ( ! point_in_segment_2D_colin( inSeg1Pt1, inSeg1Pt2, inSeg2Pt1 ) )\t\treturn [];\t\t// but not in segment#1\n\t\t\t\t\t\treturn [ inSeg2Pt1 ];\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// they are collinear segments, which might overlap\n\t\t\t\t\tvar seg1min, seg1max, seg1minVal, seg1maxVal;\n\t\t\t\t\tvar seg2min, seg2max, seg2minVal, seg2maxVal;\n\t\t\t\t\tif ( seg1dx !== 0 ) {\n\n\t\t\t\t\t\t// the segments are NOT on a vertical line\n\t\t\t\t\t\tif ( inSeg1Pt1.x < inSeg1Pt2.x ) {\n\n\t\t\t\t\t\t\tseg1min = inSeg1Pt1; seg1minVal = inSeg1Pt1.x;\n\t\t\t\t\t\t\tseg1max = inSeg1Pt2; seg1maxVal = inSeg1Pt2.x;\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tseg1min = inSeg1Pt2; seg1minVal = inSeg1Pt2.x;\n\t\t\t\t\t\t\tseg1max = inSeg1Pt1; seg1maxVal = inSeg1Pt1.x;\n\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( inSeg2Pt1.x < inSeg2Pt2.x ) {\n\n\t\t\t\t\t\t\tseg2min = inSeg2Pt1; seg2minVal = inSeg2Pt1.x;\n\t\t\t\t\t\t\tseg2max = inSeg2Pt2; seg2maxVal = inSeg2Pt2.x;\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tseg2min = inSeg2Pt2; seg2minVal = inSeg2Pt2.x;\n\t\t\t\t\t\t\tseg2max = inSeg2Pt1; seg2maxVal = inSeg2Pt1.x;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// the segments are on a vertical line\n\t\t\t\t\t\tif ( inSeg1Pt1.y < inSeg1Pt2.y ) {\n\n\t\t\t\t\t\t\tseg1min = inSeg1Pt1; seg1minVal = inSeg1Pt1.y;\n\t\t\t\t\t\t\tseg1max = inSeg1Pt2; seg1maxVal = inSeg1Pt2.y;\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tseg1min = inSeg1Pt2; seg1minVal = inSeg1Pt2.y;\n\t\t\t\t\t\t\tseg1max = inSeg1Pt1; seg1maxVal = inSeg1Pt1.y;\n\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( inSeg2Pt1.y < inSeg2Pt2.y ) {\n\n\t\t\t\t\t\t\tseg2min = inSeg2Pt1; seg2minVal = inSeg2Pt1.y;\n\t\t\t\t\t\t\tseg2max = inSeg2Pt2; seg2maxVal = inSeg2Pt2.y;\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tseg2min = inSeg2Pt2; seg2minVal = inSeg2Pt2.y;\n\t\t\t\t\t\t\tseg2max = inSeg2Pt1; seg2maxVal = inSeg2Pt1.y;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\t\t\t\t\tif ( seg1minVal <= seg2minVal ) {\n\n\t\t\t\t\t\tif ( seg1maxVal < seg2minVal )\treturn [];\n\t\t\t\t\t\tif ( seg1maxVal === seg2minVal )\t{\n\n\t\t\t\t\t\t\tif ( inExcludeAdjacentSegs )\t\treturn [];\n\t\t\t\t\t\t\treturn [ seg2min ];\n\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( seg1maxVal <= seg2maxVal )\treturn [ seg2min, seg1max ];\n\t\t\t\t\t\treturn\t[ seg2min, seg2max ];\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tif ( seg1minVal > seg2maxVal )\treturn [];\n\t\t\t\t\t\tif ( seg1minVal === seg2maxVal )\t{\n\n\t\t\t\t\t\t\tif ( inExcludeAdjacentSegs )\t\treturn [];\n\t\t\t\t\t\t\treturn [ seg1min ];\n\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( seg1maxVal <= seg2maxVal )\treturn [ seg1min, seg1max ];\n\t\t\t\t\t\treturn\t[ seg1min, seg2max ];\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tfunction isPointInsideAngle( inVertex, inLegFromPt, inLegToPt, inOtherPt ) {\n\n\t\t\t\t// The order of legs is important\n\n\t\t\t\t// translation of all points, so that Vertex is at (0,0)\n\t\t\t\tvar legFromPtX\t= inLegFromPt.x - inVertex.x, legFromPtY = inLegFromPt.y - inVertex.y;\n\t\t\t\tvar legToPtX\t= inLegToPt.x\t- inVertex.x, legToPtY = inLegToPt.y\t- inVertex.y;\n\t\t\t\tvar otherPtX\t= inOtherPt.x\t- inVertex.x, otherPtY = inOtherPt.y\t- inVertex.y;\n\n\t\t\t\t// main angle >0: < 180 deg.; 0: 180 deg.; <0: > 180 deg.\n\t\t\t\tvar from2toAngle\t= legFromPtX * legToPtY - legFromPtY * legToPtX;\n\t\t\t\tvar from2otherAngle\t= legFromPtX * otherPtY - legFromPtY * otherPtX;\n\n\t\t\t\tif ( Math.abs( from2toAngle ) > Number.EPSILON ) {\n\n\t\t\t\t\t// angle != 180 deg.\n\n\t\t\t\t\tvar other2toAngle\t\t= otherPtX * legToPtY - otherPtY * legToPtX;\n\t\t\t\t\t// console.log( \"from2to: \" + from2toAngle + \", from2other: \" + from2otherAngle + \", other2to: \" + other2toAngle );\n\n\t\t\t\t\tif ( from2toAngle > 0 ) {\n\n\t\t\t\t\t\t// main angle < 180 deg.\n\t\t\t\t\t\treturn\t( ( from2otherAngle >= 0 ) && ( other2toAngle >= 0 ) );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// main angle > 180 deg.\n\t\t\t\t\t\treturn\t( ( from2otherAngle >= 0 ) || ( other2toAngle >= 0 ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// angle == 180 deg.\n\t\t\t\t\t// console.log( \"from2to: 180 deg., from2other: \" + from2otherAngle );\n\t\t\t\t\treturn\t( from2otherAngle > 0 );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\n\t\t\tfunction removeHoles( contour, holes ) {\n\n\t\t\t\tvar shape = contour.concat(); // work on this shape\n\t\t\t\tvar hole;\n\n\t\t\t\tfunction isCutLineInsideAngles( inShapeIdx, inHoleIdx ) {\n\n\t\t\t\t\t// Check if hole point lies within angle around shape point\n\t\t\t\t\tvar lastShapeIdx = shape.length - 1;\n\n\t\t\t\t\tvar prevShapeIdx = inShapeIdx - 1;\n\t\t\t\t\tif ( prevShapeIdx < 0 )\t\t\tprevShapeIdx = lastShapeIdx;\n\n\t\t\t\t\tvar nextShapeIdx = inShapeIdx + 1;\n\t\t\t\t\tif ( nextShapeIdx > lastShapeIdx )\tnextShapeIdx = 0;\n\n\t\t\t\t\tvar insideAngle = isPointInsideAngle( shape[ inShapeIdx ], shape[ prevShapeIdx ], shape[ nextShapeIdx ], hole[ inHoleIdx ] );\n\t\t\t\t\tif ( ! insideAngle ) {\n\n\t\t\t\t\t\t// console.log( \"Vertex (Shape): \" + inShapeIdx + \", Point: \" + hole[inHoleIdx].x + \"/\" + hole[inHoleIdx].y );\n\t\t\t\t\t\treturn\tfalse;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// Check if shape point lies within angle around hole point\n\t\t\t\t\tvar lastHoleIdx = hole.length - 1;\n\n\t\t\t\t\tvar prevHoleIdx = inHoleIdx - 1;\n\t\t\t\t\tif ( prevHoleIdx < 0 )\t\t\tprevHoleIdx = lastHoleIdx;\n\n\t\t\t\t\tvar nextHoleIdx = inHoleIdx + 1;\n\t\t\t\t\tif ( nextHoleIdx > lastHoleIdx )\tnextHoleIdx = 0;\n\n\t\t\t\t\tinsideAngle = isPointInsideAngle( hole[ inHoleIdx ], hole[ prevHoleIdx ], hole[ nextHoleIdx ], shape[ inShapeIdx ] );\n\t\t\t\t\tif ( ! insideAngle ) {\n\n\t\t\t\t\t\t// console.log( \"Vertex (Hole): \" + inHoleIdx + \", Point: \" + shape[inShapeIdx].x + \"/\" + shape[inShapeIdx].y );\n\t\t\t\t\t\treturn\tfalse;\n\n\t\t\t\t\t}\n\n\t\t\t\t\treturn\ttrue;\n\n\t\t\t\t}\n\n\t\t\t\tfunction intersectsShapeEdge( inShapePt, inHolePt ) {\n\n\t\t\t\t\t// checks for intersections with shape edges\n\t\t\t\t\tvar sIdx, nextIdx, intersection;\n\t\t\t\t\tfor ( sIdx = 0; sIdx < shape.length; sIdx ++ ) {\n\n\t\t\t\t\t\tnextIdx = sIdx + 1; nextIdx %= shape.length;\n\t\t\t\t\t\tintersection = intersect_segments_2D( inShapePt, inHolePt, shape[ sIdx ], shape[ nextIdx ], true );\n\t\t\t\t\t\tif ( intersection.length > 0 )\t\treturn\ttrue;\n\n\t\t\t\t\t}\n\n\t\t\t\t\treturn\tfalse;\n\n\t\t\t\t}\n\n\t\t\t\tvar indepHoles = [];\n\n\t\t\t\tfunction intersectsHoleEdge( inShapePt, inHolePt ) {\n\n\t\t\t\t\t// checks for intersections with hole edges\n\t\t\t\t\tvar ihIdx, chkHole,\n\t\t\t\t\t\thIdx, nextIdx, intersection;\n\t\t\t\t\tfor ( ihIdx = 0; ihIdx < indepHoles.length; ihIdx ++ ) {\n\n\t\t\t\t\t\tchkHole = holes[ indepHoles[ ihIdx ] ];\n\t\t\t\t\t\tfor ( hIdx = 0; hIdx < chkHole.length; hIdx ++ ) {\n\n\t\t\t\t\t\t\tnextIdx = hIdx + 1; nextIdx %= chkHole.length;\n\t\t\t\t\t\t\tintersection = intersect_segments_2D( inShapePt, inHolePt, chkHole[ hIdx ], chkHole[ nextIdx ], true );\n\t\t\t\t\t\t\tif ( intersection.length > 0 )\t\treturn\ttrue;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\t\t\t\t\treturn\tfalse;\n\n\t\t\t\t}\n\n\t\t\t\tvar holeIndex, shapeIndex,\n\t\t\t\t\tshapePt, holePt,\n\t\t\t\t\tholeIdx, cutKey, failedCuts = [],\n\t\t\t\t\ttmpShape1, tmpShape2,\n\t\t\t\t\ttmpHole1, tmpHole2;\n\n\t\t\t\tfor ( var h = 0, hl = holes.length; h < hl; h ++ ) {\n\n\t\t\t\t\tindepHoles.push( h );\n\n\t\t\t\t}\n\n\t\t\t\tvar minShapeIndex = 0;\n\t\t\t\tvar counter = indepHoles.length * 2;\n\t\t\t\twhile ( indepHoles.length > 0 ) {\n\n\t\t\t\t\tcounter --;\n\t\t\t\t\tif ( counter < 0 ) {\n\n\t\t\t\t\t\tconsole.log( 'THREE.ShapeUtils: Infinite Loop! Holes left:\" + indepHoles.length + \", Probably Hole outside Shape!' );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// search for shape-vertex and hole-vertex,\n\t\t\t\t\t// which can be connected without intersections\n\t\t\t\t\tfor ( shapeIndex = minShapeIndex; shapeIndex < shape.length; shapeIndex ++ ) {\n\n\t\t\t\t\t\tshapePt = shape[ shapeIndex ];\n\t\t\t\t\t\tholeIndex\t= - 1;\n\n\t\t\t\t\t\t// search for hole which can be reached without intersections\n\t\t\t\t\t\tfor ( var h = 0; h < indepHoles.length; h ++ ) {\n\n\t\t\t\t\t\t\tholeIdx = indepHoles[ h ];\n\n\t\t\t\t\t\t\t// prevent multiple checks\n\t\t\t\t\t\t\tcutKey = shapePt.x + ':' + shapePt.y + ':' + holeIdx;\n\t\t\t\t\t\t\tif ( failedCuts[ cutKey ] !== undefined )\t\t\tcontinue;\n\n\t\t\t\t\t\t\thole = holes[ holeIdx ];\n\t\t\t\t\t\t\tfor ( var h2 = 0; h2 < hole.length; h2 ++ ) {\n\n\t\t\t\t\t\t\t\tholePt = hole[ h2 ];\n\t\t\t\t\t\t\t\tif ( ! isCutLineInsideAngles( shapeIndex, h2 ) )\t\tcontinue;\n\t\t\t\t\t\t\t\tif ( intersectsShapeEdge( shapePt, holePt ) )\t\tcontinue;\n\t\t\t\t\t\t\t\tif ( intersectsHoleEdge( shapePt, holePt ) )\t\tcontinue;\n\n\t\t\t\t\t\t\t\tholeIndex = h2;\n\t\t\t\t\t\t\t\tindepHoles.splice( h, 1 );\n\n\t\t\t\t\t\t\t\ttmpShape1 = shape.slice( 0, shapeIndex + 1 );\n\t\t\t\t\t\t\t\ttmpShape2 = shape.slice( shapeIndex );\n\t\t\t\t\t\t\t\ttmpHole1 = hole.slice( holeIndex );\n\t\t\t\t\t\t\t\ttmpHole2 = hole.slice( 0, holeIndex + 1 );\n\n\t\t\t\t\t\t\t\tshape = tmpShape1.concat( tmpHole1 ).concat( tmpHole2 ).concat( tmpShape2 );\n\n\t\t\t\t\t\t\t\tminShapeIndex = shapeIndex;\n\n\t\t\t\t\t\t\t\t// Debug only, to show the selected cuts\n\t\t\t\t\t\t\t\t// glob_CutLines.push( [ shapePt, holePt ] );\n\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif ( holeIndex >= 0 )\tbreak;\t\t// hole-vertex found\n\n\t\t\t\t\t\t\tfailedCuts[ cutKey ] = true;\t\t\t// remember failure\n\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( holeIndex >= 0 )\tbreak;\t\t// hole-vertex found\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\treturn shape; \t\t\t/* shape with no holes */\n\n\t\t\t}\n\n\n\t\t\tvar i, il, f, face,\n\t\t\t\tkey, index,\n\t\t\t\tallPointsMap = {};\n\n\t\t\t// To maintain reference to old shape, one must match coordinates, or offset the indices from original arrays. It's probably easier to do the first.\n\n\t\t\tvar allpoints = contour.concat();\n\n\t\t\tfor ( var h = 0, hl = holes.length; h < hl; h ++ ) {\n\n\t\t\t\tArray.prototype.push.apply( allpoints, holes[ h ] );\n\n\t\t\t}\n\n\t\t\t//console.log( \"allpoints\",allpoints, allpoints.length );\n\n\t\t\t// prepare all points map\n\n\t\t\tfor ( i = 0, il = allpoints.length; i < il; i ++ ) {\n\n\t\t\t\tkey = allpoints[ i ].x + ':' + allpoints[ i ].y;\n\n\t\t\t\tif ( allPointsMap[ key ] !== undefined ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.ShapeUtils: Duplicate point', key, i );\n\n\t\t\t\t}\n\n\t\t\t\tallPointsMap[ key ] = i;\n\n\t\t\t}\n\n\t\t\t// remove holes by cutting paths to holes and adding them to the shape\n\t\t\tvar shapeWithoutHoles = removeHoles( contour, holes );\n\n\t\t\tvar triangles = ShapeUtils.triangulate( shapeWithoutHoles, false ); // True returns indices for points of spooled shape\n\t\t\t//console.log( \"triangles\",triangles, triangles.length );\n\n\t\t\t// check all face vertices against all points map\n\n\t\t\tfor ( i = 0, il = triangles.length; i < il; i ++ ) {\n\n\t\t\t\tface = triangles[ i ];\n\n\t\t\t\tfor ( f = 0; f < 3; f ++ ) {\n\n\t\t\t\t\tkey = face[ f ].x + ':' + face[ f ].y;\n\n\t\t\t\t\tindex = allPointsMap[ key ];\n\n\t\t\t\t\tif ( index !== undefined ) {\n\n\t\t\t\t\t\tface[ f ] = index;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn triangles.concat();\n\n\t\t},\n\n\t\tisClockWise: function ( pts ) {\n\n\t\t\treturn ShapeUtils.area( pts ) < 0;\n\n\t\t}\n\n\t};\n\n\t/**\n\t * @author zz85 / http://www.lab4games.net/zz85/blog\n\t *\n\t * Creates extruded geometry from a path shape.\n\t *\n\t * parameters = {\n\t *\n\t * curveSegments: , // number of points on the curves\n\t * steps: , // number of points for z-side extrusions / used for subdividing segments of extrude spline too\n\t * amount: , // Depth to extrude the shape\n\t *\n\t * bevelEnabled: , // turn on bevel\n\t * bevelThickness: , // how deep into the original shape bevel goes\n\t * bevelSize: , // how far from shape outline is bevel\n\t * bevelSegments: , // number of bevel layers\n\t *\n\t * extrudePath: // curve to extrude shape along\n\t * frames: // containing arrays of tangents, normals, binormals\n\t *\n\t * UVGenerator: // object that provides UV generator functions\n\t *\n\t * }\n\t */\n\n\t// ExtrudeGeometry\n\n\tfunction ExtrudeGeometry( shapes, options ) {\n\n\t\tGeometry.call( this );\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\tthis.fromBufferGeometry( new ExtrudeBufferGeometry( shapes, options ) );\n\t\tthis.mergeVertices();\n\n\t}\n\n\tExtrudeGeometry.prototype = Object.create( Geometry.prototype );\n\tExtrudeGeometry.prototype.constructor = ExtrudeGeometry;\n\n\t// ExtrudeBufferGeometry\n\n\tfunction ExtrudeBufferGeometry( shapes, options ) {\n\n\t\tif ( typeof ( shapes ) === \"undefined\" ) {\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tBufferGeometry.call( this );\n\n\t\tthis.type = 'ExtrudeBufferGeometry';\n\n\t\tshapes = Array.isArray( shapes ) ? shapes : [ shapes ];\n\n\t\tthis.addShapeList( shapes, options );\n\n\t\tthis.computeVertexNormals();\n\n\t\t// can't really use automatic vertex normals\n\t\t// as then front and back sides get smoothed too\n\t\t// should do separate smoothing just for sides\n\n\t\t//this.computeVertexNormals();\n\n\t\t//console.log( \"took\", ( Date.now() - startTime ) );\n\n\t}\n\n\tExtrudeBufferGeometry.prototype = Object.create( BufferGeometry.prototype );\n\tExtrudeBufferGeometry.prototype.constructor = ExtrudeBufferGeometry;\n\n\tExtrudeBufferGeometry.prototype.getArrays = function () {\n\n\t\tvar positionAttribute = this.getAttribute( \"position\" );\n\t\tvar verticesArray = positionAttribute ? Array.prototype.slice.call( positionAttribute.array ) : [];\n\n\t\tvar uvAttribute = this.getAttribute( \"uv\" );\n\t\tvar uvArray = uvAttribute ? Array.prototype.slice.call( uvAttribute.array ) : [];\n\n\t\tvar IndexAttribute = this.index;\n\t\tvar indicesArray = IndexAttribute ? Array.prototype.slice.call( IndexAttribute.array ) : [];\n\n\t\treturn {\n\t\t\tposition: verticesArray,\n\t\t\tuv: uvArray,\n\t\t\tindex: indicesArray\n\t\t};\n\n\t};\n\n\tExtrudeBufferGeometry.prototype.addShapeList = function ( shapes, options ) {\n\n\t\tvar sl = shapes.length;\n\t\toptions.arrays = this.getArrays();\n\n\t\tfor ( var s = 0; s < sl; s ++ ) {\n\n\t\t\tvar shape = shapes[ s ];\n\t\t\tthis.addShape( shape, options );\n\n\t\t}\n\n\t\tthis.setIndex( options.arrays.index );\n\t\tthis.addAttribute( 'position', new Float32BufferAttribute( options.arrays.position, 3 ) );\n\t\tthis.addAttribute( 'uv', new Float32BufferAttribute( options.arrays.uv, 2 ) );\n\n\t};\n\n\tExtrudeBufferGeometry.prototype.addShape = function ( shape, options ) {\n\n\t\tvar arrays = options.arrays ? options.arrays : this.getArrays();\n\t\tvar verticesArray = arrays.position;\n\t\tvar indicesArray = arrays.index;\n\t\tvar uvArray = arrays.uv;\n\n\t\tvar placeholder = [];\n\n\n\t\tvar amount = options.amount !== undefined ? options.amount : 100;\n\n\t\tvar bevelThickness = options.bevelThickness !== undefined ? options.bevelThickness : 6; // 10\n\t\tvar bevelSize = options.bevelSize !== undefined ? options.bevelSize : bevelThickness - 2; // 8\n\t\tvar bevelSegments = options.bevelSegments !== undefined ? options.bevelSegments : 3;\n\n\t\tvar bevelEnabled = options.bevelEnabled !== undefined ? options.bevelEnabled : true; // false\n\n\t\tvar curveSegments = options.curveSegments !== undefined ? options.curveSegments : 12;\n\n\t\tvar steps = options.steps !== undefined ? options.steps : 1;\n\n\t\tvar extrudePath = options.extrudePath;\n\t\tvar extrudePts, extrudeByPath = false;\n\n\t\t// Use default WorldUVGenerator if no UV generators are specified.\n\t\tvar uvgen = options.UVGenerator !== undefined ? options.UVGenerator : ExtrudeGeometry.WorldUVGenerator;\n\n\t\tvar splineTube, binormal, normal, position2;\n\t\tif ( extrudePath ) {\n\n\t\t\textrudePts = extrudePath.getSpacedPoints( steps );\n\n\t\t\textrudeByPath = true;\n\t\t\tbevelEnabled = false; // bevels not supported for path extrusion\n\n\t\t\t// SETUP TNB variables\n\n\t\t\t// TODO1 - have a .isClosed in spline?\n\n\t\t\tsplineTube = options.frames !== undefined ? options.frames : extrudePath.computeFrenetFrames( steps, false );\n\n\t\t\t// console.log(splineTube, 'splineTube', splineTube.normals.length, 'steps', steps, 'extrudePts', extrudePts.length);\n\n\t\t\tbinormal = new Vector3();\n\t\t\tnormal = new Vector3();\n\t\t\tposition2 = new Vector3();\n\n\t\t}\n\n\t\t// Safeguards if bevels are not enabled\n\n\t\tif ( ! bevelEnabled ) {\n\n\t\t\tbevelSegments = 0;\n\t\t\tbevelThickness = 0;\n\t\t\tbevelSize = 0;\n\n\t\t}\n\n\t\t// Variables initialization\n\n\t\tvar ahole, h, hl; // looping of holes\n\t\tvar scope = this;\n\n\t\tvar shapePoints = shape.extractPoints( curveSegments );\n\n\t\tvar vertices = shapePoints.shape;\n\t\tvar holes = shapePoints.holes;\n\n\t\tvar reverse = ! ShapeUtils.isClockWise( vertices );\n\n\t\tif ( reverse ) {\n\n\t\t\tvertices = vertices.reverse();\n\n\t\t\t// Maybe we should also check if holes are in the opposite direction, just to be safe ...\n\n\t\t\tfor ( h = 0, hl = holes.length; h < hl; h ++ ) {\n\n\t\t\t\tahole = holes[ h ];\n\n\t\t\t\tif ( ShapeUtils.isClockWise( ahole ) ) {\n\n\t\t\t\t\tholes[ h ] = ahole.reverse();\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\n\t\tvar faces = ShapeUtils.triangulateShape( vertices, holes );\n\n\t\t/* Vertices */\n\n\t\tvar contour = vertices; // vertices has all points but contour has only points of circumference\n\n\t\tfor ( h = 0, hl = holes.length; h < hl; h ++ ) {\n\n\t\t\tahole = holes[ h ];\n\n\t\t\tvertices = vertices.concat( ahole );\n\n\t\t}\n\n\n\t\tfunction scalePt2( pt, vec, size ) {\n\n\t\t\tif ( ! vec ) console.error( \"THREE.ExtrudeGeometry: vec does not exist\" );\n\n\t\t\treturn vec.clone().multiplyScalar( size ).add( pt );\n\n\t\t}\n\n\t\tvar b, bs, t, z,\n\t\t\tvert, vlen = vertices.length,\n\t\t\tface, flen = faces.length;\n\n\n\t\t// Find directions for point movement\n\n\n\t\tfunction getBevelVec( inPt, inPrev, inNext ) {\n\n\t\t\t// computes for inPt the corresponding point inPt' on a new contour\n\t\t\t// shifted by 1 unit (length of normalized vector) to the left\n\t\t\t// if we walk along contour clockwise, this new contour is outside the old one\n\t\t\t//\n\t\t\t// inPt' is the intersection of the two lines parallel to the two\n\t\t\t// adjacent edges of inPt at a distance of 1 unit on the left side.\n\n\t\t\tvar v_trans_x, v_trans_y, shrink_by; // resulting translation vector for inPt\n\n\t\t\t// good reading for geometry algorithms (here: line-line intersection)\n\t\t\t// http://geomalgorithms.com/a05-_intersect-1.html\n\n\t\t\tvar v_prev_x = inPt.x - inPrev.x,\n\t\t\t\tv_prev_y = inPt.y - inPrev.y;\n\t\t\tvar v_next_x = inNext.x - inPt.x,\n\t\t\t\tv_next_y = inNext.y - inPt.y;\n\n\t\t\tvar v_prev_lensq = ( v_prev_x * v_prev_x + v_prev_y * v_prev_y );\n\n\t\t\t// check for collinear edges\n\t\t\tvar collinear0 = ( v_prev_x * v_next_y - v_prev_y * v_next_x );\n\n\t\t\tif ( Math.abs( collinear0 ) > Number.EPSILON ) {\n\n\t\t\t\t// not collinear\n\n\t\t\t\t// length of vectors for normalizing\n\n\t\t\t\tvar v_prev_len = Math.sqrt( v_prev_lensq );\n\t\t\t\tvar v_next_len = Math.sqrt( v_next_x * v_next_x + v_next_y * v_next_y );\n\n\t\t\t\t// shift adjacent points by unit vectors to the left\n\n\t\t\t\tvar ptPrevShift_x = ( inPrev.x - v_prev_y / v_prev_len );\n\t\t\t\tvar ptPrevShift_y = ( inPrev.y + v_prev_x / v_prev_len );\n\n\t\t\t\tvar ptNextShift_x = ( inNext.x - v_next_y / v_next_len );\n\t\t\t\tvar ptNextShift_y = ( inNext.y + v_next_x / v_next_len );\n\n\t\t\t\t// scaling factor for v_prev to intersection point\n\n\t\t\t\tvar sf = ( ( ptNextShift_x - ptPrevShift_x ) * v_next_y -\n\t\t\t\t\t\t( ptNextShift_y - ptPrevShift_y ) * v_next_x ) /\n\t\t\t\t\t( v_prev_x * v_next_y - v_prev_y * v_next_x );\n\n\t\t\t\t// vector from inPt to intersection point\n\n\t\t\t\tv_trans_x = ( ptPrevShift_x + v_prev_x * sf - inPt.x );\n\t\t\t\tv_trans_y = ( ptPrevShift_y + v_prev_y * sf - inPt.y );\n\n\t\t\t\t// Don't normalize!, otherwise sharp corners become ugly\n\t\t\t\t// but prevent crazy spikes\n\t\t\t\tvar v_trans_lensq = ( v_trans_x * v_trans_x + v_trans_y * v_trans_y );\n\t\t\t\tif ( v_trans_lensq <= 2 ) {\n\n\t\t\t\t\treturn new Vector2( v_trans_x, v_trans_y );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tshrink_by = Math.sqrt( v_trans_lensq / 2 );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// handle special case of collinear edges\n\n\t\t\t\tvar direction_eq = false; // assumes: opposite\n\t\t\t\tif ( v_prev_x > Number.EPSILON ) {\n\n\t\t\t\t\tif ( v_next_x > Number.EPSILON ) {\n\n\t\t\t\t\t\tdirection_eq = true;\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( v_prev_x < - Number.EPSILON ) {\n\n\t\t\t\t\t\tif ( v_next_x < - Number.EPSILON ) {\n\n\t\t\t\t\t\t\tdirection_eq = true;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tif ( Math.sign( v_prev_y ) === Math.sign( v_next_y ) ) {\n\n\t\t\t\t\t\t\tdirection_eq = true;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( direction_eq ) {\n\n\t\t\t\t\t// console.log(\"Warning: lines are a straight sequence\");\n\t\t\t\t\tv_trans_x = - v_prev_y;\n\t\t\t\t\tv_trans_y = v_prev_x;\n\t\t\t\t\tshrink_by = Math.sqrt( v_prev_lensq );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// console.log(\"Warning: lines are a straight spike\");\n\t\t\t\t\tv_trans_x = v_prev_x;\n\t\t\t\t\tv_trans_y = v_prev_y;\n\t\t\t\t\tshrink_by = Math.sqrt( v_prev_lensq / 2 );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn new Vector2( v_trans_x / shrink_by, v_trans_y / shrink_by );\n\n\t\t}\n\n\n\t\tvar contourMovements = [];\n\n\t\tfor ( var i = 0, il = contour.length, j = il - 1, k = i + 1; i < il; i ++, j ++, k ++ ) {\n\n\t\t\tif ( j === il ) j = 0;\n\t\t\tif ( k === il ) k = 0;\n\n\t\t\t// (j)---(i)---(k)\n\t\t\t// console.log('i,j,k', i, j , k)\n\n\t\t\tcontourMovements[ i ] = getBevelVec( contour[ i ], contour[ j ], contour[ k ] );\n\n\t\t}\n\n\t\tvar holesMovements = [],\n\t\t\toneHoleMovements, verticesMovements = contourMovements.concat();\n\n\t\tfor ( h = 0, hl = holes.length; h < hl; h ++ ) {\n\n\t\t\tahole = holes[ h ];\n\n\t\t\toneHoleMovements = [];\n\n\t\t\tfor ( i = 0, il = ahole.length, j = il - 1, k = i + 1; i < il; i ++, j ++, k ++ ) {\n\n\t\t\t\tif ( j === il ) j = 0;\n\t\t\t\tif ( k === il ) k = 0;\n\n\t\t\t\t// (j)---(i)---(k)\n\t\t\t\toneHoleMovements[ i ] = getBevelVec( ahole[ i ], ahole[ j ], ahole[ k ] );\n\n\t\t\t}\n\n\t\t\tholesMovements.push( oneHoleMovements );\n\t\t\tverticesMovements = verticesMovements.concat( oneHoleMovements );\n\n\t\t}\n\n\n\t\t// Loop bevelSegments, 1 for the front, 1 for the back\n\n\t\tfor ( b = 0; b < bevelSegments; b ++ ) {\n\n\t\t\t//for ( b = bevelSegments; b > 0; b -- ) {\n\n\t\t\tt = b / bevelSegments;\n\t\t\tz = bevelThickness * Math.cos( t * Math.PI / 2 );\n\t\t\tbs = bevelSize * Math.sin( t * Math.PI / 2 );\n\n\t\t\t// contract shape\n\n\t\t\tfor ( i = 0, il = contour.length; i < il; i ++ ) {\n\n\t\t\t\tvert = scalePt2( contour[ i ], contourMovements[ i ], bs );\n\n\t\t\t\tv( vert.x, vert.y, - z );\n\n\t\t\t}\n\n\t\t\t// expand holes\n\n\t\t\tfor ( h = 0, hl = holes.length; h < hl; h ++ ) {\n\n\t\t\t\tahole = holes[ h ];\n\t\t\t\toneHoleMovements = holesMovements[ h ];\n\n\t\t\t\tfor ( i = 0, il = ahole.length; i < il; i ++ ) {\n\n\t\t\t\t\tvert = scalePt2( ahole[ i ], oneHoleMovements[ i ], bs );\n\n\t\t\t\t\tv( vert.x, vert.y, - z );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tbs = bevelSize;\n\n\t\t// Back facing vertices\n\n\t\tfor ( i = 0; i < vlen; i ++ ) {\n\n\t\t\tvert = bevelEnabled ? scalePt2( vertices[ i ], verticesMovements[ i ], bs ) : vertices[ i ];\n\n\t\t\tif ( ! extrudeByPath ) {\n\n\t\t\t\tv( vert.x, vert.y, 0 );\n\n\t\t\t} else {\n\n\t\t\t\t// v( vert.x, vert.y + extrudePts[ 0 ].y, extrudePts[ 0 ].x );\n\n\t\t\t\tnormal.copy( splineTube.normals[ 0 ] ).multiplyScalar( vert.x );\n\t\t\t\tbinormal.copy( splineTube.binormals[ 0 ] ).multiplyScalar( vert.y );\n\n\t\t\t\tposition2.copy( extrudePts[ 0 ] ).add( normal ).add( binormal );\n\n\t\t\t\tv( position2.x, position2.y, position2.z );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Add stepped vertices...\n\t\t// Including front facing vertices\n\n\t\tvar s;\n\n\t\tfor ( s = 1; s <= steps; s ++ ) {\n\n\t\t\tfor ( i = 0; i < vlen; i ++ ) {\n\n\t\t\t\tvert = bevelEnabled ? scalePt2( vertices[ i ], verticesMovements[ i ], bs ) : vertices[ i ];\n\n\t\t\t\tif ( ! extrudeByPath ) {\n\n\t\t\t\t\tv( vert.x, vert.y, amount / steps * s );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// v( vert.x, vert.y + extrudePts[ s - 1 ].y, extrudePts[ s - 1 ].x );\n\n\t\t\t\t\tnormal.copy( splineTube.normals[ s ] ).multiplyScalar( vert.x );\n\t\t\t\t\tbinormal.copy( splineTube.binormals[ s ] ).multiplyScalar( vert.y );\n\n\t\t\t\t\tposition2.copy( extrudePts[ s ] ).add( normal ).add( binormal );\n\n\t\t\t\t\tv( position2.x, position2.y, position2.z );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\n\t\t// Add bevel segments planes\n\n\t\t//for ( b = 1; b <= bevelSegments; b ++ ) {\n\t\tfor ( b = bevelSegments - 1; b >= 0; b -- ) {\n\n\t\t\tt = b / bevelSegments;\n\t\t\tz = bevelThickness * Math.cos( t * Math.PI / 2 );\n\t\t\tbs = bevelSize * Math.sin( t * Math.PI / 2 );\n\n\t\t\t// contract shape\n\n\t\t\tfor ( i = 0, il = contour.length; i < il; i ++ ) {\n\n\t\t\t\tvert = scalePt2( contour[ i ], contourMovements[ i ], bs );\n\t\t\t\tv( vert.x, vert.y, amount + z );\n\n\t\t\t}\n\n\t\t\t// expand holes\n\n\t\t\tfor ( h = 0, hl = holes.length; h < hl; h ++ ) {\n\n\t\t\t\tahole = holes[ h ];\n\t\t\t\toneHoleMovements = holesMovements[ h ];\n\n\t\t\t\tfor ( i = 0, il = ahole.length; i < il; i ++ ) {\n\n\t\t\t\t\tvert = scalePt2( ahole[ i ], oneHoleMovements[ i ], bs );\n\n\t\t\t\t\tif ( ! extrudeByPath ) {\n\n\t\t\t\t\t\tv( vert.x, vert.y, amount + z );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tv( vert.x, vert.y + extrudePts[ steps - 1 ].y, extrudePts[ steps - 1 ].x + z );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t/* Faces */\n\n\t\t// Top and bottom faces\n\n\t\tbuildLidFaces();\n\n\t\t// Sides faces\n\n\t\tbuildSideFaces();\n\n\n\t\t///// Internal functions\n\n\t\tfunction buildLidFaces() {\n\n\t\t\tvar start = verticesArray.length / 3;\n\n\t\t\tif ( bevelEnabled ) {\n\n\t\t\t\tvar layer = 0; // steps + 1\n\t\t\t\tvar offset = vlen * layer;\n\n\t\t\t\t// Bottom faces\n\n\t\t\t\tfor ( i = 0; i < flen; i ++ ) {\n\n\t\t\t\t\tface = faces[ i ];\n\t\t\t\t\tf3( face[ 2 ] + offset, face[ 1 ] + offset, face[ 0 ] + offset );\n\n\t\t\t\t}\n\n\t\t\t\tlayer = steps + bevelSegments * 2;\n\t\t\t\toffset = vlen * layer;\n\n\t\t\t\t// Top faces\n\n\t\t\t\tfor ( i = 0; i < flen; i ++ ) {\n\n\t\t\t\t\tface = faces[ i ];\n\t\t\t\t\tf3( face[ 0 ] + offset, face[ 1 ] + offset, face[ 2 ] + offset );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// Bottom faces\n\n\t\t\t\tfor ( i = 0; i < flen; i ++ ) {\n\n\t\t\t\t\tface = faces[ i ];\n\t\t\t\t\tf3( face[ 2 ], face[ 1 ], face[ 0 ] );\n\n\t\t\t\t}\n\n\t\t\t\t// Top faces\n\n\t\t\t\tfor ( i = 0; i < flen; i ++ ) {\n\n\t\t\t\t\tface = faces[ i ];\n\t\t\t\t\tf3( face[ 0 ] + vlen * steps, face[ 1 ] + vlen * steps, face[ 2 ] + vlen * steps );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tscope.addGroup( start, verticesArray.length / 3 - start, options.material !== undefined ? options.material : 0 );\n\n\t\t}\n\n\t\t// Create faces for the z-sides of the shape\n\n\t\tfunction buildSideFaces() {\n\n\t\t\tvar start = verticesArray.length / 3;\n\t\t\tvar layeroffset = 0;\n\t\t\tsidewalls( contour, layeroffset );\n\t\t\tlayeroffset += contour.length;\n\n\t\t\tfor ( h = 0, hl = holes.length; h < hl; h ++ ) {\n\n\t\t\t\tahole = holes[ h ];\n\t\t\t\tsidewalls( ahole, layeroffset );\n\n\t\t\t\t//, true\n\t\t\t\tlayeroffset += ahole.length;\n\n\t\t\t}\n\n\n\t\t\tscope.addGroup( start, verticesArray.length / 3 - start, options.extrudeMaterial !== undefined ? options.extrudeMaterial : 1 );\n\n\n\t\t}\n\n\t\tfunction sidewalls( contour, layeroffset ) {\n\n\t\t\tvar j, k;\n\t\t\ti = contour.length;\n\n\t\t\twhile ( -- i >= 0 ) {\n\n\t\t\t\tj = i;\n\t\t\t\tk = i - 1;\n\t\t\t\tif ( k < 0 ) k = contour.length - 1;\n\n\t\t\t\t//console.log('b', i,j, i-1, k,vertices.length);\n\n\t\t\t\tvar s = 0,\n\t\t\t\t\tsl = steps + bevelSegments * 2;\n\n\t\t\t\tfor ( s = 0; s < sl; s ++ ) {\n\n\t\t\t\t\tvar slen1 = vlen * s;\n\t\t\t\t\tvar slen2 = vlen * ( s + 1 );\n\n\t\t\t\t\tvar a = layeroffset + j + slen1,\n\t\t\t\t\t\tb = layeroffset + k + slen1,\n\t\t\t\t\t\tc = layeroffset + k + slen2,\n\t\t\t\t\t\td = layeroffset + j + slen2;\n\n\t\t\t\t\tf4( a, b, c, d );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction v( x, y, z ) {\n\n\t\t\tplaceholder.push( x );\n\t\t\tplaceholder.push( y );\n\t\t\tplaceholder.push( z );\n\n\t\t}\n\n\n\t\tfunction f3( a, b, c ) {\n\n\t\t\taddVertex( a );\n\t\t\taddVertex( b );\n\t\t\taddVertex( c );\n\n\t\t\tvar nextIndex = verticesArray.length / 3;\n\t\t\tvar uvs = uvgen.generateTopUV( scope, verticesArray, nextIndex - 3, nextIndex - 2, nextIndex - 1 );\n\n\t\t\taddUV( uvs[ 0 ] );\n\t\t\taddUV( uvs[ 1 ] );\n\t\t\taddUV( uvs[ 2 ] );\n\n\t\t}\n\n\t\tfunction f4( a, b, c, d ) {\n\n\t\t\taddVertex( a );\n\t\t\taddVertex( b );\n\t\t\taddVertex( d );\n\n\t\t\taddVertex( b );\n\t\t\taddVertex( c );\n\t\t\taddVertex( d );\n\n\n\t\t\tvar nextIndex = verticesArray.length / 3;\n\t\t\tvar uvs = uvgen.generateSideWallUV( scope, verticesArray, nextIndex - 6, nextIndex - 3, nextIndex - 2, nextIndex - 1 );\n\n\t\t\taddUV( uvs[ 0 ] );\n\t\t\taddUV( uvs[ 1 ] );\n\t\t\taddUV( uvs[ 3 ] );\n\n\t\t\taddUV( uvs[ 1 ] );\n\t\t\taddUV( uvs[ 2 ] );\n\t\t\taddUV( uvs[ 3 ] );\n\n\t\t}\n\n\t\tfunction addVertex( index ) {\n\n\t\t\tindicesArray.push( verticesArray.length / 3 );\n\t\t\tverticesArray.push( placeholder[ index * 3 + 0 ] );\n\t\t\tverticesArray.push( placeholder[ index * 3 + 1 ] );\n\t\t\tverticesArray.push( placeholder[ index * 3 + 2 ] );\n\n\t\t}\n\n\n\t\tfunction addUV( vector2 ) {\n\n\t\t\tuvArray.push( vector2.x );\n\t\t\tuvArray.push( vector2.y );\n\n\t\t}\n\n\t\tif ( ! options.arrays ) {\n\n\t\t\tthis.setIndex( indicesArray );\n\t\t\tthis.addAttribute( 'position', new Float32BufferAttribute( verticesArray, 3 ) );\n\t\t\tthis.addAttribute( 'uv', new Float32BufferAttribute( options.arrays.uv, 2 ) );\n\n\t\t}\n\n\t};\n\n\tExtrudeGeometry.WorldUVGenerator = {\n\n\t\tgenerateTopUV: function ( geometry, vertices, indexA, indexB, indexC ) {\n\n\t\t\tvar a_x = vertices[ indexA * 3 ];\n\t\t\tvar a_y = vertices[ indexA * 3 + 1 ];\n\t\t\tvar b_x = vertices[ indexB * 3 ];\n\t\t\tvar b_y = vertices[ indexB * 3 + 1 ];\n\t\t\tvar c_x = vertices[ indexC * 3 ];\n\t\t\tvar c_y = vertices[ indexC * 3 + 1 ];\n\n\t\t\treturn [\n\t\t\t\tnew Vector2( a_x, a_y ),\n\t\t\t\tnew Vector2( b_x, b_y ),\n\t\t\t\tnew Vector2( c_x, c_y )\n\t\t\t];\n\n\t\t},\n\n\t\tgenerateSideWallUV: function ( geometry, vertices, indexA, indexB, indexC, indexD ) {\n\n\t\t\tvar a_x = vertices[ indexA * 3 ];\n\t\t\tvar a_y = vertices[ indexA * 3 + 1 ];\n\t\t\tvar a_z = vertices[ indexA * 3 + 2 ];\n\t\t\tvar b_x = vertices[ indexB * 3 ];\n\t\t\tvar b_y = vertices[ indexB * 3 + 1 ];\n\t\t\tvar b_z = vertices[ indexB * 3 + 2 ];\n\t\t\tvar c_x = vertices[ indexC * 3 ];\n\t\t\tvar c_y = vertices[ indexC * 3 + 1 ];\n\t\t\tvar c_z = vertices[ indexC * 3 + 2 ];\n\t\t\tvar d_x = vertices[ indexD * 3 ];\n\t\t\tvar d_y = vertices[ indexD * 3 + 1 ];\n\t\t\tvar d_z = vertices[ indexD * 3 + 2 ];\n\n\t\t\tif ( Math.abs( a_y - b_y ) < 0.01 ) {\n\n\t\t\t\treturn [\n\t\t\t\t\tnew Vector2( a_x, 1 - a_z ),\n\t\t\t\t\tnew Vector2( b_x, 1 - b_z ),\n\t\t\t\t\tnew Vector2( c_x, 1 - c_z ),\n\t\t\t\t\tnew Vector2( d_x, 1 - d_z )\n\t\t\t\t];\n\n\t\t\t} else {\n\n\t\t\t\treturn [\n\t\t\t\t\tnew Vector2( a_y, 1 - a_z ),\n\t\t\t\t\tnew Vector2( b_y, 1 - b_z ),\n\t\t\t\t\tnew Vector2( c_y, 1 - c_z ),\n\t\t\t\t\tnew Vector2( d_y, 1 - d_z )\n\t\t\t\t];\n\n\t\t\t}\n\n\t\t}\n\t};\n\n\t/**\n\t * @author zz85 / http://www.lab4games.net/zz85/blog\n\t * @author alteredq / http://alteredqualia.com/\n\t *\n\t * Text = 3D Text\n\t *\n\t * parameters = {\n\t * font: , // font\n\t *\n\t * size: , // size of the text\n\t * height: , // thickness to extrude text\n\t * curveSegments: , // number of points on the curves\n\t *\n\t * bevelEnabled: , // turn on bevel\n\t * bevelThickness: , // how deep into text bevel goes\n\t * bevelSize: // how far from text outline is bevel\n\t * }\n\t */\n\n\t// TextGeometry\n\n\tfunction TextGeometry( text, parameters ) {\n\n\t\tGeometry.call( this );\n\n\t\tthis.type = 'TextGeometry';\n\n\t\tthis.parameters = {\n\t\t\ttext: text,\n\t\t\tparameters: parameters\n\t\t};\n\n\t\tthis.fromBufferGeometry( new TextBufferGeometry( text, parameters ) );\n\t\tthis.mergeVertices();\n\n\t}\n\n\tTextGeometry.prototype = Object.create( Geometry.prototype );\n\tTextGeometry.prototype.constructor = TextGeometry;\n\n\t// TextBufferGeometry\n\n\tfunction TextBufferGeometry( text, parameters ) {\n\n\t\tparameters = parameters || {};\n\n\t\tvar 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 Geometry();\n\n\t\t}\n\n\t\tvar shapes = font.generateShapes( text, parameters.size, parameters.curveSegments );\n\n\t\t// translate parameters to ExtrudeGeometry API\n\n\t\tparameters.amount = 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\tExtrudeBufferGeometry.call( this, shapes, parameters );\n\n\t\tthis.type = 'TextBufferGeometry';\n\n\t}\n\n\tTextBufferGeometry.prototype = Object.create( ExtrudeBufferGeometry.prototype );\n\tTextBufferGeometry.prototype.constructor = TextBufferGeometry;\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t * @author benaadams / https://twitter.com/ben_a_adams\n\t * @author Mugen87 / https://github.com/Mugen87\n\t */\n\n\t// SphereGeometry\n\n\tfunction SphereGeometry( radius, widthSegments, heightSegments, phiStart, phiLength, thetaStart, thetaLength ) {\n\n\t\tGeometry.call( this );\n\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\tthis.fromBufferGeometry( new SphereBufferGeometry( radius, widthSegments, heightSegments, phiStart, phiLength, thetaStart, thetaLength ) );\n\t\tthis.mergeVertices();\n\n\t}\n\n\tSphereGeometry.prototype = Object.create( Geometry.prototype );\n\tSphereGeometry.prototype.constructor = SphereGeometry;\n\n\t// SphereBufferGeometry\n\n\tfunction SphereBufferGeometry( radius, widthSegments, heightSegments, phiStart, phiLength, thetaStart, thetaLength ) {\n\n\t\tBufferGeometry.call( this );\n\n\t\tthis.type = 'SphereBufferGeometry';\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\tradius = radius || 1;\n\n\t\twidthSegments = Math.max( 3, Math.floor( widthSegments ) || 8 );\n\t\theightSegments = Math.max( 2, Math.floor( heightSegments ) || 6 );\n\n\t\tphiStart = phiStart !== undefined ? phiStart : 0;\n\t\tphiLength = phiLength !== undefined ? phiLength : Math.PI * 2;\n\n\t\tthetaStart = thetaStart !== undefined ? thetaStart : 0;\n\t\tthetaLength = thetaLength !== undefined ? thetaLength : Math.PI;\n\n\t\tvar thetaEnd = thetaStart + thetaLength;\n\n\t\tvar ix, iy;\n\n\t\tvar index = 0;\n\t\tvar grid = [];\n\n\t\tvar vertex = new Vector3();\n\t\tvar normal = new Vector3();\n\n\t\t// buffers\n\n\t\tvar indices = [];\n\t\tvar vertices = [];\n\t\tvar normals = [];\n\t\tvar uvs = [];\n\n\t\t// generate vertices, normals and uvs\n\n\t\tfor ( iy = 0; iy <= heightSegments; iy ++ ) {\n\n\t\t\tvar verticesRow = [];\n\n\t\t\tvar v = iy / heightSegments;\n\n\t\t\tfor ( ix = 0; ix <= widthSegments; ix ++ ) {\n\n\t\t\t\tvar 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.set( vertex.x, vertex.y, vertex.z ).normalize();\n\t\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\n\t\t\t\t// uv\n\n\t\t\t\tuvs.push( u, 1 - v );\n\n\t\t\t\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 ( iy = 0; iy < heightSegments; iy ++ ) {\n\n\t\t\tfor ( ix = 0; ix < widthSegments; ix ++ ) {\n\n\t\t\t\tvar a = grid[ iy ][ ix + 1 ];\n\t\t\t\tvar b = grid[ iy ][ ix ];\n\t\t\t\tvar c = grid[ iy + 1 ][ ix ];\n\t\t\t\tvar 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.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.addAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.addAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t}\n\n\tSphereBufferGeometry.prototype = Object.create( BufferGeometry.prototype );\n\tSphereBufferGeometry.prototype.constructor = SphereBufferGeometry;\n\n\t/**\n\t * @author Kaleb Murphy\n\t * @author Mugen87 / https://github.com/Mugen87\n\t */\n\n\t// RingGeometry\n\n\tfunction RingGeometry( innerRadius, outerRadius, thetaSegments, phiSegments, thetaStart, thetaLength ) {\n\n\t\tGeometry.call( this );\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\tthis.fromBufferGeometry( new RingBufferGeometry( innerRadius, outerRadius, thetaSegments, phiSegments, thetaStart, thetaLength ) );\n\t\tthis.mergeVertices();\n\n\t}\n\n\tRingGeometry.prototype = Object.create( Geometry.prototype );\n\tRingGeometry.prototype.constructor = RingGeometry;\n\n\t// RingBufferGeometry\n\n\tfunction RingBufferGeometry( innerRadius, outerRadius, thetaSegments, phiSegments, thetaStart, thetaLength ) {\n\n\t\tBufferGeometry.call( this );\n\n\t\tthis.type = 'RingBufferGeometry';\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\tinnerRadius = innerRadius || 0.5;\n\t\touterRadius = outerRadius || 1;\n\n\t\tthetaStart = thetaStart !== undefined ? thetaStart : 0;\n\t\tthetaLength = thetaLength !== undefined ? thetaLength : Math.PI * 2;\n\n\t\tthetaSegments = thetaSegments !== undefined ? Math.max( 3, thetaSegments ) : 8;\n\t\tphiSegments = phiSegments !== undefined ? Math.max( 1, phiSegments ) : 1;\n\n\t\t// buffers\n\n\t\tvar indices = [];\n\t\tvar vertices = [];\n\t\tvar normals = [];\n\t\tvar uvs = [];\n\n\t\t// some helper variables\n\n\t\tvar segment;\n\t\tvar radius = innerRadius;\n\t\tvar radiusStep = ( ( outerRadius - innerRadius ) / phiSegments );\n\t\tvar vertex = new Vector3();\n\t\tvar uv = new Vector2();\n\t\tvar j, i;\n\n\t\t// generate vertices, normals and uvs\n\n\t\tfor ( j = 0; j <= phiSegments; j ++ ) {\n\n\t\t\tfor ( 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\tsegment = 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 ( j = 0; j < phiSegments; j ++ ) {\n\n\t\t\tvar thetaSegmentLevel = j * ( thetaSegments + 1 );\n\n\t\t\tfor ( i = 0; i < thetaSegments; i ++ ) {\n\n\t\t\t\tsegment = i + thetaSegmentLevel;\n\n\t\t\t\tvar a = segment;\n\t\t\t\tvar b = segment + thetaSegments + 1;\n\t\t\t\tvar c = segment + thetaSegments + 2;\n\t\t\t\tvar 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.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.addAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.addAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t}\n\n\tRingBufferGeometry.prototype = Object.create( BufferGeometry.prototype );\n\tRingBufferGeometry.prototype.constructor = RingBufferGeometry;\n\n\t/**\n\t * @author astrodud / http://astrodud.isgreat.org/\n\t * @author zz85 / https://github.com/zz85\n\t * @author bhouston / http://clara.io\n\t * @author Mugen87 / https://github.com/Mugen87\n\t */\n\n\t// LatheGeometry\n\n\tfunction LatheGeometry( points, segments, phiStart, phiLength ) {\n\n\t\tGeometry.call( this );\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\tthis.fromBufferGeometry( new LatheBufferGeometry( points, segments, phiStart, phiLength ) );\n\t\tthis.mergeVertices();\n\n\t}\n\n\tLatheGeometry.prototype = Object.create( Geometry.prototype );\n\tLatheGeometry.prototype.constructor = LatheGeometry;\n\n\t// LatheBufferGeometry\n\n\tfunction LatheBufferGeometry( points, segments, phiStart, phiLength ) {\n\n\t\tBufferGeometry.call( this );\n\n\t\tthis.type = 'LatheBufferGeometry';\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 ) || 12;\n\t\tphiStart = phiStart || 0;\n\t\tphiLength = phiLength || Math.PI * 2;\n\n\t\t// clamp phiLength so it's in range of [ 0, 2PI ]\n\n\t\tphiLength = _Math.clamp( phiLength, 0, Math.PI * 2 );\n\n\n\t\t// buffers\n\n\t\tvar indices = [];\n\t\tvar vertices = [];\n\t\tvar uvs = [];\n\n\t\t// helper variables\n\n\t\tvar base;\n\t\tvar inverseSegments = 1.0 / segments;\n\t\tvar vertex = new Vector3();\n\t\tvar uv = new Vector2();\n\t\tvar i, j;\n\n\t\t// generate vertices and uvs\n\n\t\tfor ( i = 0; i <= segments; i ++ ) {\n\n\t\t\tvar phi = phiStart + i * inverseSegments * phiLength;\n\n\t\t\tvar sin = Math.sin( phi );\n\t\t\tvar cos = Math.cos( phi );\n\n\t\t\tfor ( 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 ( i = 0; i < segments; i ++ ) {\n\n\t\t\tfor ( j = 0; j < ( points.length - 1 ); j ++ ) {\n\n\t\t\t\tbase = j + i * points.length;\n\n\t\t\t\tvar a = base;\n\t\t\t\tvar b = base + points.length;\n\t\t\t\tvar c = base + points.length + 1;\n\t\t\t\tvar 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.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.addAttribute( '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\tvar normals = this.attributes.normal.array;\n\t\t\tvar n1 = new Vector3();\n\t\t\tvar n2 = new Vector3();\n\t\t\tvar n = new Vector3();\n\n\t\t\t// this is the buffer offset for the last line of vertices\n\n\t\t\tbase = segments * points.length * 3;\n\n\t\t\tfor ( 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\tLatheBufferGeometry.prototype = Object.create( BufferGeometry.prototype );\n\tLatheBufferGeometry.prototype.constructor = LatheBufferGeometry;\n\n\t/**\n\t * @author jonobr1 / http://jonobr1.com\n\t * @author Mugen87 / https://github.com/Mugen87\n\t */\n\n\t// ShapeGeometry\n\n\tfunction ShapeGeometry( shapes, curveSegments ) {\n\n\t\tGeometry.call( this );\n\n\t\tthis.type = 'ShapeGeometry';\n\n\t\tif ( typeof curveSegments === 'object' ) {\n\n\t\t\tconsole.warn( 'THREE.ShapeGeometry: Options parameter has been removed.' );\n\n\t\t\tcurveSegments = curveSegments.curveSegments;\n\n\t\t}\n\n\t\tthis.parameters = {\n\t\t\tshapes: shapes,\n\t\t\tcurveSegments: curveSegments\n\t\t};\n\n\t\tthis.fromBufferGeometry( new ShapeBufferGeometry( shapes, curveSegments ) );\n\t\tthis.mergeVertices();\n\n\t}\n\n\tShapeGeometry.prototype = Object.create( Geometry.prototype );\n\tShapeGeometry.prototype.constructor = ShapeGeometry;\n\n\t// ShapeBufferGeometry\n\n\tfunction ShapeBufferGeometry( shapes, curveSegments ) {\n\n\t\tBufferGeometry.call( this );\n\n\t\tthis.type = 'ShapeBufferGeometry';\n\n\t\tthis.parameters = {\n\t\t\tshapes: shapes,\n\t\t\tcurveSegments: curveSegments\n\t\t};\n\n\t\tcurveSegments = curveSegments || 12;\n\n\t\t// buffers\n\n\t\tvar indices = [];\n\t\tvar vertices = [];\n\t\tvar normals = [];\n\t\tvar uvs = [];\n\n\t\t// helper variables\n\n\t\tvar groupStart = 0;\n\t\tvar 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 ( var 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.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.addAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.addAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\n\t\t// helper functions\n\n\t\tfunction addShape( shape ) {\n\n\t\t\tvar i, l, shapeHole;\n\n\t\t\tvar indexOffset = vertices.length / 3;\n\t\t\tvar points = shape.extractPoints( curveSegments );\n\n\t\t\tvar shapeVertices = points.shape;\n\t\t\tvar 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\t// also check if holes are in the opposite direction\n\n\t\t\t\tfor ( i = 0, l = shapeHoles.length; i < l; i ++ ) {\n\n\t\t\t\t\tshapeHole = shapeHoles[ i ];\n\n\t\t\t\t\tif ( ShapeUtils.isClockWise( shapeHole ) === true ) {\n\n\t\t\t\t\t\tshapeHoles[ i ] = shapeHole.reverse();\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tvar 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 ( i = 0, l = shapeHoles.length; i < l; i ++ ) {\n\n\t\t\t\tshapeHole = 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 ( i = 0, l = shapeVertices.length; i < l; i ++ ) {\n\n\t\t\t\tvar 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 ( i = 0, l = faces.length; i < l; i ++ ) {\n\n\t\t\t\tvar face = faces[ i ];\n\n\t\t\t\tvar a = face[ 0 ] + indexOffset;\n\t\t\t\tvar b = face[ 1 ] + indexOffset;\n\t\t\t\tvar 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\tShapeBufferGeometry.prototype = Object.create( BufferGeometry.prototype );\n\tShapeBufferGeometry.prototype.constructor = ShapeBufferGeometry;\n\n\t/**\n\t * @author WestLangley / http://github.com/WestLangley\n\t * @author Mugen87 / https://github.com/Mugen87\n\t */\n\n\tfunction EdgesGeometry( geometry, thresholdAngle ) {\n\n\t\tBufferGeometry.call( this );\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\t// buffer\n\n\t\tvar vertices = [];\n\n\t\t// helper variables\n\n\t\tvar thresholdDot = Math.cos( _Math.DEG2RAD * thresholdAngle );\n\t\tvar edge = [ 0, 0 ], edges = {}, edge1, edge2;\n\t\tvar key, keys = [ 'a', 'b', 'c' ];\n\n\t\t// prepare source geometry\n\n\t\tvar geometry2;\n\n\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\tgeometry2 = new Geometry();\n\t\t\tgeometry2.fromBufferGeometry( geometry );\n\n\t\t} else {\n\n\t\t\tgeometry2 = geometry.clone();\n\n\t\t}\n\n\t\tgeometry2.mergeVertices();\n\t\tgeometry2.computeFaceNormals();\n\n\t\tvar sourceVertices = geometry2.vertices;\n\t\tvar faces = geometry2.faces;\n\n\t\t// now create a data structure where each entry represents an edge with its adjoining faces\n\n\t\tfor ( var i = 0, l = faces.length; i < l; i ++ ) {\n\n\t\t\tvar face = faces[ i ];\n\n\t\t\tfor ( var j = 0; j < 3; j ++ ) {\n\n\t\t\t\tedge1 = face[ keys[ j ] ];\n\t\t\t\tedge2 = face[ keys[ ( j + 1 ) % 3 ] ];\n\t\t\t\tedge[ 0 ] = Math.min( edge1, edge2 );\n\t\t\t\tedge[ 1 ] = Math.max( edge1, edge2 );\n\n\t\t\t\tkey = edge[ 0 ] + ',' + edge[ 1 ];\n\n\t\t\t\tif ( edges[ key ] === undefined ) {\n\n\t\t\t\t\tedges[ key ] = { index1: edge[ 0 ], index2: edge[ 1 ], face1: i, face2: undefined };\n\n\t\t\t\t} else {\n\n\t\t\t\t\tedges[ key ].face2 = i;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// generate vertices\n\n\t\tfor ( key in edges ) {\n\n\t\t\tvar e = edges[ key ];\n\n\t\t\t// an edge is only rendered if the angle (in degrees) between the face normals of the adjoining faces exceeds this value. default = 1 degree.\n\n\t\t\tif ( e.face2 === undefined || faces[ e.face1 ].normal.dot( faces[ e.face2 ].normal ) <= thresholdDot ) {\n\n\t\t\t\tvar vertex = sourceVertices[ e.index1 ];\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\tvertex = sourceVertices[ e.index2 ];\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\n\t}\n\n\tEdgesGeometry.prototype = Object.create( BufferGeometry.prototype );\n\tEdgesGeometry.prototype.constructor = EdgesGeometry;\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t * @author Mugen87 / https://github.com/Mugen87\n\t */\n\n\t// CylinderGeometry\n\n\tfunction CylinderGeometry( radiusTop, radiusBottom, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength ) {\n\n\t\tGeometry.call( this );\n\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\tthis.fromBufferGeometry( new CylinderBufferGeometry( radiusTop, radiusBottom, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength ) );\n\t\tthis.mergeVertices();\n\n\t}\n\n\tCylinderGeometry.prototype = Object.create( Geometry.prototype );\n\tCylinderGeometry.prototype.constructor = CylinderGeometry;\n\n\t// CylinderBufferGeometry\n\n\tfunction CylinderBufferGeometry( radiusTop, radiusBottom, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength ) {\n\n\t\tBufferGeometry.call( this );\n\n\t\tthis.type = 'CylinderBufferGeometry';\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\tvar scope = this;\n\n\t\tradiusTop = radiusTop !== undefined ? radiusTop : 1;\n\t\tradiusBottom = radiusBottom !== undefined ? radiusBottom : 1;\n\t\theight = height || 1;\n\n\t\tradialSegments = Math.floor( radialSegments ) || 8;\n\t\theightSegments = Math.floor( heightSegments ) || 1;\n\n\t\topenEnded = openEnded !== undefined ? openEnded : false;\n\t\tthetaStart = thetaStart !== undefined ? thetaStart : 0.0;\n\t\tthetaLength = thetaLength !== undefined ? thetaLength : Math.PI * 2;\n\n\t\t// buffers\n\n\t\tvar indices = [];\n\t\tvar vertices = [];\n\t\tvar normals = [];\n\t\tvar uvs = [];\n\n\t\t// helper variables\n\n\t\tvar index = 0;\n\t\tvar indexArray = [];\n\t\tvar halfHeight = height / 2;\n\t\tvar 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.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.addAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.addAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t\tfunction generateTorso() {\n\n\t\t\tvar x, y;\n\t\t\tvar normal = new Vector3();\n\t\t\tvar vertex = new Vector3();\n\n\t\t\tvar groupCount = 0;\n\n\t\t\t// this will be used to calculate the normal\n\t\t\tvar slope = ( radiusBottom - radiusTop ) / height;\n\n\t\t\t// generate vertices, normals and uvs\n\n\t\t\tfor ( y = 0; y <= heightSegments; y ++ ) {\n\n\t\t\t\tvar indexRow = [];\n\n\t\t\t\tvar v = y / heightSegments;\n\n\t\t\t\t// calculate the radius of the current row\n\n\t\t\t\tvar radius = v * ( radiusBottom - radiusTop ) + radiusTop;\n\n\t\t\t\tfor ( x = 0; x <= radialSegments; x ++ ) {\n\n\t\t\t\t\tvar u = x / radialSegments;\n\n\t\t\t\t\tvar theta = u * thetaLength + thetaStart;\n\n\t\t\t\t\tvar sinTheta = Math.sin( theta );\n\t\t\t\t\tvar 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 ( x = 0; x < radialSegments; x ++ ) {\n\n\t\t\t\tfor ( 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\tvar a = indexArray[ y ][ x ];\n\t\t\t\t\tvar b = indexArray[ y + 1 ][ x ];\n\t\t\t\t\tvar c = indexArray[ y + 1 ][ x + 1 ];\n\t\t\t\t\tvar 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\tvar x, centerIndexStart, centerIndexEnd;\n\n\t\t\tvar uv = new Vector2();\n\t\t\tvar vertex = new Vector3();\n\n\t\t\tvar groupCount = 0;\n\n\t\t\tvar radius = ( top === true ) ? radiusTop : radiusBottom;\n\t\t\tvar sign = ( top === true ) ? 1 : - 1;\n\n\t\t\t// save the index of the first center vertex\n\t\t\tcenterIndexStart = index;\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 ( 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\n\t\t\tcenterIndexEnd = index;\n\n\t\t\t// now we generate the surrounding vertices, normals and uvs\n\n\t\t\tfor ( x = 0; x <= radialSegments; x ++ ) {\n\n\t\t\t\tvar u = x / radialSegments;\n\t\t\t\tvar theta = u * thetaLength + thetaStart;\n\n\t\t\t\tvar cosTheta = Math.cos( theta );\n\t\t\t\tvar 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 ( x = 0; x < radialSegments; x ++ ) {\n\n\t\t\t\tvar c = centerIndexStart + x;\n\t\t\t\tvar 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\tCylinderBufferGeometry.prototype = Object.create( BufferGeometry.prototype );\n\tCylinderBufferGeometry.prototype.constructor = CylinderBufferGeometry;\n\n\t/**\n\t * @author abelnation / http://github.com/abelnation\n\t */\n\n\t// ConeGeometry\n\n\tfunction ConeGeometry( radius, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength ) {\n\n\t\tCylinderGeometry.call( this, 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\tConeGeometry.prototype = Object.create( CylinderGeometry.prototype );\n\tConeGeometry.prototype.constructor = ConeGeometry;\n\n\t// ConeBufferGeometry\n\n\tfunction ConeBufferGeometry( radius, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength ) {\n\n\t\tCylinderBufferGeometry.call( this, 0, radius, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength );\n\n\t\tthis.type = 'ConeBufferGeometry';\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\tConeBufferGeometry.prototype = Object.create( CylinderBufferGeometry.prototype );\n\tConeBufferGeometry.prototype.constructor = ConeBufferGeometry;\n\n\t/**\n\t * @author benaadams / https://twitter.com/ben_a_adams\n\t * @author Mugen87 / https://github.com/Mugen87\n\t * @author hughes\n\t */\n\n\t// CircleGeometry\n\n\tfunction CircleGeometry( radius, segments, thetaStart, thetaLength ) {\n\n\t\tGeometry.call( this );\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\tthis.fromBufferGeometry( new CircleBufferGeometry( radius, segments, thetaStart, thetaLength ) );\n\t\tthis.mergeVertices();\n\n\t}\n\n\tCircleGeometry.prototype = Object.create( Geometry.prototype );\n\tCircleGeometry.prototype.constructor = CircleGeometry;\n\n\t// CircleBufferGeometry\n\n\tfunction CircleBufferGeometry( radius, segments, thetaStart, thetaLength ) {\n\n\t\tBufferGeometry.call( this );\n\n\t\tthis.type = 'CircleBufferGeometry';\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\tradius = radius || 1;\n\t\tsegments = segments !== undefined ? Math.max( 3, segments ) : 8;\n\n\t\tthetaStart = thetaStart !== undefined ? thetaStart : 0;\n\t\tthetaLength = thetaLength !== undefined ? thetaLength : Math.PI * 2;\n\n\t\t// buffers\n\n\t\tvar indices = [];\n\t\tvar vertices = [];\n\t\tvar normals = [];\n\t\tvar uvs = [];\n\n\t\t// helper variables\n\n\t\tvar i, s;\n\t\tvar vertex = new Vector3();\n\t\tvar 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 ( s = 0, i = 3; s <= segments; s ++, i += 3 ) {\n\n\t\t\tvar 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 ( 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.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.addAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.addAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t}\n\n\tCircleBufferGeometry.prototype = Object.create( BufferGeometry.prototype );\n\tCircleBufferGeometry.prototype.constructor = CircleBufferGeometry;\n\n\n\n\tvar Geometries = Object.freeze({\n\t\tWireframeGeometry: WireframeGeometry,\n\t\tParametricGeometry: ParametricGeometry,\n\t\tParametricBufferGeometry: ParametricBufferGeometry,\n\t\tTetrahedronGeometry: TetrahedronGeometry,\n\t\tTetrahedronBufferGeometry: TetrahedronBufferGeometry,\n\t\tOctahedronGeometry: OctahedronGeometry,\n\t\tOctahedronBufferGeometry: OctahedronBufferGeometry,\n\t\tIcosahedronGeometry: IcosahedronGeometry,\n\t\tIcosahedronBufferGeometry: IcosahedronBufferGeometry,\n\t\tDodecahedronGeometry: DodecahedronGeometry,\n\t\tDodecahedronBufferGeometry: DodecahedronBufferGeometry,\n\t\tPolyhedronGeometry: PolyhedronGeometry,\n\t\tPolyhedronBufferGeometry: PolyhedronBufferGeometry,\n\t\tTubeGeometry: TubeGeometry,\n\t\tTubeBufferGeometry: TubeBufferGeometry,\n\t\tTorusKnotGeometry: TorusKnotGeometry,\n\t\tTorusKnotBufferGeometry: TorusKnotBufferGeometry,\n\t\tTorusGeometry: TorusGeometry,\n\t\tTorusBufferGeometry: TorusBufferGeometry,\n\t\tTextGeometry: TextGeometry,\n\t\tTextBufferGeometry: TextBufferGeometry,\n\t\tSphereGeometry: SphereGeometry,\n\t\tSphereBufferGeometry: SphereBufferGeometry,\n\t\tRingGeometry: RingGeometry,\n\t\tRingBufferGeometry: RingBufferGeometry,\n\t\tPlaneGeometry: PlaneGeometry,\n\t\tPlaneBufferGeometry: PlaneBufferGeometry,\n\t\tLatheGeometry: LatheGeometry,\n\t\tLatheBufferGeometry: LatheBufferGeometry,\n\t\tShapeGeometry: ShapeGeometry,\n\t\tShapeBufferGeometry: ShapeBufferGeometry,\n\t\tExtrudeGeometry: ExtrudeGeometry,\n\t\tExtrudeBufferGeometry: ExtrudeBufferGeometry,\n\t\tEdgesGeometry: EdgesGeometry,\n\t\tConeGeometry: ConeGeometry,\n\t\tConeBufferGeometry: ConeBufferGeometry,\n\t\tCylinderGeometry: CylinderGeometry,\n\t\tCylinderBufferGeometry: CylinderBufferGeometry,\n\t\tCircleGeometry: CircleGeometry,\n\t\tCircleBufferGeometry: CircleBufferGeometry,\n\t\tBoxGeometry: BoxGeometry,\n\t\tBoxBufferGeometry: BoxBufferGeometry\n\t});\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t *\n\t * parameters = {\n\t * color: ,\n\t * opacity: \n\t * }\n\t */\n\n\tfunction ShadowMaterial( parameters ) {\n\n\t\tMaterial.call( this );\n\n\t\tthis.type = 'ShadowMaterial';\n\n\t\tthis.color = new Color( 0x000000 );\n\t\tthis.opacity = 1.0;\n\n\t\tthis.lights = true;\n\t\tthis.transparent = true;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tShadowMaterial.prototype = Object.create( Material.prototype );\n\tShadowMaterial.prototype.constructor = ShadowMaterial;\n\n\tShadowMaterial.prototype.isShadowMaterial = true;\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t */\n\n\tfunction RawShaderMaterial( parameters ) {\n\n\t\tShaderMaterial.call( this, parameters );\n\n\t\tthis.type = 'RawShaderMaterial';\n\n\t}\n\n\tRawShaderMaterial.prototype = Object.create( ShaderMaterial.prototype );\n\tRawShaderMaterial.prototype.constructor = RawShaderMaterial;\n\n\tRawShaderMaterial.prototype.isRawShaderMaterial = true;\n\n\t/**\n\t * @author WestLangley / http://github.com/WestLangley\n\t *\n\t * parameters = {\n\t * color: ,\n\t * roughness: ,\n\t * metalness: ,\n\t * opacity: ,\n\t *\n\t * map: new THREE.Texture( ),\n\t *\n\t * lightMap: new THREE.Texture( ),\n\t * lightMapIntensity: \n\t *\n\t * aoMap: new THREE.Texture( ),\n\t * aoMapIntensity: \n\t *\n\t * emissive: ,\n\t * emissiveIntensity: \n\t * emissiveMap: new THREE.Texture( ),\n\t *\n\t * bumpMap: new THREE.Texture( ),\n\t * bumpScale: ,\n\t *\n\t * normalMap: new THREE.Texture( ),\n\t * normalScale: ,\n\t *\n\t * displacementMap: new THREE.Texture( ),\n\t * displacementScale: ,\n\t * displacementBias: ,\n\t *\n\t * roughnessMap: new THREE.Texture( ),\n\t *\n\t * metalnessMap: new THREE.Texture( ),\n\t *\n\t * alphaMap: new THREE.Texture( ),\n\t *\n\t * envMap: new THREE.CubeTexture( [posx, negx, posy, negy, posz, negz] ),\n\t * envMapIntensity: \n\t *\n\t * refractionRatio: ,\n\t *\n\t * wireframe: ,\n\t * wireframeLinewidth: ,\n\t *\n\t * skinning: ,\n\t * morphTargets: ,\n\t * morphNormals: \n\t * }\n\t */\n\n\tfunction MeshStandardMaterial( parameters ) {\n\n\t\tMaterial.call( this );\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 = 0.5;\n\t\tthis.metalness = 0.5;\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.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.setValues( parameters );\n\n\t}\n\n\tMeshStandardMaterial.prototype = Object.create( Material.prototype );\n\tMeshStandardMaterial.prototype.constructor = MeshStandardMaterial;\n\n\tMeshStandardMaterial.prototype.isMeshStandardMaterial = true;\n\n\tMeshStandardMaterial.prototype.copy = function ( source ) {\n\n\t\tMaterial.prototype.copy.call( this, 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.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\treturn this;\n\n\t};\n\n\t/**\n\t * @author WestLangley / http://github.com/WestLangley\n\t *\n\t * parameters = {\n\t * reflectivity: \n\t * }\n\t */\n\n\tfunction MeshPhysicalMaterial( parameters ) {\n\n\t\tMeshStandardMaterial.call( this );\n\n\t\tthis.defines = { 'PHYSICAL': '' };\n\n\t\tthis.type = 'MeshPhysicalMaterial';\n\n\t\tthis.reflectivity = 0.5; // maps to F0 = 0.04\n\n\t\tthis.clearCoat = 0.0;\n\t\tthis.clearCoatRoughness = 0.0;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tMeshPhysicalMaterial.prototype = Object.create( MeshStandardMaterial.prototype );\n\tMeshPhysicalMaterial.prototype.constructor = MeshPhysicalMaterial;\n\n\tMeshPhysicalMaterial.prototype.isMeshPhysicalMaterial = true;\n\n\tMeshPhysicalMaterial.prototype.copy = function ( source ) {\n\n\t\tMeshStandardMaterial.prototype.copy.call( this, source );\n\n\t\tthis.defines = { 'PHYSICAL': '' };\n\n\t\tthis.reflectivity = source.reflectivity;\n\n\t\tthis.clearCoat = source.clearCoat;\n\t\tthis.clearCoatRoughness = source.clearCoatRoughness;\n\n\t\treturn this;\n\n\t};\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t * @author alteredq / http://alteredqualia.com/\n\t *\n\t * parameters = {\n\t * color: ,\n\t * specular: ,\n\t * shininess: ,\n\t * opacity: ,\n\t *\n\t * map: new THREE.Texture( ),\n\t *\n\t * lightMap: new THREE.Texture( ),\n\t * lightMapIntensity: \n\t *\n\t * aoMap: new THREE.Texture( ),\n\t * aoMapIntensity: \n\t *\n\t * emissive: ,\n\t * emissiveIntensity: \n\t * emissiveMap: new THREE.Texture( ),\n\t *\n\t * bumpMap: new THREE.Texture( ),\n\t * bumpScale: ,\n\t *\n\t * normalMap: new THREE.Texture( ),\n\t * normalScale: ,\n\t *\n\t * displacementMap: new THREE.Texture( ),\n\t * displacementScale: ,\n\t * displacementBias: ,\n\t *\n\t * specularMap: new THREE.Texture( ),\n\t *\n\t * alphaMap: new THREE.Texture( ),\n\t *\n\t * envMap: new THREE.TextureCube( [posx, negx, posy, negy, posz, negz] ),\n\t * combine: THREE.Multiply,\n\t * reflectivity: ,\n\t * refractionRatio: ,\n\t *\n\t * wireframe: ,\n\t * wireframeLinewidth: ,\n\t *\n\t * skinning: ,\n\t * morphTargets: ,\n\t * morphNormals: \n\t * }\n\t */\n\n\tfunction MeshPhongMaterial( parameters ) {\n\n\t\tMaterial.call( this );\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.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.setValues( parameters );\n\n\t}\n\n\tMeshPhongMaterial.prototype = Object.create( Material.prototype );\n\tMeshPhongMaterial.prototype.constructor = MeshPhongMaterial;\n\n\tMeshPhongMaterial.prototype.isMeshPhongMaterial = true;\n\n\tMeshPhongMaterial.prototype.copy = function ( source ) {\n\n\t\tMaterial.prototype.copy.call( this, 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.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\treturn this;\n\n\t};\n\n\t/**\n\t * @author takahirox / http://github.com/takahirox\n\t *\n\t * parameters = {\n\t * gradientMap: new THREE.Texture( )\n\t * }\n\t */\n\n\tfunction MeshToonMaterial( parameters ) {\n\n\t\tMeshPhongMaterial.call( this );\n\n\t\tthis.defines = { 'TOON': '' };\n\n\t\tthis.type = 'MeshToonMaterial';\n\n\t\tthis.gradientMap = null;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tMeshToonMaterial.prototype = Object.create( MeshPhongMaterial.prototype );\n\tMeshToonMaterial.prototype.constructor = MeshToonMaterial;\n\n\tMeshToonMaterial.prototype.isMeshToonMaterial = true;\n\n\tMeshToonMaterial.prototype.copy = function ( source ) {\n\n\t\tMeshPhongMaterial.prototype.copy.call( this, source );\n\n\t\tthis.gradientMap = source.gradientMap;\n\n\t\treturn this;\n\n\t};\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t * @author WestLangley / http://github.com/WestLangley\n\t *\n\t * parameters = {\n\t * opacity: ,\n\t *\n\t * bumpMap: new THREE.Texture( ),\n\t * bumpScale: ,\n\t *\n\t * normalMap: new THREE.Texture( ),\n\t * normalScale: ,\n\t *\n\t * displacementMap: new THREE.Texture( ),\n\t * displacementScale: ,\n\t * displacementBias: ,\n\t *\n\t * wireframe: ,\n\t * wireframeLinewidth: \n\t *\n\t * skinning: ,\n\t * morphTargets: ,\n\t * morphNormals: \n\t * }\n\t */\n\n\tfunction MeshNormalMaterial( parameters ) {\n\n\t\tMaterial.call( this );\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.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\t\tthis.lights = false;\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\tMeshNormalMaterial.prototype = Object.create( Material.prototype );\n\tMeshNormalMaterial.prototype.constructor = MeshNormalMaterial;\n\n\tMeshNormalMaterial.prototype.isMeshNormalMaterial = true;\n\n\tMeshNormalMaterial.prototype.copy = function ( source ) {\n\n\t\tMaterial.prototype.copy.call( this, source );\n\n\t\tthis.bumpMap = source.bumpMap;\n\t\tthis.bumpScale = source.bumpScale;\n\n\t\tthis.normalMap = source.normalMap;\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\treturn this;\n\n\t};\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t * @author alteredq / http://alteredqualia.com/\n\t *\n\t * parameters = {\n\t * color: ,\n\t * opacity: ,\n\t *\n\t * map: new THREE.Texture( ),\n\t *\n\t * lightMap: new THREE.Texture( ),\n\t * lightMapIntensity: \n\t *\n\t * aoMap: new THREE.Texture( ),\n\t * aoMapIntensity: \n\t *\n\t * emissive: ,\n\t * emissiveIntensity: \n\t * emissiveMap: new THREE.Texture( ),\n\t *\n\t * specularMap: new THREE.Texture( ),\n\t *\n\t * alphaMap: new THREE.Texture( ),\n\t *\n\t * envMap: new THREE.TextureCube( [posx, negx, posy, negy, posz, negz] ),\n\t * combine: THREE.Multiply,\n\t * reflectivity: ,\n\t * refractionRatio: ,\n\t *\n\t * wireframe: ,\n\t * wireframeLinewidth: ,\n\t *\n\t * skinning: ,\n\t * morphTargets: ,\n\t * morphNormals: \n\t * }\n\t */\n\n\tfunction MeshLambertMaterial( parameters ) {\n\n\t\tMaterial.call( this );\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\tMeshLambertMaterial.prototype = Object.create( Material.prototype );\n\tMeshLambertMaterial.prototype.constructor = MeshLambertMaterial;\n\n\tMeshLambertMaterial.prototype.isMeshLambertMaterial = true;\n\n\tMeshLambertMaterial.prototype.copy = function ( source ) {\n\n\t\tMaterial.prototype.copy.call( this, 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\t/**\n\t * @author alteredq / http://alteredqualia.com/\n\t *\n\t * parameters = {\n\t * color: ,\n\t * opacity: ,\n\t *\n\t * linewidth: ,\n\t *\n\t * scale: ,\n\t * dashSize: ,\n\t * gapSize: \n\t * }\n\t */\n\n\tfunction LineDashedMaterial( parameters ) {\n\n\t\tLineBasicMaterial.call( this );\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\tLineDashedMaterial.prototype = Object.create( LineBasicMaterial.prototype );\n\tLineDashedMaterial.prototype.constructor = LineDashedMaterial;\n\n\tLineDashedMaterial.prototype.isLineDashedMaterial = true;\n\n\tLineDashedMaterial.prototype.copy = function ( source ) {\n\n\t\tLineBasicMaterial.prototype.copy.call( this, 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\n\tvar Materials = Object.freeze({\n\t\tShadowMaterial: ShadowMaterial,\n\t\tSpriteMaterial: SpriteMaterial,\n\t\tRawShaderMaterial: RawShaderMaterial,\n\t\tShaderMaterial: ShaderMaterial,\n\t\tPointsMaterial: PointsMaterial,\n\t\tMeshPhysicalMaterial: MeshPhysicalMaterial,\n\t\tMeshStandardMaterial: MeshStandardMaterial,\n\t\tMeshPhongMaterial: MeshPhongMaterial,\n\t\tMeshToonMaterial: MeshToonMaterial,\n\t\tMeshNormalMaterial: MeshNormalMaterial,\n\t\tMeshLambertMaterial: MeshLambertMaterial,\n\t\tMeshDepthMaterial: MeshDepthMaterial,\n\t\tMeshDistanceMaterial: MeshDistanceMaterial,\n\t\tMeshBasicMaterial: MeshBasicMaterial,\n\t\tLineDashedMaterial: LineDashedMaterial,\n\t\tLineBasicMaterial: LineBasicMaterial,\n\t\tMaterial: Material\n\t});\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t */\n\n\tvar Cache = {\n\n\t\tenabled: false,\n\n\t\tfiles: {},\n\n\t\tadd: function ( key, file ) {\n\n\t\t\tif ( this.enabled === false ) return;\n\n\t\t\t// console.log( 'THREE.Cache', 'Adding key:', key );\n\n\t\t\tthis.files[ key ] = file;\n\n\t\t},\n\n\t\tget: function ( key ) {\n\n\t\t\tif ( this.enabled === false ) return;\n\n\t\t\t// console.log( 'THREE.Cache', 'Checking key:', key );\n\n\t\t\treturn this.files[ key ];\n\n\t\t},\n\n\t\tremove: function ( key ) {\n\n\t\t\tdelete this.files[ key ];\n\n\t\t},\n\n\t\tclear: function () {\n\n\t\t\tthis.files = {};\n\n\t\t}\n\n\t};\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t */\n\n\tfunction LoadingManager( onLoad, onProgress, onError ) {\n\n\t\tvar scope = this;\n\n\t\tvar isLoading = false;\n\t\tvar itemsLoaded = 0;\n\t\tvar itemsTotal = 0;\n\t\tvar urlModifier = undefined;\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};\n\n\t}\n\n\tvar DefaultLoadingManager = new LoadingManager();\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t */\n\n\tvar loading = {};\n\n\tfunction FileLoader( manager ) {\n\n\t\tthis.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager;\n\n\t}\n\n\tObject.assign( FileLoader.prototype, {\n\n\t\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\t\tif ( url === undefined ) url = '';\n\n\t\t\tif ( this.path !== undefined ) url = this.path + url;\n\n\t\t\turl = this.manager.resolveURL( url );\n\n\t\t\tvar scope = this;\n\n\t\t\tvar cached = Cache.get( url );\n\n\t\t\tif ( cached !== undefined ) {\n\n\t\t\t\tscope.manager.itemStart( url );\n\n\t\t\t\tsetTimeout( function () {\n\n\t\t\t\t\tif ( onLoad ) onLoad( cached );\n\n\t\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t\t}, 0 );\n\n\t\t\t\treturn cached;\n\n\t\t\t}\n\n\t\t\t// Check if request is duplicate\n\n\t\t\tif ( loading[ url ] !== undefined ) {\n\n\t\t\t\tloading[ url ].push( {\n\n\t\t\t\t\tonLoad: onLoad,\n\t\t\t\t\tonProgress: onProgress,\n\t\t\t\t\tonError: onError\n\n\t\t\t\t} );\n\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\t// Check for data: URI\n\t\t\tvar dataUriRegex = /^data:(.*?)(;base64)?,(.*)$/;\n\t\t\tvar dataUriRegexResult = url.match( dataUriRegex );\n\n\t\t\t// Safari can not handle Data URIs through XMLHttpRequest so process manually\n\t\t\tif ( dataUriRegexResult ) {\n\n\t\t\t\tvar mimeType = dataUriRegexResult[ 1 ];\n\t\t\t\tvar isBase64 = !! dataUriRegexResult[ 2 ];\n\t\t\t\tvar data = dataUriRegexResult[ 3 ];\n\n\t\t\t\tdata = window.decodeURIComponent( data );\n\n\t\t\t\tif ( isBase64 ) data = window.atob( data );\n\n\t\t\t\ttry {\n\n\t\t\t\t\tvar response;\n\t\t\t\t\tvar responseType = ( this.responseType || '' ).toLowerCase();\n\n\t\t\t\t\tswitch ( responseType ) {\n\n\t\t\t\t\t\tcase 'arraybuffer':\n\t\t\t\t\t\tcase 'blob':\n\n\t\t\t\t\t\t\tvar view = new Uint8Array( data.length );\n\n\t\t\t\t\t\t\tfor ( var i = 0; i < data.length; i ++ ) {\n\n\t\t\t\t\t\t\t\tview[ i ] = data.charCodeAt( i );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif ( responseType === 'blob' ) {\n\n\t\t\t\t\t\t\t\tresponse = new Blob( [ view.buffer ], { type: mimeType } );\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tresponse = view.buffer;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'document':\n\n\t\t\t\t\t\t\tvar parser = new DOMParser();\n\t\t\t\t\t\t\tresponse = parser.parseFromString( data, mimeType );\n\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'json':\n\n\t\t\t\t\t\t\tresponse = JSON.parse( data );\n\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tdefault: // 'text' or other\n\n\t\t\t\t\t\t\tresponse = data;\n\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// Wait for next browser tick like standard XMLHttpRequest event dispatching does\n\t\t\t\t\twindow.setTimeout( function () {\n\n\t\t\t\t\t\tif ( onLoad ) onLoad( response );\n\n\t\t\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t\t\t}, 0 );\n\n\t\t\t\t} catch ( error ) {\n\n\t\t\t\t\t// Wait for next browser tick like standard XMLHttpRequest event dispatching does\n\t\t\t\t\twindow.setTimeout( function () {\n\n\t\t\t\t\t\tif ( onError ) onError( error );\n\n\t\t\t\t\t\tscope.manager.itemEnd( url );\n\t\t\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t\t\t}, 0 );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// Initialise array for duplicate requests\n\n\t\t\t\tloading[ url ] = [];\n\n\t\t\t\tloading[ url ].push( {\n\n\t\t\t\t\tonLoad: onLoad,\n\t\t\t\t\tonProgress: onProgress,\n\t\t\t\t\tonError: onError\n\n\t\t\t\t} );\n\n\t\t\t\tvar request = new XMLHttpRequest();\n\n\t\t\t\trequest.open( 'GET', url, true );\n\n\t\t\t\trequest.addEventListener( 'load', function ( event ) {\n\n\t\t\t\t\tvar response = event.target.response;\n\n\t\t\t\t\tCache.add( url, response );\n\n\t\t\t\t\tvar callbacks = loading[ url ];\n\n\t\t\t\t\tdelete loading[ url ];\n\n\t\t\t\t\tif ( this.status === 200 ) {\n\n\t\t\t\t\t\tfor ( var i = 0, il = callbacks.length; i < il; i ++ ) {\n\n\t\t\t\t\t\t\tvar callback = callbacks[ i ];\n\t\t\t\t\t\t\tif ( callback.onLoad ) callback.onLoad( response );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t\t\t} else if ( this.status === 0 ) {\n\n\t\t\t\t\t\t// Some browsers return HTTP Status 0 when using non-http protocol\n\t\t\t\t\t\t// e.g. 'file://' or 'data://'. Handle as success.\n\n\t\t\t\t\t\tconsole.warn( 'THREE.FileLoader: HTTP Status 0 received.' );\n\n\t\t\t\t\t\tfor ( var i = 0, il = callbacks.length; i < il; i ++ ) {\n\n\t\t\t\t\t\t\tvar callback = callbacks[ i ];\n\t\t\t\t\t\t\tif ( callback.onLoad ) callback.onLoad( response );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tfor ( var i = 0, il = callbacks.length; i < il; i ++ ) {\n\n\t\t\t\t\t\t\tvar callback = callbacks[ i ];\n\t\t\t\t\t\t\tif ( callback.onError ) callback.onError( event );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tscope.manager.itemEnd( url );\n\t\t\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t\t\t}\n\n\t\t\t\t}, false );\n\n\t\t\t\trequest.addEventListener( 'progress', function ( event ) {\n\n\t\t\t\t\tvar callbacks = loading[ url ];\n\n\t\t\t\t\tfor ( var i = 0, il = callbacks.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tvar callback = callbacks[ i ];\n\t\t\t\t\t\tif ( callback.onProgress ) callback.onProgress( event );\n\n\t\t\t\t\t}\n\n\t\t\t\t}, false );\n\n\t\t\t\trequest.addEventListener( 'error', function ( event ) {\n\n\t\t\t\t\tvar callbacks = loading[ url ];\n\n\t\t\t\t\tdelete loading[ url ];\n\n\t\t\t\t\tfor ( var i = 0, il = callbacks.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tvar callback = callbacks[ i ];\n\t\t\t\t\t\tif ( callback.onError ) callback.onError( event );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tscope.manager.itemEnd( url );\n\t\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t\t}, false );\n\n\t\t\t\tif ( this.responseType !== undefined ) request.responseType = this.responseType;\n\t\t\t\tif ( this.withCredentials !== undefined ) request.withCredentials = this.withCredentials;\n\n\t\t\t\tif ( request.overrideMimeType ) request.overrideMimeType( this.mimeType !== undefined ? this.mimeType : 'text/plain' );\n\n\t\t\t\tfor ( var header in this.requestHeader ) {\n\n\t\t\t\t\trequest.setRequestHeader( header, this.requestHeader[ header ] );\n\n\t\t\t\t}\n\n\t\t\t\trequest.send( null );\n\n\t\t\t}\n\n\t\t\tscope.manager.itemStart( url );\n\n\t\t\treturn request;\n\n\t\t},\n\n\t\tsetPath: function ( value ) {\n\n\t\t\tthis.path = value;\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetResponseType: function ( value ) {\n\n\t\t\tthis.responseType = value;\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetWithCredentials: function ( value ) {\n\n\t\t\tthis.withCredentials = value;\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetMimeType: function ( value ) {\n\n\t\t\tthis.mimeType = value;\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetRequestHeader: function ( value ) {\n\n\t\t\tthis.requestHeader = value;\n\t\t\treturn this;\n\n\t\t}\n\n\t} );\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t *\n\t * Abstract Base class to block based textures loader (dds, pvr, ...)\n\t */\n\n\tfunction CompressedTextureLoader( manager ) {\n\n\t\tthis.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager;\n\n\t\t// override in sub classes\n\t\tthis._parser = null;\n\n\t}\n\n\tObject.assign( CompressedTextureLoader.prototype, {\n\n\t\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\t\tvar scope = this;\n\n\t\t\tvar images = [];\n\n\t\t\tvar texture = new CompressedTexture();\n\t\t\ttexture.image = images;\n\n\t\t\tvar loader = new FileLoader( this.manager );\n\t\t\tloader.setPath( this.path );\n\t\t\tloader.setResponseType( 'arraybuffer' );\n\n\t\t\tfunction loadTexture( i ) {\n\n\t\t\t\tloader.load( url[ i ], function ( buffer ) {\n\n\t\t\t\t\tvar texDatas = scope._parser( buffer, true );\n\n\t\t\t\t\timages[ i ] = {\n\t\t\t\t\t\twidth: texDatas.width,\n\t\t\t\t\t\theight: texDatas.height,\n\t\t\t\t\t\tformat: texDatas.format,\n\t\t\t\t\t\tmipmaps: texDatas.mipmaps\n\t\t\t\t\t};\n\n\t\t\t\t\tloaded += 1;\n\n\t\t\t\t\tif ( loaded === 6 ) {\n\n\t\t\t\t\t\tif ( texDatas.mipmapCount === 1 )\n\t\t\t\t\t\t\ttexture.minFilter = LinearFilter;\n\n\t\t\t\t\t\ttexture.format = texDatas.format;\n\t\t\t\t\t\ttexture.needsUpdate = true;\n\n\t\t\t\t\t\tif ( onLoad ) onLoad( texture );\n\n\t\t\t\t\t}\n\n\t\t\t\t}, onProgress, onError );\n\n\t\t\t}\n\n\t\t\tif ( Array.isArray( url ) ) {\n\n\t\t\t\tvar loaded = 0;\n\n\t\t\t\tfor ( var i = 0, il = url.length; i < il; ++ i ) {\n\n\t\t\t\t\tloadTexture( i );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// compressed cubemap texture stored in a single DDS file\n\n\t\t\t\tloader.load( url, function ( buffer ) {\n\n\t\t\t\t\tvar texDatas = scope._parser( buffer, true );\n\n\t\t\t\t\tif ( texDatas.isCubemap ) {\n\n\t\t\t\t\t\tvar faces = texDatas.mipmaps.length / texDatas.mipmapCount;\n\n\t\t\t\t\t\tfor ( var f = 0; f < faces; f ++ ) {\n\n\t\t\t\t\t\t\timages[ f ] = { mipmaps: [] };\n\n\t\t\t\t\t\t\tfor ( var i = 0; i < texDatas.mipmapCount; i ++ ) {\n\n\t\t\t\t\t\t\t\timages[ f ].mipmaps.push( texDatas.mipmaps[ f * texDatas.mipmapCount + i ] );\n\t\t\t\t\t\t\t\timages[ f ].format = texDatas.format;\n\t\t\t\t\t\t\t\timages[ f ].width = texDatas.width;\n\t\t\t\t\t\t\t\timages[ f ].height = texDatas.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} else {\n\n\t\t\t\t\t\ttexture.image.width = texDatas.width;\n\t\t\t\t\t\ttexture.image.height = texDatas.height;\n\t\t\t\t\t\ttexture.mipmaps = texDatas.mipmaps;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( texDatas.mipmapCount === 1 ) {\n\n\t\t\t\t\t\ttexture.minFilter = LinearFilter;\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttexture.format = texDatas.format;\n\t\t\t\t\ttexture.needsUpdate = true;\n\n\t\t\t\t\tif ( onLoad ) onLoad( texture );\n\n\t\t\t\t}, onProgress, onError );\n\n\t\t\t}\n\n\t\t\treturn texture;\n\n\t\t},\n\n\t\tsetPath: function ( value ) {\n\n\t\t\tthis.path = value;\n\t\t\treturn this;\n\n\t\t}\n\n\t} );\n\n\t/**\n\t * @author Nikos M. / https://github.com/foo123/\n\t *\n\t * Abstract Base class to load generic binary textures formats (rgbe, hdr, ...)\n\t */\n\n\tfunction DataTextureLoader( manager ) {\n\n\t\tthis.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager;\n\n\t\t// override in sub classes\n\t\tthis._parser = null;\n\n\t}\n\n\tObject.assign( DataTextureLoader.prototype, {\n\n\t\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\t\tvar scope = this;\n\n\t\t\tvar texture = new DataTexture();\n\n\t\t\tvar loader = new FileLoader( this.manager );\n\t\t\tloader.setResponseType( 'arraybuffer' );\n\n\t\t\tloader.load( url, function ( buffer ) {\n\n\t\t\t\tvar texData = scope._parser( buffer );\n\n\t\t\t\tif ( ! texData ) return;\n\n\t\t\t\tif ( undefined !== texData.image ) {\n\n\t\t\t\t\ttexture.image = texData.image;\n\n\t\t\t\t} else if ( undefined !== texData.data ) {\n\n\t\t\t\t\ttexture.image.width = texData.width;\n\t\t\t\t\ttexture.image.height = texData.height;\n\t\t\t\t\ttexture.image.data = texData.data;\n\n\t\t\t\t}\n\n\t\t\t\ttexture.wrapS = undefined !== texData.wrapS ? texData.wrapS : ClampToEdgeWrapping;\n\t\t\t\ttexture.wrapT = undefined !== texData.wrapT ? texData.wrapT : ClampToEdgeWrapping;\n\n\t\t\t\ttexture.magFilter = undefined !== texData.magFilter ? texData.magFilter : LinearFilter;\n\t\t\t\ttexture.minFilter = undefined !== texData.minFilter ? texData.minFilter : LinearMipMapLinearFilter;\n\n\t\t\t\ttexture.anisotropy = undefined !== texData.anisotropy ? texData.anisotropy : 1;\n\n\t\t\t\tif ( undefined !== texData.format ) {\n\n\t\t\t\t\ttexture.format = texData.format;\n\n\t\t\t\t}\n\t\t\t\tif ( undefined !== texData.type ) {\n\n\t\t\t\t\ttexture.type = texData.type;\n\n\t\t\t\t}\n\n\t\t\t\tif ( undefined !== texData.mipmaps ) {\n\n\t\t\t\t\ttexture.mipmaps = texData.mipmaps;\n\n\t\t\t\t}\n\n\t\t\t\tif ( 1 === texData.mipmapCount ) {\n\n\t\t\t\t\ttexture.minFilter = LinearFilter;\n\n\t\t\t\t}\n\n\t\t\t\ttexture.needsUpdate = true;\n\n\t\t\t\tif ( onLoad ) onLoad( texture, texData );\n\n\t\t\t}, onProgress, onError );\n\n\n\t\t\treturn texture;\n\n\t\t}\n\n\t} );\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t */\n\n\tfunction ImageLoader( manager ) {\n\n\t\tthis.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager;\n\n\t}\n\n\tObject.assign( ImageLoader.prototype, {\n\n\t\tcrossOrigin: 'Anonymous',\n\n\t\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\t\tif ( url === undefined ) url = '';\n\n\t\t\tif ( this.path !== undefined ) url = this.path + url;\n\n\t\t\turl = this.manager.resolveURL( url );\n\n\t\t\tvar scope = this;\n\n\t\t\tvar cached = Cache.get( url );\n\n\t\t\tif ( cached !== undefined ) {\n\n\t\t\t\tscope.manager.itemStart( url );\n\n\t\t\t\tsetTimeout( function () {\n\n\t\t\t\t\tif ( onLoad ) onLoad( cached );\n\n\t\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t\t}, 0 );\n\n\t\t\t\treturn cached;\n\n\t\t\t}\n\n\t\t\tvar image = document.createElementNS( 'http://www.w3.org/1999/xhtml', 'img' );\n\n\t\t\timage.addEventListener( 'load', function () {\n\n\t\t\t\tCache.add( url, this );\n\n\t\t\t\tif ( onLoad ) onLoad( this );\n\n\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t}, false );\n\n\t\t\t/*\n\t\t\timage.addEventListener( 'progress', function ( event ) {\n\n\t\t\t\tif ( onProgress ) onProgress( event );\n\n\t\t\t}, false );\n\t\t\t*/\n\n\t\t\timage.addEventListener( 'error', function ( event ) {\n\n\t\t\t\tif ( onError ) onError( event );\n\n\t\t\t\tscope.manager.itemEnd( url );\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}, false );\n\n\t\t\tif ( url.substr( 0, 5 ) !== 'data:' ) {\n\n\t\t\t\tif ( this.crossOrigin !== undefined ) image.crossOrigin = this.crossOrigin;\n\n\t\t\t}\n\n\t\t\tscope.manager.itemStart( url );\n\n\t\t\timage.src = url;\n\n\t\t\treturn image;\n\n\t\t},\n\n\t\tsetCrossOrigin: function ( value ) {\n\n\t\t\tthis.crossOrigin = value;\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetPath: function ( value ) {\n\n\t\t\tthis.path = value;\n\t\t\treturn this;\n\n\t\t}\n\n\t} );\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t */\n\n\tfunction CubeTextureLoader( manager ) {\n\n\t\tthis.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager;\n\n\t}\n\n\tObject.assign( CubeTextureLoader.prototype, {\n\n\t\tcrossOrigin: 'Anonymous',\n\n\t\tload: function ( urls, onLoad, onProgress, onError ) {\n\n\t\t\tvar texture = new CubeTexture();\n\n\t\t\tvar loader = new ImageLoader( this.manager );\n\t\t\tloader.setCrossOrigin( this.crossOrigin );\n\t\t\tloader.setPath( this.path );\n\n\t\t\tvar loaded = 0;\n\n\t\t\tfunction loadTexture( i ) {\n\n\t\t\t\tloader.load( urls[ i ], function ( image ) {\n\n\t\t\t\t\ttexture.images[ i ] = image;\n\n\t\t\t\t\tloaded ++;\n\n\t\t\t\t\tif ( loaded === 6 ) {\n\n\t\t\t\t\t\ttexture.needsUpdate = true;\n\n\t\t\t\t\t\tif ( onLoad ) onLoad( texture );\n\n\t\t\t\t\t}\n\n\t\t\t\t}, undefined, onError );\n\n\t\t\t}\n\n\t\t\tfor ( var i = 0; i < urls.length; ++ i ) {\n\n\t\t\t\tloadTexture( i );\n\n\t\t\t}\n\n\t\t\treturn texture;\n\n\t\t},\n\n\t\tsetCrossOrigin: function ( value ) {\n\n\t\t\tthis.crossOrigin = value;\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetPath: function ( value ) {\n\n\t\t\tthis.path = value;\n\t\t\treturn this;\n\n\t\t}\n\n\t} );\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t */\n\n\tfunction TextureLoader( manager ) {\n\n\t\tthis.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager;\n\n\t}\n\n\tObject.assign( TextureLoader.prototype, {\n\n\t\tcrossOrigin: 'Anonymous',\n\n\t\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\t\tvar loader = new ImageLoader( this.manager );\n\t\t\tloader.setCrossOrigin( this.crossOrigin );\n\t\t\tloader.setPath( this.path );\n\n\t\t\tvar texture = new Texture();\n\t\t\ttexture.image = loader.load( url, function () {\n\n\t\t\t\t// JPEGs can't have an alpha channel, so memory can be saved by storing them as RGB.\n\t\t\t\tvar isJPEG = url.search( /\\.(jpg|jpeg)$/ ) > 0 || url.search( /^data\\:image\\/jpeg/ ) === 0;\n\n\t\t\t\ttexture.format = isJPEG ? RGBFormat : RGBAFormat;\n\t\t\t\ttexture.needsUpdate = true;\n\n\t\t\t\tif ( onLoad !== undefined ) {\n\n\t\t\t\t\tonLoad( texture );\n\n\t\t\t\t}\n\n\t\t\t}, onProgress, onError );\n\n\t\t\treturn texture;\n\n\t\t},\n\n\t\tsetCrossOrigin: function ( value ) {\n\n\t\t\tthis.crossOrigin = value;\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetPath: function ( value ) {\n\n\t\t\tthis.path = value;\n\t\t\treturn this;\n\n\t\t}\n\n\t} );\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t * @author alteredq / http://alteredqualia.com/\n\t */\n\n\tfunction Light( color, intensity ) {\n\n\t\tObject3D.call( this );\n\n\t\tthis.type = 'Light';\n\n\t\tthis.color = new Color( color );\n\t\tthis.intensity = intensity !== undefined ? intensity : 1;\n\n\t\tthis.receiveShadow = undefined;\n\n\t}\n\n\tLight.prototype = Object.assign( Object.create( Object3D.prototype ), {\n\n\t\tconstructor: Light,\n\n\t\tisLight: true,\n\n\t\tcopy: function ( source ) {\n\n\t\t\tObject3D.prototype.copy.call( this, source );\n\n\t\t\tthis.color.copy( source.color );\n\t\t\tthis.intensity = source.intensity;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\ttoJSON: function ( meta ) {\n\n\t\t\tvar data = Object3D.prototype.toJSON.call( this, meta );\n\n\t\t\tdata.object.color = this.color.getHex();\n\t\t\tdata.object.intensity = this.intensity;\n\n\t\t\tif ( this.groundColor !== undefined ) data.object.groundColor = this.groundColor.getHex();\n\n\t\t\tif ( this.distance !== undefined ) data.object.distance = this.distance;\n\t\t\tif ( this.angle !== undefined ) data.object.angle = this.angle;\n\t\t\tif ( this.decay !== undefined ) data.object.decay = this.decay;\n\t\t\tif ( this.penumbra !== undefined ) data.object.penumbra = this.penumbra;\n\n\t\t\tif ( this.shadow !== undefined ) data.object.shadow = this.shadow.toJSON();\n\n\t\t\treturn data;\n\n\t\t}\n\n\t} );\n\n\t/**\n\t * @author alteredq / http://alteredqualia.com/\n\t */\n\n\tfunction HemisphereLight( skyColor, groundColor, intensity ) {\n\n\t\tLight.call( this, skyColor, intensity );\n\n\t\tthis.type = 'HemisphereLight';\n\n\t\tthis.castShadow = undefined;\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\tHemisphereLight.prototype = Object.assign( Object.create( Light.prototype ), {\n\n\t\tconstructor: HemisphereLight,\n\n\t\tisHemisphereLight: true,\n\n\t\tcopy: function ( source ) {\n\n\t\t\tLight.prototype.copy.call( this, source );\n\n\t\t\tthis.groundColor.copy( source.groundColor );\n\n\t\t\treturn this;\n\n\t\t}\n\n\t} );\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t */\n\n\tfunction LightShadow( camera ) {\n\n\t\tthis.camera = camera;\n\n\t\tthis.bias = 0;\n\t\tthis.radius = 1;\n\n\t\tthis.mapSize = new Vector2( 512, 512 );\n\n\t\tthis.map = null;\n\t\tthis.matrix = new Matrix4();\n\n\t}\n\n\tObject.assign( LightShadow.prototype, {\n\n\t\tcopy: function ( source ) {\n\n\t\t\tthis.camera = source.camera.clone();\n\n\t\t\tthis.bias = source.bias;\n\t\t\tthis.radius = source.radius;\n\n\t\t\tthis.mapSize.copy( source.mapSize );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tclone: function () {\n\n\t\t\treturn new this.constructor().copy( this );\n\n\t\t},\n\n\t\ttoJSON: function () {\n\n\t\t\tvar object = {};\n\n\t\t\tif ( this.bias !== 0 ) object.bias = this.bias;\n\t\t\tif ( this.radius !== 1 ) object.radius = this.radius;\n\t\t\tif ( this.mapSize.x !== 512 || this.mapSize.y !== 512 ) object.mapSize = this.mapSize.toArray();\n\n\t\t\tobject.camera = this.camera.toJSON( false ).object;\n\t\t\tdelete object.camera.matrix;\n\n\t\t\treturn object;\n\n\t\t}\n\n\t} );\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t */\n\n\tfunction SpotLightShadow() {\n\n\t\tLightShadow.call( this, new PerspectiveCamera( 50, 1, 0.5, 500 ) );\n\n\t}\n\n\tSpotLightShadow.prototype = Object.assign( Object.create( LightShadow.prototype ), {\n\n\t\tconstructor: SpotLightShadow,\n\n\t\tisSpotLightShadow: true,\n\n\t\tupdate: function ( light ) {\n\n\t\t\tvar camera = this.camera;\n\n\t\t\tvar fov = _Math.RAD2DEG * 2 * light.angle;\n\t\t\tvar aspect = this.mapSize.width / this.mapSize.height;\n\t\t\tvar far = light.distance || camera.far;\n\n\t\t\tif ( fov !== camera.fov || aspect !== camera.aspect || far !== camera.far ) {\n\n\t\t\t\tcamera.fov = fov;\n\t\t\t\tcamera.aspect = aspect;\n\t\t\t\tcamera.far = far;\n\t\t\t\tcamera.updateProjectionMatrix();\n\n\t\t\t}\n\n\t\t}\n\n\t} );\n\n\t/**\n\t * @author alteredq / http://alteredqualia.com/\n\t */\n\n\tfunction SpotLight( color, intensity, distance, angle, penumbra, decay ) {\n\n\t\tLight.call( this, 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\tObject.defineProperty( this, 'power', {\n\t\t\tget: function () {\n\n\t\t\t\t// intensity = power per solid angle.\n\t\t\t\t// ref: equation (17) from http://www.frostbite.com/wp-content/uploads/2014/11/course_notes_moving_frostbite_to_pbr.pdf\n\t\t\t\treturn this.intensity * Math.PI;\n\n\t\t\t},\n\t\t\tset: function ( power ) {\n\n\t\t\t\t// intensity = power per solid angle.\n\t\t\t\t// ref: equation (17) from http://www.frostbite.com/wp-content/uploads/2014/11/course_notes_moving_frostbite_to_pbr.pdf\n\t\t\t\tthis.intensity = power / Math.PI;\n\n\t\t\t}\n\t\t} );\n\n\t\tthis.distance = ( distance !== undefined ) ? distance : 0;\n\t\tthis.angle = ( angle !== undefined ) ? angle : Math.PI / 3;\n\t\tthis.penumbra = ( penumbra !== undefined ) ? penumbra : 0;\n\t\tthis.decay = ( decay !== undefined ) ? decay : 1;\t// for physically correct lights, should be 2.\n\n\t\tthis.shadow = new SpotLightShadow();\n\n\t}\n\n\tSpotLight.prototype = Object.assign( Object.create( Light.prototype ), {\n\n\t\tconstructor: SpotLight,\n\n\t\tisSpotLight: true,\n\n\t\tcopy: function ( source ) {\n\n\t\t\tLight.prototype.copy.call( this, source );\n\n\t\t\tthis.distance = source.distance;\n\t\t\tthis.angle = source.angle;\n\t\t\tthis.penumbra = source.penumbra;\n\t\t\tthis.decay = source.decay;\n\n\t\t\tthis.target = source.target.clone();\n\n\t\t\tthis.shadow = source.shadow.clone();\n\n\t\t\treturn this;\n\n\t\t}\n\n\t} );\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t */\n\n\n\tfunction PointLight( color, intensity, distance, decay ) {\n\n\t\tLight.call( this, color, intensity );\n\n\t\tthis.type = 'PointLight';\n\n\t\tObject.defineProperty( this, 'power', {\n\t\t\tget: function () {\n\n\t\t\t\t// intensity = power per solid angle.\n\t\t\t\t// ref: equation (15) from http://www.frostbite.com/wp-content/uploads/2014/11/course_notes_moving_frostbite_to_pbr.pdf\n\t\t\t\treturn this.intensity * 4 * Math.PI;\n\n\t\t\t},\n\t\t\tset: function ( power ) {\n\n\t\t\t\t// intensity = power per solid angle.\n\t\t\t\t// ref: equation (15) from http://www.frostbite.com/wp-content/uploads/2014/11/course_notes_moving_frostbite_to_pbr.pdf\n\t\t\t\tthis.intensity = power / ( 4 * Math.PI );\n\n\t\t\t}\n\t\t} );\n\n\t\tthis.distance = ( distance !== undefined ) ? distance : 0;\n\t\tthis.decay = ( decay !== undefined ) ? decay : 1;\t// for physically correct lights, should be 2.\n\n\t\tthis.shadow = new LightShadow( new PerspectiveCamera( 90, 1, 0.5, 500 ) );\n\n\t}\n\n\tPointLight.prototype = Object.assign( Object.create( Light.prototype ), {\n\n\t\tconstructor: PointLight,\n\n\t\tisPointLight: true,\n\n\t\tcopy: function ( source ) {\n\n\t\t\tLight.prototype.copy.call( this, source );\n\n\t\t\tthis.distance = source.distance;\n\t\t\tthis.decay = source.decay;\n\n\t\t\tthis.shadow = source.shadow.clone();\n\n\t\t\treturn this;\n\n\t\t}\n\n\t} );\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t */\n\n\tfunction DirectionalLightShadow( ) {\n\n\t\tLightShadow.call( this, new OrthographicCamera( - 5, 5, 5, - 5, 0.5, 500 ) );\n\n\t}\n\n\tDirectionalLightShadow.prototype = Object.assign( Object.create( LightShadow.prototype ), {\n\n\t\tconstructor: DirectionalLightShadow\n\n\t} );\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t * @author alteredq / http://alteredqualia.com/\n\t */\n\n\tfunction DirectionalLight( color, intensity ) {\n\n\t\tLight.call( this, 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\tDirectionalLight.prototype = Object.assign( Object.create( Light.prototype ), {\n\n\t\tconstructor: DirectionalLight,\n\n\t\tisDirectionalLight: true,\n\n\t\tcopy: function ( source ) {\n\n\t\t\tLight.prototype.copy.call( this, source );\n\n\t\t\tthis.target = source.target.clone();\n\n\t\t\tthis.shadow = source.shadow.clone();\n\n\t\t\treturn this;\n\n\t\t}\n\n\t} );\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t */\n\n\tfunction AmbientLight( color, intensity ) {\n\n\t\tLight.call( this, color, intensity );\n\n\t\tthis.type = 'AmbientLight';\n\n\t\tthis.castShadow = undefined;\n\n\t}\n\n\tAmbientLight.prototype = Object.assign( Object.create( Light.prototype ), {\n\n\t\tconstructor: AmbientLight,\n\n\t\tisAmbientLight: true\n\n\t} );\n\n\t/**\n\t * @author abelnation / http://github.com/abelnation\n\t */\n\n\tfunction RectAreaLight( color, intensity, width, height ) {\n\n\t\tLight.call( this, color, intensity );\n\n\t\tthis.type = 'RectAreaLight';\n\n\t\tthis.position.set( 0, 1, 0 );\n\t\tthis.updateMatrix();\n\n\t\tthis.width = ( width !== undefined ) ? width : 10;\n\t\tthis.height = ( height !== undefined ) ? height : 10;\n\n\t\t// TODO (abelnation): distance/decay\n\n\t\t// TODO (abelnation): update method for RectAreaLight to update transform to lookat target\n\n\t\t// TODO (abelnation): shadows\n\n\t}\n\n\t// TODO (abelnation): RectAreaLight update when light shape is changed\n\tRectAreaLight.prototype = Object.assign( Object.create( Light.prototype ), {\n\n\t\tconstructor: RectAreaLight,\n\n\t\tisRectAreaLight: true,\n\n\t\tcopy: function ( source ) {\n\n\t\t\tLight.prototype.copy.call( this, source );\n\n\t\t\tthis.width = source.width;\n\t\t\tthis.height = source.height;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\ttoJSON: function ( meta ) {\n\n\t\t\tvar data = Light.prototype.toJSON.call( this, meta );\n\n\t\t\tdata.object.width = this.width;\n\t\t\tdata.object.height = this.height;\n\n\t\t\treturn data;\n\n\t\t}\n\n\t} );\n\n\t/**\n\t * @author tschw\n\t * @author Ben Houston / http://clara.io/\n\t * @author David Sarno / http://lighthaus.us/\n\t */\n\n\tvar AnimationUtils = {\n\n\t\t// same as Array.prototype.slice, but also works on typed arrays\n\t\tarraySlice: function ( array, from, to ) {\n\n\t\t\tif ( AnimationUtils.isTypedArray( array ) ) {\n\n\t\t\t\t// in ios9 array.subarray(from, undefined) will return empty array\n\t\t\t\t// but array.subarray(from) or array.subarray(from, len) is correct\n\t\t\t\treturn new array.constructor( array.subarray( from, to !== undefined ? to : array.length ) );\n\n\t\t\t}\n\n\t\t\treturn array.slice( from, to );\n\n\t\t},\n\n\t\t// converts an array to a specific type\n\t\tconvertArray: function ( array, type, forceClone ) {\n\n\t\t\tif ( ! array || // let 'undefined' and 'null' pass\n\t\t\t\t\t! forceClone && array.constructor === type ) return array;\n\n\t\t\tif ( typeof type.BYTES_PER_ELEMENT === 'number' ) {\n\n\t\t\t\treturn new type( array ); // create typed array\n\n\t\t\t}\n\n\t\t\treturn Array.prototype.slice.call( array ); // create Array\n\n\t\t},\n\n\t\tisTypedArray: function ( object ) {\n\n\t\t\treturn ArrayBuffer.isView( object ) &&\n\t\t\t\t\t! ( object instanceof DataView );\n\n\t\t},\n\n\t\t// returns an array by which times and values can be sorted\n\t\tgetKeyframeOrder: function ( times ) {\n\n\t\t\tfunction compareTime( i, j ) {\n\n\t\t\t\treturn times[ i ] - times[ j ];\n\n\t\t\t}\n\n\t\t\tvar n = times.length;\n\t\t\tvar result = new Array( n );\n\t\t\tfor ( var i = 0; i !== n; ++ i ) result[ i ] = i;\n\n\t\t\tresult.sort( compareTime );\n\n\t\t\treturn result;\n\n\t\t},\n\n\t\t// uses the array previously returned by 'getKeyframeOrder' to sort data\n\t\tsortedArray: function ( values, stride, order ) {\n\n\t\t\tvar nValues = values.length;\n\t\t\tvar result = new values.constructor( nValues );\n\n\t\t\tfor ( var i = 0, dstOffset = 0; dstOffset !== nValues; ++ i ) {\n\n\t\t\t\tvar srcOffset = order[ i ] * stride;\n\n\t\t\t\tfor ( var j = 0; j !== stride; ++ j ) {\n\n\t\t\t\t\tresult[ dstOffset ++ ] = values[ srcOffset + j ];\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn result;\n\n\t\t},\n\n\t\t// function for parsing AOS keyframe formats\n\t\tflattenJSON: function ( jsonKeys, times, values, valuePropertyName ) {\n\n\t\t\tvar i = 1, key = jsonKeys[ 0 ];\n\n\t\t\twhile ( key !== undefined && key[ valuePropertyName ] === undefined ) {\n\n\t\t\t\tkey = jsonKeys[ i ++ ];\n\n\t\t\t}\n\n\t\t\tif ( key === undefined ) return; // no data\n\n\t\t\tvar value = key[ valuePropertyName ];\n\t\t\tif ( value === undefined ) return; // no data\n\n\t\t\tif ( Array.isArray( value ) ) {\n\n\t\t\t\tdo {\n\n\t\t\t\t\tvalue = key[ valuePropertyName ];\n\n\t\t\t\t\tif ( value !== undefined ) {\n\n\t\t\t\t\t\ttimes.push( key.time );\n\t\t\t\t\t\tvalues.push.apply( values, value ); // push all elements\n\n\t\t\t\t\t}\n\n\t\t\t\t\tkey = jsonKeys[ i ++ ];\n\n\t\t\t\t} while ( key !== undefined );\n\n\t\t\t} else if ( value.toArray !== undefined ) {\n\n\t\t\t\t// ...assume THREE.Math-ish\n\n\t\t\t\tdo {\n\n\t\t\t\t\tvalue = key[ valuePropertyName ];\n\n\t\t\t\t\tif ( value !== undefined ) {\n\n\t\t\t\t\t\ttimes.push( key.time );\n\t\t\t\t\t\tvalue.toArray( values, values.length );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tkey = jsonKeys[ i ++ ];\n\n\t\t\t\t} while ( key !== undefined );\n\n\t\t\t} else {\n\n\t\t\t\t// otherwise push as-is\n\n\t\t\t\tdo {\n\n\t\t\t\t\tvalue = key[ valuePropertyName ];\n\n\t\t\t\t\tif ( value !== undefined ) {\n\n\t\t\t\t\t\ttimes.push( key.time );\n\t\t\t\t\t\tvalues.push( value );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tkey = jsonKeys[ i ++ ];\n\n\t\t\t\t} while ( key !== undefined );\n\n\t\t\t}\n\n\t\t}\n\n\t};\n\n\t/**\n\t * Abstract base class of interpolants over parametric samples.\n\t *\n\t * The parameter domain is one dimensional, typically the time or a path\n\t * along a curve defined by the data.\n\t *\n\t * The sample values can have any dimensionality and derived classes may\n\t * apply special interpretations to the data.\n\t *\n\t * This class provides the interval seek in a Template Method, deferring\n\t * the actual interpolation to derived classes.\n\t *\n\t * Time complexity is O(1) for linear access crossing at most two points\n\t * and O(log N) for random access, where N is the number of positions.\n\t *\n\t * References:\n\t *\n\t * \t\thttp://www.oodesign.com/template-method-pattern.html\n\t *\n\t * @author tschw\n\t */\n\n\tfunction Interpolant( 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}\n\n\tObject.assign( Interpolant.prototype, {\n\n\t\tevaluate: function ( t ) {\n\n\t\t\tvar pp = this.parameterPositions,\n\t\t\t\ti1 = this._cachedIndex,\n\n\t\t\t\tt1 = pp[ i1 ],\n\t\t\t\tt0 = pp[ i1 - 1 ];\n\n\t\t\tvalidate_interval: {\n\n\t\t\t\tseek: {\n\n\t\t\t\t\tvar right;\n\n\t\t\t\t\tlinear_scan: {\n\n\t\t\t\t\t\t//- See http://jsperf.com/comparison-to-undefined/3\n\t\t\t\t\t\t//- slower code:\n\t\t\t\t\t\t//-\n\t\t\t\t\t\t//- \t\t\t\tif ( t >= t1 || t1 === undefined ) {\n\t\t\t\t\t\tforward_scan: if ( ! ( t < t1 ) ) {\n\n\t\t\t\t\t\t\tfor ( var giveUpAt = i1 + 2; ; ) {\n\n\t\t\t\t\t\t\t\tif ( t1 === undefined ) {\n\n\t\t\t\t\t\t\t\t\tif ( t < t0 ) break forward_scan;\n\n\t\t\t\t\t\t\t\t\t// after end\n\n\t\t\t\t\t\t\t\t\ti1 = pp.length;\n\t\t\t\t\t\t\t\t\tthis._cachedIndex = i1;\n\t\t\t\t\t\t\t\t\treturn this.afterEnd_( i1 - 1, t, t0 );\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tif ( i1 === giveUpAt ) break; // this loop\n\n\t\t\t\t\t\t\t\tt0 = t1;\n\t\t\t\t\t\t\t\tt1 = pp[ ++ i1 ];\n\n\t\t\t\t\t\t\t\tif ( t < t1 ) {\n\n\t\t\t\t\t\t\t\t\t// we have arrived at the sought interval\n\t\t\t\t\t\t\t\t\tbreak seek;\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// prepare binary search on the right side of the index\n\t\t\t\t\t\t\tright = pp.length;\n\t\t\t\t\t\t\tbreak linear_scan;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t//- slower code:\n\t\t\t\t\t\t//-\t\t\t\t\tif ( t < t0 || t0 === undefined ) {\n\t\t\t\t\t\tif ( ! ( t >= t0 ) ) {\n\n\t\t\t\t\t\t\t// looping?\n\n\t\t\t\t\t\t\tvar t1global = pp[ 1 ];\n\n\t\t\t\t\t\t\tif ( t < t1global ) {\n\n\t\t\t\t\t\t\t\ti1 = 2; // + 1, using the scan for the details\n\t\t\t\t\t\t\t\tt0 = t1global;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// linear reverse scan\n\n\t\t\t\t\t\t\tfor ( var giveUpAt = i1 - 2; ; ) {\n\n\t\t\t\t\t\t\t\tif ( t0 === undefined ) {\n\n\t\t\t\t\t\t\t\t\t// before start\n\n\t\t\t\t\t\t\t\t\tthis._cachedIndex = 0;\n\t\t\t\t\t\t\t\t\treturn this.beforeStart_( 0, t, t1 );\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tif ( i1 === giveUpAt ) break; // this loop\n\n\t\t\t\t\t\t\t\tt1 = t0;\n\t\t\t\t\t\t\t\tt0 = pp[ -- i1 - 1 ];\n\n\t\t\t\t\t\t\t\tif ( t >= t0 ) {\n\n\t\t\t\t\t\t\t\t\t// we have arrived at the sought interval\n\t\t\t\t\t\t\t\t\tbreak seek;\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// prepare binary search on the left side of the index\n\t\t\t\t\t\t\tright = i1;\n\t\t\t\t\t\t\ti1 = 0;\n\t\t\t\t\t\t\tbreak linear_scan;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// the interval is valid\n\n\t\t\t\t\t\tbreak validate_interval;\n\n\t\t\t\t\t} // linear scan\n\n\t\t\t\t\t// binary search\n\n\t\t\t\t\twhile ( i1 < right ) {\n\n\t\t\t\t\t\tvar mid = ( i1 + right ) >>> 1;\n\n\t\t\t\t\t\tif ( t < pp[ mid ] ) {\n\n\t\t\t\t\t\t\tright = mid;\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\ti1 = mid + 1;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tt1 = pp[ i1 ];\n\t\t\t\t\tt0 = pp[ i1 - 1 ];\n\n\t\t\t\t\t// check boundary cases, again\n\n\t\t\t\t\tif ( t0 === undefined ) {\n\n\t\t\t\t\t\tthis._cachedIndex = 0;\n\t\t\t\t\t\treturn this.beforeStart_( 0, t, t1 );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( t1 === undefined ) {\n\n\t\t\t\t\t\ti1 = pp.length;\n\t\t\t\t\t\tthis._cachedIndex = i1;\n\t\t\t\t\t\treturn this.afterEnd_( i1 - 1, t0, t );\n\n\t\t\t\t\t}\n\n\t\t\t\t} // seek\n\n\t\t\t\tthis._cachedIndex = i1;\n\n\t\t\t\tthis.intervalChanged_( i1, t0, t1 );\n\n\t\t\t} // validate_interval\n\n\t\t\treturn this.interpolate_( i1, t0, t, t1 );\n\n\t\t},\n\n\t\tsettings: null, // optional, subclass-specific settings structure\n\t\t// Note: The indirection allows central control of many interpolants.\n\n\t\t// --- Protected interface\n\n\t\tDefaultSettings_: {},\n\n\t\tgetSettings_: function () {\n\n\t\t\treturn this.settings || this.DefaultSettings_;\n\n\t\t},\n\n\t\tcopySampleValue_: function ( index ) {\n\n\t\t\t// copies a sample value to the result buffer\n\n\t\t\tvar result = this.resultBuffer,\n\t\t\t\tvalues = this.sampleValues,\n\t\t\t\tstride = this.valueSize,\n\t\t\t\toffset = index * stride;\n\n\t\t\tfor ( var i = 0; i !== stride; ++ i ) {\n\n\t\t\t\tresult[ i ] = values[ offset + i ];\n\n\t\t\t}\n\n\t\t\treturn result;\n\n\t\t},\n\n\t\t// Template methods for derived classes:\n\n\t\tinterpolate_: function ( /* i1, t0, t, t1 */ ) {\n\n\t\t\tthrow new Error( 'call to abstract method' );\n\t\t\t// implementations shall return this.resultBuffer\n\n\t\t},\n\n\t\tintervalChanged_: function ( /* i1, t0, t1 */ ) {\n\n\t\t\t// empty\n\n\t\t}\n\n\t} );\n\n\t//!\\ DECLARE ALIAS AFTER assign prototype !\n\tObject.assign( Interpolant.prototype, {\n\n\t\t//( 0, t, t0 ), returns this.resultBuffer\n\t\tbeforeStart_: Interpolant.prototype.copySampleValue_,\n\n\t\t//( N-1, tN-1, t ), returns this.resultBuffer\n\t\tafterEnd_: Interpolant.prototype.copySampleValue_,\n\n\t} );\n\n\t/**\n\t * Fast and simple cubic spline interpolant.\n\t *\n\t * It was derived from a Hermitian construction setting the first derivative\n\t * at each sample position to the linear slope between neighboring positions\n\t * over their parameter interval.\n\t *\n\t * @author tschw\n\t */\n\n\tfunction CubicInterpolant( parameterPositions, sampleValues, sampleSize, resultBuffer ) {\n\n\t\tInterpolant.call( this, 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}\n\n\tCubicInterpolant.prototype = Object.assign( Object.create( Interpolant.prototype ), {\n\n\t\tconstructor: CubicInterpolant,\n\n\t\tDefaultSettings_: {\n\n\t\t\tendingStart: ZeroCurvatureEnding,\n\t\t\tendingEnd: ZeroCurvatureEnding\n\n\t\t},\n\n\t\tintervalChanged_: function ( i1, t0, t1 ) {\n\n\t\t\tvar pp = this.parameterPositions,\n\t\t\t\tiPrev = i1 - 2,\n\t\t\t\tiNext = i1 + 1,\n\n\t\t\t\ttPrev = pp[ iPrev ],\n\t\t\t\ttNext = pp[ iNext ];\n\n\t\t\tif ( tPrev === undefined ) {\n\n\t\t\t\tswitch ( this.getSettings_().endingStart ) {\n\n\t\t\t\t\tcase ZeroSlopeEnding:\n\n\t\t\t\t\t\t// f'(t0) = 0\n\t\t\t\t\t\tiPrev = i1;\n\t\t\t\t\t\ttPrev = 2 * t0 - t1;\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase WrapAroundEnding:\n\n\t\t\t\t\t\t// use the other end of the curve\n\t\t\t\t\t\tiPrev = pp.length - 2;\n\t\t\t\t\t\ttPrev = t0 + pp[ iPrev ] - pp[ iPrev + 1 ];\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault: // ZeroCurvatureEnding\n\n\t\t\t\t\t\t// f''(t0) = 0 a.k.a. Natural Spline\n\t\t\t\t\t\tiPrev = i1;\n\t\t\t\t\t\ttPrev = t1;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( tNext === undefined ) {\n\n\t\t\t\tswitch ( this.getSettings_().endingEnd ) {\n\n\t\t\t\t\tcase ZeroSlopeEnding:\n\n\t\t\t\t\t\t// f'(tN) = 0\n\t\t\t\t\t\tiNext = i1;\n\t\t\t\t\t\ttNext = 2 * t1 - t0;\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase WrapAroundEnding:\n\n\t\t\t\t\t\t// use the other end of the curve\n\t\t\t\t\t\tiNext = 1;\n\t\t\t\t\t\ttNext = t1 + pp[ 1 ] - pp[ 0 ];\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault: // ZeroCurvatureEnding\n\n\t\t\t\t\t\t// f''(tN) = 0, a.k.a. Natural Spline\n\t\t\t\t\t\tiNext = i1 - 1;\n\t\t\t\t\t\ttNext = t0;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tvar halfDt = ( t1 - t0 ) * 0.5,\n\t\t\t\tstride = this.valueSize;\n\n\t\t\tthis._weightPrev = halfDt / ( t0 - tPrev );\n\t\t\tthis._weightNext = halfDt / ( tNext - t1 );\n\t\t\tthis._offsetPrev = iPrev * stride;\n\t\t\tthis._offsetNext = iNext * stride;\n\n\t\t},\n\n\t\tinterpolate_: function ( i1, t0, t, t1 ) {\n\n\t\t\tvar result = this.resultBuffer,\n\t\t\t\tvalues = this.sampleValues,\n\t\t\t\tstride = this.valueSize,\n\n\t\t\t\to1 = i1 * stride,\t\to0 = o1 - stride,\n\t\t\t\toP = this._offsetPrev, \toN = this._offsetNext,\n\t\t\t\twP = this._weightPrev,\twN = this._weightNext,\n\n\t\t\t\tp = ( t - t0 ) / ( t1 - t0 ),\n\t\t\t\tpp = p * p,\n\t\t\t\tppp = pp * p;\n\n\t\t\t// evaluate polynomials\n\n\t\t\tvar sP = - wP * ppp + 2 * wP * pp - wP * p;\n\t\t\tvar s0 = ( 1 + wP ) * ppp + ( - 1.5 - 2 * wP ) * pp + ( - 0.5 + wP ) * p + 1;\n\t\t\tvar s1 = ( - 1 - wN ) * ppp + ( 1.5 + wN ) * pp + 0.5 * p;\n\t\t\tvar sN = wN * ppp - wN * pp;\n\n\t\t\t// combine data linearly\n\n\t\t\tfor ( var i = 0; i !== stride; ++ i ) {\n\n\t\t\t\tresult[ i ] =\n\t\t\t\t\t\tsP * values[ oP + i ] +\n\t\t\t\t\t\ts0 * values[ o0 + i ] +\n\t\t\t\t\t\ts1 * values[ o1 + i ] +\n\t\t\t\t\t\tsN * values[ oN + i ];\n\n\t\t\t}\n\n\t\t\treturn result;\n\n\t\t}\n\n\t} );\n\n\t/**\n\t * @author tschw\n\t */\n\n\tfunction LinearInterpolant( parameterPositions, sampleValues, sampleSize, resultBuffer ) {\n\n\t\tInterpolant.call( this, parameterPositions, sampleValues, sampleSize, resultBuffer );\n\n\t}\n\n\tLinearInterpolant.prototype = Object.assign( Object.create( Interpolant.prototype ), {\n\n\t\tconstructor: LinearInterpolant,\n\n\t\tinterpolate_: function ( i1, t0, t, t1 ) {\n\n\t\t\tvar result = this.resultBuffer,\n\t\t\t\tvalues = this.sampleValues,\n\t\t\t\tstride = this.valueSize,\n\n\t\t\t\toffset1 = i1 * stride,\n\t\t\t\toffset0 = offset1 - stride,\n\n\t\t\t\tweight1 = ( t - t0 ) / ( t1 - t0 ),\n\t\t\t\tweight0 = 1 - weight1;\n\n\t\t\tfor ( var i = 0; i !== stride; ++ i ) {\n\n\t\t\t\tresult[ i ] =\n\t\t\t\t\t\tvalues[ offset0 + i ] * weight0 +\n\t\t\t\t\t\tvalues[ offset1 + i ] * weight1;\n\n\t\t\t}\n\n\t\t\treturn result;\n\n\t\t}\n\n\t} );\n\n\t/**\n\t *\n\t * Interpolant that evaluates to the sample value at the position preceeding\n\t * the parameter.\n\t *\n\t * @author tschw\n\t */\n\n\tfunction DiscreteInterpolant( parameterPositions, sampleValues, sampleSize, resultBuffer ) {\n\n\t\tInterpolant.call( this, parameterPositions, sampleValues, sampleSize, resultBuffer );\n\n\t}\n\n\tDiscreteInterpolant.prototype = Object.assign( Object.create( Interpolant.prototype ), {\n\n\t\tconstructor: DiscreteInterpolant,\n\n\t\tinterpolate_: function ( i1 /*, t0, t, t1 */ ) {\n\n\t\t\treturn this.copySampleValue_( i1 - 1 );\n\n\t\t}\n\n\t} );\n\n\tvar KeyframeTrackPrototype;\n\n\tKeyframeTrackPrototype = {\n\n\t\tTimeBufferType: Float32Array,\n\t\tValueBufferType: Float32Array,\n\n\t\tDefaultInterpolation: InterpolateLinear,\n\n\t\tInterpolantFactoryMethodDiscrete: function ( result ) {\n\n\t\t\treturn new DiscreteInterpolant( this.times, this.values, this.getValueSize(), result );\n\n\t\t},\n\n\t\tInterpolantFactoryMethodLinear: function ( result ) {\n\n\t\t\treturn new LinearInterpolant( this.times, this.values, this.getValueSize(), result );\n\n\t\t},\n\n\t\tInterpolantFactoryMethodSmooth: function ( result ) {\n\n\t\t\treturn new CubicInterpolant( this.times, this.values, this.getValueSize(), result );\n\n\t\t},\n\n\t\tsetInterpolation: function ( interpolation ) {\n\n\t\t\tvar factoryMethod;\n\n\t\t\tswitch ( interpolation ) {\n\n\t\t\t\tcase InterpolateDiscrete:\n\n\t\t\t\t\tfactoryMethod = this.InterpolantFactoryMethodDiscrete;\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase InterpolateLinear:\n\n\t\t\t\t\tfactoryMethod = this.InterpolantFactoryMethodLinear;\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase InterpolateSmooth:\n\n\t\t\t\t\tfactoryMethod = this.InterpolantFactoryMethodSmooth;\n\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tif ( factoryMethod === undefined ) {\n\n\t\t\t\tvar message = \"unsupported interpolation for \" +\n\t\t\t\t\t\tthis.ValueTypeName + \" keyframe track named \" + this.name;\n\n\t\t\t\tif ( this.createInterpolant === undefined ) {\n\n\t\t\t\t\t// fall back to default, unless the default itself is messed up\n\t\t\t\t\tif ( interpolation !== this.DefaultInterpolation ) {\n\n\t\t\t\t\t\tthis.setInterpolation( this.DefaultInterpolation );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tthrow new Error( message ); // fatal, in this case\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tconsole.warn( 'THREE.KeyframeTrackPrototype:', message );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tthis.createInterpolant = factoryMethod;\n\n\t\t},\n\n\t\tgetInterpolation: function () {\n\n\t\t\tswitch ( this.createInterpolant ) {\n\n\t\t\t\tcase this.InterpolantFactoryMethodDiscrete:\n\n\t\t\t\t\treturn InterpolateDiscrete;\n\n\t\t\t\tcase this.InterpolantFactoryMethodLinear:\n\n\t\t\t\t\treturn InterpolateLinear;\n\n\t\t\t\tcase this.InterpolantFactoryMethodSmooth:\n\n\t\t\t\t\treturn InterpolateSmooth;\n\n\t\t\t}\n\n\t\t},\n\n\t\tgetValueSize: function () {\n\n\t\t\treturn this.values.length / this.times.length;\n\n\t\t},\n\n\t\t// move all keyframes either forwards or backwards in time\n\t\tshift: function ( timeOffset ) {\n\n\t\t\tif ( timeOffset !== 0.0 ) {\n\n\t\t\t\tvar times = this.times;\n\n\t\t\t\tfor ( var i = 0, n = times.length; i !== n; ++ i ) {\n\n\t\t\t\t\ttimes[ i ] += timeOffset;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\t// scale all keyframe times by a factor (useful for frame <-> seconds conversions)\n\t\tscale: function ( timeScale ) {\n\n\t\t\tif ( timeScale !== 1.0 ) {\n\n\t\t\t\tvar times = this.times;\n\n\t\t\t\tfor ( var i = 0, n = times.length; i !== n; ++ i ) {\n\n\t\t\t\t\ttimes[ i ] *= timeScale;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\t// removes keyframes before and after animation without changing any values within the range [startTime, endTime].\n\t\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\t\ttrim: function ( startTime, endTime ) {\n\n\t\t\tvar times = this.times,\n\t\t\t\tnKeys = times.length,\n\t\t\t\tfrom = 0,\n\t\t\t\tto = nKeys - 1;\n\n\t\t\twhile ( from !== nKeys && times[ from ] < startTime ) ++ from;\n\t\t\twhile ( to !== - 1 && times[ to ] > endTime ) -- to;\n\n\t\t\t++ to; // inclusive -> exclusive bound\n\n\t\t\tif ( from !== 0 || to !== nKeys ) {\n\n\t\t\t\t// empty tracks are forbidden, so keep at least one keyframe\n\t\t\t\tif ( from >= to ) to = Math.max( to, 1 ), from = to - 1;\n\n\t\t\t\tvar stride = this.getValueSize();\n\t\t\t\tthis.times = AnimationUtils.arraySlice( times, from, to );\n\t\t\t\tthis.values = AnimationUtils.arraySlice( this.values, from * stride, to * stride );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\t// ensure we do not get a GarbageInGarbageOut situation, make sure tracks are at least minimally viable\n\t\tvalidate: function () {\n\n\t\t\tvar valid = true;\n\n\t\t\tvar valueSize = this.getValueSize();\n\t\t\tif ( valueSize - Math.floor( valueSize ) !== 0 ) {\n\n\t\t\t\tconsole.error( 'THREE.KeyframeTrackPrototype: Invalid value size in track.', this );\n\t\t\t\tvalid = false;\n\n\t\t\t}\n\n\t\t\tvar times = this.times,\n\t\t\t\tvalues = this.values,\n\n\t\t\t\tnKeys = times.length;\n\n\t\t\tif ( nKeys === 0 ) {\n\n\t\t\t\tconsole.error( 'THREE.KeyframeTrackPrototype: Track is empty.', this );\n\t\t\t\tvalid = false;\n\n\t\t\t}\n\n\t\t\tvar prevTime = null;\n\n\t\t\tfor ( var i = 0; i !== nKeys; i ++ ) {\n\n\t\t\t\tvar currTime = times[ i ];\n\n\t\t\t\tif ( typeof currTime === 'number' && isNaN( currTime ) ) {\n\n\t\t\t\t\tconsole.error( 'THREE.KeyframeTrackPrototype: Time is not a valid number.', this, i, currTime );\n\t\t\t\t\tvalid = false;\n\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t\tif ( prevTime !== null && prevTime > currTime ) {\n\n\t\t\t\t\tconsole.error( 'THREE.KeyframeTrackPrototype: Out of order keys.', this, i, currTime, prevTime );\n\t\t\t\t\tvalid = false;\n\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t\tprevTime = currTime;\n\n\t\t\t}\n\n\t\t\tif ( values !== undefined ) {\n\n\t\t\t\tif ( AnimationUtils.isTypedArray( values ) ) {\n\n\t\t\t\t\tfor ( var i = 0, n = values.length; i !== n; ++ i ) {\n\n\t\t\t\t\t\tvar value = values[ i ];\n\n\t\t\t\t\t\tif ( isNaN( value ) ) {\n\n\t\t\t\t\t\t\tconsole.error( 'THREE.KeyframeTrackPrototype: Value is not a valid number.', this, i, value );\n\t\t\t\t\t\t\tvalid = false;\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn valid;\n\n\t\t},\n\n\t\t// removes equivalent sequential keys as common in morph target sequences\n\t\t// (0,0,0,0,1,1,1,0,0,0,0,0,0,0) --> (0,0,1,1,0,0)\n\t\toptimize: function () {\n\n\t\t\tvar times = this.times,\n\t\t\t\tvalues = this.values,\n\t\t\t\tstride = this.getValueSize(),\n\n\t\t\t\tsmoothInterpolation = this.getInterpolation() === InterpolateSmooth,\n\n\t\t\t\twriteIndex = 1,\n\t\t\t\tlastIndex = times.length - 1;\n\n\t\t\tfor ( var i = 1; i < lastIndex; ++ i ) {\n\n\t\t\t\tvar keep = false;\n\n\t\t\t\tvar time = times[ i ];\n\t\t\t\tvar timeNext = times[ i + 1 ];\n\n\t\t\t\t// remove adjacent keyframes scheduled at the same time\n\n\t\t\t\tif ( time !== timeNext && ( i !== 1 || time !== time[ 0 ] ) ) {\n\n\t\t\t\t\tif ( ! smoothInterpolation ) {\n\n\t\t\t\t\t\t// remove unnecessary keyframes same as their neighbors\n\n\t\t\t\t\t\tvar offset = i * stride,\n\t\t\t\t\t\t\toffsetP = offset - stride,\n\t\t\t\t\t\t\toffsetN = offset + stride;\n\n\t\t\t\t\t\tfor ( var j = 0; j !== stride; ++ j ) {\n\n\t\t\t\t\t\t\tvar value = values[ offset + j ];\n\n\t\t\t\t\t\t\tif ( value !== values[ offsetP + j ] ||\n\t\t\t\t\t\t\t\t\tvalue !== values[ offsetN + j ] ) {\n\n\t\t\t\t\t\t\t\tkeep = true;\n\t\t\t\t\t\t\t\tbreak;\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 keep = true;\n\n\t\t\t\t}\n\n\t\t\t\t// in-place compaction\n\n\t\t\t\tif ( keep ) {\n\n\t\t\t\t\tif ( i !== writeIndex ) {\n\n\t\t\t\t\t\ttimes[ writeIndex ] = times[ i ];\n\n\t\t\t\t\t\tvar readOffset = i * stride,\n\t\t\t\t\t\t\twriteOffset = writeIndex * stride;\n\n\t\t\t\t\t\tfor ( var j = 0; j !== stride; ++ j )\n\n\t\t\t\t\t\t\tvalues[ writeOffset + j ] = values[ readOffset + j ];\n\n\t\t\t\t\t}\n\n\t\t\t\t\t++ writeIndex;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// flush last keyframe (compaction looks ahead)\n\n\t\t\tif ( lastIndex > 0 ) {\n\n\t\t\t\ttimes[ writeIndex ] = times[ lastIndex ];\n\n\t\t\t\tfor ( var readOffset = lastIndex * stride, writeOffset = writeIndex * stride, j = 0; j !== stride; ++ j )\n\n\t\t\t\t\tvalues[ writeOffset + j ] = values[ readOffset + j ];\n\n\t\t\t\t++ writeIndex;\n\n\t\t\t}\n\n\t\t\tif ( writeIndex !== times.length ) {\n\n\t\t\t\tthis.times = AnimationUtils.arraySlice( times, 0, writeIndex );\n\t\t\t\tthis.values = AnimationUtils.arraySlice( values, 0, writeIndex * stride );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t}\n\n\t};\n\n\tfunction KeyframeTrackConstructor( name, times, values, interpolation ) {\n\n\t\tif ( name === undefined ) throw new Error( 'track name is undefined' );\n\n\t\tif ( times === undefined || times.length === 0 ) {\n\n\t\t\tthrow new Error( 'no keyframes in track named ' + name );\n\n\t\t}\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\tthis.validate();\n\t\tthis.optimize();\n\n\t}\n\n\t/**\n\t *\n\t * A Track of vectored keyframe values.\n\t *\n\t *\n\t * @author Ben Houston / http://clara.io/\n\t * @author David Sarno / http://lighthaus.us/\n\t * @author tschw\n\t */\n\n\tfunction VectorKeyframeTrack( name, times, values, interpolation ) {\n\n\t\tKeyframeTrackConstructor.call( this, name, times, values, interpolation );\n\n\t}\n\n\tVectorKeyframeTrack.prototype = Object.assign( Object.create( KeyframeTrackPrototype ), {\n\n\t\tconstructor: VectorKeyframeTrack,\n\n\t\tValueTypeName: 'vector'\n\n\t\t// ValueBufferType is inherited\n\n\t\t// DefaultInterpolation is inherited\n\n\t} );\n\n\t/**\n\t * Spherical linear unit quaternion interpolant.\n\t *\n\t * @author tschw\n\t */\n\n\tfunction QuaternionLinearInterpolant( parameterPositions, sampleValues, sampleSize, resultBuffer ) {\n\n\t\tInterpolant.call( this, parameterPositions, sampleValues, sampleSize, resultBuffer );\n\n\t}\n\n\tQuaternionLinearInterpolant.prototype = Object.assign( Object.create( Interpolant.prototype ), {\n\n\t\tconstructor: QuaternionLinearInterpolant,\n\n\t\tinterpolate_: function ( i1, t0, t, t1 ) {\n\n\t\t\tvar result = this.resultBuffer,\n\t\t\t\tvalues = this.sampleValues,\n\t\t\t\tstride = this.valueSize,\n\n\t\t\t\toffset = i1 * stride,\n\n\t\t\t\talpha = ( t - t0 ) / ( t1 - t0 );\n\n\t\t\tfor ( var end = offset + stride; offset !== end; offset += 4 ) {\n\n\t\t\t\tQuaternion.slerpFlat( result, 0, values, offset - stride, values, offset, alpha );\n\n\t\t\t}\n\n\t\t\treturn result;\n\n\t\t}\n\n\t} );\n\n\t/**\n\t *\n\t * A Track of quaternion keyframe values.\n\t *\n\t * @author Ben Houston / http://clara.io/\n\t * @author David Sarno / http://lighthaus.us/\n\t * @author tschw\n\t */\n\n\tfunction QuaternionKeyframeTrack( name, times, values, interpolation ) {\n\n\t\tKeyframeTrackConstructor.call( this, name, times, values, interpolation );\n\n\t}\n\n\tQuaternionKeyframeTrack.prototype = Object.assign( Object.create( KeyframeTrackPrototype ), {\n\n\t\tconstructor: QuaternionKeyframeTrack,\n\n\t\tValueTypeName: 'quaternion',\n\n\t\t// ValueBufferType is inherited\n\n\t\tDefaultInterpolation: InterpolateLinear,\n\n\t\tInterpolantFactoryMethodLinear: function ( result ) {\n\n\t\t\treturn new QuaternionLinearInterpolant( this.times, this.values, this.getValueSize(), result );\n\n\t\t},\n\n\t\tInterpolantFactoryMethodSmooth: undefined // not yet implemented\n\n\t} );\n\n\t/**\n\t *\n\t * A Track of numeric keyframe values.\n\t *\n\t * @author Ben Houston / http://clara.io/\n\t * @author David Sarno / http://lighthaus.us/\n\t * @author tschw\n\t */\n\n\tfunction NumberKeyframeTrack( name, times, values, interpolation ) {\n\n\t\tKeyframeTrackConstructor.call( this, name, times, values, interpolation );\n\n\t}\n\n\tNumberKeyframeTrack.prototype = Object.assign( Object.create( KeyframeTrackPrototype ), {\n\n\t\tconstructor: NumberKeyframeTrack,\n\n\t\tValueTypeName: 'number'\n\n\t\t// ValueBufferType is inherited\n\n\t\t// DefaultInterpolation is inherited\n\n\t} );\n\n\t/**\n\t *\n\t * A Track that interpolates Strings\n\t *\n\t *\n\t * @author Ben Houston / http://clara.io/\n\t * @author David Sarno / http://lighthaus.us/\n\t * @author tschw\n\t */\n\n\tfunction StringKeyframeTrack( name, times, values, interpolation ) {\n\n\t\tKeyframeTrackConstructor.call( this, name, times, values, interpolation );\n\n\t}\n\n\tStringKeyframeTrack.prototype = Object.assign( Object.create( KeyframeTrackPrototype ), {\n\n\t\tconstructor: StringKeyframeTrack,\n\n\t\tValueTypeName: 'string',\n\t\tValueBufferType: Array,\n\n\t\tDefaultInterpolation: InterpolateDiscrete,\n\n\t\tInterpolantFactoryMethodLinear: undefined,\n\n\t\tInterpolantFactoryMethodSmooth: undefined\n\n\t} );\n\n\t/**\n\t *\n\t * A Track of Boolean keyframe values.\n\t *\n\t *\n\t * @author Ben Houston / http://clara.io/\n\t * @author David Sarno / http://lighthaus.us/\n\t * @author tschw\n\t */\n\n\tfunction BooleanKeyframeTrack( name, times, values ) {\n\n\t\tKeyframeTrackConstructor.call( this, name, times, values );\n\n\t}\n\n\tBooleanKeyframeTrack.prototype = Object.assign( Object.create( KeyframeTrackPrototype ), {\n\n\t\tconstructor: BooleanKeyframeTrack,\n\n\t\tValueTypeName: 'bool',\n\t\tValueBufferType: Array,\n\n\t\tDefaultInterpolation: InterpolateDiscrete,\n\n\t\tInterpolantFactoryMethodLinear: undefined,\n\t\tInterpolantFactoryMethodSmooth: undefined\n\n\t\t// Note: Actually this track could have a optimized / compressed\n\t\t// representation of a single value and a custom interpolant that\n\t\t// computes \"firstValue ^ isOdd( index )\".\n\n\t} );\n\n\t/**\n\t *\n\t * A Track of keyframe values that represent color.\n\t *\n\t *\n\t * @author Ben Houston / http://clara.io/\n\t * @author David Sarno / http://lighthaus.us/\n\t * @author tschw\n\t */\n\n\tfunction ColorKeyframeTrack( name, times, values, interpolation ) {\n\n\t\tKeyframeTrackConstructor.call( this, name, times, values, interpolation );\n\n\t}\n\n\tColorKeyframeTrack.prototype = Object.assign( Object.create( KeyframeTrackPrototype ), {\n\n\t\tconstructor: ColorKeyframeTrack,\n\n\t\tValueTypeName: 'color'\n\n\t\t// ValueBufferType is inherited\n\n\t\t// DefaultInterpolation is inherited\n\n\n\t\t// Note: Very basic implementation and nothing special yet.\n\t\t// However, this is the place for color space parameterization.\n\n\t} );\n\n\t/**\n\t *\n\t * A timed sequence of keyframes for a specific property.\n\t *\n\t *\n\t * @author Ben Houston / http://clara.io/\n\t * @author David Sarno / http://lighthaus.us/\n\t * @author tschw\n\t */\n\n\tfunction KeyframeTrack( name, times, values, interpolation ) {\n\n\t\tKeyframeTrackConstructor.apply( this, name, times, values, interpolation );\n\n\t}\n\n\tKeyframeTrack.prototype = KeyframeTrackPrototype;\n\tKeyframeTrackPrototype.constructor = KeyframeTrack;\n\n\t// Static methods:\n\n\tObject.assign( KeyframeTrack, {\n\n\t\t// Serialization (in static context, because of constructor invocation\n\t\t// and automatic invocation of .toJSON):\n\n\t\tparse: function ( json ) {\n\n\t\t\tif ( json.type === undefined ) {\n\n\t\t\t\tthrow new Error( 'track type undefined, can not parse' );\n\n\t\t\t}\n\n\t\t\tvar trackType = KeyframeTrack._getTrackTypeForValueTypeName( json.type );\n\n\t\t\tif ( json.times === undefined ) {\n\n\t\t\t\tvar times = [], values = [];\n\n\t\t\t\tAnimationUtils.flattenJSON( json.keys, times, values, 'value' );\n\n\t\t\t\tjson.times = times;\n\t\t\t\tjson.values = values;\n\n\t\t\t}\n\n\t\t\t// derived classes can define a static parse method\n\t\t\tif ( trackType.parse !== undefined ) {\n\n\t\t\t\treturn trackType.parse( json );\n\n\t\t\t} else {\n\n\t\t\t\t// by default, we assume a constructor compatible with the base\n\t\t\t\treturn new trackType( json.name, json.times, json.values, json.interpolation );\n\n\t\t\t}\n\n\t\t},\n\n\t\ttoJSON: function ( track ) {\n\n\t\t\tvar trackType = track.constructor;\n\n\t\t\tvar json;\n\n\t\t\t// derived classes can define a static toJSON method\n\t\t\tif ( trackType.toJSON !== undefined ) {\n\n\t\t\t\tjson = trackType.toJSON( track );\n\n\t\t\t} else {\n\n\t\t\t\t// by default, we assume the data can be serialized as-is\n\t\t\t\tjson = {\n\n\t\t\t\t\t'name': track.name,\n\t\t\t\t\t'times': AnimationUtils.convertArray( track.times, Array ),\n\t\t\t\t\t'values': AnimationUtils.convertArray( track.values, Array )\n\n\t\t\t\t};\n\n\t\t\t\tvar interpolation = track.getInterpolation();\n\n\t\t\t\tif ( interpolation !== track.DefaultInterpolation ) {\n\n\t\t\t\t\tjson.interpolation = interpolation;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tjson.type = track.ValueTypeName; // mandatory\n\n\t\t\treturn json;\n\n\t\t},\n\n\t\t_getTrackTypeForValueTypeName: function ( typeName ) {\n\n\t\t\tswitch ( typeName.toLowerCase() ) {\n\n\t\t\t\tcase 'scalar':\n\t\t\t\tcase 'double':\n\t\t\t\tcase 'float':\n\t\t\t\tcase 'number':\n\t\t\t\tcase 'integer':\n\n\t\t\t\t\treturn NumberKeyframeTrack;\n\n\t\t\t\tcase 'vector':\n\t\t\t\tcase 'vector2':\n\t\t\t\tcase 'vector3':\n\t\t\t\tcase 'vector4':\n\n\t\t\t\t\treturn VectorKeyframeTrack;\n\n\t\t\t\tcase 'color':\n\n\t\t\t\t\treturn ColorKeyframeTrack;\n\n\t\t\t\tcase 'quaternion':\n\n\t\t\t\t\treturn QuaternionKeyframeTrack;\n\n\t\t\t\tcase 'bool':\n\t\t\t\tcase 'boolean':\n\n\t\t\t\t\treturn BooleanKeyframeTrack;\n\n\t\t\t\tcase 'string':\n\n\t\t\t\t\treturn StringKeyframeTrack;\n\n\t\t\t}\n\n\t\t\tthrow new Error( 'Unsupported typeName: ' + typeName );\n\n\t\t}\n\n\t} );\n\n\t/**\n\t *\n\t * Reusable set of Tracks that represent an animation.\n\t *\n\t * @author Ben Houston / http://clara.io/\n\t * @author David Sarno / http://lighthaus.us/\n\t */\n\n\tfunction AnimationClip( name, duration, tracks ) {\n\n\t\tthis.name = name;\n\t\tthis.tracks = tracks;\n\t\tthis.duration = ( duration !== undefined ) ? duration : - 1;\n\n\t\tthis.uuid = _Math.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\tthis.optimize();\n\n\t}\n\n\tObject.assign( AnimationClip, {\n\n\t\tparse: function ( json ) {\n\n\t\t\tvar tracks = [],\n\t\t\t\tjsonTracks = json.tracks,\n\t\t\t\tframeTime = 1.0 / ( json.fps || 1.0 );\n\n\t\t\tfor ( var i = 0, n = jsonTracks.length; i !== n; ++ i ) {\n\n\t\t\t\ttracks.push( KeyframeTrack.parse( jsonTracks[ i ] ).scale( frameTime ) );\n\n\t\t\t}\n\n\t\t\treturn new AnimationClip( json.name, json.duration, tracks );\n\n\t\t},\n\n\t\ttoJSON: function ( clip ) {\n\n\t\t\tvar tracks = [],\n\t\t\t\tclipTracks = clip.tracks;\n\n\t\t\tvar json = {\n\n\t\t\t\t'name': clip.name,\n\t\t\t\t'duration': clip.duration,\n\t\t\t\t'tracks': tracks\n\n\t\t\t};\n\n\t\t\tfor ( var i = 0, n = clipTracks.length; i !== n; ++ i ) {\n\n\t\t\t\ttracks.push( KeyframeTrack.toJSON( clipTracks[ i ] ) );\n\n\t\t\t}\n\n\t\t\treturn json;\n\n\t\t},\n\n\t\tCreateFromMorphTargetSequence: function ( name, morphTargetSequence, fps, noLoop ) {\n\n\t\t\tvar numMorphTargets = morphTargetSequence.length;\n\t\t\tvar tracks = [];\n\n\t\t\tfor ( var i = 0; i < numMorphTargets; i ++ ) {\n\n\t\t\t\tvar times = [];\n\t\t\t\tvar values = [];\n\n\t\t\t\ttimes.push(\n\t\t\t\t\t( i + numMorphTargets - 1 ) % numMorphTargets,\n\t\t\t\t\ti,\n\t\t\t\t\t( i + 1 ) % numMorphTargets );\n\n\t\t\t\tvalues.push( 0, 1, 0 );\n\n\t\t\t\tvar order = AnimationUtils.getKeyframeOrder( times );\n\t\t\t\ttimes = AnimationUtils.sortedArray( times, 1, order );\n\t\t\t\tvalues = AnimationUtils.sortedArray( values, 1, order );\n\n\t\t\t\t// if there is a key at the first frame, duplicate it as the\n\t\t\t\t// last frame as well for perfect loop.\n\t\t\t\tif ( ! noLoop && times[ 0 ] === 0 ) {\n\n\t\t\t\t\ttimes.push( numMorphTargets );\n\t\t\t\t\tvalues.push( values[ 0 ] );\n\n\t\t\t\t}\n\n\t\t\t\ttracks.push(\n\t\t\t\t\tnew NumberKeyframeTrack(\n\t\t\t\t\t\t'.morphTargetInfluences[' + morphTargetSequence[ i ].name + ']',\n\t\t\t\t\t\ttimes, values\n\t\t\t\t\t).scale( 1.0 / fps ) );\n\n\t\t\t}\n\n\t\t\treturn new AnimationClip( name, - 1, tracks );\n\n\t\t},\n\n\t\tfindByName: function ( objectOrClipArray, name ) {\n\n\t\t\tvar clipArray = objectOrClipArray;\n\n\t\t\tif ( ! Array.isArray( objectOrClipArray ) ) {\n\n\t\t\t\tvar o = objectOrClipArray;\n\t\t\t\tclipArray = o.geometry && o.geometry.animations || o.animations;\n\n\t\t\t}\n\n\t\t\tfor ( var i = 0; i < clipArray.length; i ++ ) {\n\n\t\t\t\tif ( clipArray[ i ].name === name ) {\n\n\t\t\t\t\treturn clipArray[ i ];\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn null;\n\n\t\t},\n\n\t\tCreateClipsFromMorphTargetSequences: function ( morphTargets, fps, noLoop ) {\n\n\t\t\tvar animationToMorphTargets = {};\n\n\t\t\t// tested with https://regex101.com/ on trick sequences\n\t\t\t// such flamingo_flyA_003, flamingo_run1_003, crdeath0059\n\t\t\tvar pattern = /^([\\w-]*?)([\\d]+)$/;\n\n\t\t\t// sort morph target names into animation groups based\n\t\t\t// patterns like Walk_001, Walk_002, Run_001, Run_002\n\t\t\tfor ( var i = 0, il = morphTargets.length; i < il; i ++ ) {\n\n\t\t\t\tvar morphTarget = morphTargets[ i ];\n\t\t\t\tvar parts = morphTarget.name.match( pattern );\n\n\t\t\t\tif ( parts && parts.length > 1 ) {\n\n\t\t\t\t\tvar name = parts[ 1 ];\n\n\t\t\t\t\tvar animationMorphTargets = animationToMorphTargets[ name ];\n\t\t\t\t\tif ( ! animationMorphTargets ) {\n\n\t\t\t\t\t\tanimationToMorphTargets[ name ] = animationMorphTargets = [];\n\n\t\t\t\t\t}\n\n\t\t\t\t\tanimationMorphTargets.push( morphTarget );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tvar clips = [];\n\n\t\t\tfor ( var name in animationToMorphTargets ) {\n\n\t\t\t\tclips.push( AnimationClip.CreateFromMorphTargetSequence( name, animationToMorphTargets[ name ], fps, noLoop ) );\n\n\t\t\t}\n\n\t\t\treturn clips;\n\n\t\t},\n\n\t\t// parse the animation.hierarchy format\n\t\tparseAnimation: function ( animation, bones ) {\n\n\t\t\tif ( ! animation ) {\n\n\t\t\t\tconsole.error( 'THREE.AnimationClip: No animation in JSONLoader data.' );\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t\tvar addNonemptyTrack = function ( trackType, trackName, animationKeys, propertyName, destTracks ) {\n\n\t\t\t\t// only return track if there are actually keys.\n\t\t\t\tif ( animationKeys.length !== 0 ) {\n\n\t\t\t\t\tvar times = [];\n\t\t\t\t\tvar values = [];\n\n\t\t\t\t\tAnimationUtils.flattenJSON( animationKeys, times, values, propertyName );\n\n\t\t\t\t\t// empty keys are filtered out, so check again\n\t\t\t\t\tif ( times.length !== 0 ) {\n\n\t\t\t\t\t\tdestTracks.push( new trackType( trackName, times, values ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t};\n\n\t\t\tvar tracks = [];\n\n\t\t\tvar clipName = animation.name || 'default';\n\t\t\t// automatic length determination in AnimationClip.\n\t\t\tvar duration = animation.length || - 1;\n\t\t\tvar fps = animation.fps || 30;\n\n\t\t\tvar hierarchyTracks = animation.hierarchy || [];\n\n\t\t\tfor ( var h = 0; h < hierarchyTracks.length; h ++ ) {\n\n\t\t\t\tvar animationKeys = hierarchyTracks[ h ].keys;\n\n\t\t\t\t// skip empty tracks\n\t\t\t\tif ( ! animationKeys || animationKeys.length === 0 ) continue;\n\n\t\t\t\t// process morph targets\n\t\t\t\tif ( animationKeys[ 0 ].morphTargets ) {\n\n\t\t\t\t\t// figure out all morph targets used in this track\n\t\t\t\t\tvar morphTargetNames = {};\n\n\t\t\t\t\tfor ( var k = 0; k < animationKeys.length; k ++ ) {\n\n\t\t\t\t\t\tif ( animationKeys[ k ].morphTargets ) {\n\n\t\t\t\t\t\t\tfor ( var m = 0; m < animationKeys[ k ].morphTargets.length; m ++ ) {\n\n\t\t\t\t\t\t\t\tmorphTargetNames[ animationKeys[ k ].morphTargets[ m ] ] = - 1;\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\t// create a track for each morph target with all zero\n\t\t\t\t\t// morphTargetInfluences except for the keys in which\n\t\t\t\t\t// the morphTarget is named.\n\t\t\t\t\tfor ( var morphTargetName in morphTargetNames ) {\n\n\t\t\t\t\t\tvar times = [];\n\t\t\t\t\t\tvar values = [];\n\n\t\t\t\t\t\tfor ( var m = 0; m !== animationKeys[ k ].morphTargets.length; ++ m ) {\n\n\t\t\t\t\t\t\tvar animationKey = animationKeys[ k ];\n\n\t\t\t\t\t\t\ttimes.push( animationKey.time );\n\t\t\t\t\t\t\tvalues.push( ( animationKey.morphTarget === morphTargetName ) ? 1 : 0 );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\ttracks.push( new NumberKeyframeTrack( '.morphTargetInfluence[' + morphTargetName + ']', times, values ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tduration = morphTargetNames.length * ( fps || 1.0 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// ...assume skeletal animation\n\n\t\t\t\t\tvar boneName = '.bones[' + bones[ h ].name + ']';\n\n\t\t\t\t\taddNonemptyTrack(\n\t\t\t\t\t\tVectorKeyframeTrack, boneName + '.position',\n\t\t\t\t\t\tanimationKeys, 'pos', tracks );\n\n\t\t\t\t\taddNonemptyTrack(\n\t\t\t\t\t\tQuaternionKeyframeTrack, boneName + '.quaternion',\n\t\t\t\t\t\tanimationKeys, 'rot', tracks );\n\n\t\t\t\t\taddNonemptyTrack(\n\t\t\t\t\t\tVectorKeyframeTrack, boneName + '.scale',\n\t\t\t\t\t\tanimationKeys, 'scl', tracks );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( tracks.length === 0 ) {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t\tvar clip = new AnimationClip( clipName, duration, tracks );\n\n\t\t\treturn clip;\n\n\t\t}\n\n\t} );\n\n\tObject.assign( AnimationClip.prototype, {\n\n\t\tresetDuration: function () {\n\n\t\t\tvar tracks = this.tracks, duration = 0;\n\n\t\t\tfor ( var i = 0, n = tracks.length; i !== n; ++ i ) {\n\n\t\t\t\tvar track = this.tracks[ i ];\n\n\t\t\t\tduration = Math.max( duration, track.times[ track.times.length - 1 ] );\n\n\t\t\t}\n\n\t\t\tthis.duration = duration;\n\n\t\t},\n\n\t\ttrim: function () {\n\n\t\t\tfor ( var i = 0; i < this.tracks.length; i ++ ) {\n\n\t\t\t\tthis.tracks[ i ].trim( 0, this.duration );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\toptimize: function () {\n\n\t\t\tfor ( var i = 0; i < this.tracks.length; i ++ ) {\n\n\t\t\t\tthis.tracks[ i ].optimize();\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t}\n\n\t} );\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t */\n\n\tfunction MaterialLoader( manager ) {\n\n\t\tthis.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager;\n\t\tthis.textures = {};\n\n\t}\n\n\tObject.assign( MaterialLoader.prototype, {\n\n\t\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\t\tvar scope = this;\n\n\t\t\tvar loader = new FileLoader( scope.manager );\n\t\t\tloader.load( url, function ( text ) {\n\n\t\t\t\tonLoad( scope.parse( JSON.parse( text ) ) );\n\n\t\t\t}, onProgress, onError );\n\n\t\t},\n\n\t\tsetTextures: function ( value ) {\n\n\t\t\tthis.textures = value;\n\n\t\t},\n\n\t\tparse: function ( json ) {\n\n\t\t\tvar textures = this.textures;\n\n\t\t\tfunction getTexture( name ) {\n\n\t\t\t\tif ( textures[ name ] === undefined ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.MaterialLoader: Undefined texture', name );\n\n\t\t\t\t}\n\n\t\t\t\treturn textures[ name ];\n\n\t\t\t}\n\n\t\t\tvar material = new Materials[ json.type ]();\n\n\t\t\tif ( json.uuid !== undefined ) material.uuid = json.uuid;\n\t\t\tif ( json.name !== undefined ) material.name = json.name;\n\t\t\tif ( json.color !== undefined ) material.color.setHex( json.color );\n\t\t\tif ( json.roughness !== undefined ) material.roughness = json.roughness;\n\t\t\tif ( json.metalness !== undefined ) material.metalness = json.metalness;\n\t\t\tif ( json.emissive !== undefined ) material.emissive.setHex( json.emissive );\n\t\t\tif ( json.specular !== undefined ) material.specular.setHex( json.specular );\n\t\t\tif ( json.shininess !== undefined ) material.shininess = json.shininess;\n\t\t\tif ( json.clearCoat !== undefined ) material.clearCoat = json.clearCoat;\n\t\t\tif ( json.clearCoatRoughness !== undefined ) material.clearCoatRoughness = json.clearCoatRoughness;\n\t\t\tif ( json.uniforms !== undefined ) material.uniforms = json.uniforms;\n\t\t\tif ( json.vertexShader !== undefined ) material.vertexShader = json.vertexShader;\n\t\t\tif ( json.fragmentShader !== undefined ) material.fragmentShader = json.fragmentShader;\n\t\t\tif ( json.vertexColors !== undefined ) material.vertexColors = json.vertexColors;\n\t\t\tif ( json.fog !== undefined ) material.fog = json.fog;\n\t\t\tif ( json.flatShading !== undefined ) material.flatShading = json.flatShading;\n\t\t\tif ( json.blending !== undefined ) material.blending = json.blending;\n\t\t\tif ( json.side !== undefined ) material.side = json.side;\n\t\t\tif ( json.opacity !== undefined ) material.opacity = json.opacity;\n\t\t\tif ( json.transparent !== undefined ) material.transparent = json.transparent;\n\t\t\tif ( json.alphaTest !== undefined ) material.alphaTest = json.alphaTest;\n\t\t\tif ( json.depthTest !== undefined ) material.depthTest = json.depthTest;\n\t\t\tif ( json.depthWrite !== undefined ) material.depthWrite = json.depthWrite;\n\t\t\tif ( json.colorWrite !== undefined ) material.colorWrite = json.colorWrite;\n\t\t\tif ( json.wireframe !== undefined ) material.wireframe = json.wireframe;\n\t\t\tif ( json.wireframeLinewidth !== undefined ) material.wireframeLinewidth = json.wireframeLinewidth;\n\t\t\tif ( json.wireframeLinecap !== undefined ) material.wireframeLinecap = json.wireframeLinecap;\n\t\t\tif ( json.wireframeLinejoin !== undefined ) material.wireframeLinejoin = json.wireframeLinejoin;\n\n\t\t\tif ( json.rotation !== undefined ) material.rotation = json.rotation;\n\n\t\t\tif ( json.linewidth !== 1 ) material.linewidth = json.linewidth;\n\t\t\tif ( json.dashSize !== undefined ) material.dashSize = json.dashSize;\n\t\t\tif ( json.gapSize !== undefined ) material.gapSize = json.gapSize;\n\t\t\tif ( json.scale !== undefined ) material.scale = json.scale;\n\n\t\t\tif ( json.skinning !== undefined ) material.skinning = json.skinning;\n\t\t\tif ( json.morphTargets !== undefined ) material.morphTargets = json.morphTargets;\n\t\t\tif ( json.dithering !== undefined ) material.dithering = json.dithering;\n\n\t\t\tif ( json.visible !== undefined ) material.visible = json.visible;\n\t\t\tif ( json.userData !== undefined ) material.userData = json.userData;\n\n\t\t\t// Deprecated\n\n\t\t\tif ( json.shading !== undefined ) material.flatShading = json.shading === 1; // THREE.FlatShading\n\n\t\t\t// for PointsMaterial\n\n\t\t\tif ( json.size !== undefined ) material.size = json.size;\n\t\t\tif ( json.sizeAttenuation !== undefined ) material.sizeAttenuation = json.sizeAttenuation;\n\n\t\t\t// maps\n\n\t\t\tif ( json.map !== undefined ) material.map = getTexture( json.map );\n\n\t\t\tif ( json.alphaMap !== undefined ) {\n\n\t\t\t\tmaterial.alphaMap = getTexture( json.alphaMap );\n\t\t\t\tmaterial.transparent = true;\n\n\t\t\t}\n\n\t\t\tif ( json.bumpMap !== undefined ) material.bumpMap = getTexture( json.bumpMap );\n\t\t\tif ( json.bumpScale !== undefined ) material.bumpScale = json.bumpScale;\n\n\t\t\tif ( json.normalMap !== undefined ) material.normalMap = getTexture( json.normalMap );\n\t\t\tif ( json.normalScale !== undefined ) {\n\n\t\t\t\tvar normalScale = json.normalScale;\n\n\t\t\t\tif ( Array.isArray( normalScale ) === false ) {\n\n\t\t\t\t\t// Blender exporter used to export a scalar. See #7459\n\n\t\t\t\t\tnormalScale = [ normalScale, normalScale ];\n\n\t\t\t\t}\n\n\t\t\t\tmaterial.normalScale = new Vector2().fromArray( normalScale );\n\n\t\t\t}\n\n\t\t\tif ( json.displacementMap !== undefined ) material.displacementMap = getTexture( json.displacementMap );\n\t\t\tif ( json.displacementScale !== undefined ) material.displacementScale = json.displacementScale;\n\t\t\tif ( json.displacementBias !== undefined ) material.displacementBias = json.displacementBias;\n\n\t\t\tif ( json.roughnessMap !== undefined ) material.roughnessMap = getTexture( json.roughnessMap );\n\t\t\tif ( json.metalnessMap !== undefined ) material.metalnessMap = getTexture( json.metalnessMap );\n\n\t\t\tif ( json.emissiveMap !== undefined ) material.emissiveMap = getTexture( json.emissiveMap );\n\t\t\tif ( json.emissiveIntensity !== undefined ) material.emissiveIntensity = json.emissiveIntensity;\n\n\t\t\tif ( json.specularMap !== undefined ) material.specularMap = getTexture( json.specularMap );\n\n\t\t\tif ( json.envMap !== undefined ) material.envMap = getTexture( json.envMap );\n\n\t\t\tif ( json.reflectivity !== undefined ) material.reflectivity = json.reflectivity;\n\n\t\t\tif ( json.lightMap !== undefined ) material.lightMap = getTexture( json.lightMap );\n\t\t\tif ( json.lightMapIntensity !== undefined ) material.lightMapIntensity = json.lightMapIntensity;\n\n\t\t\tif ( json.aoMap !== undefined ) material.aoMap = getTexture( json.aoMap );\n\t\t\tif ( json.aoMapIntensity !== undefined ) material.aoMapIntensity = json.aoMapIntensity;\n\n\t\t\tif ( json.gradientMap !== undefined ) material.gradientMap = getTexture( json.gradientMap );\n\n\t\t\treturn material;\n\n\t\t}\n\n\t} );\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t */\n\n\tfunction BufferGeometryLoader( manager ) {\n\n\t\tthis.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager;\n\n\t}\n\n\tObject.assign( BufferGeometryLoader.prototype, {\n\n\t\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\t\tvar scope = this;\n\n\t\t\tvar loader = new FileLoader( scope.manager );\n\t\t\tloader.load( url, function ( text ) {\n\n\t\t\t\tonLoad( scope.parse( JSON.parse( text ) ) );\n\n\t\t\t}, onProgress, onError );\n\n\t\t},\n\n\t\tparse: function ( json ) {\n\n\t\t\tvar geometry = new BufferGeometry();\n\n\t\t\tvar index = json.data.index;\n\n\t\t\tif ( index !== undefined ) {\n\n\t\t\t\tvar typedArray = new TYPED_ARRAYS[ index.type ]( index.array );\n\t\t\t\tgeometry.setIndex( new BufferAttribute( typedArray, 1 ) );\n\n\t\t\t}\n\n\t\t\tvar attributes = json.data.attributes;\n\n\t\t\tfor ( var key in attributes ) {\n\n\t\t\t\tvar attribute = attributes[ key ];\n\t\t\t\tvar typedArray = new TYPED_ARRAYS[ attribute.type ]( attribute.array );\n\n\t\t\t\tgeometry.addAttribute( key, new BufferAttribute( typedArray, attribute.itemSize, attribute.normalized ) );\n\n\t\t\t}\n\n\t\t\tvar groups = json.data.groups || json.data.drawcalls || json.data.offsets;\n\n\t\t\tif ( groups !== undefined ) {\n\n\t\t\t\tfor ( var i = 0, n = groups.length; i !== n; ++ i ) {\n\n\t\t\t\t\tvar group = groups[ i ];\n\n\t\t\t\t\tgeometry.addGroup( group.start, group.count, group.materialIndex );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tvar boundingSphere = json.data.boundingSphere;\n\n\t\t\tif ( boundingSphere !== undefined ) {\n\n\t\t\t\tvar center = new Vector3();\n\n\t\t\t\tif ( boundingSphere.center !== undefined ) {\n\n\t\t\t\t\tcenter.fromArray( boundingSphere.center );\n\n\t\t\t\t}\n\n\t\t\t\tgeometry.boundingSphere = new Sphere( center, boundingSphere.radius );\n\n\t\t\t}\n\n\t\t\treturn geometry;\n\n\t\t}\n\n\t} );\n\n\tvar TYPED_ARRAYS = {\n\t\tInt8Array: Int8Array,\n\t\tUint8Array: Uint8Array,\n\t\t// Workaround for IE11 pre KB2929437. See #11440\n\t\tUint8ClampedArray: typeof Uint8ClampedArray !== 'undefined' ? Uint8ClampedArray : Uint8Array,\n\t\tInt16Array: Int16Array,\n\t\tUint16Array: Uint16Array,\n\t\tInt32Array: Int32Array,\n\t\tUint32Array: Uint32Array,\n\t\tFloat32Array: Float32Array,\n\t\tFloat64Array: Float64Array\n\t};\n\n\t/**\n\t * @author alteredq / http://alteredqualia.com/\n\t */\n\n\tfunction Loader() {\n\n\t\tthis.onLoadStart = function () {};\n\t\tthis.onLoadProgress = function () {};\n\t\tthis.onLoadComplete = function () {};\n\n\t}\n\n\tLoader.Handlers = {\n\n\t\thandlers: [],\n\n\t\tadd: function ( regex, loader ) {\n\n\t\t\tthis.handlers.push( regex, loader );\n\n\t\t},\n\n\t\tget: function ( file ) {\n\n\t\t\tvar handlers = this.handlers;\n\n\t\t\tfor ( var i = 0, l = handlers.length; i < l; i += 2 ) {\n\n\t\t\t\tvar regex = handlers[ i ];\n\t\t\t\tvar loader = handlers[ i + 1 ];\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\tObject.assign( Loader.prototype, {\n\n\t\tcrossOrigin: undefined,\n\n\t\textractUrlBase: function ( url ) {\n\n\t\t\tvar parts = url.split( '/' );\n\n\t\t\tif ( parts.length === 1 ) return './';\n\n\t\t\tparts.pop();\n\n\t\t\treturn parts.join( '/' ) + '/';\n\n\t\t},\n\n\t\tinitMaterials: function ( materials, texturePath, crossOrigin ) {\n\n\t\t\tvar array = [];\n\n\t\t\tfor ( var i = 0; i < materials.length; ++ i ) {\n\n\t\t\t\tarray[ i ] = this.createMaterial( materials[ i ], texturePath, crossOrigin );\n\n\t\t\t}\n\n\t\t\treturn array;\n\n\t\t},\n\n\t\tcreateMaterial: ( function () {\n\n\t\t\tvar BlendingMode = {\n\t\t\t\tNoBlending: NoBlending,\n\t\t\t\tNormalBlending: NormalBlending,\n\t\t\t\tAdditiveBlending: AdditiveBlending,\n\t\t\t\tSubtractiveBlending: SubtractiveBlending,\n\t\t\t\tMultiplyBlending: MultiplyBlending,\n\t\t\t\tCustomBlending: CustomBlending\n\t\t\t};\n\n\t\t\tvar color = new Color();\n\t\t\tvar textureLoader = new TextureLoader();\n\t\t\tvar materialLoader = new MaterialLoader();\n\n\t\t\treturn function createMaterial( m, texturePath, crossOrigin ) {\n\n\t\t\t\t// convert from old material format\n\n\t\t\t\tvar textures = {};\n\n\t\t\t\tfunction loadTexture( path, repeat, offset, wrap, anisotropy ) {\n\n\t\t\t\t\tvar fullPath = texturePath + path;\n\t\t\t\t\tvar loader = Loader.Handlers.get( fullPath );\n\n\t\t\t\t\tvar texture;\n\n\t\t\t\t\tif ( loader !== null ) {\n\n\t\t\t\t\t\ttexture = loader.load( fullPath );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\ttextureLoader.setCrossOrigin( crossOrigin );\n\t\t\t\t\t\ttexture = textureLoader.load( fullPath );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( repeat !== undefined ) {\n\n\t\t\t\t\t\ttexture.repeat.fromArray( repeat );\n\n\t\t\t\t\t\tif ( repeat[ 0 ] !== 1 ) texture.wrapS = RepeatWrapping;\n\t\t\t\t\t\tif ( repeat[ 1 ] !== 1 ) texture.wrapT = RepeatWrapping;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( offset !== undefined ) {\n\n\t\t\t\t\t\ttexture.offset.fromArray( offset );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( wrap !== undefined ) {\n\n\t\t\t\t\t\tif ( wrap[ 0 ] === 'repeat' ) texture.wrapS = RepeatWrapping;\n\t\t\t\t\t\tif ( wrap[ 0 ] === 'mirror' ) texture.wrapS = MirroredRepeatWrapping;\n\n\t\t\t\t\t\tif ( wrap[ 1 ] === 'repeat' ) texture.wrapT = RepeatWrapping;\n\t\t\t\t\t\tif ( wrap[ 1 ] === 'mirror' ) texture.wrapT = MirroredRepeatWrapping;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( anisotropy !== undefined ) {\n\n\t\t\t\t\t\ttexture.anisotropy = anisotropy;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tvar uuid = _Math.generateUUID();\n\n\t\t\t\t\ttextures[ uuid ] = texture;\n\n\t\t\t\t\treturn uuid;\n\n\t\t\t\t}\n\n\t\t\t\t//\n\n\t\t\t\tvar json = {\n\t\t\t\t\tuuid: _Math.generateUUID(),\n\t\t\t\t\ttype: 'MeshLambertMaterial'\n\t\t\t\t};\n\n\t\t\t\tfor ( var name in m ) {\n\n\t\t\t\t\tvar value = m[ name ];\n\n\t\t\t\t\tswitch ( name ) {\n\n\t\t\t\t\t\tcase 'DbgColor':\n\t\t\t\t\t\tcase 'DbgIndex':\n\t\t\t\t\t\tcase 'opticalDensity':\n\t\t\t\t\t\tcase 'illumination':\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'DbgName':\n\t\t\t\t\t\t\tjson.name = value;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'blending':\n\t\t\t\t\t\t\tjson.blending = BlendingMode[ value ];\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'colorAmbient':\n\t\t\t\t\t\tcase 'mapAmbient':\n\t\t\t\t\t\t\tconsole.warn( 'THREE.Loader.createMaterial:', name, 'is no longer supported.' );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'colorDiffuse':\n\t\t\t\t\t\t\tjson.color = color.fromArray( value ).getHex();\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'colorSpecular':\n\t\t\t\t\t\t\tjson.specular = color.fromArray( value ).getHex();\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'colorEmissive':\n\t\t\t\t\t\t\tjson.emissive = color.fromArray( value ).getHex();\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'specularCoef':\n\t\t\t\t\t\t\tjson.shininess = value;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'shading':\n\t\t\t\t\t\t\tif ( value.toLowerCase() === 'basic' ) json.type = 'MeshBasicMaterial';\n\t\t\t\t\t\t\tif ( value.toLowerCase() === 'phong' ) json.type = 'MeshPhongMaterial';\n\t\t\t\t\t\t\tif ( value.toLowerCase() === 'standard' ) json.type = 'MeshStandardMaterial';\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'mapDiffuse':\n\t\t\t\t\t\t\tjson.map = loadTexture( value, m.mapDiffuseRepeat, m.mapDiffuseOffset, m.mapDiffuseWrap, m.mapDiffuseAnisotropy );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'mapDiffuseRepeat':\n\t\t\t\t\t\tcase 'mapDiffuseOffset':\n\t\t\t\t\t\tcase 'mapDiffuseWrap':\n\t\t\t\t\t\tcase 'mapDiffuseAnisotropy':\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'mapEmissive':\n\t\t\t\t\t\t\tjson.emissiveMap = loadTexture( value, m.mapEmissiveRepeat, m.mapEmissiveOffset, m.mapEmissiveWrap, m.mapEmissiveAnisotropy );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'mapEmissiveRepeat':\n\t\t\t\t\t\tcase 'mapEmissiveOffset':\n\t\t\t\t\t\tcase 'mapEmissiveWrap':\n\t\t\t\t\t\tcase 'mapEmissiveAnisotropy':\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'mapLight':\n\t\t\t\t\t\t\tjson.lightMap = loadTexture( value, m.mapLightRepeat, m.mapLightOffset, m.mapLightWrap, m.mapLightAnisotropy );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'mapLightRepeat':\n\t\t\t\t\t\tcase 'mapLightOffset':\n\t\t\t\t\t\tcase 'mapLightWrap':\n\t\t\t\t\t\tcase 'mapLightAnisotropy':\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'mapAO':\n\t\t\t\t\t\t\tjson.aoMap = loadTexture( value, m.mapAORepeat, m.mapAOOffset, m.mapAOWrap, m.mapAOAnisotropy );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'mapAORepeat':\n\t\t\t\t\t\tcase 'mapAOOffset':\n\t\t\t\t\t\tcase 'mapAOWrap':\n\t\t\t\t\t\tcase 'mapAOAnisotropy':\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'mapBump':\n\t\t\t\t\t\t\tjson.bumpMap = loadTexture( value, m.mapBumpRepeat, m.mapBumpOffset, m.mapBumpWrap, m.mapBumpAnisotropy );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'mapBumpScale':\n\t\t\t\t\t\t\tjson.bumpScale = value;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'mapBumpRepeat':\n\t\t\t\t\t\tcase 'mapBumpOffset':\n\t\t\t\t\t\tcase 'mapBumpWrap':\n\t\t\t\t\t\tcase 'mapBumpAnisotropy':\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'mapNormal':\n\t\t\t\t\t\t\tjson.normalMap = loadTexture( value, m.mapNormalRepeat, m.mapNormalOffset, m.mapNormalWrap, m.mapNormalAnisotropy );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'mapNormalFactor':\n\t\t\t\t\t\t\tjson.normalScale = [ value, value ];\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'mapNormalRepeat':\n\t\t\t\t\t\tcase 'mapNormalOffset':\n\t\t\t\t\t\tcase 'mapNormalWrap':\n\t\t\t\t\t\tcase 'mapNormalAnisotropy':\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'mapSpecular':\n\t\t\t\t\t\t\tjson.specularMap = loadTexture( value, m.mapSpecularRepeat, m.mapSpecularOffset, m.mapSpecularWrap, m.mapSpecularAnisotropy );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'mapSpecularRepeat':\n\t\t\t\t\t\tcase 'mapSpecularOffset':\n\t\t\t\t\t\tcase 'mapSpecularWrap':\n\t\t\t\t\t\tcase 'mapSpecularAnisotropy':\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'mapMetalness':\n\t\t\t\t\t\t\tjson.metalnessMap = loadTexture( value, m.mapMetalnessRepeat, m.mapMetalnessOffset, m.mapMetalnessWrap, m.mapMetalnessAnisotropy );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'mapMetalnessRepeat':\n\t\t\t\t\t\tcase 'mapMetalnessOffset':\n\t\t\t\t\t\tcase 'mapMetalnessWrap':\n\t\t\t\t\t\tcase 'mapMetalnessAnisotropy':\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'mapRoughness':\n\t\t\t\t\t\t\tjson.roughnessMap = loadTexture( value, m.mapRoughnessRepeat, m.mapRoughnessOffset, m.mapRoughnessWrap, m.mapRoughnessAnisotropy );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'mapRoughnessRepeat':\n\t\t\t\t\t\tcase 'mapRoughnessOffset':\n\t\t\t\t\t\tcase 'mapRoughnessWrap':\n\t\t\t\t\t\tcase 'mapRoughnessAnisotropy':\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'mapAlpha':\n\t\t\t\t\t\t\tjson.alphaMap = loadTexture( value, m.mapAlphaRepeat, m.mapAlphaOffset, m.mapAlphaWrap, m.mapAlphaAnisotropy );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'mapAlphaRepeat':\n\t\t\t\t\t\tcase 'mapAlphaOffset':\n\t\t\t\t\t\tcase 'mapAlphaWrap':\n\t\t\t\t\t\tcase 'mapAlphaAnisotropy':\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'flipSided':\n\t\t\t\t\t\t\tjson.side = BackSide;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'doubleSided':\n\t\t\t\t\t\t\tjson.side = DoubleSide;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'transparency':\n\t\t\t\t\t\t\tconsole.warn( 'THREE.Loader.createMaterial: transparency has been renamed to opacity' );\n\t\t\t\t\t\t\tjson.opacity = value;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'depthTest':\n\t\t\t\t\t\tcase 'depthWrite':\n\t\t\t\t\t\tcase 'colorWrite':\n\t\t\t\t\t\tcase 'opacity':\n\t\t\t\t\t\tcase 'reflectivity':\n\t\t\t\t\t\tcase 'transparent':\n\t\t\t\t\t\tcase 'visible':\n\t\t\t\t\t\tcase 'wireframe':\n\t\t\t\t\t\t\tjson[ name ] = value;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'vertexColors':\n\t\t\t\t\t\t\tif ( value === true ) json.vertexColors = VertexColors;\n\t\t\t\t\t\t\tif ( value === 'face' ) json.vertexColors = FaceColors;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tconsole.error( 'THREE.Loader.createMaterial: Unsupported', name, value );\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\tif ( json.type === 'MeshBasicMaterial' ) delete json.emissive;\n\t\t\t\tif ( json.type !== 'MeshPhongMaterial' ) delete json.specular;\n\n\t\t\t\tif ( json.opacity < 1 ) json.transparent = true;\n\n\t\t\t\tmaterialLoader.setTextures( textures );\n\n\t\t\t\treturn materialLoader.parse( json );\n\n\t\t\t};\n\n\t\t} )()\n\n\t} );\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t * @author alteredq / http://alteredqualia.com/\n\t */\n\n\tfunction JSONLoader( manager ) {\n\n\t\tif ( typeof manager === 'boolean' ) {\n\n\t\t\tconsole.warn( 'THREE.JSONLoader: showStatus parameter has been removed from constructor.' );\n\t\t\tmanager = undefined;\n\n\t\t}\n\n\t\tthis.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager;\n\n\t\tthis.withCredentials = false;\n\n\t}\n\n\tObject.assign( JSONLoader.prototype, {\n\n\t\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\t\tvar scope = this;\n\n\t\t\tvar texturePath = this.texturePath && ( typeof this.texturePath === \"string\" ) ? this.texturePath : Loader.prototype.extractUrlBase( url );\n\n\t\t\tvar loader = new FileLoader( this.manager );\n\t\t\tloader.setWithCredentials( this.withCredentials );\n\t\t\tloader.load( url, function ( text ) {\n\n\t\t\t\tvar json = JSON.parse( text );\n\t\t\t\tvar metadata = json.metadata;\n\n\t\t\t\tif ( metadata !== undefined ) {\n\n\t\t\t\t\tvar type = metadata.type;\n\n\t\t\t\t\tif ( type !== undefined ) {\n\n\t\t\t\t\t\tif ( type.toLowerCase() === 'object' ) {\n\n\t\t\t\t\t\t\tconsole.error( 'THREE.JSONLoader: ' + url + ' should be loaded with THREE.ObjectLoader instead.' );\n\t\t\t\t\t\t\treturn;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( type.toLowerCase() === 'scene' ) {\n\n\t\t\t\t\t\t\tconsole.error( 'THREE.JSONLoader: ' + url + ' should be loaded with THREE.SceneLoader instead.' );\n\t\t\t\t\t\t\treturn;\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\tvar object = scope.parse( json, texturePath );\n\t\t\t\tonLoad( object.geometry, object.materials );\n\n\t\t\t}, onProgress, onError );\n\n\t\t},\n\n\t\tsetTexturePath: function ( value ) {\n\n\t\t\tthis.texturePath = value;\n\n\t\t},\n\n\t\tparse: ( function () {\n\n\t\t\tfunction parseModel( json, geometry ) {\n\n\t\t\t\tfunction isBitSet( value, position ) {\n\n\t\t\t\t\treturn value & ( 1 << position );\n\n\t\t\t\t}\n\n\t\t\t\tvar i, j, fi,\n\n\t\t\t\t\toffset, zLength,\n\n\t\t\t\t\tcolorIndex, normalIndex, uvIndex, materialIndex,\n\n\t\t\t\t\ttype,\n\t\t\t\t\tisQuad,\n\t\t\t\t\thasMaterial,\n\t\t\t\t\thasFaceVertexUv,\n\t\t\t\t\thasFaceNormal, hasFaceVertexNormal,\n\t\t\t\t\thasFaceColor, hasFaceVertexColor,\n\n\t\t\t\t\tvertex, face, faceA, faceB, hex, normal,\n\n\t\t\t\t\tuvLayer, uv, u, v,\n\n\t\t\t\t\tfaces = json.faces,\n\t\t\t\t\tvertices = json.vertices,\n\t\t\t\t\tnormals = json.normals,\n\t\t\t\t\tcolors = json.colors,\n\n\t\t\t\t\tscale = json.scale,\n\n\t\t\t\t\tnUvLayers = 0;\n\n\n\t\t\t\tif ( json.uvs !== undefined ) {\n\n\t\t\t\t\t// disregard empty arrays\n\n\t\t\t\t\tfor ( i = 0; i < json.uvs.length; i ++ ) {\n\n\t\t\t\t\t\tif ( json.uvs[ i ].length ) nUvLayers ++;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tfor ( i = 0; i < nUvLayers; i ++ ) {\n\n\t\t\t\t\t\tgeometry.faceVertexUvs[ i ] = [];\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\toffset = 0;\n\t\t\t\tzLength = vertices.length;\n\n\t\t\t\twhile ( offset < zLength ) {\n\n\t\t\t\t\tvertex = new Vector3();\n\n\t\t\t\t\tvertex.x = vertices[ offset ++ ] * scale;\n\t\t\t\t\tvertex.y = vertices[ offset ++ ] * scale;\n\t\t\t\t\tvertex.z = vertices[ offset ++ ] * scale;\n\n\t\t\t\t\tgeometry.vertices.push( vertex );\n\n\t\t\t\t}\n\n\t\t\t\toffset = 0;\n\t\t\t\tzLength = faces.length;\n\n\t\t\t\twhile ( offset < zLength ) {\n\n\t\t\t\t\ttype = faces[ offset ++ ];\n\n\t\t\t\t\tisQuad = isBitSet( type, 0 );\n\t\t\t\t\thasMaterial = isBitSet( type, 1 );\n\t\t\t\t\thasFaceVertexUv = isBitSet( type, 3 );\n\t\t\t\t\thasFaceNormal = isBitSet( type, 4 );\n\t\t\t\t\thasFaceVertexNormal = isBitSet( type, 5 );\n\t\t\t\t\thasFaceColor = isBitSet( type, 6 );\n\t\t\t\t\thasFaceVertexColor = isBitSet( type, 7 );\n\n\t\t\t\t\t// console.log(\"type\", type, \"bits\", isQuad, hasMaterial, hasFaceVertexUv, hasFaceNormal, hasFaceVertexNormal, hasFaceColor, hasFaceVertexColor);\n\n\t\t\t\t\tif ( isQuad ) {\n\n\t\t\t\t\t\tfaceA = new Face3();\n\t\t\t\t\t\tfaceA.a = faces[ offset ];\n\t\t\t\t\t\tfaceA.b = faces[ offset + 1 ];\n\t\t\t\t\t\tfaceA.c = faces[ offset + 3 ];\n\n\t\t\t\t\t\tfaceB = new Face3();\n\t\t\t\t\t\tfaceB.a = faces[ offset + 1 ];\n\t\t\t\t\t\tfaceB.b = faces[ offset + 2 ];\n\t\t\t\t\t\tfaceB.c = faces[ offset + 3 ];\n\n\t\t\t\t\t\toffset += 4;\n\n\t\t\t\t\t\tif ( hasMaterial ) {\n\n\t\t\t\t\t\t\tmaterialIndex = faces[ offset ++ ];\n\t\t\t\t\t\t\tfaceA.materialIndex = materialIndex;\n\t\t\t\t\t\t\tfaceB.materialIndex = materialIndex;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// to get face <=> uv index correspondence\n\n\t\t\t\t\t\tfi = geometry.faces.length;\n\n\t\t\t\t\t\tif ( hasFaceVertexUv ) {\n\n\t\t\t\t\t\t\tfor ( i = 0; i < nUvLayers; i ++ ) {\n\n\t\t\t\t\t\t\t\tuvLayer = json.uvs[ i ];\n\n\t\t\t\t\t\t\t\tgeometry.faceVertexUvs[ i ][ fi ] = [];\n\t\t\t\t\t\t\t\tgeometry.faceVertexUvs[ i ][ fi + 1 ] = [];\n\n\t\t\t\t\t\t\t\tfor ( j = 0; j < 4; j ++ ) {\n\n\t\t\t\t\t\t\t\t\tuvIndex = faces[ offset ++ ];\n\n\t\t\t\t\t\t\t\t\tu = uvLayer[ uvIndex * 2 ];\n\t\t\t\t\t\t\t\t\tv = uvLayer[ uvIndex * 2 + 1 ];\n\n\t\t\t\t\t\t\t\t\tuv = new Vector2( u, v );\n\n\t\t\t\t\t\t\t\t\tif ( j !== 2 ) geometry.faceVertexUvs[ i ][ fi ].push( uv );\n\t\t\t\t\t\t\t\t\tif ( j !== 0 ) geometry.faceVertexUvs[ i ][ fi + 1 ].push( uv );\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( hasFaceNormal ) {\n\n\t\t\t\t\t\t\tnormalIndex = faces[ offset ++ ] * 3;\n\n\t\t\t\t\t\t\tfaceA.normal.set(\n\t\t\t\t\t\t\t\tnormals[ normalIndex ++ ],\n\t\t\t\t\t\t\t\tnormals[ normalIndex ++ ],\n\t\t\t\t\t\t\t\tnormals[ normalIndex ]\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\tfaceB.normal.copy( faceA.normal );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( hasFaceVertexNormal ) {\n\n\t\t\t\t\t\t\tfor ( i = 0; i < 4; i ++ ) {\n\n\t\t\t\t\t\t\t\tnormalIndex = faces[ offset ++ ] * 3;\n\n\t\t\t\t\t\t\t\tnormal = new Vector3(\n\t\t\t\t\t\t\t\t\tnormals[ normalIndex ++ ],\n\t\t\t\t\t\t\t\t\tnormals[ normalIndex ++ ],\n\t\t\t\t\t\t\t\t\tnormals[ normalIndex ]\n\t\t\t\t\t\t\t\t);\n\n\n\t\t\t\t\t\t\t\tif ( i !== 2 ) faceA.vertexNormals.push( normal );\n\t\t\t\t\t\t\t\tif ( i !== 0 ) faceB.vertexNormals.push( normal );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\n\t\t\t\t\t\tif ( hasFaceColor ) {\n\n\t\t\t\t\t\t\tcolorIndex = faces[ offset ++ ];\n\t\t\t\t\t\t\thex = colors[ colorIndex ];\n\n\t\t\t\t\t\t\tfaceA.color.setHex( hex );\n\t\t\t\t\t\t\tfaceB.color.setHex( hex );\n\n\t\t\t\t\t\t}\n\n\n\t\t\t\t\t\tif ( hasFaceVertexColor ) {\n\n\t\t\t\t\t\t\tfor ( i = 0; i < 4; i ++ ) {\n\n\t\t\t\t\t\t\t\tcolorIndex = faces[ offset ++ ];\n\t\t\t\t\t\t\t\thex = colors[ colorIndex ];\n\n\t\t\t\t\t\t\t\tif ( i !== 2 ) faceA.vertexColors.push( new Color( hex ) );\n\t\t\t\t\t\t\t\tif ( i !== 0 ) faceB.vertexColors.push( new Color( hex ) );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tgeometry.faces.push( faceA );\n\t\t\t\t\t\tgeometry.faces.push( faceB );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tface = new Face3();\n\t\t\t\t\t\tface.a = faces[ offset ++ ];\n\t\t\t\t\t\tface.b = faces[ offset ++ ];\n\t\t\t\t\t\tface.c = faces[ offset ++ ];\n\n\t\t\t\t\t\tif ( hasMaterial ) {\n\n\t\t\t\t\t\t\tmaterialIndex = faces[ offset ++ ];\n\t\t\t\t\t\t\tface.materialIndex = materialIndex;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// to get face <=> uv index correspondence\n\n\t\t\t\t\t\tfi = geometry.faces.length;\n\n\t\t\t\t\t\tif ( hasFaceVertexUv ) {\n\n\t\t\t\t\t\t\tfor ( i = 0; i < nUvLayers; i ++ ) {\n\n\t\t\t\t\t\t\t\tuvLayer = json.uvs[ i ];\n\n\t\t\t\t\t\t\t\tgeometry.faceVertexUvs[ i ][ fi ] = [];\n\n\t\t\t\t\t\t\t\tfor ( j = 0; j < 3; j ++ ) {\n\n\t\t\t\t\t\t\t\t\tuvIndex = faces[ offset ++ ];\n\n\t\t\t\t\t\t\t\t\tu = uvLayer[ uvIndex * 2 ];\n\t\t\t\t\t\t\t\t\tv = uvLayer[ uvIndex * 2 + 1 ];\n\n\t\t\t\t\t\t\t\t\tuv = new Vector2( u, v );\n\n\t\t\t\t\t\t\t\t\tgeometry.faceVertexUvs[ i ][ fi ].push( uv );\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( hasFaceNormal ) {\n\n\t\t\t\t\t\t\tnormalIndex = faces[ offset ++ ] * 3;\n\n\t\t\t\t\t\t\tface.normal.set(\n\t\t\t\t\t\t\t\tnormals[ normalIndex ++ ],\n\t\t\t\t\t\t\t\tnormals[ normalIndex ++ ],\n\t\t\t\t\t\t\t\tnormals[ normalIndex ]\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( hasFaceVertexNormal ) {\n\n\t\t\t\t\t\t\tfor ( i = 0; i < 3; i ++ ) {\n\n\t\t\t\t\t\t\t\tnormalIndex = faces[ offset ++ ] * 3;\n\n\t\t\t\t\t\t\t\tnormal = new Vector3(\n\t\t\t\t\t\t\t\t\tnormals[ normalIndex ++ ],\n\t\t\t\t\t\t\t\t\tnormals[ normalIndex ++ ],\n\t\t\t\t\t\t\t\t\tnormals[ normalIndex ]\n\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\tface.vertexNormals.push( normal );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\n\t\t\t\t\t\tif ( hasFaceColor ) {\n\n\t\t\t\t\t\t\tcolorIndex = faces[ offset ++ ];\n\t\t\t\t\t\t\tface.color.setHex( colors[ colorIndex ] );\n\n\t\t\t\t\t\t}\n\n\n\t\t\t\t\t\tif ( hasFaceVertexColor ) {\n\n\t\t\t\t\t\t\tfor ( i = 0; i < 3; i ++ ) {\n\n\t\t\t\t\t\t\t\tcolorIndex = faces[ offset ++ ];\n\t\t\t\t\t\t\t\tface.vertexColors.push( new Color( colors[ colorIndex ] ) );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tgeometry.faces.push( face );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tfunction parseSkin( json, geometry ) {\n\n\t\t\t\tvar influencesPerVertex = ( json.influencesPerVertex !== undefined ) ? json.influencesPerVertex : 2;\n\n\t\t\t\tif ( json.skinWeights ) {\n\n\t\t\t\t\tfor ( var i = 0, l = json.skinWeights.length; i < l; i += influencesPerVertex ) {\n\n\t\t\t\t\t\tvar x = json.skinWeights[ i ];\n\t\t\t\t\t\tvar y = ( influencesPerVertex > 1 ) ? json.skinWeights[ i + 1 ] : 0;\n\t\t\t\t\t\tvar z = ( influencesPerVertex > 2 ) ? json.skinWeights[ i + 2 ] : 0;\n\t\t\t\t\t\tvar w = ( influencesPerVertex > 3 ) ? json.skinWeights[ i + 3 ] : 0;\n\n\t\t\t\t\t\tgeometry.skinWeights.push( new Vector4( x, y, z, w ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( json.skinIndices ) {\n\n\t\t\t\t\tfor ( var i = 0, l = json.skinIndices.length; i < l; i += influencesPerVertex ) {\n\n\t\t\t\t\t\tvar a = json.skinIndices[ i ];\n\t\t\t\t\t\tvar b = ( influencesPerVertex > 1 ) ? json.skinIndices[ i + 1 ] : 0;\n\t\t\t\t\t\tvar c = ( influencesPerVertex > 2 ) ? json.skinIndices[ i + 2 ] : 0;\n\t\t\t\t\t\tvar d = ( influencesPerVertex > 3 ) ? json.skinIndices[ i + 3 ] : 0;\n\n\t\t\t\t\t\tgeometry.skinIndices.push( new Vector4( a, b, c, d ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tgeometry.bones = json.bones;\n\n\t\t\t\tif ( geometry.bones && geometry.bones.length > 0 && ( geometry.skinWeights.length !== geometry.skinIndices.length || geometry.skinIndices.length !== geometry.vertices.length ) ) {\n\n\t\t\t\t\tconsole.warn( 'When skinning, number of vertices (' + geometry.vertices.length + '), skinIndices (' +\n\t\t\t\t\t\tgeometry.skinIndices.length + '), and skinWeights (' + geometry.skinWeights.length + ') should match.' );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tfunction parseMorphing( json, geometry ) {\n\n\t\t\t\tvar scale = json.scale;\n\n\t\t\t\tif ( json.morphTargets !== undefined ) {\n\n\t\t\t\t\tfor ( var i = 0, l = json.morphTargets.length; i < l; i ++ ) {\n\n\t\t\t\t\t\tgeometry.morphTargets[ i ] = {};\n\t\t\t\t\t\tgeometry.morphTargets[ i ].name = json.morphTargets[ i ].name;\n\t\t\t\t\t\tgeometry.morphTargets[ i ].vertices = [];\n\n\t\t\t\t\t\tvar dstVertices = geometry.morphTargets[ i ].vertices;\n\t\t\t\t\t\tvar srcVertices = json.morphTargets[ i ].vertices;\n\n\t\t\t\t\t\tfor ( var v = 0, vl = srcVertices.length; v < vl; v += 3 ) {\n\n\t\t\t\t\t\t\tvar vertex = new Vector3();\n\t\t\t\t\t\t\tvertex.x = srcVertices[ v ] * scale;\n\t\t\t\t\t\t\tvertex.y = srcVertices[ v + 1 ] * scale;\n\t\t\t\t\t\t\tvertex.z = srcVertices[ v + 2 ] * scale;\n\n\t\t\t\t\t\t\tdstVertices.push( vertex );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( json.morphColors !== undefined && json.morphColors.length > 0 ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.JSONLoader: \"morphColors\" no longer supported. Using them as face colors.' );\n\n\t\t\t\t\tvar faces = geometry.faces;\n\t\t\t\t\tvar morphColors = json.morphColors[ 0 ].colors;\n\n\t\t\t\t\tfor ( var i = 0, l = faces.length; i < l; i ++ ) {\n\n\t\t\t\t\t\tfaces[ i ].color.fromArray( morphColors, i * 3 );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tfunction parseAnimations( json, geometry ) {\n\n\t\t\t\tvar outputAnimations = [];\n\n\t\t\t\t// parse old style Bone/Hierarchy animations\n\t\t\t\tvar animations = [];\n\n\t\t\t\tif ( json.animation !== undefined ) {\n\n\t\t\t\t\tanimations.push( json.animation );\n\n\t\t\t\t}\n\n\t\t\t\tif ( json.animations !== undefined ) {\n\n\t\t\t\t\tif ( json.animations.length ) {\n\n\t\t\t\t\t\tanimations = animations.concat( json.animations );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tanimations.push( json.animations );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tfor ( var i = 0; i < animations.length; i ++ ) {\n\n\t\t\t\t\tvar clip = AnimationClip.parseAnimation( animations[ i ], geometry.bones );\n\t\t\t\t\tif ( clip ) outputAnimations.push( clip );\n\n\t\t\t\t}\n\n\t\t\t\t// parse implicit morph animations\n\t\t\t\tif ( geometry.morphTargets ) {\n\n\t\t\t\t\t// TODO: Figure out what an appropraite FPS is for morph target animations -- defaulting to 10, but really it is completely arbitrary.\n\t\t\t\t\tvar morphAnimationClips = AnimationClip.CreateClipsFromMorphTargetSequences( geometry.morphTargets, 10 );\n\t\t\t\t\toutputAnimations = outputAnimations.concat( morphAnimationClips );\n\n\t\t\t\t}\n\n\t\t\t\tif ( outputAnimations.length > 0 ) geometry.animations = outputAnimations;\n\n\t\t\t}\n\n\t\t\treturn function ( json, texturePath ) {\n\n\t\t\t\tif ( json.data !== undefined ) {\n\n\t\t\t\t\t// Geometry 4.0 spec\n\t\t\t\t\tjson = json.data;\n\n\t\t\t\t}\n\n\t\t\t\tif ( json.scale !== undefined ) {\n\n\t\t\t\t\tjson.scale = 1.0 / json.scale;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tjson.scale = 1.0;\n\n\t\t\t\t}\n\n\t\t\t\tvar geometry = new Geometry();\n\n\t\t\t\tparseModel( json, geometry );\n\t\t\t\tparseSkin( json, geometry );\n\t\t\t\tparseMorphing( json, geometry );\n\t\t\t\tparseAnimations( json, geometry );\n\n\t\t\t\tgeometry.computeFaceNormals();\n\t\t\t\tgeometry.computeBoundingSphere();\n\n\t\t\t\tif ( json.materials === undefined || json.materials.length === 0 ) {\n\n\t\t\t\t\treturn { geometry: geometry };\n\n\t\t\t\t} else {\n\n\t\t\t\t\tvar materials = Loader.prototype.initMaterials( json.materials, texturePath, this.crossOrigin );\n\n\t\t\t\t\treturn { geometry: geometry, materials: materials };\n\n\t\t\t\t}\n\n\t\t\t};\n\n\t\t} )()\n\n\t} );\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t */\n\n\tfunction ObjectLoader( manager ) {\n\n\t\tthis.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager;\n\t\tthis.texturePath = '';\n\n\t}\n\n\tObject.assign( ObjectLoader.prototype, {\n\n\t\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\t\tif ( this.texturePath === '' ) {\n\n\t\t\t\tthis.texturePath = url.substring( 0, url.lastIndexOf( '/' ) + 1 );\n\n\t\t\t}\n\n\t\t\tvar scope = this;\n\n\t\t\tvar loader = new FileLoader( scope.manager );\n\t\t\tloader.load( url, function ( text ) {\n\n\t\t\t\tvar json = null;\n\n\t\t\t\ttry {\n\n\t\t\t\t\tjson = JSON.parse( text );\n\n\t\t\t\t} catch ( error ) {\n\n\t\t\t\t\tif ( onError !== undefined ) onError( error );\n\n\t\t\t\t\tconsole.error( 'THREE:ObjectLoader: Can\\'t parse ' + url + '.', error.message );\n\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t\tvar metadata = json.metadata;\n\n\t\t\t\tif ( metadata === undefined || metadata.type === undefined || metadata.type.toLowerCase() === 'geometry' ) {\n\n\t\t\t\t\tconsole.error( 'THREE.ObjectLoader: Can\\'t load ' + url + '. Use THREE.JSONLoader instead.' );\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t\tscope.parse( json, onLoad );\n\n\t\t\t}, onProgress, onError );\n\n\t\t},\n\n\t\tsetTexturePath: function ( value ) {\n\n\t\t\tthis.texturePath = value;\n\n\t\t},\n\n\t\tsetCrossOrigin: function ( value ) {\n\n\t\t\tthis.crossOrigin = value;\n\n\t\t},\n\n\t\tparse: function ( json, onLoad ) {\n\n\t\t\tvar geometries = this.parseGeometries( json.geometries );\n\n\t\t\tvar images = this.parseImages( json.images, function () {\n\n\t\t\t\tif ( onLoad !== undefined ) onLoad( object );\n\n\t\t\t} );\n\n\t\t\tvar textures = this.parseTextures( json.textures, images );\n\t\t\tvar materials = this.parseMaterials( json.materials, textures );\n\n\t\t\tvar object = this.parseObject( json.object, geometries, materials );\n\n\t\t\tif ( json.animations ) {\n\n\t\t\t\tobject.animations = this.parseAnimations( json.animations );\n\n\t\t\t}\n\n\t\t\tif ( json.images === undefined || json.images.length === 0 ) {\n\n\t\t\t\tif ( onLoad !== undefined ) onLoad( object );\n\n\t\t\t}\n\n\t\t\treturn object;\n\n\t\t},\n\n\t\tparseGeometries: function ( json ) {\n\n\t\t\tvar geometries = {};\n\n\t\t\tif ( json !== undefined ) {\n\n\t\t\t\tvar geometryLoader = new JSONLoader();\n\t\t\t\tvar bufferGeometryLoader = new BufferGeometryLoader();\n\n\t\t\t\tfor ( var i = 0, l = json.length; i < l; i ++ ) {\n\n\t\t\t\t\tvar geometry;\n\t\t\t\t\tvar data = json[ i ];\n\n\t\t\t\t\tswitch ( data.type ) {\n\n\t\t\t\t\t\tcase 'PlaneGeometry':\n\t\t\t\t\t\tcase 'PlaneBufferGeometry':\n\n\t\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\t\tdata.width,\n\t\t\t\t\t\t\t\tdata.height,\n\t\t\t\t\t\t\t\tdata.widthSegments,\n\t\t\t\t\t\t\t\tdata.heightSegments\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'BoxGeometry':\n\t\t\t\t\t\tcase 'BoxBufferGeometry':\n\t\t\t\t\t\tcase 'CubeGeometry': // backwards compatible\n\n\t\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\t\tdata.width,\n\t\t\t\t\t\t\t\tdata.height,\n\t\t\t\t\t\t\t\tdata.depth,\n\t\t\t\t\t\t\t\tdata.widthSegments,\n\t\t\t\t\t\t\t\tdata.heightSegments,\n\t\t\t\t\t\t\t\tdata.depthSegments\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'CircleGeometry':\n\t\t\t\t\t\tcase 'CircleBufferGeometry':\n\n\t\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\t\tdata.radius,\n\t\t\t\t\t\t\t\tdata.segments,\n\t\t\t\t\t\t\t\tdata.thetaStart,\n\t\t\t\t\t\t\t\tdata.thetaLength\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'CylinderGeometry':\n\t\t\t\t\t\tcase 'CylinderBufferGeometry':\n\n\t\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\t\tdata.radiusTop,\n\t\t\t\t\t\t\t\tdata.radiusBottom,\n\t\t\t\t\t\t\t\tdata.height,\n\t\t\t\t\t\t\t\tdata.radialSegments,\n\t\t\t\t\t\t\t\tdata.heightSegments,\n\t\t\t\t\t\t\t\tdata.openEnded,\n\t\t\t\t\t\t\t\tdata.thetaStart,\n\t\t\t\t\t\t\t\tdata.thetaLength\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'ConeGeometry':\n\t\t\t\t\t\tcase 'ConeBufferGeometry':\n\n\t\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\t\tdata.radius,\n\t\t\t\t\t\t\t\tdata.height,\n\t\t\t\t\t\t\t\tdata.radialSegments,\n\t\t\t\t\t\t\t\tdata.heightSegments,\n\t\t\t\t\t\t\t\tdata.openEnded,\n\t\t\t\t\t\t\t\tdata.thetaStart,\n\t\t\t\t\t\t\t\tdata.thetaLength\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'SphereGeometry':\n\t\t\t\t\t\tcase 'SphereBufferGeometry':\n\n\t\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\t\tdata.radius,\n\t\t\t\t\t\t\t\tdata.widthSegments,\n\t\t\t\t\t\t\t\tdata.heightSegments,\n\t\t\t\t\t\t\t\tdata.phiStart,\n\t\t\t\t\t\t\t\tdata.phiLength,\n\t\t\t\t\t\t\t\tdata.thetaStart,\n\t\t\t\t\t\t\t\tdata.thetaLength\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'DodecahedronGeometry':\n\t\t\t\t\t\tcase 'DodecahedronBufferGeometry':\n\t\t\t\t\t\tcase 'IcosahedronGeometry':\n\t\t\t\t\t\tcase 'IcosahedronBufferGeometry':\n\t\t\t\t\t\tcase 'OctahedronGeometry':\n\t\t\t\t\t\tcase 'OctahedronBufferGeometry':\n\t\t\t\t\t\tcase 'TetrahedronGeometry':\n\t\t\t\t\t\tcase 'TetrahedronBufferGeometry':\n\n\t\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\t\tdata.radius,\n\t\t\t\t\t\t\t\tdata.detail\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'RingGeometry':\n\t\t\t\t\t\tcase 'RingBufferGeometry':\n\n\t\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\t\tdata.innerRadius,\n\t\t\t\t\t\t\t\tdata.outerRadius,\n\t\t\t\t\t\t\t\tdata.thetaSegments,\n\t\t\t\t\t\t\t\tdata.phiSegments,\n\t\t\t\t\t\t\t\tdata.thetaStart,\n\t\t\t\t\t\t\t\tdata.thetaLength\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'TorusGeometry':\n\t\t\t\t\t\tcase 'TorusBufferGeometry':\n\n\t\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\t\tdata.radius,\n\t\t\t\t\t\t\t\tdata.tube,\n\t\t\t\t\t\t\t\tdata.radialSegments,\n\t\t\t\t\t\t\t\tdata.tubularSegments,\n\t\t\t\t\t\t\t\tdata.arc\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'TorusKnotGeometry':\n\t\t\t\t\t\tcase 'TorusKnotBufferGeometry':\n\n\t\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\t\tdata.radius,\n\t\t\t\t\t\t\t\tdata.tube,\n\t\t\t\t\t\t\t\tdata.tubularSegments,\n\t\t\t\t\t\t\t\tdata.radialSegments,\n\t\t\t\t\t\t\t\tdata.p,\n\t\t\t\t\t\t\t\tdata.q\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'LatheGeometry':\n\t\t\t\t\t\tcase 'LatheBufferGeometry':\n\n\t\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\t\tdata.points,\n\t\t\t\t\t\t\t\tdata.segments,\n\t\t\t\t\t\t\t\tdata.phiStart,\n\t\t\t\t\t\t\t\tdata.phiLength\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'PolyhedronGeometry':\n\t\t\t\t\t\tcase 'PolyhedronBufferGeometry':\n\n\t\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\t\tdata.vertices,\n\t\t\t\t\t\t\t\tdata.indices,\n\t\t\t\t\t\t\t\tdata.radius,\n\t\t\t\t\t\t\t\tdata.details\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'BufferGeometry':\n\n\t\t\t\t\t\t\tgeometry = bufferGeometryLoader.parse( data );\n\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'Geometry':\n\n\t\t\t\t\t\t\tgeometry = geometryLoader.parse( data, this.texturePath ).geometry;\n\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tdefault:\n\n\t\t\t\t\t\t\tconsole.warn( 'THREE.ObjectLoader: Unsupported geometry type \"' + data.type + '\"' );\n\n\t\t\t\t\t\t\tcontinue;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tgeometry.uuid = data.uuid;\n\n\t\t\t\t\tif ( data.name !== undefined ) geometry.name = data.name;\n\n\t\t\t\t\tgeometries[ data.uuid ] = geometry;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn geometries;\n\n\t\t},\n\n\t\tparseMaterials: function ( json, textures ) {\n\n\t\t\tvar materials = {};\n\n\t\t\tif ( json !== undefined ) {\n\n\t\t\t\tvar loader = new MaterialLoader();\n\t\t\t\tloader.setTextures( textures );\n\n\t\t\t\tfor ( var i = 0, l = json.length; i < l; i ++ ) {\n\n\t\t\t\t\tvar data = json[ i ];\n\n\t\t\t\t\tif ( data.type === 'MultiMaterial' ) {\n\n\t\t\t\t\t\t// Deprecated\n\n\t\t\t\t\t\tvar array = [];\n\n\t\t\t\t\t\tfor ( var j = 0; j < data.materials.length; j ++ ) {\n\n\t\t\t\t\t\t\tarray.push( loader.parse( data.materials[ j ] ) );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tmaterials[ data.uuid ] = array;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tmaterials[ data.uuid ] = loader.parse( data );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn materials;\n\n\t\t},\n\n\t\tparseAnimations: function ( json ) {\n\n\t\t\tvar animations = [];\n\n\t\t\tfor ( var i = 0; i < json.length; i ++ ) {\n\n\t\t\t\tvar clip = AnimationClip.parse( json[ i ] );\n\n\t\t\t\tanimations.push( clip );\n\n\t\t\t}\n\n\t\t\treturn animations;\n\n\t\t},\n\n\t\tparseImages: function ( json, onLoad ) {\n\n\t\t\tvar scope = this;\n\t\t\tvar images = {};\n\n\t\t\tfunction loadImage( url ) {\n\n\t\t\t\tscope.manager.itemStart( url );\n\n\t\t\t\treturn loader.load( url, function () {\n\n\t\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t\t}, undefined, function () {\n\n\t\t\t\t\tscope.manager.itemEnd( url );\n\t\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t\tif ( json !== undefined && json.length > 0 ) {\n\n\t\t\t\tvar manager = new LoadingManager( onLoad );\n\n\t\t\t\tvar loader = new ImageLoader( manager );\n\t\t\t\tloader.setCrossOrigin( this.crossOrigin );\n\n\t\t\t\tfor ( var i = 0, l = json.length; i < l; i ++ ) {\n\n\t\t\t\t\tvar image = json[ i ];\n\t\t\t\t\tvar path = /^(\\/\\/)|([a-z]+:(\\/\\/)?)/i.test( image.url ) ? image.url : scope.texturePath + image.url;\n\n\t\t\t\t\timages[ image.uuid ] = loadImage( path );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn images;\n\n\t\t},\n\n\t\tparseTextures: function ( json, images ) {\n\n\t\t\tfunction parseConstant( value, type ) {\n\n\t\t\t\tif ( typeof value === 'number' ) return value;\n\n\t\t\t\tconsole.warn( 'THREE.ObjectLoader.parseTexture: Constant should be in numeric form.', value );\n\n\t\t\t\treturn type[ value ];\n\n\t\t\t}\n\n\t\t\tvar textures = {};\n\n\t\t\tif ( json !== undefined ) {\n\n\t\t\t\tfor ( var i = 0, l = json.length; i < l; i ++ ) {\n\n\t\t\t\t\tvar data = json[ i ];\n\n\t\t\t\t\tif ( data.image === undefined ) {\n\n\t\t\t\t\t\tconsole.warn( 'THREE.ObjectLoader: No \"image\" specified for', data.uuid );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( images[ data.image ] === undefined ) {\n\n\t\t\t\t\t\tconsole.warn( 'THREE.ObjectLoader: Undefined image', data.image );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tvar texture = new Texture( images[ data.image ] );\n\t\t\t\t\ttexture.needsUpdate = true;\n\n\t\t\t\t\ttexture.uuid = data.uuid;\n\n\t\t\t\t\tif ( data.name !== undefined ) texture.name = data.name;\n\n\t\t\t\t\tif ( data.mapping !== undefined ) texture.mapping = parseConstant( data.mapping, TEXTURE_MAPPING );\n\n\t\t\t\t\tif ( data.offset !== undefined ) texture.offset.fromArray( data.offset );\n\t\t\t\t\tif ( data.repeat !== undefined ) texture.repeat.fromArray( data.repeat );\n\t\t\t\t\tif ( data.center !== undefined ) texture.center.fromArray( data.center );\n\t\t\t\t\tif ( data.rotation !== undefined ) texture.rotation = data.rotation;\n\n\t\t\t\t\tif ( data.wrap !== undefined ) {\n\n\t\t\t\t\t\ttexture.wrapS = parseConstant( data.wrap[ 0 ], TEXTURE_WRAPPING );\n\t\t\t\t\t\ttexture.wrapT = parseConstant( data.wrap[ 1 ], TEXTURE_WRAPPING );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( data.minFilter !== undefined ) texture.minFilter = parseConstant( data.minFilter, TEXTURE_FILTER );\n\t\t\t\t\tif ( data.magFilter !== undefined ) texture.magFilter = parseConstant( data.magFilter, TEXTURE_FILTER );\n\t\t\t\t\tif ( data.anisotropy !== undefined ) texture.anisotropy = data.anisotropy;\n\n\t\t\t\t\tif ( data.flipY !== undefined ) texture.flipY = data.flipY;\n\n\t\t\t\t\ttextures[ data.uuid ] = texture;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn textures;\n\n\t\t},\n\n\t\tparseObject: function () {\n\n\t\t\tvar matrix = new Matrix4();\n\n\t\t\treturn function parseObject( data, geometries, materials ) {\n\n\t\t\t\tvar object;\n\n\t\t\t\tfunction getGeometry( name ) {\n\n\t\t\t\t\tif ( geometries[ name ] === undefined ) {\n\n\t\t\t\t\t\tconsole.warn( 'THREE.ObjectLoader: Undefined geometry', name );\n\n\t\t\t\t\t}\n\n\t\t\t\t\treturn geometries[ name ];\n\n\t\t\t\t}\n\n\t\t\t\tfunction getMaterial( name ) {\n\n\t\t\t\t\tif ( name === undefined ) return undefined;\n\n\t\t\t\t\tif ( Array.isArray( name ) ) {\n\n\t\t\t\t\t\tvar array = [];\n\n\t\t\t\t\t\tfor ( var i = 0, l = name.length; i < l; i ++ ) {\n\n\t\t\t\t\t\t\tvar uuid = name[ i ];\n\n\t\t\t\t\t\t\tif ( materials[ uuid ] === undefined ) {\n\n\t\t\t\t\t\t\t\tconsole.warn( 'THREE.ObjectLoader: Undefined material', uuid );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tarray.push( materials[ uuid ] );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn array;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( materials[ name ] === undefined ) {\n\n\t\t\t\t\t\tconsole.warn( 'THREE.ObjectLoader: Undefined material', name );\n\n\t\t\t\t\t}\n\n\t\t\t\t\treturn materials[ name ];\n\n\t\t\t\t}\n\n\t\t\t\tswitch ( data.type ) {\n\n\t\t\t\t\tcase 'Scene':\n\n\t\t\t\t\t\tobject = new Scene();\n\n\t\t\t\t\t\tif ( data.background !== undefined ) {\n\n\t\t\t\t\t\t\tif ( Number.isInteger( data.background ) ) {\n\n\t\t\t\t\t\t\t\tobject.background = new Color( data.background );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( data.fog !== undefined ) {\n\n\t\t\t\t\t\t\tif ( data.fog.type === 'Fog' ) {\n\n\t\t\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\t\t} else if ( data.fog.type === 'FogExp2' ) {\n\n\t\t\t\t\t\t\t\tobject.fog = new FogExp2( data.fog.color, data.fog.density );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'PerspectiveCamera':\n\n\t\t\t\t\t\tobject = new PerspectiveCamera( data.fov, data.aspect, data.near, data.far );\n\n\t\t\t\t\t\tif ( data.focus !== undefined ) object.focus = data.focus;\n\t\t\t\t\t\tif ( data.zoom !== undefined ) object.zoom = data.zoom;\n\t\t\t\t\t\tif ( data.filmGauge !== undefined ) object.filmGauge = data.filmGauge;\n\t\t\t\t\t\tif ( data.filmOffset !== undefined ) object.filmOffset = data.filmOffset;\n\t\t\t\t\t\tif ( data.view !== undefined ) object.view = Object.assign( {}, data.view );\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'OrthographicCamera':\n\n\t\t\t\t\t\tobject = new OrthographicCamera( data.left, data.right, data.top, data.bottom, data.near, data.far );\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'AmbientLight':\n\n\t\t\t\t\t\tobject = new AmbientLight( data.color, data.intensity );\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'DirectionalLight':\n\n\t\t\t\t\t\tobject = new DirectionalLight( data.color, data.intensity );\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'PointLight':\n\n\t\t\t\t\t\tobject = new PointLight( data.color, data.intensity, data.distance, data.decay );\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'RectAreaLight':\n\n\t\t\t\t\t\tobject = new RectAreaLight( data.color, data.intensity, data.width, data.height );\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'SpotLight':\n\n\t\t\t\t\t\tobject = new SpotLight( data.color, data.intensity, data.distance, data.angle, data.penumbra, data.decay );\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'HemisphereLight':\n\n\t\t\t\t\t\tobject = new HemisphereLight( data.color, data.groundColor, data.intensity );\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'SkinnedMesh':\n\n\t\t\t\t\t\tconsole.warn( 'THREE.ObjectLoader.parseObject() does not support SkinnedMesh yet.' );\n\n\t\t\t\t\tcase 'Mesh':\n\n\t\t\t\t\t\tvar geometry = getGeometry( data.geometry );\n\t\t\t\t\t\tvar material = getMaterial( data.material );\n\n\t\t\t\t\t\tif ( geometry.bones && geometry.bones.length > 0 ) {\n\n\t\t\t\t\t\t\tobject = new SkinnedMesh( geometry, material );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tobject = new Mesh( geometry, material );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'LOD':\n\n\t\t\t\t\t\tobject = new LOD();\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'Line':\n\n\t\t\t\t\t\tobject = new Line( getGeometry( data.geometry ), getMaterial( data.material ), data.mode );\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'LineLoop':\n\n\t\t\t\t\t\tobject = new LineLoop( getGeometry( data.geometry ), getMaterial( data.material ) );\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'LineSegments':\n\n\t\t\t\t\t\tobject = new LineSegments( getGeometry( data.geometry ), getMaterial( data.material ) );\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'PointCloud':\n\t\t\t\t\tcase 'Points':\n\n\t\t\t\t\t\tobject = new Points( getGeometry( data.geometry ), getMaterial( data.material ) );\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'Sprite':\n\n\t\t\t\t\t\tobject = new Sprite( getMaterial( data.material ) );\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'Group':\n\n\t\t\t\t\t\tobject = new Group();\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\n\t\t\t\t\t\tobject = new Object3D();\n\n\t\t\t\t}\n\n\t\t\t\tobject.uuid = data.uuid;\n\n\t\t\t\tif ( data.name !== undefined ) object.name = data.name;\n\t\t\t\tif ( data.matrix !== undefined ) {\n\n\t\t\t\t\tmatrix.fromArray( data.matrix );\n\t\t\t\t\tmatrix.decompose( object.position, object.quaternion, object.scale );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( data.position !== undefined ) object.position.fromArray( data.position );\n\t\t\t\t\tif ( data.rotation !== undefined ) object.rotation.fromArray( data.rotation );\n\t\t\t\t\tif ( data.quaternion !== undefined ) object.quaternion.fromArray( data.quaternion );\n\t\t\t\t\tif ( data.scale !== undefined ) object.scale.fromArray( data.scale );\n\n\t\t\t\t}\n\n\t\t\t\tif ( data.castShadow !== undefined ) object.castShadow = data.castShadow;\n\t\t\t\tif ( data.receiveShadow !== undefined ) object.receiveShadow = data.receiveShadow;\n\n\t\t\t\tif ( data.shadow ) {\n\n\t\t\t\t\tif ( data.shadow.bias !== undefined ) object.shadow.bias = data.shadow.bias;\n\t\t\t\t\tif ( data.shadow.radius !== undefined ) object.shadow.radius = data.shadow.radius;\n\t\t\t\t\tif ( data.shadow.mapSize !== undefined ) object.shadow.mapSize.fromArray( data.shadow.mapSize );\n\t\t\t\t\tif ( data.shadow.camera !== undefined ) object.shadow.camera = this.parseObject( data.shadow.camera );\n\n\t\t\t\t}\n\n\t\t\t\tif ( data.visible !== undefined ) object.visible = data.visible;\n\t\t\t\tif ( data.userData !== undefined ) object.userData = data.userData;\n\n\t\t\t\tif ( data.children !== undefined ) {\n\n\t\t\t\t\tvar children = data.children;\n\n\t\t\t\t\tfor ( var i = 0; i < children.length; i ++ ) {\n\n\t\t\t\t\t\tobject.add( this.parseObject( children[ i ], geometries, materials ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( data.type === 'LOD' ) {\n\n\t\t\t\t\tvar levels = data.levels;\n\n\t\t\t\t\tfor ( var l = 0; l < levels.length; l ++ ) {\n\n\t\t\t\t\t\tvar level = levels[ l ];\n\t\t\t\t\t\tvar child = object.getObjectByProperty( 'uuid', level.object );\n\n\t\t\t\t\t\tif ( child !== undefined ) {\n\n\t\t\t\t\t\t\tobject.addLevel( child, level.distance );\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\treturn object;\n\n\t\t\t};\n\n\t\t}()\n\n\t} );\n\n\tvar TEXTURE_MAPPING = {\n\t\tUVMapping: UVMapping,\n\t\tCubeReflectionMapping: CubeReflectionMapping,\n\t\tCubeRefractionMapping: CubeRefractionMapping,\n\t\tEquirectangularReflectionMapping: EquirectangularReflectionMapping,\n\t\tEquirectangularRefractionMapping: EquirectangularRefractionMapping,\n\t\tSphericalReflectionMapping: SphericalReflectionMapping,\n\t\tCubeUVReflectionMapping: CubeUVReflectionMapping,\n\t\tCubeUVRefractionMapping: CubeUVRefractionMapping\n\t};\n\n\tvar TEXTURE_WRAPPING = {\n\t\tRepeatWrapping: RepeatWrapping,\n\t\tClampToEdgeWrapping: ClampToEdgeWrapping,\n\t\tMirroredRepeatWrapping: MirroredRepeatWrapping\n\t};\n\n\tvar TEXTURE_FILTER = {\n\t\tNearestFilter: NearestFilter,\n\t\tNearestMipMapNearestFilter: NearestMipMapNearestFilter,\n\t\tNearestMipMapLinearFilter: NearestMipMapLinearFilter,\n\t\tLinearFilter: LinearFilter,\n\t\tLinearMipMapNearestFilter: LinearMipMapNearestFilter,\n\t\tLinearMipMapLinearFilter: LinearMipMapLinearFilter\n\t};\n\n\t/**\n\t * @author zz85 / http://www.lab4games.net/zz85/blog\n\t *\n\t * Bezier Curves formulas obtained from\n\t * http://en.wikipedia.org/wiki/Bézier_curve\n\t */\n\n\tfunction CatmullRom( t, p0, p1, p2, p3 ) {\n\n\t\tvar v0 = ( p2 - p0 ) * 0.5;\n\t\tvar v1 = ( p3 - p1 ) * 0.5;\n\t\tvar t2 = t * t;\n\t\tvar t3 = t * t2;\n\t\treturn ( 2 * p1 - 2 * p2 + v0 + v1 ) * t3 + ( - 3 * p1 + 3 * p2 - 2 * v0 - v1 ) * t2 + v0 * t + p1;\n\n\t}\n\n\t//\n\n\tfunction QuadraticBezierP0( t, p ) {\n\n\t\tvar k = 1 - t;\n\t\treturn k * k * p;\n\n\t}\n\n\tfunction QuadraticBezierP1( t, p ) {\n\n\t\treturn 2 * ( 1 - t ) * t * p;\n\n\t}\n\n\tfunction QuadraticBezierP2( t, p ) {\n\n\t\treturn t * t * p;\n\n\t}\n\n\tfunction QuadraticBezier( t, p0, p1, p2 ) {\n\n\t\treturn QuadraticBezierP0( t, p0 ) + QuadraticBezierP1( t, p1 ) +\n\t\t\tQuadraticBezierP2( t, p2 );\n\n\t}\n\n\t//\n\n\tfunction CubicBezierP0( t, p ) {\n\n\t\tvar k = 1 - t;\n\t\treturn k * k * k * p;\n\n\t}\n\n\tfunction CubicBezierP1( t, p ) {\n\n\t\tvar k = 1 - t;\n\t\treturn 3 * k * k * t * p;\n\n\t}\n\n\tfunction CubicBezierP2( t, p ) {\n\n\t\treturn 3 * ( 1 - t ) * t * t * p;\n\n\t}\n\n\tfunction CubicBezierP3( t, p ) {\n\n\t\treturn t * t * t * p;\n\n\t}\n\n\tfunction CubicBezier( t, p0, p1, p2, p3 ) {\n\n\t\treturn CubicBezierP0( t, p0 ) + CubicBezierP1( t, p1 ) + CubicBezierP2( t, p2 ) +\n\t\t\tCubicBezierP3( t, p3 );\n\n\t}\n\n\t/**\n\t * @author zz85 / http://www.lab4games.net/zz85/blog\n\t * Extensible curve object\n\t *\n\t * Some common of curve methods:\n\t * .getPoint( t, optionalTarget ), .getTangent( t )\n\t * .getPointAt( u, optionalTarget ), .getTangentAt( u )\n\t * .getPoints(), .getSpacedPoints()\n\t * .getLength()\n\t * .updateArcLengths()\n\t *\n\t * This following curves inherit from THREE.Curve:\n\t *\n\t * -- 2D curves --\n\t * THREE.ArcCurve\n\t * THREE.CubicBezierCurve\n\t * THREE.EllipseCurve\n\t * THREE.LineCurve\n\t * THREE.QuadraticBezierCurve\n\t * THREE.SplineCurve\n\t *\n\t * -- 3D curves --\n\t * THREE.CatmullRomCurve3\n\t * THREE.CubicBezierCurve3\n\t * THREE.LineCurve3\n\t * THREE.QuadraticBezierCurve3\n\t *\n\t * A series of curves can be represented as a THREE.CurvePath.\n\t *\n\t **/\n\n\t/**************************************************************\n\t *\tAbstract Curve base class\n\t **************************************************************/\n\n\tfunction Curve() {\n\n\t\tthis.type = 'Curve';\n\n\t\tthis.arcLengthDivisions = 200;\n\n\t}\n\n\tObject.assign( Curve.prototype, {\n\n\t\t// Virtual base class method to overwrite and implement in subclasses\n\t\t//\t- t [0 .. 1]\n\n\t\tgetPoint: function ( /* t, optionalTarget */ ) {\n\n\t\t\tconsole.warn( 'THREE.Curve: .getPoint() not implemented.' );\n\t\t\treturn null;\n\n\t\t},\n\n\t\t// Get point at relative position in curve according to arc length\n\t\t// - u [0 .. 1]\n\n\t\tgetPointAt: function ( u, optionalTarget ) {\n\n\t\t\tvar t = this.getUtoTmapping( u );\n\t\t\treturn this.getPoint( t, optionalTarget );\n\n\t\t},\n\n\t\t// Get sequence of points using getPoint( t )\n\n\t\tgetPoints: function ( divisions ) {\n\n\t\t\tif ( divisions === undefined ) divisions = 5;\n\n\t\t\tvar points = [];\n\n\t\t\tfor ( var d = 0; d <= divisions; d ++ ) {\n\n\t\t\t\tpoints.push( this.getPoint( d / divisions ) );\n\n\t\t\t}\n\n\t\t\treturn points;\n\n\t\t},\n\n\t\t// Get sequence of points using getPointAt( u )\n\n\t\tgetSpacedPoints: function ( divisions ) {\n\n\t\t\tif ( divisions === undefined ) divisions = 5;\n\n\t\t\tvar points = [];\n\n\t\t\tfor ( var d = 0; d <= divisions; d ++ ) {\n\n\t\t\t\tpoints.push( this.getPointAt( d / divisions ) );\n\n\t\t\t}\n\n\t\t\treturn points;\n\n\t\t},\n\n\t\t// Get total curve arc length\n\n\t\tgetLength: function () {\n\n\t\t\tvar lengths = this.getLengths();\n\t\t\treturn lengths[ lengths.length - 1 ];\n\n\t\t},\n\n\t\t// Get list of cumulative segment lengths\n\n\t\tgetLengths: function ( divisions ) {\n\n\t\t\tif ( divisions === undefined ) divisions = this.arcLengthDivisions;\n\n\t\t\tif ( this.cacheArcLengths &&\n\t\t\t\t( this.cacheArcLengths.length === divisions + 1 ) &&\n\t\t\t\t! this.needsUpdate ) {\n\n\t\t\t\treturn this.cacheArcLengths;\n\n\t\t\t}\n\n\t\t\tthis.needsUpdate = false;\n\n\t\t\tvar cache = [];\n\t\t\tvar current, last = this.getPoint( 0 );\n\t\t\tvar p, sum = 0;\n\n\t\t\tcache.push( 0 );\n\n\t\t\tfor ( p = 1; p <= divisions; p ++ ) {\n\n\t\t\t\tcurrent = this.getPoint( p / divisions );\n\t\t\t\tsum += current.distanceTo( last );\n\t\t\t\tcache.push( sum );\n\t\t\t\tlast = current;\n\n\t\t\t}\n\n\t\t\tthis.cacheArcLengths = cache;\n\n\t\t\treturn cache; // { sums: cache, sum: sum }; Sum is in the last element.\n\n\t\t},\n\n\t\tupdateArcLengths: function () {\n\n\t\t\tthis.needsUpdate = true;\n\t\t\tthis.getLengths();\n\n\t\t},\n\n\t\t// Given u ( 0 .. 1 ), get a t to find p. This gives you points which are equidistant\n\n\t\tgetUtoTmapping: function ( u, distance ) {\n\n\t\t\tvar arcLengths = this.getLengths();\n\n\t\t\tvar i = 0, il = arcLengths.length;\n\n\t\t\tvar targetArcLength; // The targeted u distance value to get\n\n\t\t\tif ( distance ) {\n\n\t\t\t\ttargetArcLength = distance;\n\n\t\t\t} else {\n\n\t\t\t\ttargetArcLength = u * arcLengths[ il - 1 ];\n\n\t\t\t}\n\n\t\t\t// binary search for the index with largest value smaller than target u distance\n\n\t\t\tvar low = 0, high = il - 1, comparison;\n\n\t\t\twhile ( low <= high ) {\n\n\t\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\t\tcomparison = arcLengths[ i ] - targetArcLength;\n\n\t\t\t\tif ( comparison < 0 ) {\n\n\t\t\t\t\tlow = i + 1;\n\n\t\t\t\t} else if ( comparison > 0 ) {\n\n\t\t\t\t\thigh = i - 1;\n\n\t\t\t\t} else {\n\n\t\t\t\t\thigh = i;\n\t\t\t\t\tbreak;\n\n\t\t\t\t\t// DONE\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\ti = high;\n\n\t\t\tif ( arcLengths[ i ] === targetArcLength ) {\n\n\t\t\t\treturn i / ( il - 1 );\n\n\t\t\t}\n\n\t\t\t// we could get finer grain at lengths, or use simple interpolation between two points\n\n\t\t\tvar lengthBefore = arcLengths[ i ];\n\t\t\tvar lengthAfter = arcLengths[ i + 1 ];\n\n\t\t\tvar segmentLength = lengthAfter - lengthBefore;\n\n\t\t\t// determine where we are between the 'before' and 'after' points\n\n\t\t\tvar segmentFraction = ( targetArcLength - lengthBefore ) / segmentLength;\n\n\t\t\t// add that fractional amount to t\n\n\t\t\tvar t = ( i + segmentFraction ) / ( il - 1 );\n\n\t\t\treturn t;\n\n\t\t},\n\n\t\t// Returns a unit vector tangent at t\n\t\t// In case any sub curve does not implement its tangent derivation,\n\t\t// 2 points a small delta apart will be used to find its gradient\n\t\t// which seems to give a reasonable approximation\n\n\t\tgetTangent: function ( t ) {\n\n\t\t\tvar delta = 0.0001;\n\t\t\tvar t1 = t - delta;\n\t\t\tvar t2 = t + delta;\n\n\t\t\t// Capping in case of danger\n\n\t\t\tif ( t1 < 0 ) t1 = 0;\n\t\t\tif ( t2 > 1 ) t2 = 1;\n\n\t\t\tvar pt1 = this.getPoint( t1 );\n\t\t\tvar pt2 = this.getPoint( t2 );\n\n\t\t\tvar vec = pt2.clone().sub( pt1 );\n\t\t\treturn vec.normalize();\n\n\t\t},\n\n\t\tgetTangentAt: function ( u ) {\n\n\t\t\tvar t = this.getUtoTmapping( u );\n\t\t\treturn this.getTangent( t );\n\n\t\t},\n\n\t\tcomputeFrenetFrames: function ( segments, closed ) {\n\n\t\t\t// see http://www.cs.indiana.edu/pub/techreports/TR425.pdf\n\n\t\t\tvar normal = new Vector3();\n\n\t\t\tvar tangents = [];\n\t\t\tvar normals = [];\n\t\t\tvar binormals = [];\n\n\t\t\tvar vec = new Vector3();\n\t\t\tvar mat = new Matrix4();\n\n\t\t\tvar i, u, theta;\n\n\t\t\t// compute the tangent vectors for each segment on the curve\n\n\t\t\tfor ( i = 0; i <= segments; i ++ ) {\n\n\t\t\t\tu = i / segments;\n\n\t\t\t\ttangents[ i ] = this.getTangentAt( u );\n\t\t\t\ttangents[ i ].normalize();\n\n\t\t\t}\n\n\t\t\t// select an initial normal vector perpendicular to the first tangent vector,\n\t\t\t// and in the direction of the minimum tangent xyz component\n\n\t\t\tnormals[ 0 ] = new Vector3();\n\t\t\tbinormals[ 0 ] = new Vector3();\n\t\t\tvar min = Number.MAX_VALUE;\n\t\t\tvar tx = Math.abs( tangents[ 0 ].x );\n\t\t\tvar ty = Math.abs( tangents[ 0 ].y );\n\t\t\tvar tz = Math.abs( tangents[ 0 ].z );\n\n\t\t\tif ( tx <= min ) {\n\n\t\t\t\tmin = tx;\n\t\t\t\tnormal.set( 1, 0, 0 );\n\n\t\t\t}\n\n\t\t\tif ( ty <= min ) {\n\n\t\t\t\tmin = ty;\n\t\t\t\tnormal.set( 0, 1, 0 );\n\n\t\t\t}\n\n\t\t\tif ( tz <= min ) {\n\n\t\t\t\tnormal.set( 0, 0, 1 );\n\n\t\t\t}\n\n\t\t\tvec.crossVectors( tangents[ 0 ], normal ).normalize();\n\n\t\t\tnormals[ 0 ].crossVectors( tangents[ 0 ], vec );\n\t\t\tbinormals[ 0 ].crossVectors( tangents[ 0 ], normals[ 0 ] );\n\n\n\t\t\t// compute the slowly-varying normal and binormal vectors for each segment on the curve\n\n\t\t\tfor ( i = 1; i <= segments; i ++ ) {\n\n\t\t\t\tnormals[ i ] = normals[ i - 1 ].clone();\n\n\t\t\t\tbinormals[ i ] = binormals[ i - 1 ].clone();\n\n\t\t\t\tvec.crossVectors( tangents[ i - 1 ], tangents[ i ] );\n\n\t\t\t\tif ( vec.length() > Number.EPSILON ) {\n\n\t\t\t\t\tvec.normalize();\n\n\t\t\t\t\ttheta = Math.acos( _Math.clamp( tangents[ i - 1 ].dot( tangents[ i ] ), - 1, 1 ) ); // clamp for floating pt errors\n\n\t\t\t\t\tnormals[ i ].applyMatrix4( mat.makeRotationAxis( vec, theta ) );\n\n\t\t\t\t}\n\n\t\t\t\tbinormals[ i ].crossVectors( tangents[ i ], normals[ i ] );\n\n\t\t\t}\n\n\t\t\t// if the curve is closed, postprocess the vectors so the first and last normal vectors are the same\n\n\t\t\tif ( closed === true ) {\n\n\t\t\t\ttheta = Math.acos( _Math.clamp( normals[ 0 ].dot( normals[ segments ] ), - 1, 1 ) );\n\t\t\t\ttheta /= segments;\n\n\t\t\t\tif ( tangents[ 0 ].dot( vec.crossVectors( normals[ 0 ], normals[ segments ] ) ) > 0 ) {\n\n\t\t\t\t\ttheta = - theta;\n\n\t\t\t\t}\n\n\t\t\t\tfor ( i = 1; i <= segments; i ++ ) {\n\n\t\t\t\t\t// twist a little...\n\t\t\t\t\tnormals[ i ].applyMatrix4( mat.makeRotationAxis( tangents[ i ], theta * i ) );\n\t\t\t\t\tbinormals[ i ].crossVectors( tangents[ i ], normals[ i ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\ttangents: tangents,\n\t\t\t\tnormals: normals,\n\t\t\t\tbinormals: binormals\n\t\t\t};\n\n\t\t},\n\n\t\tclone: function () {\n\n\t\t\treturn new this.constructor().copy( this );\n\n\t\t},\n\n\t\tcopy: function ( source ) {\n\n\t\t\tthis.arcLengthDivisions = source.arcLengthDivisions;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t} );\n\n\tfunction LineCurve( v1, v2 ) {\n\n\t\tCurve.call( this );\n\n\t\tthis.type = 'LineCurve';\n\n\t\tthis.v1 = v1 || new Vector2();\n\t\tthis.v2 = v2 || new Vector2();\n\n\t}\n\n\tLineCurve.prototype = Object.create( Curve.prototype );\n\tLineCurve.prototype.constructor = LineCurve;\n\n\tLineCurve.prototype.isLineCurve = true;\n\n\tLineCurve.prototype.getPoint = function ( t, optionalTarget ) {\n\n\t\tvar point = optionalTarget || new Vector2();\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\n\tLineCurve.prototype.getPointAt = function ( u, optionalTarget ) {\n\n\t\treturn this.getPoint( u, optionalTarget );\n\n\t};\n\n\tLineCurve.prototype.getTangent = function ( /* t */ ) {\n\n\t\tvar tangent = this.v2.clone().sub( this.v1 );\n\n\t\treturn tangent.normalize();\n\n\t};\n\n\tLineCurve.prototype.copy = function ( source ) {\n\n\t\tCurve.prototype.copy.call( this, 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\t/**\n\t * @author zz85 / http://www.lab4games.net/zz85/blog\n\t *\n\t **/\n\n\t/**************************************************************\n\t *\tCurved Path - a curve path is simply a array of connected\n\t * curves, but retains the api of a curve\n\t **************************************************************/\n\n\tfunction CurvePath() {\n\n\t\tCurve.call( this );\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\tCurvePath.prototype = Object.assign( Object.create( Curve.prototype ), {\n\n\t\tconstructor: CurvePath,\n\n\t\tadd: function ( curve ) {\n\n\t\t\tthis.curves.push( curve );\n\n\t\t},\n\n\t\tclosePath: function () {\n\n\t\t\t// Add a line curve if start and end of lines are not connected\n\t\t\tvar startPoint = this.curves[ 0 ].getPoint( 0 );\n\t\t\tvar endPoint = this.curves[ this.curves.length - 1 ].getPoint( 1 );\n\n\t\t\tif ( ! startPoint.equals( endPoint ) ) {\n\n\t\t\t\tthis.curves.push( new LineCurve( endPoint, startPoint ) );\n\n\t\t\t}\n\n\t\t},\n\n\t\t// To get accurate point with reference to\n\t\t// entire path distance at time t,\n\t\t// following has to be done:\n\n\t\t// 1. Length of each sub path have to be known\n\t\t// 2. Locate and identify type of curve\n\t\t// 3. Get t for the curve\n\t\t// 4. Return curve.getPointAt(t')\n\n\t\tgetPoint: function ( t ) {\n\n\t\t\tvar d = t * this.getLength();\n\t\t\tvar curveLengths = this.getCurveLengths();\n\t\t\tvar i = 0;\n\n\t\t\t// To think about boundaries points.\n\n\t\t\twhile ( i < curveLengths.length ) {\n\n\t\t\t\tif ( curveLengths[ i ] >= d ) {\n\n\t\t\t\t\tvar diff = curveLengths[ i ] - d;\n\t\t\t\t\tvar curve = this.curves[ i ];\n\n\t\t\t\t\tvar segmentLength = curve.getLength();\n\t\t\t\t\tvar u = segmentLength === 0 ? 0 : 1 - diff / segmentLength;\n\n\t\t\t\t\treturn curve.getPointAt( u );\n\n\t\t\t\t}\n\n\t\t\t\ti ++;\n\n\t\t\t}\n\n\t\t\treturn null;\n\n\t\t\t// loop where sum != 0, sum > d , sum+1 1 && ! points[ points.length - 1 ].equals( points[ 0 ] ) ) {\n\n\t\t\t\tpoints.push( points[ 0 ] );\n\n\t\t\t}\n\n\t\t\treturn points;\n\n\t\t},\n\n\t\tcopy: function ( source ) {\n\n\t\t\tCurve.prototype.copy.call( this, source );\n\n\t\t\tthis.curves = [];\n\n\t\t\tfor ( var i = 0, l = source.curves.length; i < l; i ++ ) {\n\n\t\t\t\tvar curve = source.curves[ i ];\n\n\t\t\t\tthis.curves.push( curve.clone() );\n\n\t\t\t}\n\n\t\t\tthis.autoClose = source.autoClose;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t} );\n\n\tfunction EllipseCurve( aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation ) {\n\n\t\tCurve.call( this );\n\n\t\tthis.type = 'EllipseCurve';\n\n\t\tthis.aX = aX || 0;\n\t\tthis.aY = aY || 0;\n\n\t\tthis.xRadius = xRadius || 1;\n\t\tthis.yRadius = yRadius || 1;\n\n\t\tthis.aStartAngle = aStartAngle || 0;\n\t\tthis.aEndAngle = aEndAngle || 2 * Math.PI;\n\n\t\tthis.aClockwise = aClockwise || false;\n\n\t\tthis.aRotation = aRotation || 0;\n\n\t}\n\n\tEllipseCurve.prototype = Object.create( Curve.prototype );\n\tEllipseCurve.prototype.constructor = EllipseCurve;\n\n\tEllipseCurve.prototype.isEllipseCurve = true;\n\n\tEllipseCurve.prototype.getPoint = function ( t, optionalTarget ) {\n\n\t\tvar point = optionalTarget || new Vector2();\n\n\t\tvar twoPi = Math.PI * 2;\n\t\tvar deltaAngle = this.aEndAngle - this.aStartAngle;\n\t\tvar 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\tvar angle = this.aStartAngle + t * deltaAngle;\n\t\tvar x = this.aX + this.xRadius * Math.cos( angle );\n\t\tvar y = this.aY + this.yRadius * Math.sin( angle );\n\n\t\tif ( this.aRotation !== 0 ) {\n\n\t\t\tvar cos = Math.cos( this.aRotation );\n\t\t\tvar sin = Math.sin( this.aRotation );\n\n\t\t\tvar tx = x - this.aX;\n\t\t\tvar 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\tEllipseCurve.prototype.copy = function ( source ) {\n\n\t\tCurve.prototype.copy.call( this, 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\tfunction SplineCurve( points /* array of Vector2 */ ) {\n\n\t\tCurve.call( this );\n\n\t\tthis.type = 'SplineCurve';\n\n\t\tthis.points = points || [];\n\n\t}\n\n\tSplineCurve.prototype = Object.create( Curve.prototype );\n\tSplineCurve.prototype.constructor = SplineCurve;\n\n\tSplineCurve.prototype.isSplineCurve = true;\n\n\tSplineCurve.prototype.getPoint = function ( t, optionalTarget ) {\n\n\t\tvar point = optionalTarget || new Vector2();\n\n\t\tvar points = this.points;\n\t\tvar p = ( points.length - 1 ) * t;\n\n\t\tvar intPoint = Math.floor( p );\n\t\tvar weight = p - intPoint;\n\n\t\tvar p0 = points[ intPoint === 0 ? intPoint : intPoint - 1 ];\n\t\tvar p1 = points[ intPoint ];\n\t\tvar p2 = points[ intPoint > points.length - 2 ? points.length - 1 : intPoint + 1 ];\n\t\tvar 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\tSplineCurve.prototype.copy = function ( source ) {\n\n\t\tCurve.prototype.copy.call( this, source );\n\n\t\tthis.points = [];\n\n\t\tfor ( var i = 0, l = source.points.length; i < l; i ++ ) {\n\n\t\t\tvar 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\tfunction CubicBezierCurve( v0, v1, v2, v3 ) {\n\n\t\tCurve.call( this );\n\n\t\tthis.type = 'CubicBezierCurve';\n\n\t\tthis.v0 = v0 || new Vector2();\n\t\tthis.v1 = v1 || new Vector2();\n\t\tthis.v2 = v2 || new Vector2();\n\t\tthis.v3 = v3 || new Vector2();\n\n\t}\n\n\tCubicBezierCurve.prototype = Object.create( Curve.prototype );\n\tCubicBezierCurve.prototype.constructor = CubicBezierCurve;\n\n\tCubicBezierCurve.prototype.isCubicBezierCurve = true;\n\n\tCubicBezierCurve.prototype.getPoint = function ( t, optionalTarget ) {\n\n\t\tvar point = optionalTarget || new Vector2();\n\n\t\tvar 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\tCubicBezierCurve.prototype.copy = function ( source ) {\n\n\t\tCurve.prototype.copy.call( this, 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\tfunction QuadraticBezierCurve( v0, v1, v2 ) {\n\n\t\tCurve.call( this );\n\n\t\tthis.type = 'QuadraticBezierCurve';\n\n\t\tthis.v0 = v0 || new Vector2();\n\t\tthis.v1 = v1 || new Vector2();\n\t\tthis.v2 = v2 || new Vector2();\n\n\t}\n\n\tQuadraticBezierCurve.prototype = Object.create( Curve.prototype );\n\tQuadraticBezierCurve.prototype.constructor = QuadraticBezierCurve;\n\n\tQuadraticBezierCurve.prototype.isQuadraticBezierCurve = true;\n\n\tQuadraticBezierCurve.prototype.getPoint = function ( t, optionalTarget ) {\n\n\t\tvar point = optionalTarget || new Vector2();\n\n\t\tvar 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\tQuadraticBezierCurve.prototype.copy = function ( source ) {\n\n\t\tCurve.prototype.copy.call( this, 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\tvar PathPrototype = Object.assign( Object.create( CurvePath.prototype ), {\n\n\t\tsetFromPoints: function ( points ) {\n\n\t\t\tthis.moveTo( points[ 0 ].x, points[ 0 ].y );\n\n\t\t\tfor ( var i = 1, l = points.length; i < l; i ++ ) {\n\n\t\t\t\tthis.lineTo( points[ i ].x, points[ i ].y );\n\n\t\t\t}\n\n\t\t},\n\n\t\tmoveTo: function ( x, y ) {\n\n\t\t\tthis.currentPoint.set( x, y ); // TODO consider referencing vectors instead of copying?\n\n\t\t},\n\n\t\tlineTo: function ( x, y ) {\n\n\t\t\tvar curve = new LineCurve( this.currentPoint.clone(), new Vector2( x, y ) );\n\t\t\tthis.curves.push( curve );\n\n\t\t\tthis.currentPoint.set( x, y );\n\n\t\t},\n\n\t\tquadraticCurveTo: function ( aCPx, aCPy, aX, aY ) {\n\n\t\t\tvar curve = new QuadraticBezierCurve(\n\t\t\t\tthis.currentPoint.clone(),\n\t\t\t\tnew Vector2( aCPx, aCPy ),\n\t\t\t\tnew Vector2( aX, aY )\n\t\t\t);\n\n\t\t\tthis.curves.push( curve );\n\n\t\t\tthis.currentPoint.set( aX, aY );\n\n\t\t},\n\n\t\tbezierCurveTo: function ( aCP1x, aCP1y, aCP2x, aCP2y, aX, aY ) {\n\n\t\t\tvar curve = new CubicBezierCurve(\n\t\t\t\tthis.currentPoint.clone(),\n\t\t\t\tnew Vector2( aCP1x, aCP1y ),\n\t\t\t\tnew Vector2( aCP2x, aCP2y ),\n\t\t\t\tnew Vector2( aX, aY )\n\t\t\t);\n\n\t\t\tthis.curves.push( curve );\n\n\t\t\tthis.currentPoint.set( aX, aY );\n\n\t\t},\n\n\t\tsplineThru: function ( pts /*Array of Vector*/ ) {\n\n\t\t\tvar npts = [ this.currentPoint.clone() ].concat( pts );\n\n\t\t\tvar curve = new SplineCurve( npts );\n\t\t\tthis.curves.push( curve );\n\n\t\t\tthis.currentPoint.copy( pts[ pts.length - 1 ] );\n\n\t\t},\n\n\t\tarc: function ( aX, aY, aRadius, aStartAngle, aEndAngle, aClockwise ) {\n\n\t\t\tvar x0 = this.currentPoint.x;\n\t\t\tvar y0 = this.currentPoint.y;\n\n\t\t\tthis.absarc( aX + x0, aY + y0, aRadius,\n\t\t\t\taStartAngle, aEndAngle, aClockwise );\n\n\t\t},\n\n\t\tabsarc: function ( aX, aY, aRadius, aStartAngle, aEndAngle, aClockwise ) {\n\n\t\t\tthis.absellipse( aX, aY, aRadius, aRadius, aStartAngle, aEndAngle, aClockwise );\n\n\t\t},\n\n\t\tellipse: function ( aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation ) {\n\n\t\t\tvar x0 = this.currentPoint.x;\n\t\t\tvar y0 = this.currentPoint.y;\n\n\t\t\tthis.absellipse( aX + x0, aY + y0, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation );\n\n\t\t},\n\n\t\tabsellipse: function ( aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation ) {\n\n\t\t\tvar curve = new EllipseCurve( aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation );\n\n\t\t\tif ( this.curves.length > 0 ) {\n\n\t\t\t\t// if a previous curve is present, attempt to join\n\t\t\t\tvar firstPoint = curve.getPoint( 0 );\n\n\t\t\t\tif ( ! firstPoint.equals( this.currentPoint ) ) {\n\n\t\t\t\t\tthis.lineTo( firstPoint.x, firstPoint.y );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis.curves.push( curve );\n\n\t\t\tvar lastPoint = curve.getPoint( 1 );\n\t\t\tthis.currentPoint.copy( lastPoint );\n\n\t\t},\n\n\t\tcopy: function ( source ) {\n\n\t\t\tCurvePath.prototype.copy.call( this, source );\n\n\t\t\tthis.currentPoint.copy( source.currentPoint );\n\n\t\t\treturn this;\n\n\t\t}\n\n\t} );\n\n\t/**\n\t * @author zz85 / http://www.lab4games.net/zz85/blog\n\t * Creates free form 2d path using series of points, lines or curves.\n\t **/\n\n\tfunction Path( points ) {\n\n\t\tCurvePath.call( this );\n\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\tPath.prototype = PathPrototype;\n\tPathPrototype.constructor = Path;\n\n\t/**\n\t * @author zz85 / http://www.lab4games.net/zz85/blog\n\t * Defines a 2d shape plane using paths.\n\t **/\n\n\t// STEP 1 Create a path.\n\t// STEP 2 Turn path into shape.\n\t// STEP 3 ExtrudeGeometry takes in Shape/Shapes\n\t// STEP 3a - Extract points from each shape, turn to vertices\n\t// STEP 3b - Triangulate each shape, add faces.\n\n\tfunction Shape( points ) {\n\n\t\tPath.call( this, points );\n\n\t\tthis.type = 'Shape';\n\n\t\tthis.holes = [];\n\n\t}\n\n\tShape.prototype = Object.assign( Object.create( PathPrototype ), {\n\n\t\tconstructor: Shape,\n\n\t\tgetPointsHoles: function ( divisions ) {\n\n\t\t\tvar holesPts = [];\n\n\t\t\tfor ( var i = 0, l = this.holes.length; i < l; i ++ ) {\n\n\t\t\t\tholesPts[ i ] = this.holes[ i ].getPoints( divisions );\n\n\t\t\t}\n\n\t\t\treturn holesPts;\n\n\t\t},\n\n\t\t// get points of shape and holes (keypoints based on segments parameter)\n\n\t\textractPoints: function ( divisions ) {\n\n\t\t\treturn {\n\n\t\t\t\tshape: this.getPoints( divisions ),\n\t\t\t\tholes: this.getPointsHoles( divisions )\n\n\t\t\t};\n\n\t\t},\n\n\t\tcopy: function ( source ) {\n\n\t\t\tPath.prototype.copy.call( this, source );\n\n\t\t\tthis.holes = [];\n\n\t\t\tfor ( var i = 0, l = source.holes.length; i < l; i ++ ) {\n\n\t\t\t\tvar hole = source.holes[ i ];\n\n\t\t\t\tthis.holes.push( hole.clone() );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t}\n\n\t} );\n\n\t/**\n\t * @author zz85 / http://www.lab4games.net/zz85/blog\n\t * minimal class for proxing functions to Path. Replaces old \"extractSubpaths()\"\n\t **/\n\n\tfunction ShapePath() {\n\n\t\tthis.type = 'ShapePath';\n\n\t\tthis.subPaths = [];\n\t\tthis.currentPath = null;\n\n\t}\n\n\tObject.assign( ShapePath.prototype, {\n\n\t\tmoveTo: function ( x, y ) {\n\n\t\t\tthis.currentPath = new Path();\n\t\t\tthis.subPaths.push( this.currentPath );\n\t\t\tthis.currentPath.moveTo( x, y );\n\n\t\t},\n\n\t\tlineTo: function ( x, y ) {\n\n\t\t\tthis.currentPath.lineTo( x, y );\n\n\t\t},\n\n\t\tquadraticCurveTo: function ( aCPx, aCPy, aX, aY ) {\n\n\t\t\tthis.currentPath.quadraticCurveTo( aCPx, aCPy, aX, aY );\n\n\t\t},\n\n\t\tbezierCurveTo: function ( aCP1x, aCP1y, aCP2x, aCP2y, aX, aY ) {\n\n\t\t\tthis.currentPath.bezierCurveTo( aCP1x, aCP1y, aCP2x, aCP2y, aX, aY );\n\n\t\t},\n\n\t\tsplineThru: function ( pts ) {\n\n\t\t\tthis.currentPath.splineThru( pts );\n\n\t\t},\n\n\t\ttoShapes: function ( isCCW, noHoles ) {\n\n\t\t\tfunction toShapesNoHoles( inSubpaths ) {\n\n\t\t\t\tvar shapes = [];\n\n\t\t\t\tfor ( var i = 0, l = inSubpaths.length; i < l; i ++ ) {\n\n\t\t\t\t\tvar tmpPath = inSubpaths[ i ];\n\n\t\t\t\t\tvar tmpShape = new Shape();\n\t\t\t\t\ttmpShape.curves = tmpPath.curves;\n\n\t\t\t\t\tshapes.push( tmpShape );\n\n\t\t\t\t}\n\n\t\t\t\treturn shapes;\n\n\t\t\t}\n\n\t\t\tfunction isPointInsidePolygon( inPt, inPolygon ) {\n\n\t\t\t\tvar polyLen = inPolygon.length;\n\n\t\t\t\t// inPt on polygon contour => immediate success or\n\t\t\t\t// toggling of inside/outside at every single! intersection point of an edge\n\t\t\t\t// with the horizontal line through inPt, left of inPt\n\t\t\t\t// not counting lowerY endpoints of edges and whole edges on that line\n\t\t\t\tvar inside = false;\n\t\t\t\tfor ( var p = polyLen - 1, q = 0; q < polyLen; p = q ++ ) {\n\n\t\t\t\t\tvar edgeLowPt = inPolygon[ p ];\n\t\t\t\t\tvar edgeHighPt = inPolygon[ q ];\n\n\t\t\t\t\tvar edgeDx = edgeHighPt.x - edgeLowPt.x;\n\t\t\t\t\tvar edgeDy = edgeHighPt.y - edgeLowPt.y;\n\n\t\t\t\t\tif ( Math.abs( edgeDy ) > Number.EPSILON ) {\n\n\t\t\t\t\t\t// not parallel\n\t\t\t\t\t\tif ( edgeDy < 0 ) {\n\n\t\t\t\t\t\t\tedgeLowPt = inPolygon[ q ]; edgeDx = - edgeDx;\n\t\t\t\t\t\t\tedgeHighPt = inPolygon[ p ]; edgeDy = - edgeDy;\n\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( ( inPt.y < edgeLowPt.y ) || ( inPt.y > edgeHighPt.y ) ) \t\tcontinue;\n\n\t\t\t\t\t\tif ( inPt.y === edgeLowPt.y ) {\n\n\t\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\t// continue;\t\t\t\t// no intersection or edgeLowPt => doesn't count !!!\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tvar perpEdge = edgeDy * ( inPt.x - edgeLowPt.x ) - edgeDx * ( inPt.y - edgeLowPt.y );\n\t\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\t\tif ( perpEdge < 0 ) \t\t\t\tcontinue;\n\t\t\t\t\t\t\tinside = ! inside;\t\t// true intersection left of inPt\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// parallel or collinear\n\t\t\t\t\t\tif ( inPt.y !== edgeLowPt.y ) \t\tcontinue;\t\t\t// parallel\n\t\t\t\t\t\t// edge lies on the same horizontal line as inPt\n\t\t\t\t\t\tif ( ( ( edgeHighPt.x <= inPt.x ) && ( inPt.x <= edgeLowPt.x ) ) ||\n\t\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\t// continue;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\treturn\tinside;\n\n\t\t\t}\n\n\t\t\tvar isClockWise = ShapeUtils.isClockWise;\n\n\t\t\tvar subPaths = this.subPaths;\n\t\t\tif ( subPaths.length === 0 ) return [];\n\n\t\t\tif ( noHoles === true )\treturn\ttoShapesNoHoles( subPaths );\n\n\n\t\t\tvar solid, tmpPath, tmpShape, shapes = [];\n\n\t\t\tif ( subPaths.length === 1 ) {\n\n\t\t\t\ttmpPath = subPaths[ 0 ];\n\t\t\t\ttmpShape = new Shape();\n\t\t\t\ttmpShape.curves = tmpPath.curves;\n\t\t\t\tshapes.push( tmpShape );\n\t\t\t\treturn shapes;\n\n\t\t\t}\n\n\t\t\tvar holesFirst = ! isClockWise( subPaths[ 0 ].getPoints() );\n\t\t\tholesFirst = isCCW ? ! holesFirst : holesFirst;\n\n\t\t\t// console.log(\"Holes first\", holesFirst);\n\n\t\t\tvar betterShapeHoles = [];\n\t\t\tvar newShapes = [];\n\t\t\tvar newShapeHoles = [];\n\t\t\tvar mainIdx = 0;\n\t\t\tvar tmpPoints;\n\n\t\t\tnewShapes[ mainIdx ] = undefined;\n\t\t\tnewShapeHoles[ mainIdx ] = [];\n\n\t\t\tfor ( var i = 0, l = subPaths.length; i < l; i ++ ) {\n\n\t\t\t\ttmpPath = subPaths[ i ];\n\t\t\t\ttmpPoints = tmpPath.getPoints();\n\t\t\t\tsolid = isClockWise( tmpPoints );\n\t\t\t\tsolid = isCCW ? ! solid : solid;\n\n\t\t\t\tif ( solid ) {\n\n\t\t\t\t\tif ( ( ! holesFirst ) && ( newShapes[ mainIdx ] ) )\tmainIdx ++;\n\n\t\t\t\t\tnewShapes[ mainIdx ] = { s: new Shape(), p: tmpPoints };\n\t\t\t\t\tnewShapes[ mainIdx ].s.curves = tmpPath.curves;\n\n\t\t\t\t\tif ( holesFirst )\tmainIdx ++;\n\t\t\t\t\tnewShapeHoles[ mainIdx ] = [];\n\n\t\t\t\t\t//console.log('cw', i);\n\n\t\t\t\t} else {\n\n\t\t\t\t\tnewShapeHoles[ mainIdx ].push( { h: tmpPath, p: tmpPoints[ 0 ] } );\n\n\t\t\t\t\t//console.log('ccw', i);\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// only Holes? -> probably all Shapes with wrong orientation\n\t\t\tif ( ! newShapes[ 0 ] )\treturn\ttoShapesNoHoles( subPaths );\n\n\n\t\t\tif ( newShapes.length > 1 ) {\n\n\t\t\t\tvar ambiguous = false;\n\t\t\t\tvar toChange = [];\n\n\t\t\t\tfor ( var sIdx = 0, sLen = newShapes.length; sIdx < sLen; sIdx ++ ) {\n\n\t\t\t\t\tbetterShapeHoles[ sIdx ] = [];\n\n\t\t\t\t}\n\n\t\t\t\tfor ( var sIdx = 0, sLen = newShapes.length; sIdx < sLen; sIdx ++ ) {\n\n\t\t\t\t\tvar sho = newShapeHoles[ sIdx ];\n\n\t\t\t\t\tfor ( var hIdx = 0; hIdx < sho.length; hIdx ++ ) {\n\n\t\t\t\t\t\tvar ho = sho[ hIdx ];\n\t\t\t\t\t\tvar hole_unassigned = true;\n\n\t\t\t\t\t\tfor ( var s2Idx = 0; s2Idx < newShapes.length; s2Idx ++ ) {\n\n\t\t\t\t\t\t\tif ( isPointInsidePolygon( ho.p, newShapes[ s2Idx ].p ) ) {\n\n\t\t\t\t\t\t\t\tif ( sIdx !== s2Idx )\ttoChange.push( { froms: sIdx, tos: s2Idx, hole: hIdx } );\n\t\t\t\t\t\t\t\tif ( hole_unassigned ) {\n\n\t\t\t\t\t\t\t\t\thole_unassigned = false;\n\t\t\t\t\t\t\t\t\tbetterShapeHoles[ s2Idx ].push( ho );\n\n\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\tambiguous = true;\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( hole_unassigned ) {\n\n\t\t\t\t\t\t\tbetterShapeHoles[ sIdx ].push( ho );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\t\t\t\t// console.log(\"ambiguous: \", ambiguous);\n\t\t\t\tif ( toChange.length > 0 ) {\n\n\t\t\t\t\t// console.log(\"to change: \", toChange);\n\t\t\t\t\tif ( ! ambiguous )\tnewShapeHoles = betterShapeHoles;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tvar tmpHoles;\n\n\t\t\tfor ( var i = 0, il = newShapes.length; i < il; i ++ ) {\n\n\t\t\t\ttmpShape = newShapes[ i ].s;\n\t\t\t\tshapes.push( tmpShape );\n\t\t\t\ttmpHoles = newShapeHoles[ i ];\n\n\t\t\t\tfor ( var j = 0, jl = tmpHoles.length; j < jl; j ++ ) {\n\n\t\t\t\t\ttmpShape.holes.push( tmpHoles[ j ].h );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t//console.log(\"shape\", shapes);\n\n\t\t\treturn shapes;\n\n\t\t}\n\n\t} );\n\n\t/**\n\t * @author zz85 / http://www.lab4games.net/zz85/blog\n\t * @author mrdoob / http://mrdoob.com/\n\t */\n\n\tfunction Font( data ) {\n\n\t\tthis.type = 'Font';\n\n\t\tthis.data = data;\n\n\t}\n\n\tObject.assign( Font.prototype, {\n\n\t\tisFont: true,\n\n\t\tgenerateShapes: function ( text, size, divisions ) {\n\n\t\t\tfunction createPaths( text ) {\n\n\t\t\t\tvar chars = String( text ).split( '' );\n\t\t\t\tvar scale = size / data.resolution;\n\t\t\t\tvar line_height = ( data.boundingBox.yMax - data.boundingBox.yMin + data.underlineThickness ) * scale;\n\n\t\t\t\tvar offsetX = 0, offsetY = 0;\n\n\t\t\t\tvar paths = [];\n\n\t\t\t\tfor ( var i = 0; i < chars.length; i ++ ) {\n\n\t\t\t\t\tvar char = chars[ i ];\n\n\t\t\t\t\tif ( char === '\\n' ) {\n\n\t\t\t\t\t\toffsetX = 0;\n\t\t\t\t\t\toffsetY -= line_height;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tvar ret = createPath( char, scale, offsetX, offsetY );\n\t\t\t\t\t\toffsetX += ret.offsetX;\n\t\t\t\t\t\tpaths.push( ret.path );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\treturn paths;\n\n\t\t\t}\n\n\t\t\tfunction createPath( c, scale, offsetX, offsetY ) {\n\n\t\t\t\tvar glyph = data.glyphs[ c ] || data.glyphs[ '?' ];\n\n\t\t\t\tif ( ! glyph ) return;\n\n\t\t\t\tvar path = new ShapePath();\n\n\t\t\t\tvar pts = [];\n\t\t\t\tvar x, y, cpx, cpy, cpx0, cpy0, cpx1, cpy1, cpx2, cpy2, laste;\n\n\t\t\t\tif ( glyph.o ) {\n\n\t\t\t\t\tvar outline = glyph._cachedOutline || ( glyph._cachedOutline = glyph.o.split( ' ' ) );\n\n\t\t\t\t\tfor ( var i = 0, l = outline.length; i < l; ) {\n\n\t\t\t\t\t\tvar action = outline[ i ++ ];\n\n\t\t\t\t\t\tswitch ( action ) {\n\n\t\t\t\t\t\t\tcase 'm': // moveTo\n\n\t\t\t\t\t\t\t\tx = outline[ i ++ ] * scale + offsetX;\n\t\t\t\t\t\t\t\ty = outline[ i ++ ] * scale + offsetY;\n\n\t\t\t\t\t\t\t\tpath.moveTo( x, y );\n\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase 'l': // lineTo\n\n\t\t\t\t\t\t\t\tx = outline[ i ++ ] * scale + offsetX;\n\t\t\t\t\t\t\t\ty = outline[ i ++ ] * scale + offsetY;\n\n\t\t\t\t\t\t\t\tpath.lineTo( x, y );\n\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase 'q': // quadraticCurveTo\n\n\t\t\t\t\t\t\t\tcpx = outline[ i ++ ] * scale + offsetX;\n\t\t\t\t\t\t\t\tcpy = outline[ i ++ ] * scale + offsetY;\n\t\t\t\t\t\t\t\tcpx1 = outline[ i ++ ] * scale + offsetX;\n\t\t\t\t\t\t\t\tcpy1 = outline[ i ++ ] * scale + offsetY;\n\n\t\t\t\t\t\t\t\tpath.quadraticCurveTo( cpx1, cpy1, cpx, cpy );\n\n\t\t\t\t\t\t\t\tlaste = pts[ pts.length - 1 ];\n\n\t\t\t\t\t\t\t\tif ( laste ) {\n\n\t\t\t\t\t\t\t\t\tcpx0 = laste.x;\n\t\t\t\t\t\t\t\t\tcpy0 = laste.y;\n\n\t\t\t\t\t\t\t\t\tfor ( var i2 = 1; i2 <= divisions; i2 ++ ) {\n\n\t\t\t\t\t\t\t\t\t\tvar t = i2 / divisions;\n\t\t\t\t\t\t\t\t\t\tQuadraticBezier( t, cpx0, cpx1, cpx );\n\t\t\t\t\t\t\t\t\t\tQuadraticBezier( t, cpy0, cpy1, cpy );\n\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase 'b': // bezierCurveTo\n\n\t\t\t\t\t\t\t\tcpx = outline[ i ++ ] * scale + offsetX;\n\t\t\t\t\t\t\t\tcpy = outline[ i ++ ] * scale + offsetY;\n\t\t\t\t\t\t\t\tcpx1 = outline[ i ++ ] * scale + offsetX;\n\t\t\t\t\t\t\t\tcpy1 = outline[ i ++ ] * scale + offsetY;\n\t\t\t\t\t\t\t\tcpx2 = outline[ i ++ ] * scale + offsetX;\n\t\t\t\t\t\t\t\tcpy2 = outline[ i ++ ] * scale + offsetY;\n\n\t\t\t\t\t\t\t\tpath.bezierCurveTo( cpx1, cpy1, cpx2, cpy2, cpx, cpy );\n\n\t\t\t\t\t\t\t\tlaste = pts[ pts.length - 1 ];\n\n\t\t\t\t\t\t\t\tif ( laste ) {\n\n\t\t\t\t\t\t\t\t\tcpx0 = laste.x;\n\t\t\t\t\t\t\t\t\tcpy0 = laste.y;\n\n\t\t\t\t\t\t\t\t\tfor ( var i2 = 1; i2 <= divisions; i2 ++ ) {\n\n\t\t\t\t\t\t\t\t\t\tvar t = i2 / divisions;\n\t\t\t\t\t\t\t\t\t\tCubicBezier( t, cpx0, cpx1, cpx2, cpx );\n\t\t\t\t\t\t\t\t\t\tCubicBezier( t, cpy0, cpy1, cpy2, cpy );\n\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\treturn { offsetX: glyph.ha * scale, path: path };\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tif ( size === undefined ) size = 100;\n\t\t\tif ( divisions === undefined ) divisions = 4;\n\n\t\t\tvar data = this.data;\n\n\t\t\tvar paths = createPaths( text );\n\t\t\tvar shapes = [];\n\n\t\t\tfor ( var p = 0, pl = paths.length; p < pl; p ++ ) {\n\n\t\t\t\tArray.prototype.push.apply( shapes, paths[ p ].toShapes() );\n\n\t\t\t}\n\n\t\t\treturn shapes;\n\n\t\t}\n\n\t} );\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t */\n\n\tfunction FontLoader( manager ) {\n\n\t\tthis.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager;\n\n\t}\n\n\tObject.assign( FontLoader.prototype, {\n\n\t\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\t\tvar scope = this;\n\n\t\t\tvar loader = new FileLoader( this.manager );\n\t\t\tloader.setPath( this.path );\n\t\t\tloader.load( url, function ( text ) {\n\n\t\t\t\tvar json;\n\n\t\t\t\ttry {\n\n\t\t\t\t\tjson = JSON.parse( text );\n\n\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.FontLoader: typeface.js support is being deprecated. Use typeface.json instead.' );\n\t\t\t\t\tjson = JSON.parse( text.substring( 65, text.length - 2 ) );\n\n\t\t\t\t}\n\n\t\t\t\tvar font = scope.parse( json );\n\n\t\t\t\tif ( onLoad ) onLoad( font );\n\n\t\t\t}, onProgress, onError );\n\n\t\t},\n\n\t\tparse: function ( json ) {\n\n\t\t\treturn new Font( json );\n\n\t\t},\n\n\t\tsetPath: function ( value ) {\n\n\t\t\tthis.path = value;\n\t\t\treturn this;\n\n\t\t}\n\n\t} );\n\n\tvar context;\n\n\tvar AudioContext = {\n\n\t\tgetContext: function () {\n\n\t\t\tif ( context === undefined ) {\n\n\t\t\t\tcontext = new ( window.AudioContext || window.webkitAudioContext )();\n\n\t\t\t}\n\n\t\t\treturn context;\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\t/**\n\t * @author Reece Aaron Lecrivain / http://reecenotes.com/\n\t */\n\n\tfunction AudioLoader( manager ) {\n\n\t\tthis.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager;\n\n\t}\n\n\tObject.assign( AudioLoader.prototype, {\n\n\t\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\t\tvar loader = new FileLoader( this.manager );\n\t\t\tloader.setResponseType( 'arraybuffer' );\n\t\t\tloader.load( url, function ( buffer ) {\n\n\t\t\t\tvar context = AudioContext.getContext();\n\n\t\t\t\tcontext.decodeAudioData( buffer, function ( audioBuffer ) {\n\n\t\t\t\t\tonLoad( audioBuffer );\n\n\t\t\t\t} );\n\n\t\t\t}, onProgress, onError );\n\n\t\t}\n\n\t} );\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t */\n\n\tfunction StereoCamera() {\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}\n\n\tObject.assign( StereoCamera.prototype, {\n\n\t\tupdate: ( function () {\n\n\t\t\tvar instance, focus, fov, aspect, near, far, zoom, eyeSep;\n\n\t\t\tvar eyeRight = new Matrix4();\n\t\t\tvar eyeLeft = new Matrix4();\n\n\t\t\treturn function update( camera ) {\n\n\t\t\t\tvar needsUpdate = instance !== this || focus !== camera.focus || fov !== camera.fov ||\n\t\t\t\t\t\t\t\t\t\t\t\t\taspect !== camera.aspect * this.aspect || near !== camera.near ||\n\t\t\t\t\t\t\t\t\t\t\t\t\tfar !== camera.far || zoom !== camera.zoom || eyeSep !== this.eyeSep;\n\n\t\t\t\tif ( needsUpdate ) {\n\n\t\t\t\t\tinstance = this;\n\t\t\t\t\tfocus = camera.focus;\n\t\t\t\t\tfov = camera.fov;\n\t\t\t\t\taspect = camera.aspect * this.aspect;\n\t\t\t\t\tnear = camera.near;\n\t\t\t\t\tfar = camera.far;\n\t\t\t\t\tzoom = camera.zoom;\n\n\t\t\t\t\t// Off-axis stereoscopic effect based on\n\t\t\t\t\t// http://paulbourke.net/stereographics/stereorender/\n\n\t\t\t\t\tvar projectionMatrix = camera.projectionMatrix.clone();\n\t\t\t\t\teyeSep = this.eyeSep / 2;\n\t\t\t\t\tvar eyeSepOnProjection = eyeSep * near / focus;\n\t\t\t\t\tvar ymax = ( near * Math.tan( _Math.DEG2RAD * fov * 0.5 ) ) / zoom;\n\t\t\t\t\tvar xmin, xmax;\n\n\t\t\t\t\t// translate xOffset\n\n\t\t\t\t\teyeLeft.elements[ 12 ] = - eyeSep;\n\t\t\t\t\teyeRight.elements[ 12 ] = eyeSep;\n\n\t\t\t\t\t// for left eye\n\n\t\t\t\t\txmin = - ymax * aspect + eyeSepOnProjection;\n\t\t\t\t\txmax = ymax * aspect + eyeSepOnProjection;\n\n\t\t\t\t\tprojectionMatrix.elements[ 0 ] = 2 * near / ( xmax - xmin );\n\t\t\t\t\tprojectionMatrix.elements[ 8 ] = ( xmax + xmin ) / ( xmax - xmin );\n\n\t\t\t\t\tthis.cameraL.projectionMatrix.copy( projectionMatrix );\n\n\t\t\t\t\t// for right eye\n\n\t\t\t\t\txmin = - ymax * aspect - eyeSepOnProjection;\n\t\t\t\t\txmax = ymax * aspect - eyeSepOnProjection;\n\n\t\t\t\t\tprojectionMatrix.elements[ 0 ] = 2 * near / ( xmax - xmin );\n\t\t\t\t\tprojectionMatrix.elements[ 8 ] = ( xmax + xmin ) / ( xmax - xmin );\n\n\t\t\t\t\tthis.cameraR.projectionMatrix.copy( projectionMatrix );\n\n\t\t\t\t}\n\n\t\t\t\tthis.cameraL.matrixWorld.copy( camera.matrixWorld ).multiply( eyeLeft );\n\t\t\t\tthis.cameraR.matrixWorld.copy( camera.matrixWorld ).multiply( eyeRight );\n\n\t\t\t};\n\n\t\t} )()\n\n\t} );\n\n\t/**\n\t * Camera for rendering cube maps\n\t *\t- renders scene into axis-aligned cube\n\t *\n\t * @author alteredq / http://alteredqualia.com/\n\t */\n\n\tfunction CubeCamera( near, far, cubeResolution ) {\n\n\t\tObject3D.call( this );\n\n\t\tthis.type = 'CubeCamera';\n\n\t\tvar fov = 90, aspect = 1;\n\n\t\tvar cameraPX = new PerspectiveCamera( fov, aspect, near, far );\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\tvar cameraNX = new PerspectiveCamera( fov, aspect, near, far );\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\tvar cameraPY = new PerspectiveCamera( fov, aspect, near, far );\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\tvar cameraNY = new PerspectiveCamera( fov, aspect, near, far );\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\tvar cameraPZ = new PerspectiveCamera( fov, aspect, near, far );\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\tvar cameraNZ = new PerspectiveCamera( fov, aspect, near, far );\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\tvar options = { format: RGBFormat, magFilter: LinearFilter, minFilter: LinearFilter };\n\n\t\tthis.renderTarget = new WebGLRenderTargetCube( cubeResolution, cubeResolution, options );\n\t\tthis.renderTarget.texture.name = \"CubeCamera\";\n\n\t\tthis.update = function ( renderer, scene ) {\n\n\t\t\tif ( this.parent === null ) this.updateMatrixWorld();\n\n\t\t\tvar renderTarget = this.renderTarget;\n\t\t\tvar generateMipmaps = renderTarget.texture.generateMipmaps;\n\n\t\t\trenderTarget.texture.generateMipmaps = false;\n\n\t\t\trenderTarget.activeCubeFace = 0;\n\t\t\trenderer.render( scene, cameraPX, renderTarget );\n\n\t\t\trenderTarget.activeCubeFace = 1;\n\t\t\trenderer.render( scene, cameraNX, renderTarget );\n\n\t\t\trenderTarget.activeCubeFace = 2;\n\t\t\trenderer.render( scene, cameraPY, renderTarget );\n\n\t\t\trenderTarget.activeCubeFace = 3;\n\t\t\trenderer.render( scene, cameraNY, renderTarget );\n\n\t\t\trenderTarget.activeCubeFace = 4;\n\t\t\trenderer.render( scene, cameraPZ, renderTarget );\n\n\t\t\trenderTarget.texture.generateMipmaps = generateMipmaps;\n\n\t\t\trenderTarget.activeCubeFace = 5;\n\t\t\trenderer.render( scene, cameraNZ, renderTarget );\n\n\t\t\trenderer.setRenderTarget( null );\n\n\t\t};\n\n\t\tthis.clear = function ( renderer, color, depth, stencil ) {\n\n\t\t\tvar renderTarget = this.renderTarget;\n\n\t\t\tfor ( var i = 0; i < 6; i ++ ) {\n\n\t\t\t\trenderTarget.activeCubeFace = i;\n\t\t\t\trenderer.setRenderTarget( renderTarget );\n\n\t\t\t\trenderer.clear( color, depth, stencil );\n\n\t\t\t}\n\n\t\t\trenderer.setRenderTarget( null );\n\n\t\t};\n\n\t}\n\n\tCubeCamera.prototype = Object.create( Object3D.prototype );\n\tCubeCamera.prototype.constructor = CubeCamera;\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t */\n\n\tfunction AudioListener() {\n\n\t\tObject3D.call( this );\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}\n\n\tAudioListener.prototype = Object.assign( Object.create( Object3D.prototype ), {\n\n\t\tconstructor: AudioListener,\n\n\t\tgetInput: function () {\n\n\t\t\treturn this.gain;\n\n\t\t},\n\n\t\tremoveFilter: function ( ) {\n\n\t\t\tif ( this.filter !== null ) {\n\n\t\t\t\tthis.gain.disconnect( this.filter );\n\t\t\t\tthis.filter.disconnect( this.context.destination );\n\t\t\t\tthis.gain.connect( this.context.destination );\n\t\t\t\tthis.filter = null;\n\n\t\t\t}\n\n\t\t},\n\n\t\tgetFilter: function () {\n\n\t\t\treturn this.filter;\n\n\t\t},\n\n\t\tsetFilter: function ( value ) {\n\n\t\t\tif ( this.filter !== null ) {\n\n\t\t\t\tthis.gain.disconnect( this.filter );\n\t\t\t\tthis.filter.disconnect( this.context.destination );\n\n\t\t\t} else {\n\n\t\t\t\tthis.gain.disconnect( this.context.destination );\n\n\t\t\t}\n\n\t\t\tthis.filter = value;\n\t\t\tthis.gain.connect( this.filter );\n\t\t\tthis.filter.connect( this.context.destination );\n\n\t\t},\n\n\t\tgetMasterVolume: function () {\n\n\t\t\treturn this.gain.gain.value;\n\n\t\t},\n\n\t\tsetMasterVolume: function ( value ) {\n\n\t\t\tthis.gain.gain.value = value;\n\n\t\t},\n\n\t\tupdateMatrixWorld: ( function () {\n\n\t\t\tvar position = new Vector3();\n\t\t\tvar quaternion = new Quaternion();\n\t\t\tvar scale = new Vector3();\n\n\t\t\tvar orientation = new Vector3();\n\n\t\t\treturn function updateMatrixWorld( force ) {\n\n\t\t\t\tObject3D.prototype.updateMatrixWorld.call( this, force );\n\n\t\t\t\tvar listener = this.context.listener;\n\t\t\t\tvar up = this.up;\n\n\t\t\t\tthis.matrixWorld.decompose( position, quaternion, scale );\n\n\t\t\t\torientation.set( 0, 0, - 1 ).applyQuaternion( quaternion );\n\n\t\t\t\tif ( listener.positionX ) {\n\n\t\t\t\t\tlistener.positionX.setValueAtTime( position.x, this.context.currentTime );\n\t\t\t\t\tlistener.positionY.setValueAtTime( position.y, this.context.currentTime );\n\t\t\t\t\tlistener.positionZ.setValueAtTime( position.z, this.context.currentTime );\n\t\t\t\t\tlistener.forwardX.setValueAtTime( orientation.x, this.context.currentTime );\n\t\t\t\t\tlistener.forwardY.setValueAtTime( orientation.y, this.context.currentTime );\n\t\t\t\t\tlistener.forwardZ.setValueAtTime( orientation.z, this.context.currentTime );\n\t\t\t\t\tlistener.upX.setValueAtTime( up.x, this.context.currentTime );\n\t\t\t\t\tlistener.upY.setValueAtTime( up.y, this.context.currentTime );\n\t\t\t\t\tlistener.upZ.setValueAtTime( up.z, this.context.currentTime );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tlistener.setPosition( position.x, position.y, position.z );\n\t\t\t\t\tlistener.setOrientation( orientation.x, orientation.y, orientation.z, up.x, up.y, up.z );\n\n\t\t\t\t}\n\n\t\t\t};\n\n\t\t} )()\n\n\t} );\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t * @author Reece Aaron Lecrivain / http://reecenotes.com/\n\t */\n\n\tfunction Audio( listener ) {\n\n\t\tObject3D.call( this );\n\n\t\tthis.type = 'Audio';\n\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.loop = false;\n\t\tthis.startTime = 0;\n\t\tthis.offset = 0;\n\t\tthis.playbackRate = 1;\n\t\tthis.isPlaying = false;\n\t\tthis.hasPlaybackControl = true;\n\t\tthis.sourceType = 'empty';\n\n\t\tthis.filters = [];\n\n\t}\n\n\tAudio.prototype = Object.assign( Object.create( Object3D.prototype ), {\n\n\t\tconstructor: Audio,\n\n\t\tgetOutput: function () {\n\n\t\t\treturn this.gain;\n\n\t\t},\n\n\t\tsetNodeSource: function ( audioNode ) {\n\n\t\t\tthis.hasPlaybackControl = false;\n\t\t\tthis.sourceType = 'audioNode';\n\t\t\tthis.source = audioNode;\n\t\t\tthis.connect();\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetBuffer: function ( audioBuffer ) {\n\n\t\t\tthis.buffer = audioBuffer;\n\t\t\tthis.sourceType = 'buffer';\n\n\t\t\tif ( this.autoplay ) this.play();\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tplay: function () {\n\n\t\t\tif ( this.isPlaying === true ) {\n\n\t\t\t\tconsole.warn( 'THREE.Audio: Audio is already playing.' );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tif ( this.hasPlaybackControl === false ) {\n\n\t\t\t\tconsole.warn( 'THREE.Audio: this Audio has no playback control.' );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tvar source = this.context.createBufferSource();\n\n\t\t\tsource.buffer = this.buffer;\n\t\t\tsource.loop = this.loop;\n\t\t\tsource.onended = this.onEnded.bind( this );\n\t\t\tsource.playbackRate.setValueAtTime( this.playbackRate, this.startTime );\n\t\t\tthis.startTime = this.context.currentTime;\n\t\t\tsource.start( this.startTime, this.offset );\n\n\t\t\tthis.isPlaying = true;\n\n\t\t\tthis.source = source;\n\n\t\t\treturn this.connect();\n\n\t\t},\n\n\t\tpause: function () {\n\n\t\t\tif ( this.hasPlaybackControl === false ) {\n\n\t\t\t\tconsole.warn( 'THREE.Audio: this Audio has no playback control.' );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tif ( this.isPlaying === true ) {\n\n\t\t\t\tthis.source.stop();\n\t\t\t\tthis.offset += ( this.context.currentTime - this.startTime ) * this.playbackRate;\n\t\t\t\tthis.isPlaying = false;\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tstop: function () {\n\n\t\t\tif ( this.hasPlaybackControl === false ) {\n\n\t\t\t\tconsole.warn( 'THREE.Audio: this Audio has no playback control.' );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tthis.source.stop();\n\t\t\tthis.offset = 0;\n\t\t\tthis.isPlaying = false;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tconnect: function () {\n\n\t\t\tif ( this.filters.length > 0 ) {\n\n\t\t\t\tthis.source.connect( this.filters[ 0 ] );\n\n\t\t\t\tfor ( var i = 1, l = this.filters.length; i < l; i ++ ) {\n\n\t\t\t\t\tthis.filters[ i - 1 ].connect( this.filters[ i ] );\n\n\t\t\t\t}\n\n\t\t\t\tthis.filters[ this.filters.length - 1 ].connect( this.getOutput() );\n\n\t\t\t} else {\n\n\t\t\t\tthis.source.connect( this.getOutput() );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tdisconnect: function () {\n\n\t\t\tif ( this.filters.length > 0 ) {\n\n\t\t\t\tthis.source.disconnect( this.filters[ 0 ] );\n\n\t\t\t\tfor ( var i = 1, l = this.filters.length; i < l; i ++ ) {\n\n\t\t\t\t\tthis.filters[ i - 1 ].disconnect( this.filters[ i ] );\n\n\t\t\t\t}\n\n\t\t\t\tthis.filters[ this.filters.length - 1 ].disconnect( this.getOutput() );\n\n\t\t\t} else {\n\n\t\t\t\tthis.source.disconnect( this.getOutput() );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tgetFilters: function () {\n\n\t\t\treturn this.filters;\n\n\t\t},\n\n\t\tsetFilters: function ( value ) {\n\n\t\t\tif ( ! value ) value = [];\n\n\t\t\tif ( this.isPlaying === true ) {\n\n\t\t\t\tthis.disconnect();\n\t\t\t\tthis.filters = value;\n\t\t\t\tthis.connect();\n\n\t\t\t} else {\n\n\t\t\t\tthis.filters = value;\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tgetFilter: function () {\n\n\t\t\treturn this.getFilters()[ 0 ];\n\n\t\t},\n\n\t\tsetFilter: function ( filter ) {\n\n\t\t\treturn this.setFilters( filter ? [ filter ] : [] );\n\n\t\t},\n\n\t\tsetPlaybackRate: function ( value ) {\n\n\t\t\tif ( this.hasPlaybackControl === false ) {\n\n\t\t\t\tconsole.warn( 'THREE.Audio: this Audio has no playback control.' );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tthis.playbackRate = value;\n\n\t\t\tif ( this.isPlaying === true ) {\n\n\t\t\t\tthis.source.playbackRate.setValueAtTime( this.playbackRate, this.context.currentTime );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tgetPlaybackRate: function () {\n\n\t\t\treturn this.playbackRate;\n\n\t\t},\n\n\t\tonEnded: function () {\n\n\t\t\tthis.isPlaying = false;\n\n\t\t},\n\n\t\tgetLoop: function () {\n\n\t\t\tif ( this.hasPlaybackControl === false ) {\n\n\t\t\t\tconsole.warn( 'THREE.Audio: this Audio has no playback control.' );\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t\treturn this.loop;\n\n\t\t},\n\n\t\tsetLoop: function ( value ) {\n\n\t\t\tif ( this.hasPlaybackControl === false ) {\n\n\t\t\t\tconsole.warn( 'THREE.Audio: this Audio has no playback control.' );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tthis.loop = value;\n\n\t\t\tif ( this.isPlaying === true ) {\n\n\t\t\t\tthis.source.loop = this.loop;\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tgetVolume: function () {\n\n\t\t\treturn this.gain.gain.value;\n\n\t\t},\n\n\t\tsetVolume: function ( value ) {\n\n\t\t\tthis.gain.gain.value = value;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t} );\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t */\n\n\tfunction PositionalAudio( listener ) {\n\n\t\tAudio.call( this, listener );\n\n\t\tthis.panner = this.context.createPanner();\n\t\tthis.panner.connect( this.gain );\n\n\t}\n\n\tPositionalAudio.prototype = Object.assign( Object.create( Audio.prototype ), {\n\n\t\tconstructor: PositionalAudio,\n\n\t\tgetOutput: function () {\n\n\t\t\treturn this.panner;\n\n\t\t},\n\n\t\tgetRefDistance: function () {\n\n\t\t\treturn this.panner.refDistance;\n\n\t\t},\n\n\t\tsetRefDistance: function ( value ) {\n\n\t\t\tthis.panner.refDistance = value;\n\n\t\t},\n\n\t\tgetRolloffFactor: function () {\n\n\t\t\treturn this.panner.rolloffFactor;\n\n\t\t},\n\n\t\tsetRolloffFactor: function ( value ) {\n\n\t\t\tthis.panner.rolloffFactor = value;\n\n\t\t},\n\n\t\tgetDistanceModel: function () {\n\n\t\t\treturn this.panner.distanceModel;\n\n\t\t},\n\n\t\tsetDistanceModel: function ( value ) {\n\n\t\t\tthis.panner.distanceModel = value;\n\n\t\t},\n\n\t\tgetMaxDistance: function () {\n\n\t\t\treturn this.panner.maxDistance;\n\n\t\t},\n\n\t\tsetMaxDistance: function ( value ) {\n\n\t\t\tthis.panner.maxDistance = value;\n\n\t\t},\n\n\t\tupdateMatrixWorld: ( function () {\n\n\t\t\tvar position = new Vector3();\n\n\t\t\treturn function updateMatrixWorld( force ) {\n\n\t\t\t\tObject3D.prototype.updateMatrixWorld.call( this, force );\n\n\t\t\t\tposition.setFromMatrixPosition( this.matrixWorld );\n\n\t\t\t\tthis.panner.setPosition( position.x, position.y, position.z );\n\n\t\t\t};\n\n\t\t} )()\n\n\n\t} );\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t */\n\n\tfunction AudioAnalyser( audio, fftSize ) {\n\n\t\tthis.analyser = audio.context.createAnalyser();\n\t\tthis.analyser.fftSize = fftSize !== undefined ? fftSize : 2048;\n\n\t\tthis.data = new Uint8Array( this.analyser.frequencyBinCount );\n\n\t\taudio.getOutput().connect( this.analyser );\n\n\t}\n\n\tObject.assign( AudioAnalyser.prototype, {\n\n\t\tgetFrequencyData: function () {\n\n\t\t\tthis.analyser.getByteFrequencyData( this.data );\n\n\t\t\treturn this.data;\n\n\t\t},\n\n\t\tgetAverageFrequency: function () {\n\n\t\t\tvar value = 0, data = this.getFrequencyData();\n\n\t\t\tfor ( var i = 0; i < data.length; i ++ ) {\n\n\t\t\t\tvalue += data[ i ];\n\n\t\t\t}\n\n\t\t\treturn value / data.length;\n\n\t\t}\n\n\t} );\n\n\t/**\n\t *\n\t * Buffered scene graph property that allows weighted accumulation.\n\t *\n\t *\n\t * @author Ben Houston / http://clara.io/\n\t * @author David Sarno / http://lighthaus.us/\n\t * @author tschw\n\t */\n\n\tfunction PropertyMixer( binding, typeName, valueSize ) {\n\n\t\tthis.binding = binding;\n\t\tthis.valueSize = valueSize;\n\n\t\tvar bufferType = Float64Array,\n\t\t\tmixFunction;\n\n\t\tswitch ( typeName ) {\n\n\t\t\tcase 'quaternion':\n\t\t\t\tmixFunction = this._slerp;\n\t\t\t\tbreak;\n\n\t\t\tcase 'string':\n\t\t\tcase 'bool':\n\t\t\t\tbufferType = Array;\n\t\t\t\tmixFunction = this._select;\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tmixFunction = this._lerp;\n\n\t\t}\n\n\t\tthis.buffer = new bufferType( valueSize * 4 );\n\t\t// layout: [ incoming | accu0 | accu1 | orig ]\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\n\t\tthis._mixBufferRegion = mixFunction;\n\n\t\tthis.cumulativeWeight = 0;\n\n\t\tthis.useCount = 0;\n\t\tthis.referenceCount = 0;\n\n\t}\n\n\tObject.assign( PropertyMixer.prototype, {\n\n\t\t// accumulate data in the 'incoming' region into 'accu'\n\t\taccumulate: function ( accuIndex, weight ) {\n\n\t\t\t// note: happily accumulating nothing when weight = 0, the caller knows\n\t\t\t// the weight and shouldn't have made the call in the first place\n\n\t\t\tvar buffer = this.buffer,\n\t\t\t\tstride = this.valueSize,\n\t\t\t\toffset = accuIndex * stride + stride,\n\n\t\t\t\tcurrentWeight = this.cumulativeWeight;\n\n\t\t\tif ( currentWeight === 0 ) {\n\n\t\t\t\t// accuN := incoming * weight\n\n\t\t\t\tfor ( var i = 0; i !== stride; ++ i ) {\n\n\t\t\t\t\tbuffer[ offset + i ] = buffer[ i ];\n\n\t\t\t\t}\n\n\t\t\t\tcurrentWeight = weight;\n\n\t\t\t} else {\n\n\t\t\t\t// accuN := accuN + incoming * weight\n\n\t\t\t\tcurrentWeight += weight;\n\t\t\t\tvar mix = weight / currentWeight;\n\t\t\t\tthis._mixBufferRegion( buffer, offset, 0, mix, stride );\n\n\t\t\t}\n\n\t\t\tthis.cumulativeWeight = currentWeight;\n\n\t\t},\n\n\t\t// apply the state of 'accu' to the binding when accus differ\n\t\tapply: function ( accuIndex ) {\n\n\t\t\tvar stride = this.valueSize,\n\t\t\t\tbuffer = this.buffer,\n\t\t\t\toffset = accuIndex * stride + stride,\n\n\t\t\t\tweight = this.cumulativeWeight,\n\n\t\t\t\tbinding = this.binding;\n\n\t\t\tthis.cumulativeWeight = 0;\n\n\t\t\tif ( weight < 1 ) {\n\n\t\t\t\t// accuN := accuN + original * ( 1 - cumulativeWeight )\n\n\t\t\t\tvar originalValueOffset = stride * 3;\n\n\t\t\t\tthis._mixBufferRegion(\n\t\t\t\t\tbuffer, offset, originalValueOffset, 1 - weight, stride );\n\n\t\t\t}\n\n\t\t\tfor ( var i = stride, e = stride + stride; i !== e; ++ i ) {\n\n\t\t\t\tif ( buffer[ i ] !== buffer[ i + stride ] ) {\n\n\t\t\t\t\t// value has changed -> update scene graph\n\n\t\t\t\t\tbinding.setValue( buffer, offset );\n\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t},\n\n\t\t// remember the state of the bound property and copy it to both accus\n\t\tsaveOriginalState: function () {\n\n\t\t\tvar binding = this.binding;\n\n\t\t\tvar buffer = this.buffer,\n\t\t\t\tstride = this.valueSize,\n\n\t\t\t\toriginalValueOffset = stride * 3;\n\n\t\t\tbinding.getValue( buffer, originalValueOffset );\n\n\t\t\t// accu[0..1] := orig -- initially detect changes against the original\n\t\t\tfor ( var i = stride, e = originalValueOffset; i !== e; ++ i ) {\n\n\t\t\t\tbuffer[ i ] = buffer[ originalValueOffset + ( i % stride ) ];\n\n\t\t\t}\n\n\t\t\tthis.cumulativeWeight = 0;\n\n\t\t},\n\n\t\t// apply the state previously taken via 'saveOriginalState' to the binding\n\t\trestoreOriginalState: function () {\n\n\t\t\tvar originalValueOffset = this.valueSize * 3;\n\t\t\tthis.binding.setValue( this.buffer, originalValueOffset );\n\n\t\t},\n\n\n\t\t// mix functions\n\n\t\t_select: function ( buffer, dstOffset, srcOffset, t, stride ) {\n\n\t\t\tif ( t >= 0.5 ) {\n\n\t\t\t\tfor ( var i = 0; i !== stride; ++ i ) {\n\n\t\t\t\t\tbuffer[ dstOffset + i ] = buffer[ srcOffset + i ];\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t},\n\n\t\t_slerp: function ( buffer, dstOffset, srcOffset, t ) {\n\n\t\t\tQuaternion.slerpFlat( buffer, dstOffset, buffer, dstOffset, buffer, srcOffset, t );\n\n\t\t},\n\n\t\t_lerp: function ( buffer, dstOffset, srcOffset, t, stride ) {\n\n\t\t\tvar s = 1 - t;\n\n\t\t\tfor ( var i = 0; i !== stride; ++ i ) {\n\n\t\t\t\tvar j = dstOffset + i;\n\n\t\t\t\tbuffer[ j ] = buffer[ j ] * s + buffer[ srcOffset + i ] * t;\n\n\t\t\t}\n\n\t\t}\n\n\t} );\n\n\t/**\n\t *\n\t * A reference to a real property in the scene graph.\n\t *\n\t *\n\t * @author Ben Houston / http://clara.io/\n\t * @author David Sarno / http://lighthaus.us/\n\t * @author tschw\n\t */\n\n\tfunction Composite( targetGroup, path, optionalParsedPath ) {\n\n\t\tvar parsedPath = optionalParsedPath || PropertyBinding.parseTrackName( path );\n\n\t\tthis._targetGroup = targetGroup;\n\t\tthis._bindings = targetGroup.subscribe_( path, parsedPath );\n\n\t}\n\n\tObject.assign( Composite.prototype, {\n\n\t\tgetValue: function ( array, offset ) {\n\n\t\t\tthis.bind(); // bind all binding\n\n\t\t\tvar firstValidIndex = this._targetGroup.nCachedObjects_,\n\t\t\t\tbinding = this._bindings[ firstValidIndex ];\n\n\t\t\t// and only call .getValue on the first\n\t\t\tif ( binding !== undefined ) binding.getValue( array, offset );\n\n\t\t},\n\n\t\tsetValue: function ( array, offset ) {\n\n\t\t\tvar bindings = this._bindings;\n\n\t\t\tfor ( var i = this._targetGroup.nCachedObjects_,\n\t\t\t\t\t n = bindings.length; i !== n; ++ i ) {\n\n\t\t\t\tbindings[ i ].setValue( array, offset );\n\n\t\t\t}\n\n\t\t},\n\n\t\tbind: function () {\n\n\t\t\tvar bindings = this._bindings;\n\n\t\t\tfor ( var i = this._targetGroup.nCachedObjects_,\n\t\t\t\t\t n = bindings.length; i !== n; ++ i ) {\n\n\t\t\t\tbindings[ i ].bind();\n\n\t\t\t}\n\n\t\t},\n\n\t\tunbind: function () {\n\n\t\t\tvar bindings = this._bindings;\n\n\t\t\tfor ( var i = this._targetGroup.nCachedObjects_,\n\t\t\t\t\t n = bindings.length; i !== n; ++ i ) {\n\n\t\t\t\tbindings[ i ].unbind();\n\n\t\t\t}\n\n\t\t}\n\n\t} );\n\n\n\tfunction PropertyBinding( 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}\n\n\tObject.assign( PropertyBinding, {\n\n\t\tComposite: Composite,\n\n\t\tcreate: function ( root, path, parsedPath ) {\n\n\t\t\tif ( ! ( root && root.isAnimationObjectGroup ) ) {\n\n\t\t\t\treturn new PropertyBinding( root, path, parsedPath );\n\n\t\t\t} else {\n\n\t\t\t\treturn new PropertyBinding.Composite( root, path, parsedPath );\n\n\t\t\t}\n\n\t\t},\n\n\t\t/**\n\t\t * Replaces spaces with underscores and removes unsupported characters from\n\t\t * node names, to ensure compatibility with parseTrackName().\n\t\t *\n\t\t * @param {string} name Node name to be sanitized.\n\t\t * @return {string}\n\t\t */\n\t\tsanitizeNodeName: function ( name ) {\n\n\t\t\treturn name.replace( /\\s/g, '_' ).replace( /[^\\w-]/g, '' );\n\n\t\t},\n\n\t\tparseTrackName: function () {\n\n\t\t\t// Parent directories, delimited by '/' or ':'. Currently unused, but must\n\t\t\t// be matched to parse the rest of the track name.\n\t\t\tvar directoryRe = /((?:[\\w-]+[\\/:])*)/;\n\n\t\t\t// Target node. May contain word characters (a-zA-Z0-9_) and '.' or '-'.\n\t\t\tvar nodeRe = /([\\w-\\.]+)?/;\n\n\t\t\t// Object on target node, and accessor. Name may contain only word\n\t\t\t// characters. Accessor may contain any character except closing bracket.\n\t\t\tvar objectRe = /(?:\\.([\\w-]+)(?:\\[(.+)\\])?)?/;\n\n\t\t\t// Property and accessor. May contain only word characters. Accessor may\n\t\t\t// contain any non-bracket characters.\n\t\t\tvar propertyRe = /\\.([\\w-]+)(?:\\[(.+)\\])?/;\n\n\t\t\tvar trackRe = new RegExp( ''\n\t\t\t\t+ '^'\n\t\t\t\t+ directoryRe.source\n\t\t\t\t+ nodeRe.source\n\t\t\t\t+ objectRe.source\n\t\t\t\t+ propertyRe.source\n\t\t\t\t+ '$'\n\t\t\t);\n\n\t\t\tvar supportedObjectNames = [ 'material', 'materials', 'bones' ];\n\n\t\t\treturn function ( trackName ) {\n\n\t\t\t\tvar matches = trackRe.exec( trackName );\n\n\t\t\t\tif ( ! matches ) {\n\n\t\t\t\t\tthrow new Error( 'PropertyBinding: Cannot parse trackName: ' + trackName );\n\n\t\t\t\t}\n\n\t\t\t\tvar results = {\n\t\t\t\t\t// directoryName: matches[ 1 ], // (tschw) currently unused\n\t\t\t\t\tnodeName: matches[ 2 ],\n\t\t\t\t\tobjectName: matches[ 3 ],\n\t\t\t\t\tobjectIndex: matches[ 4 ],\n\t\t\t\t\tpropertyName: matches[ 5 ], // required\n\t\t\t\t\tpropertyIndex: matches[ 6 ]\n\t\t\t\t};\n\n\t\t\t\tvar lastDot = results.nodeName && results.nodeName.lastIndexOf( '.' );\n\n\t\t\t\tif ( lastDot !== undefined && lastDot !== - 1 ) {\n\n\t\t\t\t\tvar objectName = results.nodeName.substring( lastDot + 1 );\n\n\t\t\t\t\t// Object names must be checked against a whitelist. Otherwise, there\n\t\t\t\t\t// is no way to parse 'foo.bar.baz': 'baz' must be a property, but\n\t\t\t\t\t// 'bar' could be the objectName, or part of a nodeName (which can\n\t\t\t\t\t// include '.' characters).\n\t\t\t\t\tif ( supportedObjectNames.indexOf( objectName ) !== - 1 ) {\n\n\t\t\t\t\t\tresults.nodeName = results.nodeName.substring( 0, lastDot );\n\t\t\t\t\t\tresults.objectName = objectName;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( results.propertyName === null || results.propertyName.length === 0 ) {\n\n\t\t\t\t\tthrow new Error( 'PropertyBinding: can not parse propertyName from trackName: ' + trackName );\n\n\t\t\t\t}\n\n\t\t\t\treturn results;\n\n\t\t\t};\n\n\t\t}(),\n\n\t\tfindNode: function ( root, nodeName ) {\n\n\t\t\tif ( ! nodeName || nodeName === \"\" || nodeName === \"root\" || nodeName === \".\" || nodeName === - 1 || nodeName === root.name || nodeName === root.uuid ) {\n\n\t\t\t\treturn root;\n\n\t\t\t}\n\n\t\t\t// search into skeleton bones.\n\t\t\tif ( root.skeleton ) {\n\n\t\t\t\tvar searchSkeleton = function ( skeleton ) {\n\n\t\t\t\t\tfor ( var i = 0; i < skeleton.bones.length; i ++ ) {\n\n\t\t\t\t\t\tvar bone = skeleton.bones[ i ];\n\n\t\t\t\t\t\tif ( bone.name === nodeName ) {\n\n\t\t\t\t\t\t\treturn bone;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\treturn null;\n\n\t\t\t\t};\n\n\t\t\t\tvar bone = searchSkeleton( root.skeleton );\n\n\t\t\t\tif ( bone ) {\n\n\t\t\t\t\treturn bone;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// search into node subtree.\n\t\t\tif ( root.children ) {\n\n\t\t\t\tvar searchNodeSubtree = function ( children ) {\n\n\t\t\t\t\tfor ( var i = 0; i < children.length; i ++ ) {\n\n\t\t\t\t\t\tvar childNode = children[ i ];\n\n\t\t\t\t\t\tif ( childNode.name === nodeName || childNode.uuid === nodeName ) {\n\n\t\t\t\t\t\t\treturn childNode;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar result = searchNodeSubtree( childNode.children );\n\n\t\t\t\t\t\tif ( result ) return result;\n\n\t\t\t\t\t}\n\n\t\t\t\t\treturn null;\n\n\t\t\t\t};\n\n\t\t\t\tvar subTreeNode = searchNodeSubtree( root.children );\n\n\t\t\t\tif ( subTreeNode ) {\n\n\t\t\t\t\treturn subTreeNode;\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\tObject.assign( PropertyBinding.prototype, { // prototype, continued\n\n\t\t// these are used to \"bind\" a nonexistent property\n\t\t_getValue_unavailable: function () {},\n\t\t_setValue_unavailable: function () {},\n\n\t\tBindingType: {\n\t\t\tDirect: 0,\n\t\t\tEntireArray: 1,\n\t\t\tArrayElement: 2,\n\t\t\tHasFromToArray: 3\n\t\t},\n\n\t\tVersioning: {\n\t\t\tNone: 0,\n\t\t\tNeedsUpdate: 1,\n\t\t\tMatrixWorldNeedsUpdate: 2\n\t\t},\n\n\t\tGetterByBindingType: [\n\n\t\t\tfunction getValue_direct( buffer, offset ) {\n\n\t\t\t\tbuffer[ offset ] = this.node[ this.propertyName ];\n\n\t\t\t},\n\n\t\t\tfunction getValue_array( buffer, offset ) {\n\n\t\t\t\tvar source = this.resolvedProperty;\n\n\t\t\t\tfor ( var i = 0, n = source.length; i !== n; ++ i ) {\n\n\t\t\t\t\tbuffer[ offset ++ ] = source[ i ];\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tfunction getValue_arrayElement( buffer, offset ) {\n\n\t\t\t\tbuffer[ offset ] = this.resolvedProperty[ this.propertyIndex ];\n\n\t\t\t},\n\n\t\t\tfunction getValue_toArray( buffer, offset ) {\n\n\t\t\t\tthis.resolvedProperty.toArray( buffer, offset );\n\n\t\t\t}\n\n\t\t],\n\n\t\tSetterByBindingTypeAndVersioning: [\n\n\t\t\t[\n\t\t\t\t// Direct\n\n\t\t\t\tfunction setValue_direct( buffer, offset ) {\n\n\t\t\t\t\tthis.targetObject[ this.propertyName ] = buffer[ offset ];\n\n\t\t\t\t},\n\n\t\t\t\tfunction setValue_direct_setNeedsUpdate( buffer, offset ) {\n\n\t\t\t\t\tthis.targetObject[ this.propertyName ] = buffer[ offset ];\n\t\t\t\t\tthis.targetObject.needsUpdate = true;\n\n\t\t\t\t},\n\n\t\t\t\tfunction setValue_direct_setMatrixWorldNeedsUpdate( buffer, offset ) {\n\n\t\t\t\t\tthis.targetObject[ this.propertyName ] = buffer[ offset ];\n\t\t\t\t\tthis.targetObject.matrixWorldNeedsUpdate = true;\n\n\t\t\t\t}\n\n\t\t\t], [\n\n\t\t\t\t// EntireArray\n\n\t\t\t\tfunction setValue_array( buffer, offset ) {\n\n\t\t\t\t\tvar dest = this.resolvedProperty;\n\n\t\t\t\t\tfor ( var i = 0, n = dest.length; i !== n; ++ i ) {\n\n\t\t\t\t\t\tdest[ i ] = buffer[ offset ++ ];\n\n\t\t\t\t\t}\n\n\t\t\t\t},\n\n\t\t\t\tfunction setValue_array_setNeedsUpdate( buffer, offset ) {\n\n\t\t\t\t\tvar dest = this.resolvedProperty;\n\n\t\t\t\t\tfor ( var i = 0, n = dest.length; i !== n; ++ i ) {\n\n\t\t\t\t\t\tdest[ i ] = buffer[ offset ++ ];\n\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.targetObject.needsUpdate = true;\n\n\t\t\t\t},\n\n\t\t\t\tfunction setValue_array_setMatrixWorldNeedsUpdate( buffer, offset ) {\n\n\t\t\t\t\tvar dest = this.resolvedProperty;\n\n\t\t\t\t\tfor ( var i = 0, n = dest.length; i !== n; ++ i ) {\n\n\t\t\t\t\t\tdest[ i ] = buffer[ offset ++ ];\n\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.targetObject.matrixWorldNeedsUpdate = true;\n\n\t\t\t\t}\n\n\t\t\t], [\n\n\t\t\t\t// ArrayElement\n\n\t\t\t\tfunction setValue_arrayElement( buffer, offset ) {\n\n\t\t\t\t\tthis.resolvedProperty[ this.propertyIndex ] = buffer[ offset ];\n\n\t\t\t\t},\n\n\t\t\t\tfunction setValue_arrayElement_setNeedsUpdate( buffer, offset ) {\n\n\t\t\t\t\tthis.resolvedProperty[ this.propertyIndex ] = buffer[ offset ];\n\t\t\t\t\tthis.targetObject.needsUpdate = true;\n\n\t\t\t\t},\n\n\t\t\t\tfunction setValue_arrayElement_setMatrixWorldNeedsUpdate( buffer, offset ) {\n\n\t\t\t\t\tthis.resolvedProperty[ this.propertyIndex ] = buffer[ offset ];\n\t\t\t\t\tthis.targetObject.matrixWorldNeedsUpdate = true;\n\n\t\t\t\t}\n\n\t\t\t], [\n\n\t\t\t\t// HasToFromArray\n\n\t\t\t\tfunction setValue_fromArray( buffer, offset ) {\n\n\t\t\t\t\tthis.resolvedProperty.fromArray( buffer, offset );\n\n\t\t\t\t},\n\n\t\t\t\tfunction setValue_fromArray_setNeedsUpdate( buffer, offset ) {\n\n\t\t\t\t\tthis.resolvedProperty.fromArray( buffer, offset );\n\t\t\t\t\tthis.targetObject.needsUpdate = true;\n\n\t\t\t\t},\n\n\t\t\t\tfunction setValue_fromArray_setMatrixWorldNeedsUpdate( buffer, offset ) {\n\n\t\t\t\t\tthis.resolvedProperty.fromArray( buffer, offset );\n\t\t\t\t\tthis.targetObject.matrixWorldNeedsUpdate = true;\n\n\t\t\t\t}\n\n\t\t\t]\n\n\t\t],\n\n\t\tgetValue: function getValue_unbound( targetArray, offset ) {\n\n\t\t\tthis.bind();\n\t\t\tthis.getValue( targetArray, offset );\n\n\t\t\t// Note: This class uses a State pattern on a per-method basis:\n\t\t\t// 'bind' sets 'this.getValue' / 'setValue' and shadows the\n\t\t\t// prototype version of these methods with one that represents\n\t\t\t// the bound state. When the property is not found, the methods\n\t\t\t// become no-ops.\n\n\t\t},\n\n\t\tsetValue: function getValue_unbound( sourceArray, offset ) {\n\n\t\t\tthis.bind();\n\t\t\tthis.setValue( sourceArray, offset );\n\n\t\t},\n\n\t\t// create getter / setter pair for a property in the scene graph\n\t\tbind: function () {\n\n\t\t\tvar targetObject = this.node,\n\t\t\t\tparsedPath = this.parsedPath,\n\n\t\t\t\tobjectName = parsedPath.objectName,\n\t\t\t\tpropertyName = parsedPath.propertyName,\n\t\t\t\tpropertyIndex = parsedPath.propertyIndex;\n\n\t\t\tif ( ! targetObject ) {\n\n\t\t\t\ttargetObject = PropertyBinding.findNode( this.rootNode, parsedPath.nodeName ) || this.rootNode;\n\n\t\t\t\tthis.node = targetObject;\n\n\t\t\t}\n\n\t\t\t// set fail state so we can just 'return' on error\n\t\t\tthis.getValue = this._getValue_unavailable;\n\t\t\tthis.setValue = this._setValue_unavailable;\n\n\t\t\t// ensure there is a value node\n\t\t\tif ( ! targetObject ) {\n\n\t\t\t\tconsole.error( 'THREE.PropertyBinding: Trying to update node for track: ' + this.path + ' but it wasn\\'t found.' );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tif ( objectName ) {\n\n\t\t\t\tvar objectIndex = parsedPath.objectIndex;\n\n\t\t\t\t// special cases were we need to reach deeper into the hierarchy to get the face materials....\n\t\t\t\tswitch ( objectName ) {\n\n\t\t\t\t\tcase 'materials':\n\n\t\t\t\t\t\tif ( ! targetObject.material ) {\n\n\t\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\t\treturn;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( ! targetObject.material.materials ) {\n\n\t\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\t\treturn;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\ttargetObject = targetObject.material.materials;\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'bones':\n\n\t\t\t\t\t\tif ( ! targetObject.skeleton ) {\n\n\t\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\t\treturn;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// potential future optimization: skip this if propertyIndex is already an integer\n\t\t\t\t\t\t// and convert the integer string to a true integer.\n\n\t\t\t\t\t\ttargetObject = targetObject.skeleton.bones;\n\n\t\t\t\t\t\t// support resolving morphTarget names into indices.\n\t\t\t\t\t\tfor ( var i = 0; i < targetObject.length; i ++ ) {\n\n\t\t\t\t\t\t\tif ( targetObject[ i ].name === objectIndex ) {\n\n\t\t\t\t\t\t\t\tobjectIndex = i;\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\n\t\t\t\t\t\tif ( targetObject[ objectName ] === undefined ) {\n\n\t\t\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to objectName of node undefined.', this );\n\t\t\t\t\t\t\treturn;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\ttargetObject = targetObject[ objectName ];\n\n\t\t\t\t}\n\n\n\t\t\t\tif ( objectIndex !== undefined ) {\n\n\t\t\t\t\tif ( targetObject[ objectIndex ] === undefined ) {\n\n\t\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\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttargetObject = targetObject[ objectIndex ];\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// resolve property\n\t\t\tvar nodeProperty = targetObject[ propertyName ];\n\n\t\t\tif ( nodeProperty === undefined ) {\n\n\t\t\t\tvar nodeName = parsedPath.nodeName;\n\n\t\t\t\tconsole.error( 'THREE.PropertyBinding: Trying to update property for track: ' + nodeName +\n\t\t\t\t\t'.' + propertyName + ' but it wasn\\'t found.', targetObject );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\t// determine versioning scheme\n\t\t\tvar versioning = this.Versioning.None;\n\n\t\t\tif ( targetObject.needsUpdate !== undefined ) { // material\n\n\t\t\t\tversioning = this.Versioning.NeedsUpdate;\n\t\t\t\tthis.targetObject = targetObject;\n\n\t\t\t} else if ( targetObject.matrixWorldNeedsUpdate !== undefined ) { // node transform\n\n\t\t\t\tversioning = this.Versioning.MatrixWorldNeedsUpdate;\n\t\t\t\tthis.targetObject = targetObject;\n\n\t\t\t}\n\n\t\t\t// determine how the property gets bound\n\t\t\tvar bindingType = this.BindingType.Direct;\n\n\t\t\tif ( propertyIndex !== undefined ) {\n\n\t\t\t\t// access a sub element of the property array (only primitives are supported right now)\n\n\t\t\t\tif ( propertyName === \"morphTargetInfluences\" ) {\n\n\t\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\t// support resolving morphTarget names into indices.\n\t\t\t\t\tif ( ! targetObject.geometry ) {\n\n\t\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\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( targetObject.geometry.isBufferGeometry ) {\n\n\t\t\t\t\t\tif ( ! targetObject.geometry.morphAttributes ) {\n\n\t\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\t\treturn;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tfor ( var i = 0; i < this.node.geometry.morphAttributes.position.length; i ++ ) {\n\n\t\t\t\t\t\t\tif ( targetObject.geometry.morphAttributes.position[ i ].name === propertyIndex ) {\n\n\t\t\t\t\t\t\t\tpropertyIndex = i;\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tif ( ! targetObject.geometry.morphTargets ) {\n\n\t\t\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.morphTargets.', this );\n\t\t\t\t\t\t\treturn;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tfor ( var i = 0; i < this.node.geometry.morphTargets.length; i ++ ) {\n\n\t\t\t\t\t\t\tif ( targetObject.geometry.morphTargets[ i ].name === propertyIndex ) {\n\n\t\t\t\t\t\t\t\tpropertyIndex = i;\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tbindingType = this.BindingType.ArrayElement;\n\n\t\t\t\tthis.resolvedProperty = nodeProperty;\n\t\t\t\tthis.propertyIndex = propertyIndex;\n\n\t\t\t} else if ( nodeProperty.fromArray !== undefined && nodeProperty.toArray !== undefined ) {\n\n\t\t\t\t// must use copy for Object3D.Euler/Quaternion\n\n\t\t\t\tbindingType = this.BindingType.HasFromToArray;\n\n\t\t\t\tthis.resolvedProperty = nodeProperty;\n\n\t\t\t} else if ( Array.isArray( nodeProperty ) ) {\n\n\t\t\t\tbindingType = this.BindingType.EntireArray;\n\n\t\t\t\tthis.resolvedProperty = nodeProperty;\n\n\t\t\t} else {\n\n\t\t\t\tthis.propertyName = propertyName;\n\n\t\t\t}\n\n\t\t\t// select getter / setter\n\t\t\tthis.getValue = this.GetterByBindingType[ bindingType ];\n\t\t\tthis.setValue = this.SetterByBindingTypeAndVersioning[ bindingType ][ versioning ];\n\n\t\t},\n\n\t\tunbind: function () {\n\n\t\t\tthis.node = null;\n\n\t\t\t// back to the prototype version of getValue / setValue\n\t\t\t// note: avoiding to mutate the shape of 'this' via 'delete'\n\t\t\tthis.getValue = this._getValue_unbound;\n\t\t\tthis.setValue = this._setValue_unbound;\n\n\t\t}\n\n\t} );\n\n\t//!\\ DECLARE ALIAS AFTER assign prototype !\n\tObject.assign( PropertyBinding.prototype, {\n\n\t\t// initial state of these methods that calls 'bind'\n\t\t_getValue_unbound: PropertyBinding.prototype.getValue,\n\t\t_setValue_unbound: PropertyBinding.prototype.setValue,\n\n\t} );\n\n\t/**\n\t *\n\t * A group of objects that receives a shared animation state.\n\t *\n\t * Usage:\n\t *\n\t * \t-\tAdd objects you would otherwise pass as 'root' to the\n\t * \t\tconstructor or the .clipAction method of AnimationMixer.\n\t *\n\t * \t-\tInstead pass this object as 'root'.\n\t *\n\t * \t-\tYou can also add and remove objects later when the mixer\n\t * \t\tis running.\n\t *\n\t * Note:\n\t *\n\t * \tObjects of this class appear as one object to the mixer,\n\t * \tso cache control of the individual objects must be done\n\t * \ton the group.\n\t *\n\t * Limitation:\n\t *\n\t * \t- \tThe animated properties must be compatible among the\n\t * \t\tall objects in the group.\n\t *\n\t * -\tA single property can either be controlled through a\n\t * \ttarget group or directly, but not both.\n\t *\n\t * @author tschw\n\t */\n\n\tfunction AnimationObjectGroup() {\n\n\t\tthis.uuid = _Math.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;\t\t\t// threshold\n\t\t// note: read by PropertyBinding.Composite\n\n\t\tvar indices = {};\n\t\tthis._indicesByUUID = indices;\t\t// for bookkeeping\n\n\t\tfor ( var 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 = [];\t\t\t\t\t// inside: string\n\t\tthis._parsedPaths = [];\t\t\t\t// inside: { we don't care, here }\n\t\tthis._bindings = []; \t\t\t\t// inside: Array< PropertyBinding >\n\t\tthis._bindingsIndicesByPath = {}; \t// inside: indices in these arrays\n\n\t\tvar 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\tObject.assign( AnimationObjectGroup.prototype, {\n\n\t\tisAnimationObjectGroup: true,\n\n\t\tadd: function () {\n\n\t\t\tvar objects = this._objects,\n\t\t\t\tnObjects = objects.length,\n\t\t\t\tnCachedObjects = this.nCachedObjects_,\n\t\t\t\tindicesByUUID = this._indicesByUUID,\n\t\t\t\tpaths = this._paths,\n\t\t\t\tparsedPaths = this._parsedPaths,\n\t\t\t\tbindings = this._bindings,\n\t\t\t\tnBindings = bindings.length;\n\n\t\t\tfor ( var i = 0, n = arguments.length; i !== n; ++ i ) {\n\n\t\t\t\tvar object = arguments[ i ],\n\t\t\t\t\tuuid = object.uuid,\n\t\t\t\t\tindex = indicesByUUID[ uuid ],\n\t\t\t\t\tknownObject = undefined;\n\n\t\t\t\tif ( index === undefined ) {\n\n\t\t\t\t\t// unknown object -> add it to the ACTIVE region\n\n\t\t\t\t\tindex = nObjects ++;\n\t\t\t\t\tindicesByUUID[ uuid ] = index;\n\t\t\t\t\tobjects.push( object );\n\n\t\t\t\t\t// accounting is done, now do the same for all bindings\n\n\t\t\t\t\tfor ( var j = 0, m = nBindings; j !== m; ++ j ) {\n\n\t\t\t\t\t\tbindings[ j ].push( new PropertyBinding( object, paths[ j ], parsedPaths[ j ] ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( index < nCachedObjects ) {\n\n\t\t\t\t\tknownObject = objects[ index ];\n\n\t\t\t\t\t// move existing object to the ACTIVE region\n\n\t\t\t\t\tvar firstActiveIndex = -- nCachedObjects,\n\t\t\t\t\t\tlastCachedObject = objects[ firstActiveIndex ];\n\n\t\t\t\t\tindicesByUUID[ lastCachedObject.uuid ] = index;\n\t\t\t\t\tobjects[ index ] = lastCachedObject;\n\n\t\t\t\t\tindicesByUUID[ uuid ] = firstActiveIndex;\n\t\t\t\t\tobjects[ firstActiveIndex ] = object;\n\n\t\t\t\t\t// accounting is done, now do the same for all bindings\n\n\t\t\t\t\tfor ( var j = 0, m = nBindings; j !== m; ++ j ) {\n\n\t\t\t\t\t\tvar bindingsForPath = bindings[ j ],\n\t\t\t\t\t\t\tlastCached = bindingsForPath[ firstActiveIndex ],\n\t\t\t\t\t\t\tbinding = bindingsForPath[ index ];\n\n\t\t\t\t\t\tbindingsForPath[ index ] = lastCached;\n\n\t\t\t\t\t\tif ( binding === undefined ) {\n\n\t\t\t\t\t\t\t// since we do not bother to create new bindings\n\t\t\t\t\t\t\t// for objects that are cached, the binding may\n\t\t\t\t\t\t\t// or may not exist\n\n\t\t\t\t\t\t\tbinding = new PropertyBinding( object, paths[ j ], parsedPaths[ j ] );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbindingsForPath[ firstActiveIndex ] = binding;\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( objects[ index ] !== knownObject ) {\n\n\t\t\t\t\tconsole.error( 'THREE.AnimationObjectGroup: Different objects with the same UUID ' +\n\t\t\t\t\t\t\t'detected. Clean the caches or recreate your infrastructure when reloading scenes.' );\n\n\t\t\t\t} // else the object is already where we want it to be\n\n\t\t\t} // for arguments\n\n\t\t\tthis.nCachedObjects_ = nCachedObjects;\n\n\t\t},\n\n\t\tremove: function () {\n\n\t\t\tvar objects = this._objects,\n\t\t\t\tnCachedObjects = this.nCachedObjects_,\n\t\t\t\tindicesByUUID = this._indicesByUUID,\n\t\t\t\tbindings = this._bindings,\n\t\t\t\tnBindings = bindings.length;\n\n\t\t\tfor ( var i = 0, n = arguments.length; i !== n; ++ i ) {\n\n\t\t\t\tvar object = arguments[ i ],\n\t\t\t\t\tuuid = object.uuid,\n\t\t\t\t\tindex = indicesByUUID[ uuid ];\n\n\t\t\t\tif ( index !== undefined && index >= nCachedObjects ) {\n\n\t\t\t\t\t// move existing object into the CACHED region\n\n\t\t\t\t\tvar lastCachedIndex = nCachedObjects ++,\n\t\t\t\t\t\tfirstActiveObject = objects[ lastCachedIndex ];\n\n\t\t\t\t\tindicesByUUID[ firstActiveObject.uuid ] = index;\n\t\t\t\t\tobjects[ index ] = firstActiveObject;\n\n\t\t\t\t\tindicesByUUID[ uuid ] = lastCachedIndex;\n\t\t\t\t\tobjects[ lastCachedIndex ] = object;\n\n\t\t\t\t\t// accounting is done, now do the same for all bindings\n\n\t\t\t\t\tfor ( var j = 0, m = nBindings; j !== m; ++ j ) {\n\n\t\t\t\t\t\tvar bindingsForPath = bindings[ j ],\n\t\t\t\t\t\t\tfirstActive = bindingsForPath[ lastCachedIndex ],\n\t\t\t\t\t\t\tbinding = bindingsForPath[ index ];\n\n\t\t\t\t\t\tbindingsForPath[ index ] = firstActive;\n\t\t\t\t\t\tbindingsForPath[ lastCachedIndex ] = binding;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} // for arguments\n\n\t\t\tthis.nCachedObjects_ = nCachedObjects;\n\n\t\t},\n\n\t\t// remove & forget\n\t\tuncache: function () {\n\n\t\t\tvar objects = this._objects,\n\t\t\t\tnObjects = objects.length,\n\t\t\t\tnCachedObjects = this.nCachedObjects_,\n\t\t\t\tindicesByUUID = this._indicesByUUID,\n\t\t\t\tbindings = this._bindings,\n\t\t\t\tnBindings = bindings.length;\n\n\t\t\tfor ( var i = 0, n = arguments.length; i !== n; ++ i ) {\n\n\t\t\t\tvar object = arguments[ i ],\n\t\t\t\t\tuuid = object.uuid,\n\t\t\t\t\tindex = indicesByUUID[ uuid ];\n\n\t\t\t\tif ( index !== undefined ) {\n\n\t\t\t\t\tdelete indicesByUUID[ uuid ];\n\n\t\t\t\t\tif ( index < nCachedObjects ) {\n\n\t\t\t\t\t\t// object is cached, shrink the CACHED region\n\n\t\t\t\t\t\tvar firstActiveIndex = -- nCachedObjects,\n\t\t\t\t\t\t\tlastCachedObject = objects[ firstActiveIndex ],\n\t\t\t\t\t\t\tlastIndex = -- nObjects,\n\t\t\t\t\t\t\tlastObject = objects[ lastIndex ];\n\n\t\t\t\t\t\t// last cached object takes this object's place\n\t\t\t\t\t\tindicesByUUID[ lastCachedObject.uuid ] = index;\n\t\t\t\t\t\tobjects[ index ] = lastCachedObject;\n\n\t\t\t\t\t\t// last object goes to the activated slot and pop\n\t\t\t\t\t\tindicesByUUID[ lastObject.uuid ] = firstActiveIndex;\n\t\t\t\t\t\tobjects[ firstActiveIndex ] = lastObject;\n\t\t\t\t\t\tobjects.pop();\n\n\t\t\t\t\t\t// accounting is done, now do the same for all bindings\n\n\t\t\t\t\t\tfor ( var j = 0, m = nBindings; j !== m; ++ j ) {\n\n\t\t\t\t\t\t\tvar bindingsForPath = bindings[ j ],\n\t\t\t\t\t\t\t\tlastCached = bindingsForPath[ firstActiveIndex ],\n\t\t\t\t\t\t\t\tlast = bindingsForPath[ lastIndex ];\n\n\t\t\t\t\t\t\tbindingsForPath[ index ] = lastCached;\n\t\t\t\t\t\t\tbindingsForPath[ firstActiveIndex ] = last;\n\t\t\t\t\t\t\tbindingsForPath.pop();\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// object is active, just swap with the last and pop\n\n\t\t\t\t\t\tvar lastIndex = -- nObjects,\n\t\t\t\t\t\t\tlastObject = objects[ lastIndex ];\n\n\t\t\t\t\t\tindicesByUUID[ lastObject.uuid ] = index;\n\t\t\t\t\t\tobjects[ index ] = lastObject;\n\t\t\t\t\t\tobjects.pop();\n\n\t\t\t\t\t\t// accounting is done, now do the same for all bindings\n\n\t\t\t\t\t\tfor ( var j = 0, m = nBindings; j !== m; ++ j ) {\n\n\t\t\t\t\t\t\tvar bindingsForPath = bindings[ j ];\n\n\t\t\t\t\t\t\tbindingsForPath[ index ] = bindingsForPath[ lastIndex ];\n\t\t\t\t\t\t\tbindingsForPath.pop();\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} // cached or active\n\n\t\t\t\t} // if object is known\n\n\t\t\t} // for arguments\n\n\t\t\tthis.nCachedObjects_ = nCachedObjects;\n\n\t\t},\n\n\t\t// Internal interface used by befriended PropertyBinding.Composite:\n\n\t\tsubscribe_: function ( path, parsedPath ) {\n\n\t\t\t// returns an array of bindings for the given path that is changed\n\t\t\t// according to the contained objects in the group\n\n\t\t\tvar indicesByPath = this._bindingsIndicesByPath,\n\t\t\t\tindex = indicesByPath[ path ],\n\t\t\t\tbindings = this._bindings;\n\n\t\t\tif ( index !== undefined ) return bindings[ index ];\n\n\t\t\tvar paths = this._paths,\n\t\t\t\tparsedPaths = this._parsedPaths,\n\t\t\t\tobjects = this._objects,\n\t\t\t\tnObjects = objects.length,\n\t\t\t\tnCachedObjects = this.nCachedObjects_,\n\t\t\t\tbindingsForPath = new Array( nObjects );\n\n\t\t\tindex = bindings.length;\n\n\t\t\tindicesByPath[ path ] = index;\n\n\t\t\tpaths.push( path );\n\t\t\tparsedPaths.push( parsedPath );\n\t\t\tbindings.push( bindingsForPath );\n\n\t\t\tfor ( var i = nCachedObjects, n = objects.length; i !== n; ++ i ) {\n\n\t\t\t\tvar object = objects[ i ];\n\t\t\t\tbindingsForPath[ i ] = new PropertyBinding( object, path, parsedPath );\n\n\t\t\t}\n\n\t\t\treturn bindingsForPath;\n\n\t\t},\n\n\t\tunsubscribe_: function ( path ) {\n\n\t\t\t// tells the group to forget about a property path and no longer\n\t\t\t// update the array previously obtained with 'subscribe_'\n\n\t\t\tvar indicesByPath = this._bindingsIndicesByPath,\n\t\t\t\tindex = indicesByPath[ path ];\n\n\t\t\tif ( index !== undefined ) {\n\n\t\t\t\tvar paths = this._paths,\n\t\t\t\t\tparsedPaths = this._parsedPaths,\n\t\t\t\t\tbindings = this._bindings,\n\t\t\t\t\tlastBindingsIndex = bindings.length - 1,\n\t\t\t\t\tlastBindings = bindings[ lastBindingsIndex ],\n\t\t\t\t\tlastBindingsPath = path[ lastBindingsIndex ];\n\n\t\t\t\tindicesByPath[ lastBindingsPath ] = index;\n\n\t\t\t\tbindings[ index ] = lastBindings;\n\t\t\t\tbindings.pop();\n\n\t\t\t\tparsedPaths[ index ] = parsedPaths[ lastBindingsIndex ];\n\t\t\t\tparsedPaths.pop();\n\n\t\t\t\tpaths[ index ] = paths[ lastBindingsIndex ];\n\t\t\t\tpaths.pop();\n\n\t\t\t}\n\n\t\t}\n\n\t} );\n\n\t/**\n\t *\n\t * Action provided by AnimationMixer for scheduling clip playback on specific\n\t * objects.\n\t *\n\t * @author Ben Houston / http://clara.io/\n\t * @author David Sarno / http://lighthaus.us/\n\t * @author tschw\n\t *\n\t */\n\n\tfunction AnimationAction( mixer, clip, localRoot ) {\n\n\t\tthis._mixer = mixer;\n\t\tthis._clip = clip;\n\t\tthis._localRoot = localRoot || null;\n\n\t\tvar tracks = clip.tracks,\n\t\t\tnTracks = tracks.length,\n\t\t\tinterpolants = new Array( nTracks );\n\n\t\tvar interpolantSettings = {\n\t\t\tendingStart: ZeroCurvatureEnding,\n\t\t\tendingEnd: ZeroCurvatureEnding\n\t\t};\n\n\t\tfor ( var i = 0; i !== nTracks; ++ i ) {\n\n\t\t\tvar 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;\t// 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;\t\t\t// for the memory manager\n\t\tthis._byClipCacheIndex = null;\t\t// 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; \t\t// no. of repetitions when looping\n\n\t\tthis.paused = false;\t\t\t\t// true -> zero effective time scale\n\t\tthis.enabled = true;\t\t\t\t// false -> zero effective weight\n\n\t\tthis.clampWhenFinished \t= false;\t// keep feeding the last frame?\n\n\t\tthis.zeroSlopeAtStart \t= true;\t\t// for smooth interpolation w/o separate\n\t\tthis.zeroSlopeAtEnd\t\t= true;\t\t// clips for start, loop and end\n\n\t}\n\n\tObject.assign( AnimationAction.prototype, {\n\n\t\t// State & Scheduling\n\n\t\tplay: function () {\n\n\t\t\tthis._mixer._activateAction( this );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tstop: function () {\n\n\t\t\tthis._mixer._deactivateAction( this );\n\n\t\t\treturn this.reset();\n\n\t\t},\n\n\t\treset: function () {\n\n\t\t\tthis.paused = false;\n\t\t\tthis.enabled = true;\n\n\t\t\tthis.time = 0;\t\t\t// restart clip\n\t\t\tthis._loopCount = - 1;\t// forget previous loops\n\t\t\tthis._startTime = null;\t// forget scheduling\n\n\t\t\treturn this.stopFading().stopWarping();\n\n\t\t},\n\n\t\tisRunning: function () {\n\n\t\t\treturn this.enabled && ! this.paused && this.timeScale !== 0 &&\n\t\t\t\t\tthis._startTime === null && this._mixer._isActiveAction( this );\n\n\t\t},\n\n\t\t// return true when play has been called\n\t\tisScheduled: function () {\n\n\t\t\treturn this._mixer._isActiveAction( this );\n\n\t\t},\n\n\t\tstartAt: function ( time ) {\n\n\t\t\tthis._startTime = time;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetLoop: function ( mode, repetitions ) {\n\n\t\t\tthis.loop = mode;\n\t\t\tthis.repetitions = repetitions;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\t// Weight\n\n\t\t// set the weight stopping any scheduled fading\n\t\t// although .enabled = false yields an effective weight of zero, this\n\t\t// method does *not* change .enabled, because it would be confusing\n\t\tsetEffectiveWeight: function ( weight ) {\n\n\t\t\tthis.weight = weight;\n\n\t\t\t// note: same logic as when updated at runtime\n\t\t\tthis._effectiveWeight = this.enabled ? weight : 0;\n\n\t\t\treturn this.stopFading();\n\n\t\t},\n\n\t\t// return the weight considering fading and .enabled\n\t\tgetEffectiveWeight: function () {\n\n\t\t\treturn this._effectiveWeight;\n\n\t\t},\n\n\t\tfadeIn: function ( duration ) {\n\n\t\t\treturn this._scheduleFading( duration, 0, 1 );\n\n\t\t},\n\n\t\tfadeOut: function ( duration ) {\n\n\t\t\treturn this._scheduleFading( duration, 1, 0 );\n\n\t\t},\n\n\t\tcrossFadeFrom: function ( fadeOutAction, duration, warp ) {\n\n\t\t\tfadeOutAction.fadeOut( duration );\n\t\t\tthis.fadeIn( duration );\n\n\t\t\tif ( warp ) {\n\n\t\t\t\tvar fadeInDuration = this._clip.duration,\n\t\t\t\t\tfadeOutDuration = fadeOutAction._clip.duration,\n\n\t\t\t\t\tstartEndRatio = fadeOutDuration / fadeInDuration,\n\t\t\t\t\tendStartRatio = fadeInDuration / fadeOutDuration;\n\n\t\t\t\tfadeOutAction.warp( 1.0, startEndRatio, duration );\n\t\t\t\tthis.warp( endStartRatio, 1.0, duration );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tcrossFadeTo: function ( fadeInAction, duration, warp ) {\n\n\t\t\treturn fadeInAction.crossFadeFrom( this, duration, warp );\n\n\t\t},\n\n\t\tstopFading: function () {\n\n\t\t\tvar weightInterpolant = this._weightInterpolant;\n\n\t\t\tif ( weightInterpolant !== null ) {\n\n\t\t\t\tthis._weightInterpolant = null;\n\t\t\t\tthis._mixer._takeBackControlInterpolant( weightInterpolant );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\t// Time Scale Control\n\n\t\t// set the time scale stopping any scheduled warping\n\t\t// although .paused = true yields an effective time scale of zero, this\n\t\t// method does *not* change .paused, because it would be confusing\n\t\tsetEffectiveTimeScale: function ( timeScale ) {\n\n\t\t\tthis.timeScale = timeScale;\n\t\t\tthis._effectiveTimeScale = this.paused ? 0 : timeScale;\n\n\t\t\treturn this.stopWarping();\n\n\t\t},\n\n\t\t// return the time scale considering warping and .paused\n\t\tgetEffectiveTimeScale: function () {\n\n\t\t\treturn this._effectiveTimeScale;\n\n\t\t},\n\n\t\tsetDuration: function ( duration ) {\n\n\t\t\tthis.timeScale = this._clip.duration / duration;\n\n\t\t\treturn this.stopWarping();\n\n\t\t},\n\n\t\tsyncWith: function ( action ) {\n\n\t\t\tthis.time = action.time;\n\t\t\tthis.timeScale = action.timeScale;\n\n\t\t\treturn this.stopWarping();\n\n\t\t},\n\n\t\thalt: function ( duration ) {\n\n\t\t\treturn this.warp( this._effectiveTimeScale, 0, duration );\n\n\t\t},\n\n\t\twarp: function ( startTimeScale, endTimeScale, duration ) {\n\n\t\t\tvar mixer = this._mixer, now = mixer.time,\n\t\t\t\tinterpolant = this._timeScaleInterpolant,\n\n\t\t\t\ttimeScale = this.timeScale;\n\n\t\t\tif ( interpolant === null ) {\n\n\t\t\t\tinterpolant = mixer._lendControlInterpolant();\n\t\t\t\tthis._timeScaleInterpolant = interpolant;\n\n\t\t\t}\n\n\t\t\tvar times = interpolant.parameterPositions,\n\t\t\t\tvalues = interpolant.sampleValues;\n\n\t\t\ttimes[ 0 ] = now;\n\t\t\ttimes[ 1 ] = now + duration;\n\n\t\t\tvalues[ 0 ] = startTimeScale / timeScale;\n\t\t\tvalues[ 1 ] = endTimeScale / timeScale;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tstopWarping: function () {\n\n\t\t\tvar timeScaleInterpolant = this._timeScaleInterpolant;\n\n\t\t\tif ( timeScaleInterpolant !== null ) {\n\n\t\t\t\tthis._timeScaleInterpolant = null;\n\t\t\t\tthis._mixer._takeBackControlInterpolant( timeScaleInterpolant );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\t// Object Accessors\n\n\t\tgetMixer: function () {\n\n\t\t\treturn this._mixer;\n\n\t\t},\n\n\t\tgetClip: function () {\n\n\t\t\treturn this._clip;\n\n\t\t},\n\n\t\tgetRoot: function () {\n\n\t\t\treturn this._localRoot || this._mixer._root;\n\n\t\t},\n\n\t\t// Interna\n\n\t\t_update: function ( time, deltaTime, timeDirection, accuIndex ) {\n\n\t\t\t// called by the mixer\n\n\t\t\tif ( ! this.enabled ) {\n\n\t\t\t\t// call ._updateWeight() to update ._effectiveWeight\n\n\t\t\t\tthis._updateWeight( time );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tvar startTime = this._startTime;\n\n\t\t\tif ( startTime !== null ) {\n\n\t\t\t\t// check for scheduled start of action\n\n\t\t\t\tvar timeRunning = ( time - startTime ) * timeDirection;\n\t\t\t\tif ( timeRunning < 0 || timeDirection === 0 ) {\n\n\t\t\t\t\treturn; // yet to come / don't decide when delta = 0\n\n\t\t\t\t}\n\n\t\t\t\t// start\n\n\t\t\t\tthis._startTime = null; // unschedule\n\t\t\t\tdeltaTime = timeDirection * timeRunning;\n\n\t\t\t}\n\n\t\t\t// apply time scale and advance time\n\n\t\t\tdeltaTime *= this._updateTimeScale( time );\n\t\t\tvar clipTime = this._updateTime( deltaTime );\n\n\t\t\t// note: _updateTime may disable the action resulting in\n\t\t\t// an effective weight of 0\n\n\t\t\tvar weight = this._updateWeight( time );\n\n\t\t\tif ( weight > 0 ) {\n\n\t\t\t\tvar interpolants = this._interpolants;\n\t\t\t\tvar propertyMixers = this._propertyBindings;\n\n\t\t\t\tfor ( var j = 0, m = interpolants.length; j !== m; ++ j ) {\n\n\t\t\t\t\tinterpolants[ j ].evaluate( clipTime );\n\t\t\t\t\tpropertyMixers[ j ].accumulate( accuIndex, weight );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t},\n\n\t\t_updateWeight: function ( time ) {\n\n\t\t\tvar weight = 0;\n\n\t\t\tif ( this.enabled ) {\n\n\t\t\t\tweight = this.weight;\n\t\t\t\tvar interpolant = this._weightInterpolant;\n\n\t\t\t\tif ( interpolant !== null ) {\n\n\t\t\t\t\tvar interpolantValue = interpolant.evaluate( time )[ 0 ];\n\n\t\t\t\t\tweight *= interpolantValue;\n\n\t\t\t\t\tif ( time > interpolant.parameterPositions[ 1 ] ) {\n\n\t\t\t\t\t\tthis.stopFading();\n\n\t\t\t\t\t\tif ( interpolantValue === 0 ) {\n\n\t\t\t\t\t\t\t// faded out, disable\n\t\t\t\t\t\t\tthis.enabled = 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\tthis._effectiveWeight = weight;\n\t\t\treturn weight;\n\n\t\t},\n\n\t\t_updateTimeScale: function ( time ) {\n\n\t\t\tvar timeScale = 0;\n\n\t\t\tif ( ! this.paused ) {\n\n\t\t\t\ttimeScale = this.timeScale;\n\n\t\t\t\tvar interpolant = this._timeScaleInterpolant;\n\n\t\t\t\tif ( interpolant !== null ) {\n\n\t\t\t\t\tvar interpolantValue = interpolant.evaluate( time )[ 0 ];\n\n\t\t\t\t\ttimeScale *= interpolantValue;\n\n\t\t\t\t\tif ( time > interpolant.parameterPositions[ 1 ] ) {\n\n\t\t\t\t\t\tthis.stopWarping();\n\n\t\t\t\t\t\tif ( timeScale === 0 ) {\n\n\t\t\t\t\t\t\t// motion has halted, pause\n\t\t\t\t\t\t\tthis.paused = true;\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// warp done - apply final time scale\n\t\t\t\t\t\t\tthis.timeScale = timeScale;\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\tthis._effectiveTimeScale = timeScale;\n\t\t\treturn timeScale;\n\n\t\t},\n\n\t\t_updateTime: function ( deltaTime ) {\n\n\t\t\tvar time = this.time + deltaTime;\n\n\t\t\tif ( deltaTime === 0 ) return time;\n\n\t\t\tvar duration = this._clip.duration,\n\n\t\t\t\tloop = this.loop,\n\t\t\t\tloopCount = this._loopCount;\n\n\t\t\tif ( loop === LoopOnce ) {\n\n\t\t\t\tif ( loopCount === - 1 ) {\n\n\t\t\t\t\t// just started\n\n\t\t\t\t\tthis._loopCount = 0;\n\t\t\t\t\tthis._setEndings( true, true, false );\n\n\t\t\t\t}\n\n\t\t\t\thandle_stop: {\n\n\t\t\t\t\tif ( time >= duration ) {\n\n\t\t\t\t\t\ttime = duration;\n\n\t\t\t\t\t} else if ( time < 0 ) {\n\n\t\t\t\t\t\ttime = 0;\n\n\t\t\t\t\t} else break handle_stop;\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\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}\n\n\t\t\t} else { // repetitive Repeat or PingPong\n\n\t\t\t\tvar pingPong = ( loop === LoopPingPong );\n\n\t\t\t\tif ( loopCount === - 1 ) {\n\n\t\t\t\t\t// just started\n\n\t\t\t\t\tif ( deltaTime >= 0 ) {\n\n\t\t\t\t\t\tloopCount = 0;\n\n\t\t\t\t\t\tthis._setEndings( true, this.repetitions === 0, pingPong );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// when looping in reverse direction, the initial\n\t\t\t\t\t\t// transition through zero counts as a repetition,\n\t\t\t\t\t\t// so leave loopCount at -1\n\n\t\t\t\t\t\tthis._setEndings( this.repetitions === 0, true, pingPong );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( time >= duration || time < 0 ) {\n\n\t\t\t\t\t// wrap around\n\n\t\t\t\t\tvar loopDelta = Math.floor( time / duration ); // signed\n\t\t\t\t\ttime -= duration * loopDelta;\n\n\t\t\t\t\tloopCount += Math.abs( loopDelta );\n\n\t\t\t\t\tvar pending = this.repetitions - loopCount;\n\n\t\t\t\t\tif ( pending < 0 ) {\n\n\t\t\t\t\t\t// have to stop (switch state, clamp time, fire event)\n\n\t\t\t\t\t\tif ( this.clampWhenFinished ) this.paused = true;\n\t\t\t\t\t\telse this.enabled = false;\n\n\t\t\t\t\t\ttime = deltaTime > 0 ? duration : 0;\n\n\t\t\t\t\t\tthis._mixer.dispatchEvent( {\n\t\t\t\t\t\t\ttype: 'finished', action: this,\n\t\t\t\t\t\t\tdirection: deltaTime > 0 ? 1 : - 1\n\t\t\t\t\t\t} );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// keep running\n\n\t\t\t\t\t\tif ( pending === 0 ) {\n\n\t\t\t\t\t\t\t// entering the last round\n\n\t\t\t\t\t\t\tvar atStart = deltaTime < 0;\n\t\t\t\t\t\t\tthis._setEndings( atStart, ! atStart, pingPong );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tthis._setEndings( false, false, pingPong );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tthis._loopCount = loopCount;\n\n\t\t\t\t\t\tthis._mixer.dispatchEvent( {\n\t\t\t\t\t\t\ttype: 'loop', action: this, loopDelta: loopDelta\n\t\t\t\t\t\t} );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( pingPong && ( loopCount & 1 ) === 1 ) {\n\n\t\t\t\t\t// invert time for the \"pong round\"\n\n\t\t\t\t\tthis.time = time;\n\t\t\t\t\treturn duration - time;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis.time = time;\n\t\t\treturn time;\n\n\t\t},\n\n\t\t_setEndings: function ( atStart, atEnd, pingPong ) {\n\n\t\t\tvar settings = this._interpolantSettings;\n\n\t\t\tif ( pingPong ) {\n\n\t\t\t\tsettings.endingStart \t= ZeroSlopeEnding;\n\t\t\t\tsettings.endingEnd\t\t= ZeroSlopeEnding;\n\n\t\t\t} else {\n\n\t\t\t\t// assuming for LoopOnce atStart == atEnd == true\n\n\t\t\t\tif ( atStart ) {\n\n\t\t\t\t\tsettings.endingStart = this.zeroSlopeAtStart ? ZeroSlopeEnding : ZeroCurvatureEnding;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tsettings.endingStart = WrapAroundEnding;\n\n\t\t\t\t}\n\n\t\t\t\tif ( atEnd ) {\n\n\t\t\t\t\tsettings.endingEnd = this.zeroSlopeAtEnd ? ZeroSlopeEnding : ZeroCurvatureEnding;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tsettings.endingEnd \t = WrapAroundEnding;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t},\n\n\t\t_scheduleFading: function ( duration, weightNow, weightThen ) {\n\n\t\t\tvar mixer = this._mixer, now = mixer.time,\n\t\t\t\tinterpolant = this._weightInterpolant;\n\n\t\t\tif ( interpolant === null ) {\n\n\t\t\t\tinterpolant = mixer._lendControlInterpolant();\n\t\t\t\tthis._weightInterpolant = interpolant;\n\n\t\t\t}\n\n\t\t\tvar times = interpolant.parameterPositions,\n\t\t\t\tvalues = interpolant.sampleValues;\n\n\t\t\ttimes[ 0 ] = now; \t\t\t\tvalues[ 0 ] = weightNow;\n\t\t\ttimes[ 1 ] = now + duration;\tvalues[ 1 ] = weightThen;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t} );\n\n\t/**\n\t *\n\t * Player for AnimationClips.\n\t *\n\t *\n\t * @author Ben Houston / http://clara.io/\n\t * @author David Sarno / http://lighthaus.us/\n\t * @author tschw\n\t */\n\n\tfunction AnimationMixer( root ) {\n\n\t\tthis._root = root;\n\t\tthis._initMemoryManager();\n\t\tthis._accuIndex = 0;\n\n\t\tthis.time = 0;\n\n\t\tthis.timeScale = 1.0;\n\n\t}\n\n\tObject.assign( AnimationMixer.prototype, EventDispatcher.prototype, {\n\n\t\t_bindAction: function ( action, prototypeAction ) {\n\n\t\t\tvar root = action._localRoot || this._root,\n\t\t\t\ttracks = action._clip.tracks,\n\t\t\t\tnTracks = tracks.length,\n\t\t\t\tbindings = action._propertyBindings,\n\t\t\t\tinterpolants = action._interpolants,\n\t\t\t\trootUuid = root.uuid,\n\t\t\t\tbindingsByRoot = this._bindingsByRootAndName,\n\t\t\t\tbindingsByName = bindingsByRoot[ rootUuid ];\n\n\t\t\tif ( bindingsByName === undefined ) {\n\n\t\t\t\tbindingsByName = {};\n\t\t\t\tbindingsByRoot[ rootUuid ] = bindingsByName;\n\n\t\t\t}\n\n\t\t\tfor ( var i = 0; i !== nTracks; ++ i ) {\n\n\t\t\t\tvar track = tracks[ i ],\n\t\t\t\t\ttrackName = track.name,\n\t\t\t\t\tbinding = bindingsByName[ trackName ];\n\n\t\t\t\tif ( binding !== undefined ) {\n\n\t\t\t\t\tbindings[ i ] = binding;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tbinding = bindings[ i ];\n\n\t\t\t\t\tif ( binding !== undefined ) {\n\n\t\t\t\t\t\t// existing binding, make sure the cache knows\n\n\t\t\t\t\t\tif ( binding._cacheIndex === null ) {\n\n\t\t\t\t\t\t\t++ binding.referenceCount;\n\t\t\t\t\t\t\tthis._addInactiveBinding( binding, rootUuid, trackName );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tcontinue;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tvar path = prototypeAction && prototypeAction.\n\t\t\t\t\t\t_propertyBindings[ i ].binding.parsedPath;\n\n\t\t\t\t\tbinding = new PropertyMixer(\n\t\t\t\t\t\tPropertyBinding.create( root, trackName, path ),\n\t\t\t\t\t\ttrack.ValueTypeName, track.getValueSize() );\n\n\t\t\t\t\t++ binding.referenceCount;\n\t\t\t\t\tthis._addInactiveBinding( binding, rootUuid, trackName );\n\n\t\t\t\t\tbindings[ i ] = binding;\n\n\t\t\t\t}\n\n\t\t\t\tinterpolants[ i ].resultBuffer = binding.buffer;\n\n\t\t\t}\n\n\t\t},\n\n\t\t_activateAction: function ( action ) {\n\n\t\t\tif ( ! this._isActiveAction( action ) ) {\n\n\t\t\t\tif ( action._cacheIndex === null ) {\n\n\t\t\t\t\t// this action has been forgotten by the cache, but the user\n\t\t\t\t\t// appears to be still using it -> rebind\n\n\t\t\t\t\tvar rootUuid = ( action._localRoot || this._root ).uuid,\n\t\t\t\t\t\tclipUuid = action._clip.uuid,\n\t\t\t\t\t\tactionsForClip = this._actionsByClip[ clipUuid ];\n\n\t\t\t\t\tthis._bindAction( action,\n\t\t\t\t\t\tactionsForClip && actionsForClip.knownActions[ 0 ] );\n\n\t\t\t\t\tthis._addInactiveAction( action, clipUuid, rootUuid );\n\n\t\t\t\t}\n\n\t\t\t\tvar bindings = action._propertyBindings;\n\n\t\t\t\t// increment reference counts / sort out state\n\t\t\t\tfor ( var i = 0, n = bindings.length; i !== n; ++ i ) {\n\n\t\t\t\t\tvar binding = bindings[ i ];\n\n\t\t\t\t\tif ( binding.useCount ++ === 0 ) {\n\n\t\t\t\t\t\tthis._lendBinding( binding );\n\t\t\t\t\t\tbinding.saveOriginalState();\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tthis._lendAction( action );\n\n\t\t\t}\n\n\t\t},\n\n\t\t_deactivateAction: function ( action ) {\n\n\t\t\tif ( this._isActiveAction( action ) ) {\n\n\t\t\t\tvar bindings = action._propertyBindings;\n\n\t\t\t\t// decrement reference counts / sort out state\n\t\t\t\tfor ( var i = 0, n = bindings.length; i !== n; ++ i ) {\n\n\t\t\t\t\tvar binding = bindings[ i ];\n\n\t\t\t\t\tif ( -- binding.useCount === 0 ) {\n\n\t\t\t\t\t\tbinding.restoreOriginalState();\n\t\t\t\t\t\tthis._takeBackBinding( binding );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tthis._takeBackAction( action );\n\n\t\t\t}\n\n\t\t},\n\n\t\t// Memory manager\n\n\t\t_initMemoryManager: function () {\n\n\t\t\tthis._actions = []; // 'nActiveActions' followed by inactive ones\n\t\t\tthis._nActiveActions = 0;\n\n\t\t\tthis._actionsByClip = {};\n\t\t\t// inside:\n\t\t\t// {\n\t\t\t// \t\tknownActions: Array< AnimationAction >\t- used as prototypes\n\t\t\t// \t\tactionByRoot: AnimationAction\t\t\t- lookup\n\t\t\t// }\n\n\n\t\t\tthis._bindings = []; // 'nActiveBindings' followed by inactive ones\n\t\t\tthis._nActiveBindings = 0;\n\n\t\t\tthis._bindingsByRootAndName = {}; // inside: Map< name, PropertyMixer >\n\n\n\t\t\tthis._controlInterpolants = []; // same game as above\n\t\t\tthis._nActiveControlInterpolants = 0;\n\n\t\t\tvar scope = this;\n\n\t\t\tthis.stats = {\n\n\t\t\t\tactions: {\n\t\t\t\t\tget total() {\n\n\t\t\t\t\t\treturn scope._actions.length;\n\n\t\t\t\t\t},\n\t\t\t\t\tget inUse() {\n\n\t\t\t\t\t\treturn scope._nActiveActions;\n\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tbindings: {\n\t\t\t\t\tget total() {\n\n\t\t\t\t\t\treturn scope._bindings.length;\n\n\t\t\t\t\t},\n\t\t\t\t\tget inUse() {\n\n\t\t\t\t\t\treturn scope._nActiveBindings;\n\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tcontrolInterpolants: {\n\t\t\t\t\tget total() {\n\n\t\t\t\t\t\treturn scope._controlInterpolants.length;\n\n\t\t\t\t\t},\n\t\t\t\t\tget inUse() {\n\n\t\t\t\t\t\treturn scope._nActiveControlInterpolants;\n\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t};\n\n\t\t},\n\n\t\t// Memory management for AnimationAction objects\n\n\t\t_isActiveAction: function ( action ) {\n\n\t\t\tvar index = action._cacheIndex;\n\t\t\treturn index !== null && index < this._nActiveActions;\n\n\t\t},\n\n\t\t_addInactiveAction: function ( action, clipUuid, rootUuid ) {\n\n\t\t\tvar actions = this._actions,\n\t\t\t\tactionsByClip = this._actionsByClip,\n\t\t\t\tactionsForClip = actionsByClip[ clipUuid ];\n\n\t\t\tif ( actionsForClip === undefined ) {\n\n\t\t\t\tactionsForClip = {\n\n\t\t\t\t\tknownActions: [ action ],\n\t\t\t\t\tactionByRoot: {}\n\n\t\t\t\t};\n\n\t\t\t\taction._byClipCacheIndex = 0;\n\n\t\t\t\tactionsByClip[ clipUuid ] = actionsForClip;\n\n\t\t\t} else {\n\n\t\t\t\tvar knownActions = actionsForClip.knownActions;\n\n\t\t\t\taction._byClipCacheIndex = knownActions.length;\n\t\t\t\tknownActions.push( action );\n\n\t\t\t}\n\n\t\t\taction._cacheIndex = actions.length;\n\t\t\tactions.push( action );\n\n\t\t\tactionsForClip.actionByRoot[ rootUuid ] = action;\n\n\t\t},\n\n\t\t_removeInactiveAction: function ( action ) {\n\n\t\t\tvar actions = this._actions,\n\t\t\t\tlastInactiveAction = actions[ actions.length - 1 ],\n\t\t\t\tcacheIndex = action._cacheIndex;\n\n\t\t\tlastInactiveAction._cacheIndex = cacheIndex;\n\t\t\tactions[ cacheIndex ] = lastInactiveAction;\n\t\t\tactions.pop();\n\n\t\t\taction._cacheIndex = null;\n\n\n\t\t\tvar clipUuid = action._clip.uuid,\n\t\t\t\tactionsByClip = this._actionsByClip,\n\t\t\t\tactionsForClip = actionsByClip[ clipUuid ],\n\t\t\t\tknownActionsForClip = actionsForClip.knownActions,\n\n\t\t\t\tlastKnownAction =\n\t\t\t\t\tknownActionsForClip[ knownActionsForClip.length - 1 ],\n\n\t\t\t\tbyClipCacheIndex = action._byClipCacheIndex;\n\n\t\t\tlastKnownAction._byClipCacheIndex = byClipCacheIndex;\n\t\t\tknownActionsForClip[ byClipCacheIndex ] = lastKnownAction;\n\t\t\tknownActionsForClip.pop();\n\n\t\t\taction._byClipCacheIndex = null;\n\n\n\t\t\tvar actionByRoot = actionsForClip.actionByRoot,\n\t\t\t\trootUuid = ( action._localRoot || this._root ).uuid;\n\n\t\t\tdelete actionByRoot[ rootUuid ];\n\n\t\t\tif ( knownActionsForClip.length === 0 ) {\n\n\t\t\t\tdelete actionsByClip[ clipUuid ];\n\n\t\t\t}\n\n\t\t\tthis._removeInactiveBindingsForAction( action );\n\n\t\t},\n\n\t\t_removeInactiveBindingsForAction: function ( action ) {\n\n\t\t\tvar bindings = action._propertyBindings;\n\t\t\tfor ( var i = 0, n = bindings.length; i !== n; ++ i ) {\n\n\t\t\t\tvar binding = bindings[ i ];\n\n\t\t\t\tif ( -- binding.referenceCount === 0 ) {\n\n\t\t\t\t\tthis._removeInactiveBinding( binding );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t},\n\n\t\t_lendAction: function ( action ) {\n\n\t\t\t// [ active actions | inactive actions ]\n\t\t\t// [ active actions >| inactive actions ]\n\t\t\t// s a\n\t\t\t// <-swap->\n\t\t\t// a s\n\n\t\t\tvar actions = this._actions,\n\t\t\t\tprevIndex = action._cacheIndex,\n\n\t\t\t\tlastActiveIndex = this._nActiveActions ++,\n\n\t\t\t\tfirstInactiveAction = actions[ lastActiveIndex ];\n\n\t\t\taction._cacheIndex = lastActiveIndex;\n\t\t\tactions[ lastActiveIndex ] = action;\n\n\t\t\tfirstInactiveAction._cacheIndex = prevIndex;\n\t\t\tactions[ prevIndex ] = firstInactiveAction;\n\n\t\t},\n\n\t\t_takeBackAction: function ( action ) {\n\n\t\t\t// [ active actions | inactive actions ]\n\t\t\t// [ active actions |< inactive actions ]\n\t\t\t// a s\n\t\t\t// <-swap->\n\t\t\t// s a\n\n\t\t\tvar actions = this._actions,\n\t\t\t\tprevIndex = action._cacheIndex,\n\n\t\t\t\tfirstInactiveIndex = -- this._nActiveActions,\n\n\t\t\t\tlastActiveAction = actions[ firstInactiveIndex ];\n\n\t\t\taction._cacheIndex = firstInactiveIndex;\n\t\t\tactions[ firstInactiveIndex ] = action;\n\n\t\t\tlastActiveAction._cacheIndex = prevIndex;\n\t\t\tactions[ prevIndex ] = lastActiveAction;\n\n\t\t},\n\n\t\t// Memory management for PropertyMixer objects\n\n\t\t_addInactiveBinding: function ( binding, rootUuid, trackName ) {\n\n\t\t\tvar bindingsByRoot = this._bindingsByRootAndName,\n\t\t\t\tbindingByName = bindingsByRoot[ rootUuid ],\n\n\t\t\t\tbindings = this._bindings;\n\n\t\t\tif ( bindingByName === undefined ) {\n\n\t\t\t\tbindingByName = {};\n\t\t\t\tbindingsByRoot[ rootUuid ] = bindingByName;\n\n\t\t\t}\n\n\t\t\tbindingByName[ trackName ] = binding;\n\n\t\t\tbinding._cacheIndex = bindings.length;\n\t\t\tbindings.push( binding );\n\n\t\t},\n\n\t\t_removeInactiveBinding: function ( binding ) {\n\n\t\t\tvar bindings = this._bindings,\n\t\t\t\tpropBinding = binding.binding,\n\t\t\t\trootUuid = propBinding.rootNode.uuid,\n\t\t\t\ttrackName = propBinding.path,\n\t\t\t\tbindingsByRoot = this._bindingsByRootAndName,\n\t\t\t\tbindingByName = bindingsByRoot[ rootUuid ],\n\n\t\t\t\tlastInactiveBinding = bindings[ bindings.length - 1 ],\n\t\t\t\tcacheIndex = binding._cacheIndex;\n\n\t\t\tlastInactiveBinding._cacheIndex = cacheIndex;\n\t\t\tbindings[ cacheIndex ] = lastInactiveBinding;\n\t\t\tbindings.pop();\n\n\t\t\tdelete bindingByName[ trackName ];\n\n\t\t\tremove_empty_map: {\n\n\t\t\t\tfor ( var _ in bindingByName ) break remove_empty_map; // eslint-disable-line no-unused-vars\n\n\t\t\t\tdelete bindingsByRoot[ rootUuid ];\n\n\t\t\t}\n\n\t\t},\n\n\t\t_lendBinding: function ( binding ) {\n\n\t\t\tvar bindings = this._bindings,\n\t\t\t\tprevIndex = binding._cacheIndex,\n\n\t\t\t\tlastActiveIndex = this._nActiveBindings ++,\n\n\t\t\t\tfirstInactiveBinding = bindings[ lastActiveIndex ];\n\n\t\t\tbinding._cacheIndex = lastActiveIndex;\n\t\t\tbindings[ lastActiveIndex ] = binding;\n\n\t\t\tfirstInactiveBinding._cacheIndex = prevIndex;\n\t\t\tbindings[ prevIndex ] = firstInactiveBinding;\n\n\t\t},\n\n\t\t_takeBackBinding: function ( binding ) {\n\n\t\t\tvar bindings = this._bindings,\n\t\t\t\tprevIndex = binding._cacheIndex,\n\n\t\t\t\tfirstInactiveIndex = -- this._nActiveBindings,\n\n\t\t\t\tlastActiveBinding = bindings[ firstInactiveIndex ];\n\n\t\t\tbinding._cacheIndex = firstInactiveIndex;\n\t\t\tbindings[ firstInactiveIndex ] = binding;\n\n\t\t\tlastActiveBinding._cacheIndex = prevIndex;\n\t\t\tbindings[ prevIndex ] = lastActiveBinding;\n\n\t\t},\n\n\n\t\t// Memory management of Interpolants for weight and time scale\n\n\t\t_lendControlInterpolant: function () {\n\n\t\t\tvar interpolants = this._controlInterpolants,\n\t\t\t\tlastActiveIndex = this._nActiveControlInterpolants ++,\n\t\t\t\tinterpolant = interpolants[ lastActiveIndex ];\n\n\t\t\tif ( interpolant === undefined ) {\n\n\t\t\t\tinterpolant = new LinearInterpolant(\n\t\t\t\t\tnew Float32Array( 2 ), new Float32Array( 2 ),\n\t\t\t\t\t1, this._controlInterpolantsResultBuffer );\n\n\t\t\t\tinterpolant.__cacheIndex = lastActiveIndex;\n\t\t\t\tinterpolants[ lastActiveIndex ] = interpolant;\n\n\t\t\t}\n\n\t\t\treturn interpolant;\n\n\t\t},\n\n\t\t_takeBackControlInterpolant: function ( interpolant ) {\n\n\t\t\tvar interpolants = this._controlInterpolants,\n\t\t\t\tprevIndex = interpolant.__cacheIndex,\n\n\t\t\t\tfirstInactiveIndex = -- this._nActiveControlInterpolants,\n\n\t\t\t\tlastActiveInterpolant = interpolants[ firstInactiveIndex ];\n\n\t\t\tinterpolant.__cacheIndex = firstInactiveIndex;\n\t\t\tinterpolants[ firstInactiveIndex ] = interpolant;\n\n\t\t\tlastActiveInterpolant.__cacheIndex = prevIndex;\n\t\t\tinterpolants[ prevIndex ] = lastActiveInterpolant;\n\n\t\t},\n\n\t\t_controlInterpolantsResultBuffer: new Float32Array( 1 ),\n\n\t\t// return an action for a clip optionally using a custom root target\n\t\t// object (this method allocates a lot of dynamic memory in case a\n\t\t// previously unknown clip/root combination is specified)\n\t\tclipAction: function ( clip, optionalRoot ) {\n\n\t\t\tvar root = optionalRoot || this._root,\n\t\t\t\trootUuid = root.uuid,\n\n\t\t\t\tclipObject = typeof clip === 'string' ?\n\t\t\t\t\tAnimationClip.findByName( root, clip ) : clip,\n\n\t\t\t\tclipUuid = clipObject !== null ? clipObject.uuid : clip,\n\n\t\t\t\tactionsForClip = this._actionsByClip[ clipUuid ],\n\t\t\t\tprototypeAction = null;\n\n\t\t\tif ( actionsForClip !== undefined ) {\n\n\t\t\t\tvar existingAction =\n\t\t\t\t\t\tactionsForClip.actionByRoot[ rootUuid ];\n\n\t\t\t\tif ( existingAction !== undefined ) {\n\n\t\t\t\t\treturn existingAction;\n\n\t\t\t\t}\n\n\t\t\t\t// we know the clip, so we don't have to parse all\n\t\t\t\t// the bindings again but can just copy\n\t\t\t\tprototypeAction = actionsForClip.knownActions[ 0 ];\n\n\t\t\t\t// also, take the clip from the prototype action\n\t\t\t\tif ( clipObject === null )\n\t\t\t\t\tclipObject = prototypeAction._clip;\n\n\t\t\t}\n\n\t\t\t// clip must be known when specified via string\n\t\t\tif ( clipObject === null ) return null;\n\n\t\t\t// allocate all resources required to run it\n\t\t\tvar newAction = new AnimationAction( this, clipObject, optionalRoot );\n\n\t\t\tthis._bindAction( newAction, prototypeAction );\n\n\t\t\t// and make the action known to the memory manager\n\t\t\tthis._addInactiveAction( newAction, clipUuid, rootUuid );\n\n\t\t\treturn newAction;\n\n\t\t},\n\n\t\t// get an existing action\n\t\texistingAction: function ( clip, optionalRoot ) {\n\n\t\t\tvar root = optionalRoot || this._root,\n\t\t\t\trootUuid = root.uuid,\n\n\t\t\t\tclipObject = typeof clip === 'string' ?\n\t\t\t\t\tAnimationClip.findByName( root, clip ) : clip,\n\n\t\t\t\tclipUuid = clipObject ? clipObject.uuid : clip,\n\n\t\t\t\tactionsForClip = this._actionsByClip[ clipUuid ];\n\n\t\t\tif ( actionsForClip !== undefined ) {\n\n\t\t\t\treturn actionsForClip.actionByRoot[ rootUuid ] || null;\n\n\t\t\t}\n\n\t\t\treturn null;\n\n\t\t},\n\n\t\t// deactivates all previously scheduled actions\n\t\tstopAllAction: function () {\n\n\t\t\tvar actions = this._actions,\n\t\t\t\tnActions = this._nActiveActions,\n\t\t\t\tbindings = this._bindings,\n\t\t\t\tnBindings = this._nActiveBindings;\n\n\t\t\tthis._nActiveActions = 0;\n\t\t\tthis._nActiveBindings = 0;\n\n\t\t\tfor ( var i = 0; i !== nActions; ++ i ) {\n\n\t\t\t\tactions[ i ].reset();\n\n\t\t\t}\n\n\t\t\tfor ( var i = 0; i !== nBindings; ++ i ) {\n\n\t\t\t\tbindings[ i ].useCount = 0;\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\t// advance the time and update apply the animation\n\t\tupdate: function ( deltaTime ) {\n\n\t\t\tdeltaTime *= this.timeScale;\n\n\t\t\tvar actions = this._actions,\n\t\t\t\tnActions = this._nActiveActions,\n\n\t\t\t\ttime = this.time += deltaTime,\n\t\t\t\ttimeDirection = Math.sign( deltaTime ),\n\n\t\t\t\taccuIndex = this._accuIndex ^= 1;\n\n\t\t\t// run active actions\n\n\t\t\tfor ( var i = 0; i !== nActions; ++ i ) {\n\n\t\t\t\tvar action = actions[ i ];\n\n\t\t\t\taction._update( time, deltaTime, timeDirection, accuIndex );\n\n\t\t\t}\n\n\t\t\t// update scene graph\n\n\t\t\tvar bindings = this._bindings,\n\t\t\t\tnBindings = this._nActiveBindings;\n\n\t\t\tfor ( var i = 0; i !== nBindings; ++ i ) {\n\n\t\t\t\tbindings[ i ].apply( accuIndex );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\t// return this mixer's root target object\n\t\tgetRoot: function () {\n\n\t\t\treturn this._root;\n\n\t\t},\n\n\t\t// free all resources specific to a particular clip\n\t\tuncacheClip: function ( clip ) {\n\n\t\t\tvar actions = this._actions,\n\t\t\t\tclipUuid = clip.uuid,\n\t\t\t\tactionsByClip = this._actionsByClip,\n\t\t\t\tactionsForClip = actionsByClip[ clipUuid ];\n\n\t\t\tif ( actionsForClip !== undefined ) {\n\n\t\t\t\t// note: just calling _removeInactiveAction would mess up the\n\t\t\t\t// iteration state and also require updating the state we can\n\t\t\t\t// just throw away\n\n\t\t\t\tvar actionsToRemove = actionsForClip.knownActions;\n\n\t\t\t\tfor ( var i = 0, n = actionsToRemove.length; i !== n; ++ i ) {\n\n\t\t\t\t\tvar action = actionsToRemove[ i ];\n\n\t\t\t\t\tthis._deactivateAction( action );\n\n\t\t\t\t\tvar cacheIndex = action._cacheIndex,\n\t\t\t\t\t\tlastInactiveAction = actions[ actions.length - 1 ];\n\n\t\t\t\t\taction._cacheIndex = null;\n\t\t\t\t\taction._byClipCacheIndex = null;\n\n\t\t\t\t\tlastInactiveAction._cacheIndex = cacheIndex;\n\t\t\t\t\tactions[ cacheIndex ] = lastInactiveAction;\n\t\t\t\t\tactions.pop();\n\n\t\t\t\t\tthis._removeInactiveBindingsForAction( action );\n\n\t\t\t\t}\n\n\t\t\t\tdelete actionsByClip[ clipUuid ];\n\n\t\t\t}\n\n\t\t},\n\n\t\t// free all resources specific to a particular root target object\n\t\tuncacheRoot: function ( root ) {\n\n\t\t\tvar rootUuid = root.uuid,\n\t\t\t\tactionsByClip = this._actionsByClip;\n\n\t\t\tfor ( var clipUuid in actionsByClip ) {\n\n\t\t\t\tvar actionByRoot = actionsByClip[ clipUuid ].actionByRoot,\n\t\t\t\t\taction = actionByRoot[ rootUuid ];\n\n\t\t\t\tif ( action !== undefined ) {\n\n\t\t\t\t\tthis._deactivateAction( action );\n\t\t\t\t\tthis._removeInactiveAction( action );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tvar bindingsByRoot = this._bindingsByRootAndName,\n\t\t\t\tbindingByName = bindingsByRoot[ rootUuid ];\n\n\t\t\tif ( bindingByName !== undefined ) {\n\n\t\t\t\tfor ( var trackName in bindingByName ) {\n\n\t\t\t\t\tvar binding = bindingByName[ trackName ];\n\t\t\t\t\tbinding.restoreOriginalState();\n\t\t\t\t\tthis._removeInactiveBinding( binding );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t},\n\n\t\t// remove a targeted clip from the cache\n\t\tuncacheAction: function ( clip, optionalRoot ) {\n\n\t\t\tvar action = this.existingAction( clip, optionalRoot );\n\n\t\t\tif ( action !== null ) {\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} );\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t */\n\n\tfunction Uniform( 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\tUniform.prototype.clone = function () {\n\n\t\treturn new Uniform( this.value.clone === undefined ? this.value : this.value.clone() );\n\n\t};\n\n\t/**\n\t * @author benaadams / https://twitter.com/ben_a_adams\n\t */\n\n\tfunction InstancedBufferGeometry() {\n\n\t\tBufferGeometry.call( this );\n\n\t\tthis.type = 'InstancedBufferGeometry';\n\t\tthis.maxInstancedCount = undefined;\n\n\t}\n\n\tInstancedBufferGeometry.prototype = Object.assign( Object.create( BufferGeometry.prototype ), {\n\n\t\tconstructor: InstancedBufferGeometry,\n\n\t\tisInstancedBufferGeometry: true,\n\n\t\tcopy: function ( source ) {\n\n\t\t\tBufferGeometry.prototype.copy.call( this, source );\n\n\t\t\tthis.maxInstancedCount = source.maxInstancedCount;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tclone: function () {\n\n\t\t\treturn new this.constructor().copy( this );\n\n\t\t}\n\n\t} );\n\n\t/**\n\t * @author benaadams / https://twitter.com/ben_a_adams\n\t */\n\n\tfunction InterleavedBufferAttribute( interleavedBuffer, itemSize, offset, normalized ) {\n\n\t\tthis.uuid = _Math.generateUUID();\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\tObject.defineProperties( InterleavedBufferAttribute.prototype, {\n\n\t\tcount: {\n\n\t\t\tget: function () {\n\n\t\t\t\treturn this.data.count;\n\n\t\t\t}\n\n\t\t},\n\n\t\tarray: {\n\n\t\t\tget: function () {\n\n\t\t\t\treturn this.data.array;\n\n\t\t\t}\n\n\t\t}\n\n\t} );\n\n\tObject.assign( InterleavedBufferAttribute.prototype, {\n\n\t\tisInterleavedBufferAttribute: true,\n\n\t\tsetX: function ( index, x ) {\n\n\t\t\tthis.data.array[ index * this.data.stride + this.offset ] = x;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetY: function ( index, y ) {\n\n\t\t\tthis.data.array[ index * this.data.stride + this.offset + 1 ] = y;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetZ: function ( index, z ) {\n\n\t\t\tthis.data.array[ index * this.data.stride + this.offset + 2 ] = z;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetW: function ( index, w ) {\n\n\t\t\tthis.data.array[ index * this.data.stride + this.offset + 3 ] = w;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tgetX: function ( index ) {\n\n\t\t\treturn this.data.array[ index * this.data.stride + this.offset ];\n\n\t\t},\n\n\t\tgetY: function ( index ) {\n\n\t\t\treturn this.data.array[ index * this.data.stride + this.offset + 1 ];\n\n\t\t},\n\n\t\tgetZ: function ( index ) {\n\n\t\t\treturn this.data.array[ index * this.data.stride + this.offset + 2 ];\n\n\t\t},\n\n\t\tgetW: function ( index ) {\n\n\t\t\treturn this.data.array[ index * this.data.stride + this.offset + 3 ];\n\n\t\t},\n\n\t\tsetXY: function ( index, x, y ) {\n\n\t\t\tindex = index * this.data.stride + this.offset;\n\n\t\t\tthis.data.array[ index + 0 ] = x;\n\t\t\tthis.data.array[ index + 1 ] = y;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetXYZ: function ( index, x, y, z ) {\n\n\t\t\tindex = index * this.data.stride + this.offset;\n\n\t\t\tthis.data.array[ index + 0 ] = x;\n\t\t\tthis.data.array[ index + 1 ] = y;\n\t\t\tthis.data.array[ index + 2 ] = z;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetXYZW: function ( index, x, y, z, w ) {\n\n\t\t\tindex = index * this.data.stride + this.offset;\n\n\t\t\tthis.data.array[ index + 0 ] = x;\n\t\t\tthis.data.array[ index + 1 ] = y;\n\t\t\tthis.data.array[ index + 2 ] = z;\n\t\t\tthis.data.array[ index + 3 ] = w;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t} );\n\n\t/**\n\t * @author benaadams / https://twitter.com/ben_a_adams\n\t */\n\n\tfunction InterleavedBuffer( array, stride ) {\n\n\t\tthis.uuid = _Math.generateUUID();\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.dynamic = false;\n\t\tthis.updateRange = { offset: 0, count: - 1 };\n\n\t\tthis.onUploadCallback = function () {};\n\n\t\tthis.version = 0;\n\n\t}\n\n\tObject.defineProperty( InterleavedBuffer.prototype, 'needsUpdate', {\n\n\t\tset: function ( value ) {\n\n\t\t\tif ( value === true ) this.version ++;\n\n\t\t}\n\n\t} );\n\n\tObject.assign( InterleavedBuffer.prototype, {\n\n\t\tisInterleavedBuffer: true,\n\n\t\tsetArray: function ( array ) {\n\n\t\t\tif ( Array.isArray( array ) ) {\n\n\t\t\t\tthrow new TypeError( 'THREE.BufferAttribute: array should be a Typed Array.' );\n\n\t\t\t}\n\n\t\t\tthis.count = array !== undefined ? array.length / this.stride : 0;\n\t\t\tthis.array = array;\n\n\t\t},\n\n\t\tsetDynamic: function ( value ) {\n\n\t\t\tthis.dynamic = value;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tcopy: function ( source ) {\n\n\t\t\tthis.array = new source.array.constructor( source.array );\n\t\t\tthis.count = source.count;\n\t\t\tthis.stride = source.stride;\n\t\t\tthis.dynamic = source.dynamic;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tcopyAt: function ( index1, attribute, index2 ) {\n\n\t\t\tindex1 *= this.stride;\n\t\t\tindex2 *= attribute.stride;\n\n\t\t\tfor ( var i = 0, l = this.stride; i < l; i ++ ) {\n\n\t\t\t\tthis.array[ index1 + i ] = attribute.array[ index2 + i ];\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tset: function ( value, offset ) {\n\n\t\t\tif ( offset === undefined ) offset = 0;\n\n\t\t\tthis.array.set( value, offset );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tclone: function () {\n\n\t\t\treturn new this.constructor().copy( this );\n\n\t\t},\n\n\t\tonUpload: function ( callback ) {\n\n\t\t\tthis.onUploadCallback = callback;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t} );\n\n\t/**\n\t * @author benaadams / https://twitter.com/ben_a_adams\n\t */\n\n\tfunction InstancedInterleavedBuffer( array, stride, meshPerAttribute ) {\n\n\t\tInterleavedBuffer.call( this, array, stride );\n\n\t\tthis.meshPerAttribute = meshPerAttribute || 1;\n\n\t}\n\n\tInstancedInterleavedBuffer.prototype = Object.assign( Object.create( InterleavedBuffer.prototype ), {\n\n\t\tconstructor: InstancedInterleavedBuffer,\n\n\t\tisInstancedInterleavedBuffer: true,\n\n\t\tcopy: function ( source ) {\n\n\t\t\tInterleavedBuffer.prototype.copy.call( this, source );\n\n\t\t\tthis.meshPerAttribute = source.meshPerAttribute;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t} );\n\n\t/**\n\t * @author benaadams / https://twitter.com/ben_a_adams\n\t */\n\n\tfunction InstancedBufferAttribute( array, itemSize, meshPerAttribute ) {\n\n\t\tBufferAttribute.call( this, array, itemSize );\n\n\t\tthis.meshPerAttribute = meshPerAttribute || 1;\n\n\t}\n\n\tInstancedBufferAttribute.prototype = Object.assign( Object.create( BufferAttribute.prototype ), {\n\n\t\tconstructor: InstancedBufferAttribute,\n\n\t\tisInstancedBufferAttribute: true,\n\n\t\tcopy: function ( source ) {\n\n\t\t\tBufferAttribute.prototype.copy.call( this, source );\n\n\t\t\tthis.meshPerAttribute = source.meshPerAttribute;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t} );\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t * @author bhouston / http://clara.io/\n\t * @author stephomi / http://stephaneginier.com/\n\t */\n\n\tfunction Raycaster( origin, direction, near, far ) {\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 || 0;\n\t\tthis.far = far || Infinity;\n\n\t\tthis.params = {\n\t\t\tMesh: {},\n\t\t\tLine: {},\n\t\t\tLOD: {},\n\t\t\tPoints: { threshold: 1 },\n\t\t\tSprite: {}\n\t\t};\n\n\t\tObject.defineProperties( this.params, {\n\t\t\tPointCloud: {\n\t\t\t\tget: function () {\n\n\t\t\t\t\tconsole.warn( 'THREE.Raycaster: params.PointCloud has been renamed to params.Points.' );\n\t\t\t\t\treturn this.Points;\n\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\n\t}\n\n\tfunction ascSort( a, b ) {\n\n\t\treturn a.distance - b.distance;\n\n\t}\n\n\tfunction intersectObject( object, raycaster, intersects, recursive ) {\n\n\t\tif ( object.visible === false ) return;\n\n\t\tobject.raycast( raycaster, intersects );\n\n\t\tif ( recursive === true ) {\n\n\t\t\tvar children = object.children;\n\n\t\t\tfor ( var i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\t\tintersectObject( children[ i ], raycaster, intersects, true );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tObject.assign( Raycaster.prototype, {\n\n\t\tlinePrecision: 1,\n\n\t\tset: function ( origin, direction ) {\n\n\t\t\t// direction is assumed to be normalized (for accurate distance calculations)\n\n\t\t\tthis.ray.set( origin, direction );\n\n\t\t},\n\n\t\tsetFromCamera: function ( coords, camera ) {\n\n\t\t\tif ( ( camera && camera.isPerspectiveCamera ) ) {\n\n\t\t\t\tthis.ray.origin.setFromMatrixPosition( camera.matrixWorld );\n\t\t\t\tthis.ray.direction.set( coords.x, coords.y, 0.5 ).unproject( camera ).sub( this.ray.origin ).normalize();\n\n\t\t\t} else if ( ( camera && camera.isOrthographicCamera ) ) {\n\n\t\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\t\tthis.ray.direction.set( 0, 0, - 1 ).transformDirection( camera.matrixWorld );\n\n\t\t\t} else {\n\n\t\t\t\tconsole.error( 'THREE.Raycaster: Unsupported camera type.' );\n\n\t\t\t}\n\n\t\t},\n\n\t\tintersectObject: function ( object, recursive ) {\n\n\t\t\tvar intersects = [];\n\n\t\t\tintersectObject( object, this, intersects, recursive );\n\n\t\t\tintersects.sort( ascSort );\n\n\t\t\treturn intersects;\n\n\t\t},\n\n\t\tintersectObjects: function ( objects, recursive ) {\n\n\t\t\tvar intersects = [];\n\n\t\t\tif ( Array.isArray( objects ) === false ) {\n\n\t\t\t\tconsole.warn( 'THREE.Raycaster.intersectObjects: objects is not an Array.' );\n\t\t\t\treturn intersects;\n\n\t\t\t}\n\n\t\t\tfor ( var i = 0, l = objects.length; i < l; i ++ ) {\n\n\t\t\t\tintersectObject( objects[ i ], this, intersects, recursive );\n\n\t\t\t}\n\n\t\t\tintersects.sort( ascSort );\n\n\t\t\treturn intersects;\n\n\t\t}\n\n\t} );\n\n\t/**\n\t * @author alteredq / http://alteredqualia.com/\n\t */\n\n\tfunction Clock( autoStart ) {\n\n\t\tthis.autoStart = ( autoStart !== undefined ) ? autoStart : true;\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\tObject.assign( Clock.prototype, {\n\n\t\tstart: function () {\n\n\t\t\tthis.startTime = ( typeof performance === 'undefined' ? Date : performance ).now(); // see #10732\n\n\t\t\tthis.oldTime = this.startTime;\n\t\t\tthis.elapsedTime = 0;\n\t\t\tthis.running = true;\n\n\t\t},\n\n\t\tstop: function () {\n\n\t\t\tthis.getElapsedTime();\n\t\t\tthis.running = false;\n\t\t\tthis.autoStart = false;\n\n\t\t},\n\n\t\tgetElapsedTime: function () {\n\n\t\t\tthis.getDelta();\n\t\t\treturn this.elapsedTime;\n\n\t\t},\n\n\t\tgetDelta: function () {\n\n\t\t\tvar diff = 0;\n\n\t\t\tif ( this.autoStart && ! this.running ) {\n\n\t\t\t\tthis.start();\n\t\t\t\treturn 0;\n\n\t\t\t}\n\n\t\t\tif ( this.running ) {\n\n\t\t\t\tvar newTime = ( typeof performance === 'undefined' ? Date : performance ).now();\n\n\t\t\t\tdiff = ( newTime - this.oldTime ) / 1000;\n\t\t\t\tthis.oldTime = newTime;\n\n\t\t\t\tthis.elapsedTime += diff;\n\n\t\t\t}\n\n\t\t\treturn diff;\n\n\t\t}\n\n\t} );\n\n\t/**\n\t * @author bhouston / http://clara.io\n\t * @author WestLangley / http://github.com/WestLangley\n\t *\n\t * Ref: https://en.wikipedia.org/wiki/Spherical_coordinate_system\n\t *\n\t * The poles (phi) are at the positive and negative y axis.\n\t * The equator starts at positive z.\n\t */\n\n\tfunction Spherical( radius, phi, theta ) {\n\n\t\tthis.radius = ( radius !== undefined ) ? radius : 1.0;\n\t\tthis.phi = ( phi !== undefined ) ? phi : 0; // up / down towards top and bottom pole\n\t\tthis.theta = ( theta !== undefined ) ? theta : 0; // around the equator of the sphere\n\n\t\treturn this;\n\n\t}\n\n\tObject.assign( Spherical.prototype, {\n\n\t\tset: function ( radius, phi, theta ) {\n\n\t\t\tthis.radius = radius;\n\t\t\tthis.phi = phi;\n\t\t\tthis.theta = theta;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tclone: function () {\n\n\t\t\treturn new this.constructor().copy( this );\n\n\t\t},\n\n\t\tcopy: function ( other ) {\n\n\t\t\tthis.radius = other.radius;\n\t\t\tthis.phi = other.phi;\n\t\t\tthis.theta = other.theta;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\t// restrict phi to be betwee EPS and PI-EPS\n\t\tmakeSafe: function () {\n\n\t\t\tvar EPS = 0.000001;\n\t\t\tthis.phi = Math.max( EPS, Math.min( Math.PI - EPS, this.phi ) );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetFromVector3: function ( vec3 ) {\n\n\t\t\tthis.radius = vec3.length();\n\n\t\t\tif ( this.radius === 0 ) {\n\n\t\t\t\tthis.theta = 0;\n\t\t\t\tthis.phi = 0;\n\n\t\t\t} else {\n\n\t\t\t\tthis.theta = Math.atan2( vec3.x, vec3.z ); // equator angle around y-up axis\n\t\t\t\tthis.phi = Math.acos( _Math.clamp( vec3.y / this.radius, - 1, 1 ) ); // polar angle\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t}\n\n\t} );\n\n\t/**\n\t * @author Mugen87 / https://github.com/Mugen87\n\t *\n\t * Ref: https://en.wikipedia.org/wiki/Cylindrical_coordinate_system\n\t *\n\t */\n\n\tfunction Cylindrical( radius, theta, y ) {\n\n\t\tthis.radius = ( radius !== undefined ) ? radius : 1.0; // distance from the origin to a point in the x-z plane\n\t\tthis.theta = ( theta !== undefined ) ? theta : 0; // counterclockwise angle in the x-z plane measured in radians from the positive z-axis\n\t\tthis.y = ( y !== undefined ) ? y : 0; // height above the x-z plane\n\n\t\treturn this;\n\n\t}\n\n\tObject.assign( Cylindrical.prototype, {\n\n\t\tset: function ( radius, theta, y ) {\n\n\t\t\tthis.radius = radius;\n\t\t\tthis.theta = theta;\n\t\t\tthis.y = y;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tclone: function () {\n\n\t\t\treturn new this.constructor().copy( this );\n\n\t\t},\n\n\t\tcopy: function ( other ) {\n\n\t\t\tthis.radius = other.radius;\n\t\t\tthis.theta = other.theta;\n\t\t\tthis.y = other.y;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetFromVector3: function ( vec3 ) {\n\n\t\t\tthis.radius = Math.sqrt( vec3.x * vec3.x + vec3.z * vec3.z );\n\t\t\tthis.theta = Math.atan2( vec3.x, vec3.z );\n\t\t\tthis.y = vec3.y;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t} );\n\n\t/**\n\t * @author alteredq / http://alteredqualia.com/\n\t */\n\n\tfunction ImmediateRenderObject( material ) {\n\n\t\tObject3D.call( this );\n\n\t\tthis.material = material;\n\t\tthis.render = function ( /* renderCallback */ ) {};\n\n\t}\n\n\tImmediateRenderObject.prototype = Object.create( Object3D.prototype );\n\tImmediateRenderObject.prototype.constructor = ImmediateRenderObject;\n\n\tImmediateRenderObject.prototype.isImmediateRenderObject = true;\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t * @author WestLangley / http://github.com/WestLangley\n\t */\n\n\tfunction VertexNormalsHelper( object, size, hex, linewidth ) {\n\n\t\tthis.object = object;\n\n\t\tthis.size = ( size !== undefined ) ? size : 1;\n\n\t\tvar color = ( hex !== undefined ) ? hex : 0xff0000;\n\n\t\tvar width = ( linewidth !== undefined ) ? linewidth : 1;\n\n\t\t//\n\n\t\tvar nNormals = 0;\n\n\t\tvar objGeometry = this.object.geometry;\n\n\t\tif ( objGeometry && objGeometry.isGeometry ) {\n\n\t\t\tnNormals = objGeometry.faces.length * 3;\n\n\t\t} else if ( objGeometry && objGeometry.isBufferGeometry ) {\n\n\t\t\tnNormals = objGeometry.attributes.normal.count;\n\n\t\t}\n\n\t\t//\n\n\t\tvar geometry = new BufferGeometry();\n\n\t\tvar positions = new Float32BufferAttribute( nNormals * 2 * 3, 3 );\n\n\t\tgeometry.addAttribute( 'position', positions );\n\n\t\tLineSegments.call( this, geometry, new LineBasicMaterial( { color: color, linewidth: width } ) );\n\n\t\t//\n\n\t\tthis.matrixAutoUpdate = false;\n\n\t\tthis.update();\n\n\t}\n\n\tVertexNormalsHelper.prototype = Object.create( LineSegments.prototype );\n\tVertexNormalsHelper.prototype.constructor = VertexNormalsHelper;\n\n\tVertexNormalsHelper.prototype.update = ( function () {\n\n\t\tvar v1 = new Vector3();\n\t\tvar v2 = new Vector3();\n\t\tvar normalMatrix = new Matrix3();\n\n\t\treturn function update() {\n\n\t\t\tvar keys = [ 'a', 'b', 'c' ];\n\n\t\t\tthis.object.updateMatrixWorld( true );\n\n\t\t\tnormalMatrix.getNormalMatrix( this.object.matrixWorld );\n\n\t\t\tvar matrixWorld = this.object.matrixWorld;\n\n\t\t\tvar position = this.geometry.attributes.position;\n\n\t\t\t//\n\n\t\t\tvar objGeometry = this.object.geometry;\n\n\t\t\tif ( objGeometry && objGeometry.isGeometry ) {\n\n\t\t\t\tvar vertices = objGeometry.vertices;\n\n\t\t\t\tvar faces = objGeometry.faces;\n\n\t\t\t\tvar idx = 0;\n\n\t\t\t\tfor ( var i = 0, l = faces.length; i < l; i ++ ) {\n\n\t\t\t\t\tvar face = faces[ i ];\n\n\t\t\t\t\tfor ( var j = 0, jl = face.vertexNormals.length; j < jl; j ++ ) {\n\n\t\t\t\t\t\tvar vertex = vertices[ face[ keys[ j ] ] ];\n\n\t\t\t\t\t\tvar normal = face.vertexNormals[ j ];\n\n\t\t\t\t\t\tv1.copy( vertex ).applyMatrix4( matrixWorld );\n\n\t\t\t\t\t\tv2.copy( normal ).applyMatrix3( normalMatrix ).normalize().multiplyScalar( this.size ).add( v1 );\n\n\t\t\t\t\t\tposition.setXYZ( idx, v1.x, v1.y, v1.z );\n\n\t\t\t\t\t\tidx = idx + 1;\n\n\t\t\t\t\t\tposition.setXYZ( idx, v2.x, v2.y, v2.z );\n\n\t\t\t\t\t\tidx = idx + 1;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else if ( objGeometry && objGeometry.isBufferGeometry ) {\n\n\t\t\t\tvar objPos = objGeometry.attributes.position;\n\n\t\t\t\tvar objNorm = objGeometry.attributes.normal;\n\n\t\t\t\tvar idx = 0;\n\n\t\t\t\t// for simplicity, ignore index and drawcalls, and render every normal\n\n\t\t\t\tfor ( var j = 0, jl = objPos.count; j < jl; j ++ ) {\n\n\t\t\t\t\tv1.set( objPos.getX( j ), objPos.getY( j ), objPos.getZ( j ) ).applyMatrix4( matrixWorld );\n\n\t\t\t\t\tv2.set( objNorm.getX( j ), objNorm.getY( j ), objNorm.getZ( j ) );\n\n\t\t\t\t\tv2.applyMatrix3( normalMatrix ).normalize().multiplyScalar( this.size ).add( v1 );\n\n\t\t\t\t\tposition.setXYZ( idx, v1.x, v1.y, v1.z );\n\n\t\t\t\t\tidx = idx + 1;\n\n\t\t\t\t\tposition.setXYZ( idx, v2.x, v2.y, v2.z );\n\n\t\t\t\t\tidx = idx + 1;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tposition.needsUpdate = true;\n\n\t\t};\n\n\t}() );\n\n\t/**\n\t * @author alteredq / http://alteredqualia.com/\n\t * @author mrdoob / http://mrdoob.com/\n\t * @author WestLangley / http://github.com/WestLangley\n\t */\n\n\tfunction SpotLightHelper( light, color ) {\n\n\t\tObject3D.call( this );\n\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\tvar geometry = new BufferGeometry();\n\n\t\tvar 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 ( var i = 0, j = 1, l = 32; i < l; i ++, j ++ ) {\n\n\t\t\tvar p1 = ( i / l ) * Math.PI * 2;\n\t\t\tvar 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.addAttribute( 'position', new Float32BufferAttribute( positions, 3 ) );\n\n\t\tvar material = new LineBasicMaterial( { fog: 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\tSpotLightHelper.prototype = Object.create( Object3D.prototype );\n\tSpotLightHelper.prototype.constructor = SpotLightHelper;\n\n\tSpotLightHelper.prototype.dispose = function () {\n\n\t\tthis.cone.geometry.dispose();\n\t\tthis.cone.material.dispose();\n\n\t};\n\n\tSpotLightHelper.prototype.update = function () {\n\n\t\tvar vector = new Vector3();\n\t\tvar vector2 = new Vector3();\n\n\t\treturn function update() {\n\n\t\t\tthis.light.updateMatrixWorld();\n\n\t\t\tvar coneLength = this.light.distance ? this.light.distance : 1000;\n\t\t\tvar coneWidth = coneLength * Math.tan( this.light.angle );\n\n\t\t\tthis.cone.scale.set( coneWidth, coneWidth, coneLength );\n\n\t\t\tvector.setFromMatrixPosition( this.light.matrixWorld );\n\t\t\tvector2.setFromMatrixPosition( this.light.target.matrixWorld );\n\n\t\t\tthis.cone.lookAt( vector2.sub( vector ) );\n\n\t\t\tif ( this.color !== undefined ) {\n\n\t\t\t\tthis.cone.material.color.set( this.color );\n\n\t\t\t} else {\n\n\t\t\t\tthis.cone.material.color.copy( this.light.color );\n\n\t\t\t}\n\n\t\t};\n\n\t}();\n\n\t/**\n\t * @author Sean Griffin / http://twitter.com/sgrif\n\t * @author Michael Guerrero / http://realitymeltdown.com\n\t * @author mrdoob / http://mrdoob.com/\n\t * @author ikerr / http://verold.com\n\t * @author Mugen87 / https://github.com/Mugen87\n\t */\n\n\tfunction getBoneList( object ) {\n\n\t\tvar boneList = [];\n\n\t\tif ( object && object.isBone ) {\n\n\t\t\tboneList.push( object );\n\n\t\t}\n\n\t\tfor ( var i = 0; i < object.children.length; i ++ ) {\n\n\t\t\tboneList.push.apply( boneList, getBoneList( object.children[ i ] ) );\n\n\t\t}\n\n\t\treturn boneList;\n\n\t}\n\n\tfunction SkeletonHelper( object ) {\n\n\t\tvar bones = getBoneList( object );\n\n\t\tvar geometry = new BufferGeometry();\n\n\t\tvar vertices = [];\n\t\tvar colors = [];\n\n\t\tvar color1 = new Color( 0, 0, 1 );\n\t\tvar color2 = new Color( 0, 1, 0 );\n\n\t\tfor ( var i = 0; i < bones.length; i ++ ) {\n\n\t\t\tvar bone = bones[ i ];\n\n\t\t\tif ( bone.parent && bone.parent.isBone ) {\n\n\t\t\t\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.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tgeometry.addAttribute( 'color', new Float32BufferAttribute( colors, 3 ) );\n\n\t\tvar material = new LineBasicMaterial( { vertexColors: VertexColors, depthTest: false, depthWrite: false, transparent: true } );\n\n\t\tLineSegments.call( this, geometry, material );\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\tSkeletonHelper.prototype = Object.create( LineSegments.prototype );\n\tSkeletonHelper.prototype.constructor = SkeletonHelper;\n\n\tSkeletonHelper.prototype.updateMatrixWorld = function () {\n\n\t\tvar vector = new Vector3();\n\n\t\tvar boneMatrix = new Matrix4();\n\t\tvar matrixWorldInv = new Matrix4();\n\n\t\treturn function updateMatrixWorld( force ) {\n\n\t\t\tvar bones = this.bones;\n\n\t\t\tvar geometry = this.geometry;\n\t\t\tvar position = geometry.getAttribute( 'position' );\n\n\t\t\tmatrixWorldInv.getInverse( this.root.matrixWorld );\n\n\t\t\tfor ( var i = 0, j = 0; i < bones.length; i ++ ) {\n\n\t\t\t\tvar bone = bones[ i ];\n\n\t\t\t\tif ( bone.parent && bone.parent.isBone ) {\n\n\t\t\t\t\tboneMatrix.multiplyMatrices( matrixWorldInv, bone.matrixWorld );\n\t\t\t\t\tvector.setFromMatrixPosition( boneMatrix );\n\t\t\t\t\tposition.setXYZ( j, vector.x, vector.y, vector.z );\n\n\t\t\t\t\tboneMatrix.multiplyMatrices( matrixWorldInv, bone.parent.matrixWorld );\n\t\t\t\t\tvector.setFromMatrixPosition( boneMatrix );\n\t\t\t\t\tposition.setXYZ( j + 1, vector.x, vector.y, vector.z );\n\n\t\t\t\t\tj += 2;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tgeometry.getAttribute( 'position' ).needsUpdate = true;\n\n\t\t\tObject3D.prototype.updateMatrixWorld.call( this, force );\n\n\t\t};\n\n\t}();\n\n\t/**\n\t * @author alteredq / http://alteredqualia.com/\n\t * @author mrdoob / http://mrdoob.com/\n\t */\n\n\tfunction PointLightHelper( light, sphereSize, color ) {\n\n\t\tthis.light = light;\n\t\tthis.light.updateMatrixWorld();\n\n\t\tthis.color = color;\n\n\t\tvar geometry = new SphereBufferGeometry( sphereSize, 4, 2 );\n\t\tvar material = new MeshBasicMaterial( { wireframe: true, fog: false } );\n\n\t\tMesh.call( this, geometry, material );\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\tvar distanceGeometry = new THREE.IcosahedronGeometry( 1, 2 );\n\t\tvar distanceMaterial = new THREE.MeshBasicMaterial( { color: hexColor, fog: false, wireframe: true, opacity: 0.1, transparent: true } );\n\n\t\tthis.lightSphere = new THREE.Mesh( bulbGeometry, bulbMaterial );\n\t\tthis.lightDistance = new THREE.Mesh( distanceGeometry, distanceMaterial );\n\n\t\tvar d = 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.scale.set( d, d, d );\n\n\t\t}\n\n\t\tthis.add( this.lightDistance );\n\t\t*/\n\n\t}\n\n\tPointLightHelper.prototype = Object.create( Mesh.prototype );\n\tPointLightHelper.prototype.constructor = PointLightHelper;\n\n\tPointLightHelper.prototype.dispose = function () {\n\n\t\tthis.geometry.dispose();\n\t\tthis.material.dispose();\n\n\t};\n\n\tPointLightHelper.prototype.update = function () {\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\tvar 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\t/**\n\t * @author abelnation / http://github.com/abelnation\n\t * @author Mugen87 / http://github.com/Mugen87\n\t * @author WestLangley / http://github.com/WestLangley\n\t */\n\n\tfunction RectAreaLightHelper( light, color ) {\n\n\t\tObject3D.call( this );\n\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\tvar material = new LineBasicMaterial( { fog: false } );\n\n\t\tvar geometry = new BufferGeometry();\n\n\t\tgeometry.addAttribute( 'position', new BufferAttribute( new Float32Array( 5 * 3 ), 3 ) );\n\n\t\tthis.line = new Line( geometry, material );\n\t\tthis.add( this.line );\n\n\n\t\tthis.update();\n\n\t}\n\n\tRectAreaLightHelper.prototype = Object.create( Object3D.prototype );\n\tRectAreaLightHelper.prototype.constructor = RectAreaLightHelper;\n\n\tRectAreaLightHelper.prototype.dispose = function () {\n\n\t\tthis.children[ 0 ].geometry.dispose();\n\t\tthis.children[ 0 ].material.dispose();\n\n\t};\n\n\tRectAreaLightHelper.prototype.update = function () {\n\n\t\t// calculate new dimensions of the helper\n\n\t\tvar hx = this.light.width * 0.5;\n\t\tvar hy = this.light.height * 0.5;\n\n\t\tvar position = this.line.geometry.attributes.position;\n\t\tvar array = position.array;\n\n\t\t// update vertices\n\n\t\tarray[ 0 ] = hx; array[ 1 ] = - hy; array[ 2 ] = 0;\n\t\tarray[ 3 ] = hx; array[ 4 ] = hy; array[ 5 ] = 0;\n\t\tarray[ 6 ] = - hx; array[ 7 ] = hy; array[ 8 ] = 0;\n\t\tarray[ 9 ] = - hx; array[ 10 ] = - hy; array[ 11 ] = 0;\n\t\tarray[ 12 ] = hx; array[ 13 ] = - hy; array[ 14 ] = 0;\n\n\t\tposition.needsUpdate = true;\n\n\t\tif ( this.color !== undefined ) {\n\n\t\t\tthis.line.material.color.set( this.color );\n\n\t\t} else {\n\n\t\t\tthis.line.material.color.copy( this.light.color );\n\n\t\t}\n\n\t};\n\n\t/**\n\t * @author alteredq / http://alteredqualia.com/\n\t * @author mrdoob / http://mrdoob.com/\n\t * @author Mugen87 / https://github.com/Mugen87\n\t */\n\n\tfunction HemisphereLightHelper( light, size, color ) {\n\n\t\tObject3D.call( this );\n\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\tvar geometry = new OctahedronBufferGeometry( size );\n\t\tgeometry.rotateY( Math.PI * 0.5 );\n\n\t\tthis.material = new MeshBasicMaterial( { wireframe: true, fog: false } );\n\t\tif ( this.color === undefined ) this.material.vertexColors = VertexColors;\n\n\t\tvar position = geometry.getAttribute( 'position' );\n\t\tvar colors = new Float32Array( position.count * 3 );\n\n\t\tgeometry.addAttribute( '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\tHemisphereLightHelper.prototype = Object.create( Object3D.prototype );\n\tHemisphereLightHelper.prototype.constructor = HemisphereLightHelper;\n\n\tHemisphereLightHelper.prototype.dispose = function () {\n\n\t\tthis.children[ 0 ].geometry.dispose();\n\t\tthis.children[ 0 ].material.dispose();\n\n\t};\n\n\tHemisphereLightHelper.prototype.update = function () {\n\n\t\tvar vector = new Vector3();\n\n\t\tvar color1 = new Color();\n\t\tvar color2 = new Color();\n\n\t\treturn function update() {\n\n\t\t\tvar mesh = this.children[ 0 ];\n\n\t\t\tif ( this.color !== undefined ) {\n\n\t\t\t\tthis.material.color.set( this.color );\n\n\t\t\t} else {\n\n\t\t\t\tvar colors = mesh.geometry.getAttribute( 'color' );\n\n\t\t\t\tcolor1.copy( this.light.color );\n\t\t\t\tcolor2.copy( this.light.groundColor );\n\n\t\t\t\tfor ( var i = 0, l = colors.count; i < l; i ++ ) {\n\n\t\t\t\t\tvar color = ( i < ( l / 2 ) ) ? color1 : color2;\n\n\t\t\t\t\tcolors.setXYZ( i, color.r, color.g, color.b );\n\n\t\t\t\t}\n\n\t\t\t\tcolors.needsUpdate = true;\n\n\t\t\t}\n\n\t\t\tmesh.lookAt( vector.setFromMatrixPosition( this.light.matrixWorld ).negate() );\n\n\t\t};\n\n\t}();\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t */\n\n\tfunction GridHelper( size, divisions, color1, color2 ) {\n\n\t\tsize = size || 10;\n\t\tdivisions = divisions || 10;\n\t\tcolor1 = new Color( color1 !== undefined ? color1 : 0x444444 );\n\t\tcolor2 = new Color( color2 !== undefined ? color2 : 0x888888 );\n\n\t\tvar center = divisions / 2;\n\t\tvar step = size / divisions;\n\t\tvar halfSize = size / 2;\n\n\t\tvar vertices = [], colors = [];\n\n\t\tfor ( var 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\tvar 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\tvar geometry = new BufferGeometry();\n\t\tgeometry.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tgeometry.addAttribute( 'color', new Float32BufferAttribute( colors, 3 ) );\n\n\t\tvar material = new LineBasicMaterial( { vertexColors: VertexColors } );\n\n\t\tLineSegments.call( this, geometry, material );\n\n\t}\n\n\tGridHelper.prototype = Object.create( LineSegments.prototype );\n\tGridHelper.prototype.constructor = GridHelper;\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t * @author Mugen87 / http://github.com/Mugen87\n\t * @author Hectate / http://www.github.com/Hectate\n\t */\n\n\tfunction PolarGridHelper( radius, radials, circles, divisions, color1, color2 ) {\n\n\t\tradius = radius || 10;\n\t\tradials = radials || 16;\n\t\tcircles = circles || 8;\n\t\tdivisions = divisions || 64;\n\t\tcolor1 = new Color( color1 !== undefined ? color1 : 0x444444 );\n\t\tcolor2 = new Color( color2 !== undefined ? color2 : 0x888888 );\n\n\t\tvar vertices = [];\n\t\tvar colors = [];\n\n\t\tvar x, z;\n\t\tvar v, i, j, r, color;\n\n\t\t// create the radials\n\n\t\tfor ( i = 0; i <= radials; i ++ ) {\n\n\t\t\tv = ( i / radials ) * ( Math.PI * 2 );\n\n\t\t\tx = Math.sin( v ) * radius;\n\t\t\tz = 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\tcolor = ( 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 ( i = 0; i <= circles; i ++ ) {\n\n\t\t\tcolor = ( i & 1 ) ? color1 : color2;\n\n\t\t\tr = radius - ( radius / circles * i );\n\n\t\t\tfor ( j = 0; j < divisions; j ++ ) {\n\n\t\t\t\t// first vertex\n\n\t\t\t\tv = ( j / 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\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\tvar geometry = new BufferGeometry();\n\t\tgeometry.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tgeometry.addAttribute( 'color', new Float32BufferAttribute( colors, 3 ) );\n\n\t\tvar material = new LineBasicMaterial( { vertexColors: VertexColors } );\n\n\t\tLineSegments.call( this, geometry, material );\n\n\t}\n\n\tPolarGridHelper.prototype = Object.create( LineSegments.prototype );\n\tPolarGridHelper.prototype.constructor = PolarGridHelper;\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t * @author WestLangley / http://github.com/WestLangley\n\t */\n\n\tfunction FaceNormalsHelper( object, size, hex, linewidth ) {\n\n\t\t// FaceNormalsHelper only supports THREE.Geometry\n\n\t\tthis.object = object;\n\n\t\tthis.size = ( size !== undefined ) ? size : 1;\n\n\t\tvar color = ( hex !== undefined ) ? hex : 0xffff00;\n\n\t\tvar width = ( linewidth !== undefined ) ? linewidth : 1;\n\n\t\t//\n\n\t\tvar nNormals = 0;\n\n\t\tvar objGeometry = this.object.geometry;\n\n\t\tif ( objGeometry && objGeometry.isGeometry ) {\n\n\t\t\tnNormals = objGeometry.faces.length;\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'THREE.FaceNormalsHelper: only THREE.Geometry is supported. Use THREE.VertexNormalsHelper, instead.' );\n\n\t\t}\n\n\t\t//\n\n\t\tvar geometry = new BufferGeometry();\n\n\t\tvar positions = new Float32BufferAttribute( nNormals * 2 * 3, 3 );\n\n\t\tgeometry.addAttribute( 'position', positions );\n\n\t\tLineSegments.call( this, geometry, new LineBasicMaterial( { color: color, linewidth: width } ) );\n\n\t\t//\n\n\t\tthis.matrixAutoUpdate = false;\n\t\tthis.update();\n\n\t}\n\n\tFaceNormalsHelper.prototype = Object.create( LineSegments.prototype );\n\tFaceNormalsHelper.prototype.constructor = FaceNormalsHelper;\n\n\tFaceNormalsHelper.prototype.update = ( function () {\n\n\t\tvar v1 = new Vector3();\n\t\tvar v2 = new Vector3();\n\t\tvar normalMatrix = new Matrix3();\n\n\t\treturn function update() {\n\n\t\t\tthis.object.updateMatrixWorld( true );\n\n\t\t\tnormalMatrix.getNormalMatrix( this.object.matrixWorld );\n\n\t\t\tvar matrixWorld = this.object.matrixWorld;\n\n\t\t\tvar position = this.geometry.attributes.position;\n\n\t\t\t//\n\n\t\t\tvar objGeometry = this.object.geometry;\n\n\t\t\tvar vertices = objGeometry.vertices;\n\n\t\t\tvar faces = objGeometry.faces;\n\n\t\t\tvar idx = 0;\n\n\t\t\tfor ( var i = 0, l = faces.length; i < l; i ++ ) {\n\n\t\t\t\tvar face = faces[ i ];\n\n\t\t\t\tvar normal = face.normal;\n\n\t\t\t\tv1.copy( vertices[ face.a ] )\n\t\t\t\t\t.add( vertices[ face.b ] )\n\t\t\t\t\t.add( vertices[ face.c ] )\n\t\t\t\t\t.divideScalar( 3 )\n\t\t\t\t\t.applyMatrix4( matrixWorld );\n\n\t\t\t\tv2.copy( normal ).applyMatrix3( normalMatrix ).normalize().multiplyScalar( this.size ).add( v1 );\n\n\t\t\t\tposition.setXYZ( idx, v1.x, v1.y, v1.z );\n\n\t\t\t\tidx = idx + 1;\n\n\t\t\t\tposition.setXYZ( idx, v2.x, v2.y, v2.z );\n\n\t\t\t\tidx = idx + 1;\n\n\t\t\t}\n\n\t\t\tposition.needsUpdate = true;\n\n\t\t};\n\n\t}() );\n\n\t/**\n\t * @author alteredq / http://alteredqualia.com/\n\t * @author mrdoob / http://mrdoob.com/\n\t * @author WestLangley / http://github.com/WestLangley\n\t */\n\n\tfunction DirectionalLightHelper( light, size, color ) {\n\n\t\tObject3D.call( this );\n\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\tvar geometry = new BufferGeometry();\n\t\tgeometry.addAttribute( '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\tvar material = new LineBasicMaterial( { fog: 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.addAttribute( '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\tDirectionalLightHelper.prototype = Object.create( Object3D.prototype );\n\tDirectionalLightHelper.prototype.constructor = DirectionalLightHelper;\n\n\tDirectionalLightHelper.prototype.dispose = function () {\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\tDirectionalLightHelper.prototype.update = function () {\n\n\t\tvar v1 = new Vector3();\n\t\tvar v2 = new Vector3();\n\t\tvar v3 = new Vector3();\n\n\t\treturn function update() {\n\n\t\t\tv1.setFromMatrixPosition( this.light.matrixWorld );\n\t\t\tv2.setFromMatrixPosition( this.light.target.matrixWorld );\n\t\t\tv3.subVectors( v2, v1 );\n\n\t\t\tthis.lightPlane.lookAt( v3 );\n\n\t\t\tif ( this.color !== undefined ) {\n\n\t\t\t\tthis.lightPlane.material.color.set( this.color );\n\t\t\t\tthis.targetLine.material.color.set( this.color );\n\n\t\t\t} else {\n\n\t\t\t\tthis.lightPlane.material.color.copy( this.light.color );\n\t\t\t\tthis.targetLine.material.color.copy( this.light.color );\n\n\t\t\t}\n\n\t\t\tthis.targetLine.lookAt( v3 );\n\t\t\tthis.targetLine.scale.z = v3.length();\n\n\t\t};\n\n\t}();\n\n\t/**\n\t * @author alteredq / http://alteredqualia.com/\n\t * @author Mugen87 / https://github.com/Mugen87\n\t *\n\t *\t- shows frustum, line of sight and up of the camera\n\t *\t- suitable for fast updates\n\t * \t- based on frustum visualization in lightgl.js shadowmap example\n\t *\t\thttp://evanw.github.com/lightgl.js/tests/shadowmap.html\n\t */\n\n\tfunction CameraHelper( camera ) {\n\n\t\tvar geometry = new BufferGeometry();\n\t\tvar material = new LineBasicMaterial( { color: 0xffffff, vertexColors: FaceColors } );\n\n\t\tvar vertices = [];\n\t\tvar colors = [];\n\n\t\tvar pointMap = {};\n\n\t\t// colors\n\n\t\tvar colorFrustum = new Color( 0xffaa00 );\n\t\tvar colorCone = new Color( 0xff0000 );\n\t\tvar colorUp = new Color( 0x00aaff );\n\t\tvar colorTarget = new Color( 0xffffff );\n\t\tvar 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.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tgeometry.addAttribute( 'color', new Float32BufferAttribute( colors, 3 ) );\n\n\t\tLineSegments.call( this, geometry, material );\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\tCameraHelper.prototype = Object.create( LineSegments.prototype );\n\tCameraHelper.prototype.constructor = CameraHelper;\n\n\tCameraHelper.prototype.update = function () {\n\n\t\tvar geometry, pointMap;\n\n\t\tvar vector = new Vector3();\n\t\tvar camera = new Camera();\n\n\t\tfunction setPoint( point, x, y, z ) {\n\n\t\t\tvector.set( x, y, z ).unproject( camera );\n\n\t\t\tvar points = pointMap[ point ];\n\n\t\t\tif ( points !== undefined ) {\n\n\t\t\t\tvar position = geometry.getAttribute( 'position' );\n\n\t\t\t\tfor ( var i = 0, l = points.length; i < l; i ++ ) {\n\n\t\t\t\t\tposition.setXYZ( points[ i ], vector.x, vector.y, vector.z );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn function update() {\n\n\t\t\tgeometry = this.geometry;\n\t\t\tpointMap = this.pointMap;\n\n\t\t\tvar w = 1, h = 1;\n\n\t\t\t// we need just camera projection matrix\n\t\t\t// world matrix must be identity\n\n\t\t\tcamera.projectionMatrix.copy( this.camera.projectionMatrix );\n\n\t\t\t// center / target\n\n\t\t\tsetPoint( 'c', 0, 0, - 1 );\n\t\t\tsetPoint( 't', 0, 0, 1 );\n\n\t\t\t// near\n\n\t\t\tsetPoint( 'n1', - w, - h, - 1 );\n\t\t\tsetPoint( 'n2', w, - h, - 1 );\n\t\t\tsetPoint( 'n3', - w, h, - 1 );\n\t\t\tsetPoint( 'n4', w, h, - 1 );\n\n\t\t\t// far\n\n\t\t\tsetPoint( 'f1', - w, - h, 1 );\n\t\t\tsetPoint( 'f2', w, - h, 1 );\n\t\t\tsetPoint( 'f3', - w, h, 1 );\n\t\t\tsetPoint( 'f4', w, h, 1 );\n\n\t\t\t// up\n\n\t\t\tsetPoint( 'u1', w * 0.7, h * 1.1, - 1 );\n\t\t\tsetPoint( 'u2', - w * 0.7, h * 1.1, - 1 );\n\t\t\tsetPoint( 'u3', 0, h * 2, - 1 );\n\n\t\t\t// cross\n\n\t\t\tsetPoint( 'cf1', - w, 0, 1 );\n\t\t\tsetPoint( 'cf2', w, 0, 1 );\n\t\t\tsetPoint( 'cf3', 0, - h, 1 );\n\t\t\tsetPoint( 'cf4', 0, h, 1 );\n\n\t\t\tsetPoint( 'cn1', - w, 0, - 1 );\n\t\t\tsetPoint( 'cn2', w, 0, - 1 );\n\t\t\tsetPoint( 'cn3', 0, - h, - 1 );\n\t\t\tsetPoint( 'cn4', 0, h, - 1 );\n\n\t\t\tgeometry.getAttribute( 'position' ).needsUpdate = true;\n\n\t\t};\n\n\t}();\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t * @author Mugen87 / http://github.com/Mugen87\n\t */\n\n\tfunction BoxHelper( object, color ) {\n\n\t\tthis.object = object;\n\n\t\tif ( color === undefined ) color = 0xffff00;\n\n\t\tvar indices = new Uint16Array( [ 0, 1, 1, 2, 2, 3, 3, 0, 4, 5, 5, 6, 6, 7, 7, 4, 0, 4, 1, 5, 2, 6, 3, 7 ] );\n\t\tvar positions = new Float32Array( 8 * 3 );\n\n\t\tvar geometry = new BufferGeometry();\n\t\tgeometry.setIndex( new BufferAttribute( indices, 1 ) );\n\t\tgeometry.addAttribute( 'position', new BufferAttribute( positions, 3 ) );\n\n\t\tLineSegments.call( this, geometry, new LineBasicMaterial( { color: color } ) );\n\n\t\tthis.matrixAutoUpdate = false;\n\n\t\tthis.update();\n\n\t}\n\n\tBoxHelper.prototype = Object.create( LineSegments.prototype );\n\tBoxHelper.prototype.constructor = BoxHelper;\n\n\tBoxHelper.prototype.update = ( function () {\n\n\t\tvar box = new Box3();\n\n\t\treturn function update( object ) {\n\n\t\t\tif ( object !== undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.BoxHelper: .update() has no longer arguments.' );\n\n\t\t\t}\n\n\t\t\tif ( this.object !== undefined ) {\n\n\t\t\t\tbox.setFromObject( this.object );\n\n\t\t\t}\n\n\t\t\tif ( box.isEmpty() ) return;\n\n\t\t\tvar min = box.min;\n\t\t\tvar max = box.max;\n\n\t\t\t/*\n\t\t\t 5____4\n\t\t\t1/___0/|\n\t\t\t| 6__|_7\n\t\t\t2/___3/\n\n\t\t\t0: max.x, max.y, max.z\n\t\t\t1: min.x, max.y, max.z\n\t\t\t2: min.x, min.y, max.z\n\t\t\t3: max.x, min.y, max.z\n\t\t\t4: max.x, max.y, min.z\n\t\t\t5: min.x, max.y, min.z\n\t\t\t6: min.x, min.y, min.z\n\t\t\t7: max.x, min.y, min.z\n\t\t\t*/\n\n\t\t\tvar position = this.geometry.attributes.position;\n\t\t\tvar array = position.array;\n\n\t\t\tarray[ 0 ] = max.x; array[ 1 ] = max.y; array[ 2 ] = max.z;\n\t\t\tarray[ 3 ] = min.x; array[ 4 ] = max.y; array[ 5 ] = max.z;\n\t\t\tarray[ 6 ] = min.x; array[ 7 ] = min.y; array[ 8 ] = max.z;\n\t\t\tarray[ 9 ] = max.x; array[ 10 ] = min.y; array[ 11 ] = max.z;\n\t\t\tarray[ 12 ] = max.x; array[ 13 ] = max.y; array[ 14 ] = min.z;\n\t\t\tarray[ 15 ] = min.x; array[ 16 ] = max.y; array[ 17 ] = min.z;\n\t\t\tarray[ 18 ] = min.x; array[ 19 ] = min.y; array[ 20 ] = min.z;\n\t\t\tarray[ 21 ] = max.x; array[ 22 ] = min.y; array[ 23 ] = min.z;\n\n\t\t\tposition.needsUpdate = true;\n\n\t\t\tthis.geometry.computeBoundingSphere();\n\n\t\t};\n\n\t} )();\n\n\tBoxHelper.prototype.setFromObject = function ( object ) {\n\n\t\tthis.object = object;\n\t\tthis.update();\n\n\t\treturn this;\n\n\t};\n\n\t/**\n\t * @author WestLangley / http://github.com/WestLangley\n\t */\n\n\tfunction Box3Helper( box, hex ) {\n\n\t\tthis.type = 'Box3Helper';\n\n\t\tthis.box = box;\n\n\t\tvar color = ( hex !== undefined ) ? hex : 0xffff00;\n\n\t\tvar indices = new Uint16Array( [ 0, 1, 1, 2, 2, 3, 3, 0, 4, 5, 5, 6, 6, 7, 7, 4, 0, 4, 1, 5, 2, 6, 3, 7 ] );\n\n\t\tvar positions = [ 1, 1, 1, - 1, 1, 1, - 1, - 1, 1, 1, - 1, 1, 1, 1, - 1, - 1, 1, - 1, - 1, - 1, - 1, 1, - 1, - 1 ];\n\n\t\tvar geometry = new BufferGeometry();\n\n\t\tgeometry.setIndex( new BufferAttribute( indices, 1 ) );\n\n\t\tgeometry.addAttribute( 'position', new Float32BufferAttribute( positions, 3 ) );\n\n\t\tLineSegments.call( this, geometry, new LineBasicMaterial( { color: color } ) );\n\n\t\tthis.geometry.computeBoundingSphere();\n\n\t}\n\n\tBox3Helper.prototype = Object.create( LineSegments.prototype );\n\tBox3Helper.prototype.constructor = Box3Helper;\n\n\tBox3Helper.prototype.updateMatrixWorld = function ( force ) {\n\n\t\tvar 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\tObject3D.prototype.updateMatrixWorld.call( this, force );\n\n\t};\n\n\t/**\n\t * @author WestLangley / http://github.com/WestLangley\n\t */\n\n\tfunction PlaneHelper( plane, size, hex ) {\n\n\t\tthis.type = 'PlaneHelper';\n\n\t\tthis.plane = plane;\n\n\t\tthis.size = ( size === undefined ) ? 1 : size;\n\n\t\tvar color = ( hex !== undefined ) ? hex : 0xffff00;\n\n\t\tvar positions = [ 1, - 1, 1, - 1, 1, 1, - 1, - 1, 1, 1, 1, 1, - 1, 1, 1, - 1, - 1, 1, 1, - 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0 ];\n\n\t\tvar geometry = new BufferGeometry();\n\t\tgeometry.addAttribute( 'position', new Float32BufferAttribute( positions, 3 ) );\n\t\tgeometry.computeBoundingSphere();\n\n\t\tLine.call( this, geometry, new LineBasicMaterial( { color: color } ) );\n\n\t\t//\n\n\t\tvar positions2 = [ 1, 1, 1, - 1, 1, 1, - 1, - 1, 1, 1, 1, 1, - 1, - 1, 1, 1, - 1, 1 ];\n\n\t\tvar geometry2 = new BufferGeometry();\n\t\tgeometry2.addAttribute( '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 } ) ) );\n\n\t}\n\n\tPlaneHelper.prototype = Object.create( Line.prototype );\n\tPlaneHelper.prototype.constructor = PlaneHelper;\n\n\tPlaneHelper.prototype.updateMatrixWorld = function ( force ) {\n\n\t\tvar 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.lookAt( this.plane.normal );\n\n\t\tObject3D.prototype.updateMatrixWorld.call( this, force );\n\n\t};\n\n\t/**\n\t * @author WestLangley / http://github.com/WestLangley\n\t * @author zz85 / http://github.com/zz85\n\t * @author bhouston / http://clara.io\n\t *\n\t * Creates an arrow for visualizing directions\n\t *\n\t * Parameters:\n\t * dir - Vector3\n\t * origin - Vector3\n\t * length - Number\n\t * color - color in hex value\n\t * headLength - Number\n\t * headWidth - Number\n\t */\n\n\tvar lineGeometry;\n\tvar coneGeometry;\n\n\tfunction ArrowHelper( dir, origin, length, color, headLength, headWidth ) {\n\n\t\t// dir is assumed to be normalized\n\n\t\tObject3D.call( this );\n\n\t\tif ( color === undefined ) color = 0xffff00;\n\t\tif ( length === undefined ) length = 1;\n\t\tif ( headLength === undefined ) headLength = 0.2 * length;\n\t\tif ( headWidth === undefined ) headWidth = 0.2 * headLength;\n\n\t\tif ( lineGeometry === undefined ) {\n\n\t\t\tlineGeometry = new BufferGeometry();\n\t\t\tlineGeometry.addAttribute( 'position', new Float32BufferAttribute( [ 0, 0, 0, 0, 1, 0 ], 3 ) );\n\n\t\t\tconeGeometry = new CylinderBufferGeometry( 0, 0.5, 1, 5, 1 );\n\t\t\tconeGeometry.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 } ) );\n\t\tthis.line.matrixAutoUpdate = false;\n\t\tthis.add( this.line );\n\n\t\tthis.cone = new Mesh( coneGeometry, new MeshBasicMaterial( { color: color } ) );\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\tArrowHelper.prototype = Object.create( Object3D.prototype );\n\tArrowHelper.prototype.constructor = ArrowHelper;\n\n\tArrowHelper.prototype.setDirection = ( function () {\n\n\t\tvar axis = new Vector3();\n\t\tvar radians;\n\n\t\treturn function setDirection( dir ) {\n\n\t\t\t// dir is assumed to be normalized\n\n\t\t\tif ( dir.y > 0.99999 ) {\n\n\t\t\t\tthis.quaternion.set( 0, 0, 0, 1 );\n\n\t\t\t} else if ( dir.y < - 0.99999 ) {\n\n\t\t\t\tthis.quaternion.set( 1, 0, 0, 0 );\n\n\t\t\t} else {\n\n\t\t\t\taxis.set( dir.z, 0, - dir.x ).normalize();\n\n\t\t\t\tradians = Math.acos( dir.y );\n\n\t\t\t\tthis.quaternion.setFromAxisAngle( axis, radians );\n\n\t\t\t}\n\n\t\t};\n\n\t}() );\n\n\tArrowHelper.prototype.setLength = function ( length, headLength, headWidth ) {\n\n\t\tif ( headLength === undefined ) headLength = 0.2 * length;\n\t\tif ( headWidth === undefined ) headWidth = 0.2 * headLength;\n\n\t\tthis.line.scale.set( 1, Math.max( 0, length - headLength ), 1 );\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\tArrowHelper.prototype.setColor = function ( color ) {\n\n\t\tthis.line.material.color.copy( color );\n\t\tthis.cone.material.color.copy( color );\n\n\t};\n\n\t/**\n\t * @author sroucheray / http://sroucheray.org/\n\t * @author mrdoob / http://mrdoob.com/\n\t */\n\n\tfunction AxesHelper( size ) {\n\n\t\tsize = size || 1;\n\n\t\tvar 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\tvar 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\tvar geometry = new BufferGeometry();\n\t\tgeometry.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tgeometry.addAttribute( 'color', new Float32BufferAttribute( colors, 3 ) );\n\n\t\tvar material = new LineBasicMaterial( { vertexColors: VertexColors } );\n\n\t\tLineSegments.call( this, geometry, material );\n\n\t}\n\n\tAxesHelper.prototype = Object.create( LineSegments.prototype );\n\tAxesHelper.prototype.constructor = AxesHelper;\n\n\t/**\n\t * @author zz85 https://github.com/zz85\n\t *\n\t * Centripetal CatmullRom Curve - which is useful for avoiding\n\t * cusps and self-intersections in non-uniform catmull rom curves.\n\t * http://www.cemyuksel.com/research/catmullrom_param/catmullrom.pdf\n\t *\n\t * curve.type accepts centripetal(default), chordal and catmullrom\n\t * curve.tension is used for catmullrom which defaults to 0.5\n\t */\n\n\n\t/*\n\tBased on an optimized c++ solution in\n\t - http://stackoverflow.com/questions/9489736/catmull-rom-curve-with-no-cusps-and-no-self-intersections/\n\t - http://ideone.com/NoEbVM\n\n\tThis CubicPoly class could be used for reusing some variables and calculations,\n\tbut for three.js curve use, it could be possible inlined and flatten into a single function call\n\twhich can be placed in CurveUtils.\n\t*/\n\n\tfunction CubicPoly() {\n\n\t\tvar c0 = 0, c1 = 0, c2 = 0, c3 = 0;\n\n\t\t/*\n\t\t * Compute coefficients for a cubic polynomial\n\t\t * p(s) = c0 + c1*s + c2*s^2 + c3*s^3\n\t\t * such that\n\t\t * p(0) = x0, p(1) = x1\n\t\t * and\n\t\t * p'(0) = t0, p'(1) = t1.\n\t\t */\n\t\tfunction init( x0, x1, t0, t1 ) {\n\n\t\t\tc0 = x0;\n\t\t\tc1 = t0;\n\t\t\tc2 = - 3 * x0 + 3 * x1 - 2 * t0 - t1;\n\t\t\tc3 = 2 * x0 - 2 * x1 + t0 + t1;\n\n\t\t}\n\n\t\treturn {\n\n\t\t\tinitCatmullRom: function ( x0, x1, x2, x3, tension ) {\n\n\t\t\t\tinit( x1, x2, tension * ( x2 - x0 ), tension * ( x3 - x1 ) );\n\n\t\t\t},\n\n\t\t\tinitNonuniformCatmullRom: function ( x0, x1, x2, x3, dt0, dt1, dt2 ) {\n\n\t\t\t\t// compute tangents when parameterized in [t1,t2]\n\t\t\t\tvar t1 = ( x1 - x0 ) / dt0 - ( x2 - x0 ) / ( dt0 + dt1 ) + ( x2 - x1 ) / dt1;\n\t\t\t\tvar t2 = ( x2 - x1 ) / dt1 - ( x3 - x1 ) / ( dt1 + dt2 ) + ( x3 - x2 ) / dt2;\n\n\t\t\t\t// rescale tangents for parametrization in [0,1]\n\t\t\t\tt1 *= dt1;\n\t\t\t\tt2 *= dt1;\n\n\t\t\t\tinit( x1, x2, t1, t2 );\n\n\t\t\t},\n\n\t\t\tcalc: function ( t ) {\n\n\t\t\t\tvar t2 = t * t;\n\t\t\t\tvar t3 = t2 * t;\n\t\t\t\treturn c0 + c1 * t + c2 * t2 + c3 * t3;\n\n\t\t\t}\n\n\t\t};\n\n\t}\n\n\t//\n\n\tvar tmp = new Vector3();\n\tvar px = new CubicPoly();\n\tvar py = new CubicPoly();\n\tvar pz = new CubicPoly();\n\n\tfunction CatmullRomCurve3( points, closed, curveType, tension ) {\n\n\t\tCurve.call( this );\n\n\t\tthis.type = 'CatmullRomCurve3';\n\n\t\tthis.points = points || [];\n\t\tthis.closed = closed || false;\n\t\tthis.curveType = curveType || 'centripetal';\n\t\tthis.tension = tension || 0.5;\n\n\t}\n\n\tCatmullRomCurve3.prototype = Object.create( Curve.prototype );\n\tCatmullRomCurve3.prototype.constructor = CatmullRomCurve3;\n\n\tCatmullRomCurve3.prototype.isCatmullRomCurve3 = true;\n\n\tCatmullRomCurve3.prototype.getPoint = function ( t, optionalTarget ) {\n\n\t\tvar point = optionalTarget || new Vector3();\n\n\t\tvar points = this.points;\n\t\tvar l = points.length;\n\n\t\tvar p = ( l - ( this.closed ? 0 : 1 ) ) * t;\n\t\tvar intPoint = Math.floor( p );\n\t\tvar weight = p - intPoint;\n\n\t\tif ( this.closed ) {\n\n\t\t\tintPoint += intPoint > 0 ? 0 : ( Math.floor( Math.abs( intPoint ) / points.length ) + 1 ) * points.length;\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\tvar p0, p1, p2, p3; // 4 points\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\tp1 = points[ intPoint % l ];\n\t\tp2 = 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\tvar pow = this.curveType === 'chordal' ? 0.5 : 0.25;\n\t\t\tvar dt0 = Math.pow( p0.distanceToSquared( p1 ), pow );\n\t\t\tvar dt1 = Math.pow( p1.distanceToSquared( p2 ), pow );\n\t\t\tvar 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\tCatmullRomCurve3.prototype.copy = function ( source ) {\n\n\t\tCurve.prototype.copy.call( this, source );\n\n\t\tthis.points = [];\n\n\t\tfor ( var i = 0, l = source.points.length; i < l; i ++ ) {\n\n\t\t\tvar 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\tfunction CubicBezierCurve3( v0, v1, v2, v3 ) {\n\n\t\tCurve.call( this );\n\n\t\tthis.type = 'CubicBezierCurve3';\n\n\t\tthis.v0 = v0 || new Vector3();\n\t\tthis.v1 = v1 || new Vector3();\n\t\tthis.v2 = v2 || new Vector3();\n\t\tthis.v3 = v3 || new Vector3();\n\n\t}\n\n\tCubicBezierCurve3.prototype = Object.create( Curve.prototype );\n\tCubicBezierCurve3.prototype.constructor = CubicBezierCurve3;\n\n\tCubicBezierCurve3.prototype.isCubicBezierCurve3 = true;\n\n\tCubicBezierCurve3.prototype.getPoint = function ( t, optionalTarget ) {\n\n\t\tvar point = optionalTarget || new Vector3();\n\n\t\tvar 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\tCubicBezierCurve3.prototype.copy = function ( source ) {\n\n\t\tCurve.prototype.copy.call( this, 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\tfunction QuadraticBezierCurve3( v0, v1, v2 ) {\n\n\t\tCurve.call( this );\n\n\t\tthis.type = 'QuadraticBezierCurve3';\n\n\t\tthis.v0 = v0 || new Vector3();\n\t\tthis.v1 = v1 || new Vector3();\n\t\tthis.v2 = v2 || new Vector3();\n\n\t}\n\n\tQuadraticBezierCurve3.prototype = Object.create( Curve.prototype );\n\tQuadraticBezierCurve3.prototype.constructor = QuadraticBezierCurve3;\n\n\tQuadraticBezierCurve3.prototype.isQuadraticBezierCurve3 = true;\n\n\tQuadraticBezierCurve3.prototype.getPoint = function ( t, optionalTarget ) {\n\n\t\tvar point = optionalTarget || new Vector3();\n\n\t\tvar 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\tQuadraticBezierCurve3.prototype.copy = function ( source ) {\n\n\t\tCurve.prototype.copy.call( this, 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\tfunction LineCurve3( v1, v2 ) {\n\n\t\tCurve.call( this );\n\n\t\tthis.type = 'LineCurve3';\n\n\t\tthis.v1 = v1 || new Vector3();\n\t\tthis.v2 = v2 || new Vector3();\n\n\t}\n\n\tLineCurve3.prototype = Object.create( Curve.prototype );\n\tLineCurve3.prototype.constructor = LineCurve3;\n\n\tLineCurve3.prototype.isLineCurve3 = true;\n\n\tLineCurve3.prototype.getPoint = function ( t, optionalTarget ) {\n\n\t\tvar point = optionalTarget || new Vector3();\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\n\tLineCurve3.prototype.getPointAt = function ( u, optionalTarget ) {\n\n\t\treturn this.getPoint( u, optionalTarget );\n\n\t};\n\n\tLineCurve3.prototype.copy = function ( source ) {\n\n\t\tCurve.prototype.copy.call( this, 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\tfunction ArcCurve( aX, aY, aRadius, aStartAngle, aEndAngle, aClockwise ) {\n\n\t\tEllipseCurve.call( this, aX, aY, aRadius, aRadius, aStartAngle, aEndAngle, aClockwise );\n\n\t\tthis.type = 'ArcCurve';\n\n\t}\n\n\tArcCurve.prototype = Object.create( EllipseCurve.prototype );\n\tArcCurve.prototype.constructor = ArcCurve;\n\n\tArcCurve.prototype.isArcCurve = true;\n\n\t/**\n\t * @author alteredq / http://alteredqualia.com/\n\t */\n\n\tvar SceneUtils = {\n\n\t\tcreateMultiMaterialObject: function ( geometry, materials ) {\n\n\t\t\tvar group = new Group();\n\n\t\t\tfor ( var i = 0, l = materials.length; i < l; i ++ ) {\n\n\t\t\t\tgroup.add( new Mesh( geometry, materials[ i ] ) );\n\n\t\t\t}\n\n\t\t\treturn group;\n\n\t\t},\n\n\t\tdetach: function ( child, parent, scene ) {\n\n\t\t\tchild.applyMatrix( parent.matrixWorld );\n\t\t\tparent.remove( child );\n\t\t\tscene.add( child );\n\n\t\t},\n\n\t\tattach: function ( child, scene, parent ) {\n\n\t\t\tchild.applyMatrix( new Matrix4().getInverse( parent.matrixWorld ) );\n\n\t\t\tscene.remove( child );\n\t\t\tparent.add( child );\n\n\t\t}\n\n\t};\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t */\n\n\tfunction Face4( a, b, c, d, normal, color, materialIndex ) {\n\n\t\tconsole.warn( 'THREE.Face4 has been removed. A THREE.Face3 will be created instead.' );\n\t\treturn new Face3( a, b, c, normal, color, materialIndex );\n\n\t}\n\n\tvar LineStrip = 0;\n\n\tvar LinePieces = 1;\n\n\tfunction MeshFaceMaterial( materials ) {\n\n\t\tconsole.warn( 'THREE.MeshFaceMaterial has been removed. Use an Array instead.' );\n\t\treturn materials;\n\n\t}\n\n\tfunction MultiMaterial( materials ) {\n\n\t\tif ( materials === undefined ) materials = [];\n\n\t\tconsole.warn( 'THREE.MultiMaterial has been removed. Use an Array instead.' );\n\t\tmaterials.isMultiMaterial = true;\n\t\tmaterials.materials = materials;\n\t\tmaterials.clone = function () {\n\n\t\t\treturn materials.slice();\n\n\t\t};\n\t\treturn materials;\n\n\t}\n\n\tfunction PointCloud( geometry, material ) {\n\n\t\tconsole.warn( 'THREE.PointCloud has been renamed to THREE.Points.' );\n\t\treturn new Points( geometry, material );\n\n\t}\n\n\tfunction Particle( material ) {\n\n\t\tconsole.warn( 'THREE.Particle has been renamed to THREE.Sprite.' );\n\t\treturn new Sprite( material );\n\n\t}\n\n\tfunction ParticleSystem( geometry, material ) {\n\n\t\tconsole.warn( 'THREE.ParticleSystem has been renamed to THREE.Points.' );\n\t\treturn new Points( geometry, material );\n\n\t}\n\n\tfunction PointCloudMaterial( parameters ) {\n\n\t\tconsole.warn( 'THREE.PointCloudMaterial has been renamed to THREE.PointsMaterial.' );\n\t\treturn new PointsMaterial( parameters );\n\n\t}\n\n\tfunction ParticleBasicMaterial( parameters ) {\n\n\t\tconsole.warn( 'THREE.ParticleBasicMaterial has been renamed to THREE.PointsMaterial.' );\n\t\treturn new PointsMaterial( parameters );\n\n\t}\n\n\tfunction ParticleSystemMaterial( parameters ) {\n\n\t\tconsole.warn( 'THREE.ParticleSystemMaterial has been renamed to THREE.PointsMaterial.' );\n\t\treturn new PointsMaterial( parameters );\n\n\t}\n\n\tfunction Vertex( x, y, z ) {\n\n\t\tconsole.warn( 'THREE.Vertex has been removed. Use THREE.Vector3 instead.' );\n\t\treturn new Vector3( x, y, z );\n\n\t}\n\n\t//\n\n\tfunction DynamicBufferAttribute( array, itemSize ) {\n\n\t\tconsole.warn( 'THREE.DynamicBufferAttribute has been removed. Use new THREE.BufferAttribute().setDynamic( true ) instead.' );\n\t\treturn new BufferAttribute( array, itemSize ).setDynamic( true );\n\n\t}\n\n\tfunction Int8Attribute( array, itemSize ) {\n\n\t\tconsole.warn( 'THREE.Int8Attribute has been removed. Use new THREE.Int8BufferAttribute() instead.' );\n\t\treturn new Int8BufferAttribute( array, itemSize );\n\n\t}\n\n\tfunction Uint8Attribute( array, itemSize ) {\n\n\t\tconsole.warn( 'THREE.Uint8Attribute has been removed. Use new THREE.Uint8BufferAttribute() instead.' );\n\t\treturn new Uint8BufferAttribute( array, itemSize );\n\n\t}\n\n\tfunction Uint8ClampedAttribute( array, itemSize ) {\n\n\t\tconsole.warn( 'THREE.Uint8ClampedAttribute has been removed. Use new THREE.Uint8ClampedBufferAttribute() instead.' );\n\t\treturn new Uint8ClampedBufferAttribute( array, itemSize );\n\n\t}\n\n\tfunction Int16Attribute( array, itemSize ) {\n\n\t\tconsole.warn( 'THREE.Int16Attribute has been removed. Use new THREE.Int16BufferAttribute() instead.' );\n\t\treturn new Int16BufferAttribute( array, itemSize );\n\n\t}\n\n\tfunction Uint16Attribute( array, itemSize ) {\n\n\t\tconsole.warn( 'THREE.Uint16Attribute has been removed. Use new THREE.Uint16BufferAttribute() instead.' );\n\t\treturn new Uint16BufferAttribute( array, itemSize );\n\n\t}\n\n\tfunction Int32Attribute( array, itemSize ) {\n\n\t\tconsole.warn( 'THREE.Int32Attribute has been removed. Use new THREE.Int32BufferAttribute() instead.' );\n\t\treturn new Int32BufferAttribute( array, itemSize );\n\n\t}\n\n\tfunction Uint32Attribute( array, itemSize ) {\n\n\t\tconsole.warn( 'THREE.Uint32Attribute has been removed. Use new THREE.Uint32BufferAttribute() instead.' );\n\t\treturn new Uint32BufferAttribute( array, itemSize );\n\n\t}\n\n\tfunction Float32Attribute( array, itemSize ) {\n\n\t\tconsole.warn( 'THREE.Float32Attribute has been removed. Use new THREE.Float32BufferAttribute() instead.' );\n\t\treturn new Float32BufferAttribute( array, itemSize );\n\n\t}\n\n\tfunction Float64Attribute( array, itemSize ) {\n\n\t\tconsole.warn( 'THREE.Float64Attribute has been removed. Use new THREE.Float64BufferAttribute() instead.' );\n\t\treturn new Float64BufferAttribute( array, itemSize );\n\n\t}\n\n\t//\n\n\tCurve.create = function ( construct, getPoint ) {\n\n\t\tconsole.log( 'THREE.Curve.create() has been deprecated' );\n\n\t\tconstruct.prototype = Object.create( Curve.prototype );\n\t\tconstruct.prototype.constructor = construct;\n\t\tconstruct.prototype.getPoint = getPoint;\n\n\t\treturn construct;\n\n\t};\n\n\t//\n\n\tObject.assign( CurvePath.prototype, {\n\n\t\tcreatePointsGeometry: function ( divisions ) {\n\n\t\t\tconsole.warn( 'THREE.CurvePath: .createPointsGeometry() has been removed. Use new THREE.Geometry().setFromPoints( points ) instead.' );\n\n\t\t\t// generate geometry from path points (for Line or Points objects)\n\n\t\t\tvar pts = this.getPoints( divisions );\n\t\t\treturn this.createGeometry( pts );\n\n\t\t},\n\n\t\tcreateSpacedPointsGeometry: function ( divisions ) {\n\n\t\t\tconsole.warn( 'THREE.CurvePath: .createSpacedPointsGeometry() has been removed. Use new THREE.Geometry().setFromPoints( points ) instead.' );\n\n\t\t\t// generate geometry from equidistant sampling along the path\n\n\t\t\tvar pts = this.getSpacedPoints( divisions );\n\t\t\treturn this.createGeometry( pts );\n\n\t\t},\n\n\t\tcreateGeometry: function ( points ) {\n\n\t\t\tconsole.warn( 'THREE.CurvePath: .createGeometry() has been removed. Use new THREE.Geometry().setFromPoints( points ) instead.' );\n\n\t\t\tvar geometry = new Geometry();\n\n\t\t\tfor ( var i = 0, l = points.length; i < l; i ++ ) {\n\n\t\t\t\tvar point = points[ i ];\n\t\t\t\tgeometry.vertices.push( new Vector3( point.x, point.y, point.z || 0 ) );\n\n\t\t\t}\n\n\t\t\treturn geometry;\n\n\t\t}\n\n\t} );\n\n\t//\n\n\tObject.assign( Path.prototype, {\n\n\t\tfromPoints: function ( points ) {\n\n\t\t\tconsole.warn( 'THREE.Path: .fromPoints() has been renamed to .setFromPoints().' );\n\t\t\tthis.setFromPoints( points );\n\n\t\t}\n\n\t} );\n\n\t//\n\n\tfunction ClosedSplineCurve3( points ) {\n\n\t\tconsole.warn( 'THREE.ClosedSplineCurve3 has been deprecated. Use THREE.CatmullRomCurve3 instead.' );\n\n\t\tCatmullRomCurve3.call( this, points );\n\t\tthis.type = 'catmullrom';\n\t\tthis.closed = true;\n\n\t}\n\n\tClosedSplineCurve3.prototype = Object.create( CatmullRomCurve3.prototype );\n\n\t//\n\n\tfunction SplineCurve3( points ) {\n\n\t\tconsole.warn( 'THREE.SplineCurve3 has been deprecated. Use THREE.CatmullRomCurve3 instead.' );\n\n\t\tCatmullRomCurve3.call( this, points );\n\t\tthis.type = 'catmullrom';\n\n\t}\n\n\tSplineCurve3.prototype = Object.create( CatmullRomCurve3.prototype );\n\n\t//\n\n\tfunction Spline( points ) {\n\n\t\tconsole.warn( 'THREE.Spline has been removed. Use THREE.CatmullRomCurve3 instead.' );\n\n\t\tCatmullRomCurve3.call( this, points );\n\t\tthis.type = 'catmullrom';\n\n\t}\n\n\tSpline.prototype = Object.create( CatmullRomCurve3.prototype );\n\n\tObject.assign( Spline.prototype, {\n\n\t\tinitFromArray: function ( /* a */ ) {\n\n\t\t\tconsole.error( 'THREE.Spline: .initFromArray() has been removed.' );\n\n\t\t},\n\t\tgetControlPointsArray: function ( /* optionalTarget */ ) {\n\n\t\t\tconsole.error( 'THREE.Spline: .getControlPointsArray() has been removed.' );\n\n\t\t},\n\t\treparametrizeByArcLength: function ( /* samplingCoef */ ) {\n\n\t\t\tconsole.error( 'THREE.Spline: .reparametrizeByArcLength() has been removed.' );\n\n\t\t}\n\n\t} );\n\n\t//\n\n\tfunction AxisHelper( size ) {\n\n\t\tconsole.warn( 'THREE.AxisHelper has been renamed to THREE.AxesHelper.' );\n\t\treturn new AxesHelper( size );\n\n\t}\n\n\tfunction BoundingBoxHelper( object, color ) {\n\n\t\tconsole.warn( 'THREE.BoundingBoxHelper has been deprecated. Creating a THREE.BoxHelper instead.' );\n\t\treturn new BoxHelper( object, color );\n\n\t}\n\n\tfunction EdgesHelper( object, hex ) {\n\n\t\tconsole.warn( 'THREE.EdgesHelper has been removed. Use THREE.EdgesGeometry instead.' );\n\t\treturn new LineSegments( new EdgesGeometry( object.geometry ), new LineBasicMaterial( { color: hex !== undefined ? hex : 0xffffff } ) );\n\n\t}\n\n\tGridHelper.prototype.setColors = function () {\n\n\t\tconsole.error( 'THREE.GridHelper: setColors() has been deprecated, pass them in the constructor instead.' );\n\n\t};\n\n\tSkeletonHelper.prototype.update = function () {\n\n\t\tconsole.error( 'THREE.SkeletonHelper: update() no longer needs to be called.' );\n\n\t};\n\n\tfunction WireframeHelper( object, hex ) {\n\n\t\tconsole.warn( 'THREE.WireframeHelper has been removed. Use THREE.WireframeGeometry instead.' );\n\t\treturn new LineSegments( new WireframeGeometry( object.geometry ), new LineBasicMaterial( { color: hex !== undefined ? hex : 0xffffff } ) );\n\n\t}\n\n\t//\n\n\tfunction XHRLoader( manager ) {\n\n\t\tconsole.warn( 'THREE.XHRLoader has been renamed to THREE.FileLoader.' );\n\t\treturn new FileLoader( manager );\n\n\t}\n\n\tfunction BinaryTextureLoader( manager ) {\n\n\t\tconsole.warn( 'THREE.BinaryTextureLoader has been renamed to THREE.DataTextureLoader.' );\n\t\treturn new DataTextureLoader( manager );\n\n\t}\n\n\t//\n\n\tObject.assign( Box2.prototype, {\n\n\t\tcenter: function ( optionalTarget ) {\n\n\t\t\tconsole.warn( 'THREE.Box2: .center() has been renamed to .getCenter().' );\n\t\t\treturn this.getCenter( optionalTarget );\n\n\t\t},\n\t\tempty: function () {\n\n\t\t\tconsole.warn( 'THREE.Box2: .empty() has been renamed to .isEmpty().' );\n\t\t\treturn this.isEmpty();\n\n\t\t},\n\t\tisIntersectionBox: function ( box ) {\n\n\t\t\tconsole.warn( 'THREE.Box2: .isIntersectionBox() has been renamed to .intersectsBox().' );\n\t\t\treturn this.intersectsBox( box );\n\n\t\t},\n\t\tsize: function ( optionalTarget ) {\n\n\t\t\tconsole.warn( 'THREE.Box2: .size() has been renamed to .getSize().' );\n\t\t\treturn this.getSize( optionalTarget );\n\n\t\t}\n\t} );\n\n\tObject.assign( Box3.prototype, {\n\n\t\tcenter: function ( optionalTarget ) {\n\n\t\t\tconsole.warn( 'THREE.Box3: .center() has been renamed to .getCenter().' );\n\t\t\treturn this.getCenter( optionalTarget );\n\n\t\t},\n\t\tempty: function () {\n\n\t\t\tconsole.warn( 'THREE.Box3: .empty() has been renamed to .isEmpty().' );\n\t\t\treturn this.isEmpty();\n\n\t\t},\n\t\tisIntersectionBox: function ( box ) {\n\n\t\t\tconsole.warn( 'THREE.Box3: .isIntersectionBox() has been renamed to .intersectsBox().' );\n\t\t\treturn this.intersectsBox( box );\n\n\t\t},\n\t\tisIntersectionSphere: function ( sphere ) {\n\n\t\t\tconsole.warn( 'THREE.Box3: .isIntersectionSphere() has been renamed to .intersectsSphere().' );\n\t\t\treturn this.intersectsSphere( sphere );\n\n\t\t},\n\t\tsize: function ( optionalTarget ) {\n\n\t\t\tconsole.warn( 'THREE.Box3: .size() has been renamed to .getSize().' );\n\t\t\treturn this.getSize( optionalTarget );\n\n\t\t}\n\t} );\n\n\tLine3.prototype.center = function ( optionalTarget ) {\n\n\t\tconsole.warn( 'THREE.Line3: .center() has been renamed to .getCenter().' );\n\t\treturn this.getCenter( optionalTarget );\n\n\t};\n\n\tObject.assign( _Math, {\n\n\t\trandom16: function () {\n\n\t\t\tconsole.warn( 'THREE.Math: .random16() has been deprecated. Use Math.random() instead.' );\n\t\t\treturn Math.random();\n\n\t\t},\n\n\t\tnearestPowerOfTwo: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Math: .nearestPowerOfTwo() has been renamed to .floorPowerOfTwo().' );\n\t\t\treturn _Math.floorPowerOfTwo( value );\n\n\t\t},\n\n\t\tnextPowerOfTwo: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Math: .nextPowerOfTwo() has been renamed to .ceilPowerOfTwo().' );\n\t\t\treturn _Math.ceilPowerOfTwo( value );\n\n\t\t}\n\n\t} );\n\n\tObject.assign( Matrix3.prototype, {\n\n\t\tflattenToArrayOffset: function ( array, offset ) {\n\n\t\t\tconsole.warn( \"THREE.Matrix3: .flattenToArrayOffset() has been deprecated. Use .toArray() instead.\" );\n\t\t\treturn this.toArray( array, offset );\n\n\t\t},\n\t\tmultiplyVector3: function ( vector ) {\n\n\t\t\tconsole.warn( 'THREE.Matrix3: .multiplyVector3() has been removed. Use vector.applyMatrix3( matrix ) instead.' );\n\t\t\treturn vector.applyMatrix3( this );\n\n\t\t},\n\t\tmultiplyVector3Array: function ( /* a */ ) {\n\n\t\t\tconsole.error( 'THREE.Matrix3: .multiplyVector3Array() has been removed.' );\n\n\t\t},\n\t\tapplyToBuffer: function ( buffer /*, offset, length */ ) {\n\n\t\t\tconsole.warn( 'THREE.Matrix3: .applyToBuffer() has been removed. Use matrix.applyToBufferAttribute( attribute ) instead.' );\n\t\t\treturn this.applyToBufferAttribute( buffer );\n\n\t\t},\n\t\tapplyToVector3Array: function ( /* array, offset, length */ ) {\n\n\t\t\tconsole.error( 'THREE.Matrix3: .applyToVector3Array() has been removed.' );\n\n\t\t}\n\n\t} );\n\n\tObject.assign( Matrix4.prototype, {\n\n\t\textractPosition: function ( m ) {\n\n\t\t\tconsole.warn( 'THREE.Matrix4: .extractPosition() has been renamed to .copyPosition().' );\n\t\t\treturn this.copyPosition( m );\n\n\t\t},\n\t\tflattenToArrayOffset: function ( array, offset ) {\n\n\t\t\tconsole.warn( \"THREE.Matrix4: .flattenToArrayOffset() has been deprecated. Use .toArray() instead.\" );\n\t\t\treturn this.toArray( array, offset );\n\n\t\t},\n\t\tgetPosition: function () {\n\n\t\t\tvar v1;\n\n\t\t\treturn function getPosition() {\n\n\t\t\t\tif ( v1 === undefined ) v1 = new Vector3();\n\t\t\t\tconsole.warn( 'THREE.Matrix4: .getPosition() has been removed. Use Vector3.setFromMatrixPosition( matrix ) instead.' );\n\t\t\t\treturn v1.setFromMatrixColumn( this, 3 );\n\n\t\t\t};\n\n\t\t}(),\n\t\tsetRotationFromQuaternion: function ( q ) {\n\n\t\t\tconsole.warn( 'THREE.Matrix4: .setRotationFromQuaternion() has been renamed to .makeRotationFromQuaternion().' );\n\t\t\treturn this.makeRotationFromQuaternion( q );\n\n\t\t},\n\t\tmultiplyToArray: function () {\n\n\t\t\tconsole.warn( 'THREE.Matrix4: .multiplyToArray() has been removed.' );\n\n\t\t},\n\t\tmultiplyVector3: function ( vector ) {\n\n\t\t\tconsole.warn( 'THREE.Matrix4: .multiplyVector3() has been removed. Use vector.applyMatrix4( matrix ) instead.' );\n\t\t\treturn vector.applyMatrix4( this );\n\n\t\t},\n\t\tmultiplyVector4: function ( vector ) {\n\n\t\t\tconsole.warn( 'THREE.Matrix4: .multiplyVector4() has been removed. Use vector.applyMatrix4( matrix ) instead.' );\n\t\t\treturn vector.applyMatrix4( this );\n\n\t\t},\n\t\tmultiplyVector3Array: function ( /* a */ ) {\n\n\t\t\tconsole.error( 'THREE.Matrix4: .multiplyVector3Array() has been removed.' );\n\n\t\t},\n\t\trotateAxis: function ( v ) {\n\n\t\t\tconsole.warn( 'THREE.Matrix4: .rotateAxis() has been removed. Use Vector3.transformDirection( matrix ) instead.' );\n\t\t\tv.transformDirection( this );\n\n\t\t},\n\t\tcrossVector: function ( vector ) {\n\n\t\t\tconsole.warn( 'THREE.Matrix4: .crossVector() has been removed. Use vector.applyMatrix4( matrix ) instead.' );\n\t\t\treturn vector.applyMatrix4( this );\n\n\t\t},\n\t\ttranslate: function () {\n\n\t\t\tconsole.error( 'THREE.Matrix4: .translate() has been removed.' );\n\n\t\t},\n\t\trotateX: function () {\n\n\t\t\tconsole.error( 'THREE.Matrix4: .rotateX() has been removed.' );\n\n\t\t},\n\t\trotateY: function () {\n\n\t\t\tconsole.error( 'THREE.Matrix4: .rotateY() has been removed.' );\n\n\t\t},\n\t\trotateZ: function () {\n\n\t\t\tconsole.error( 'THREE.Matrix4: .rotateZ() has been removed.' );\n\n\t\t},\n\t\trotateByAxis: function () {\n\n\t\t\tconsole.error( 'THREE.Matrix4: .rotateByAxis() has been removed.' );\n\n\t\t},\n\t\tapplyToBuffer: function ( buffer /*, offset, length */ ) {\n\n\t\t\tconsole.warn( 'THREE.Matrix4: .applyToBuffer() has been removed. Use matrix.applyToBufferAttribute( attribute ) instead.' );\n\t\t\treturn this.applyToBufferAttribute( buffer );\n\n\t\t},\n\t\tapplyToVector3Array: function ( /* array, offset, length */ ) {\n\n\t\t\tconsole.error( 'THREE.Matrix4: .applyToVector3Array() has been removed.' );\n\n\t\t},\n\t\tmakeFrustum: function ( left, right, bottom, top, near, far ) {\n\n\t\t\tconsole.warn( 'THREE.Matrix4: .makeFrustum() has been removed. Use .makePerspective( left, right, top, bottom, near, far ) instead.' );\n\t\t\treturn this.makePerspective( left, right, top, bottom, near, far );\n\n\t\t}\n\n\t} );\n\n\tPlane.prototype.isIntersectionLine = function ( line ) {\n\n\t\tconsole.warn( 'THREE.Plane: .isIntersectionLine() has been renamed to .intersectsLine().' );\n\t\treturn this.intersectsLine( line );\n\n\t};\n\n\tQuaternion.prototype.multiplyVector3 = function ( vector ) {\n\n\t\tconsole.warn( 'THREE.Quaternion: .multiplyVector3() has been removed. Use is now vector.applyQuaternion( quaternion ) instead.' );\n\t\treturn vector.applyQuaternion( this );\n\n\t};\n\n\tObject.assign( Ray.prototype, {\n\n\t\tisIntersectionBox: function ( box ) {\n\n\t\t\tconsole.warn( 'THREE.Ray: .isIntersectionBox() has been renamed to .intersectsBox().' );\n\t\t\treturn this.intersectsBox( box );\n\n\t\t},\n\t\tisIntersectionPlane: function ( plane ) {\n\n\t\t\tconsole.warn( 'THREE.Ray: .isIntersectionPlane() has been renamed to .intersectsPlane().' );\n\t\t\treturn this.intersectsPlane( plane );\n\n\t\t},\n\t\tisIntersectionSphere: function ( sphere ) {\n\n\t\t\tconsole.warn( 'THREE.Ray: .isIntersectionSphere() has been renamed to .intersectsSphere().' );\n\t\t\treturn this.intersectsSphere( sphere );\n\n\t\t}\n\n\t} );\n\n\tObject.assign( Shape.prototype, {\n\n\t\textractAllPoints: function ( divisions ) {\n\n\t\t\tconsole.warn( 'THREE.Shape: .extractAllPoints() has been removed. Use .extractPoints() instead.' );\n\t\t\treturn this.extractPoints( divisions );\n\n\t\t},\n\t\textrude: function ( options ) {\n\n\t\t\tconsole.warn( 'THREE.Shape: .extrude() has been removed. Use ExtrudeGeometry() instead.' );\n\t\t\treturn new ExtrudeGeometry( this, options );\n\n\t\t},\n\t\tmakeGeometry: function ( options ) {\n\n\t\t\tconsole.warn( 'THREE.Shape: .makeGeometry() has been removed. Use ShapeGeometry() instead.' );\n\t\t\treturn new ShapeGeometry( this, options );\n\n\t\t}\n\n\t} );\n\n\tObject.assign( Vector2.prototype, {\n\n\t\tfromAttribute: function ( attribute, index, offset ) {\n\n\t\t\tconsole.warn( 'THREE.Vector2: .fromAttribute() has been renamed to .fromBufferAttribute().' );\n\t\t\treturn this.fromBufferAttribute( attribute, index, offset );\n\n\t\t},\n\t\tdistanceToManhattan: function ( v ) {\n\n\t\t\tconsole.warn( 'THREE.Vector2: .distanceToManhattan() has been renamed to .manhattanDistanceTo().' );\n\t\t\treturn this.manhattanDistanceTo( v );\n\n\t\t},\n\t\tlengthManhattan: function () {\n\n\t\t\tconsole.warn( 'THREE.Vector2: .lengthManhattan() has been renamed to .manhattanLength().' );\n\t\t\treturn this.manhattanLength();\n\n\t\t}\n\n\t} );\n\n\tObject.assign( Vector3.prototype, {\n\n\t\tsetEulerFromRotationMatrix: function () {\n\n\t\t\tconsole.error( 'THREE.Vector3: .setEulerFromRotationMatrix() has been removed. Use Euler.setFromRotationMatrix() instead.' );\n\n\t\t},\n\t\tsetEulerFromQuaternion: function () {\n\n\t\t\tconsole.error( 'THREE.Vector3: .setEulerFromQuaternion() has been removed. Use Euler.setFromQuaternion() instead.' );\n\n\t\t},\n\t\tgetPositionFromMatrix: function ( m ) {\n\n\t\t\tconsole.warn( 'THREE.Vector3: .getPositionFromMatrix() has been renamed to .setFromMatrixPosition().' );\n\t\t\treturn this.setFromMatrixPosition( m );\n\n\t\t},\n\t\tgetScaleFromMatrix: function ( m ) {\n\n\t\t\tconsole.warn( 'THREE.Vector3: .getScaleFromMatrix() has been renamed to .setFromMatrixScale().' );\n\t\t\treturn this.setFromMatrixScale( m );\n\n\t\t},\n\t\tgetColumnFromMatrix: function ( index, matrix ) {\n\n\t\t\tconsole.warn( 'THREE.Vector3: .getColumnFromMatrix() has been renamed to .setFromMatrixColumn().' );\n\t\t\treturn this.setFromMatrixColumn( matrix, index );\n\n\t\t},\n\t\tapplyProjection: function ( m ) {\n\n\t\t\tconsole.warn( 'THREE.Vector3: .applyProjection() has been removed. Use .applyMatrix4( m ) instead.' );\n\t\t\treturn this.applyMatrix4( m );\n\n\t\t},\n\t\tfromAttribute: function ( attribute, index, offset ) {\n\n\t\t\tconsole.warn( 'THREE.Vector3: .fromAttribute() has been renamed to .fromBufferAttribute().' );\n\t\t\treturn this.fromBufferAttribute( attribute, index, offset );\n\n\t\t},\n\t\tdistanceToManhattan: function ( v ) {\n\n\t\t\tconsole.warn( 'THREE.Vector3: .distanceToManhattan() has been renamed to .manhattanDistanceTo().' );\n\t\t\treturn this.manhattanDistanceTo( v );\n\n\t\t},\n\t\tlengthManhattan: function () {\n\n\t\t\tconsole.warn( 'THREE.Vector3: .lengthManhattan() has been renamed to .manhattanLength().' );\n\t\t\treturn this.manhattanLength();\n\n\t\t}\n\n\t} );\n\n\tObject.assign( Vector4.prototype, {\n\n\t\tfromAttribute: function ( attribute, index, offset ) {\n\n\t\t\tconsole.warn( 'THREE.Vector4: .fromAttribute() has been renamed to .fromBufferAttribute().' );\n\t\t\treturn this.fromBufferAttribute( attribute, index, offset );\n\n\t\t},\n\t\tlengthManhattan: function () {\n\n\t\t\tconsole.warn( 'THREE.Vector4: .lengthManhattan() has been renamed to .manhattanLength().' );\n\t\t\treturn this.manhattanLength();\n\n\t\t}\n\n\t} );\n\n\t//\n\n\tGeometry.prototype.computeTangents = function () {\n\n\t\tconsole.warn( 'THREE.Geometry: .computeTangents() has been removed.' );\n\n\t};\n\n\tObject.assign( Object3D.prototype, {\n\n\t\tgetChildByName: function ( name ) {\n\n\t\t\tconsole.warn( 'THREE.Object3D: .getChildByName() has been renamed to .getObjectByName().' );\n\t\t\treturn this.getObjectByName( name );\n\n\t\t},\n\t\trenderDepth: function () {\n\n\t\t\tconsole.warn( 'THREE.Object3D: .renderDepth has been removed. Use .renderOrder, instead.' );\n\n\t\t},\n\t\ttranslate: function ( distance, axis ) {\n\n\t\t\tconsole.warn( 'THREE.Object3D: .translate() has been removed. Use .translateOnAxis( axis, distance ) instead.' );\n\t\t\treturn this.translateOnAxis( axis, distance );\n\n\t\t}\n\n\t} );\n\n\tObject.defineProperties( Object3D.prototype, {\n\n\t\teulerOrder: {\n\t\t\tget: function () {\n\n\t\t\t\tconsole.warn( 'THREE.Object3D: .eulerOrder is now .rotation.order.' );\n\t\t\t\treturn this.rotation.order;\n\n\t\t\t},\n\t\t\tset: function ( value ) {\n\n\t\t\t\tconsole.warn( 'THREE.Object3D: .eulerOrder is now .rotation.order.' );\n\t\t\t\tthis.rotation.order = value;\n\n\t\t\t}\n\t\t},\n\t\tuseQuaternion: {\n\t\t\tget: function () {\n\n\t\t\t\tconsole.warn( 'THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.' );\n\n\t\t\t},\n\t\t\tset: function () {\n\n\t\t\t\tconsole.warn( 'THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.' );\n\n\t\t\t}\n\t\t}\n\n\t} );\n\n\tObject.defineProperties( LOD.prototype, {\n\n\t\tobjects: {\n\t\t\tget: function () {\n\n\t\t\t\tconsole.warn( 'THREE.LOD: .objects has been renamed to .levels.' );\n\t\t\t\treturn this.levels;\n\n\t\t\t}\n\t\t}\n\n\t} );\n\n\tObject.defineProperty( Skeleton.prototype, 'useVertexTexture', {\n\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.Skeleton: useVertexTexture has been removed.' );\n\n\t\t},\n\t\tset: function () {\n\n\t\t\tconsole.warn( 'THREE.Skeleton: useVertexTexture has been removed.' );\n\n\t\t}\n\n\t} );\n\n\tObject.defineProperty( Curve.prototype, '__arcLengthDivisions', {\n\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.Curve: .__arcLengthDivisions is now .arcLengthDivisions.' );\n\t\t\treturn this.arcLengthDivisions;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Curve: .__arcLengthDivisions is now .arcLengthDivisions.' );\n\t\t\tthis.arcLengthDivisions = value;\n\n\t\t}\n\n\t} );\n\n\t//\n\n\tPerspectiveCamera.prototype.setLens = function ( focalLength, filmGauge ) {\n\n\t\tconsole.warn( \"THREE.PerspectiveCamera.setLens is deprecated. \" +\n\t\t\t\t\"Use .setFocalLength and .filmGauge for a photographic setup.\" );\n\n\t\tif ( filmGauge !== undefined ) this.filmGauge = filmGauge;\n\t\tthis.setFocalLength( focalLength );\n\n\t};\n\n\t//\n\n\tObject.defineProperties( Light.prototype, {\n\t\tonlyShadow: {\n\t\t\tset: function () {\n\n\t\t\t\tconsole.warn( 'THREE.Light: .onlyShadow has been removed.' );\n\n\t\t\t}\n\t\t},\n\t\tshadowCameraFov: {\n\t\t\tset: function ( value ) {\n\n\t\t\t\tconsole.warn( 'THREE.Light: .shadowCameraFov is now .shadow.camera.fov.' );\n\t\t\t\tthis.shadow.camera.fov = value;\n\n\t\t\t}\n\t\t},\n\t\tshadowCameraLeft: {\n\t\t\tset: function ( value ) {\n\n\t\t\t\tconsole.warn( 'THREE.Light: .shadowCameraLeft is now .shadow.camera.left.' );\n\t\t\t\tthis.shadow.camera.left = value;\n\n\t\t\t}\n\t\t},\n\t\tshadowCameraRight: {\n\t\t\tset: function ( value ) {\n\n\t\t\t\tconsole.warn( 'THREE.Light: .shadowCameraRight is now .shadow.camera.right.' );\n\t\t\t\tthis.shadow.camera.right = value;\n\n\t\t\t}\n\t\t},\n\t\tshadowCameraTop: {\n\t\t\tset: function ( value ) {\n\n\t\t\t\tconsole.warn( 'THREE.Light: .shadowCameraTop is now .shadow.camera.top.' );\n\t\t\t\tthis.shadow.camera.top = value;\n\n\t\t\t}\n\t\t},\n\t\tshadowCameraBottom: {\n\t\t\tset: function ( value ) {\n\n\t\t\t\tconsole.warn( 'THREE.Light: .shadowCameraBottom is now .shadow.camera.bottom.' );\n\t\t\t\tthis.shadow.camera.bottom = value;\n\n\t\t\t}\n\t\t},\n\t\tshadowCameraNear: {\n\t\t\tset: function ( value ) {\n\n\t\t\t\tconsole.warn( 'THREE.Light: .shadowCameraNear is now .shadow.camera.near.' );\n\t\t\t\tthis.shadow.camera.near = value;\n\n\t\t\t}\n\t\t},\n\t\tshadowCameraFar: {\n\t\t\tset: function ( value ) {\n\n\t\t\t\tconsole.warn( 'THREE.Light: .shadowCameraFar is now .shadow.camera.far.' );\n\t\t\t\tthis.shadow.camera.far = value;\n\n\t\t\t}\n\t\t},\n\t\tshadowCameraVisible: {\n\t\t\tset: function () {\n\n\t\t\t\tconsole.warn( 'THREE.Light: .shadowCameraVisible has been removed. Use new THREE.CameraHelper( light.shadow.camera ) instead.' );\n\n\t\t\t}\n\t\t},\n\t\tshadowBias: {\n\t\t\tset: function ( value ) {\n\n\t\t\t\tconsole.warn( 'THREE.Light: .shadowBias is now .shadow.bias.' );\n\t\t\t\tthis.shadow.bias = value;\n\n\t\t\t}\n\t\t},\n\t\tshadowDarkness: {\n\t\t\tset: function () {\n\n\t\t\t\tconsole.warn( 'THREE.Light: .shadowDarkness has been removed.' );\n\n\t\t\t}\n\t\t},\n\t\tshadowMapWidth: {\n\t\t\tset: function ( value ) {\n\n\t\t\t\tconsole.warn( 'THREE.Light: .shadowMapWidth is now .shadow.mapSize.width.' );\n\t\t\t\tthis.shadow.mapSize.width = value;\n\n\t\t\t}\n\t\t},\n\t\tshadowMapHeight: {\n\t\t\tset: function ( value ) {\n\n\t\t\t\tconsole.warn( 'THREE.Light: .shadowMapHeight is now .shadow.mapSize.height.' );\n\t\t\t\tthis.shadow.mapSize.height = value;\n\n\t\t\t}\n\t\t}\n\t} );\n\n\t//\n\n\tObject.defineProperties( BufferAttribute.prototype, {\n\n\t\tlength: {\n\t\t\tget: function () {\n\n\t\t\t\tconsole.warn( 'THREE.BufferAttribute: .length has been deprecated. Use .count instead.' );\n\t\t\t\treturn this.array.length;\n\n\t\t\t}\n\t\t}\n\n\t} );\n\n\tObject.assign( BufferGeometry.prototype, {\n\n\t\taddIndex: function ( index ) {\n\n\t\t\tconsole.warn( 'THREE.BufferGeometry: .addIndex() has been renamed to .setIndex().' );\n\t\t\tthis.setIndex( index );\n\n\t\t},\n\t\taddDrawCall: function ( start, count, indexOffset ) {\n\n\t\t\tif ( indexOffset !== undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.BufferGeometry: .addDrawCall() no longer supports indexOffset.' );\n\n\t\t\t}\n\t\t\tconsole.warn( 'THREE.BufferGeometry: .addDrawCall() is now .addGroup().' );\n\t\t\tthis.addGroup( start, count );\n\n\t\t},\n\t\tclearDrawCalls: function () {\n\n\t\t\tconsole.warn( 'THREE.BufferGeometry: .clearDrawCalls() is now .clearGroups().' );\n\t\t\tthis.clearGroups();\n\n\t\t},\n\t\tcomputeTangents: function () {\n\n\t\t\tconsole.warn( 'THREE.BufferGeometry: .computeTangents() has been removed.' );\n\n\t\t},\n\t\tcomputeOffsets: function () {\n\n\t\t\tconsole.warn( 'THREE.BufferGeometry: .computeOffsets() has been removed.' );\n\n\t\t}\n\n\t} );\n\n\tObject.defineProperties( BufferGeometry.prototype, {\n\n\t\tdrawcalls: {\n\t\t\tget: function () {\n\n\t\t\t\tconsole.error( 'THREE.BufferGeometry: .drawcalls has been renamed to .groups.' );\n\t\t\t\treturn this.groups;\n\n\t\t\t}\n\t\t},\n\t\toffsets: {\n\t\t\tget: function () {\n\n\t\t\t\tconsole.warn( 'THREE.BufferGeometry: .offsets has been renamed to .groups.' );\n\t\t\t\treturn this.groups;\n\n\t\t\t}\n\t\t}\n\n\t} );\n\n\t//\n\n\tObject.defineProperties( Uniform.prototype, {\n\n\t\tdynamic: {\n\t\t\tset: function () {\n\n\t\t\t\tconsole.warn( 'THREE.Uniform: .dynamic has been removed. Use object.onBeforeRender() instead.' );\n\n\t\t\t}\n\t\t},\n\t\tonUpdate: {\n\t\t\tvalue: function () {\n\n\t\t\t\tconsole.warn( 'THREE.Uniform: .onUpdate() has been removed. Use object.onBeforeRender() instead.' );\n\t\t\t\treturn this;\n\n\t\t\t}\n\t\t}\n\n\t} );\n\n\t//\n\n\tObject.defineProperties( Material.prototype, {\n\n\t\twrapAround: {\n\t\t\tget: function () {\n\n\t\t\t\tconsole.warn( 'THREE.Material: .wrapAround has been removed.' );\n\n\t\t\t},\n\t\t\tset: function () {\n\n\t\t\t\tconsole.warn( 'THREE.Material: .wrapAround has been removed.' );\n\n\t\t\t}\n\t\t},\n\t\twrapRGB: {\n\t\t\tget: function () {\n\n\t\t\t\tconsole.warn( 'THREE.Material: .wrapRGB has been removed.' );\n\t\t\t\treturn new Color();\n\n\t\t\t}\n\t\t},\n\n\t\tshading: {\n\t\t\tget: function () {\n\n\t\t\t\tconsole.error( 'THREE.' + this.type + ': .shading has been removed. Use the boolean .flatShading instead.' );\n\n\t\t\t},\n\t\t\tset: function ( value ) {\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 = ( value === FlatShading );\n\n\t\t\t}\n\t\t}\n\n\t} );\n\n\tObject.defineProperties( MeshPhongMaterial.prototype, {\n\n\t\tmetal: {\n\t\t\tget: function () {\n\n\t\t\t\tconsole.warn( 'THREE.MeshPhongMaterial: .metal has been removed. Use THREE.MeshStandardMaterial instead.' );\n\t\t\t\treturn false;\n\n\t\t\t},\n\t\t\tset: function () {\n\n\t\t\t\tconsole.warn( 'THREE.MeshPhongMaterial: .metal has been removed. Use THREE.MeshStandardMaterial instead' );\n\n\t\t\t}\n\t\t}\n\n\t} );\n\n\tObject.defineProperties( ShaderMaterial.prototype, {\n\n\t\tderivatives: {\n\t\t\tget: function () {\n\n\t\t\t\tconsole.warn( 'THREE.ShaderMaterial: .derivatives has been moved to .extensions.derivatives.' );\n\t\t\t\treturn this.extensions.derivatives;\n\n\t\t\t},\n\t\t\tset: function ( value ) {\n\n\t\t\t\tconsole.warn( 'THREE. ShaderMaterial: .derivatives has been moved to .extensions.derivatives.' );\n\t\t\t\tthis.extensions.derivatives = value;\n\n\t\t\t}\n\t\t}\n\n\t} );\n\n\t//\n\n\tObject.assign( WebGLRenderer.prototype, {\n\n\t\tgetCurrentRenderTarget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .getCurrentRenderTarget() is now .getRenderTarget().' );\n\t\t\treturn this.getRenderTarget();\n\n\t\t},\n\n\t\tgetMaxAnisotropy: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .getMaxAnisotropy() is now .capabilities.getMaxAnisotropy().' );\n\t\t\treturn this.capabilities.getMaxAnisotropy();\n\n\t\t},\n\n\t\tgetPrecision: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .getPrecision() is now .capabilities.precision.' );\n\t\t\treturn this.capabilities.precision;\n\n\t\t},\n\n\t\tresetGLState: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .resetGLState() is now .state.reset().' );\n\t\t\treturn this.state.reset();\n\n\t\t},\n\n\t\tsupportsFloatTextures: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .supportsFloatTextures() is now .extensions.get( \\'OES_texture_float\\' ).' );\n\t\t\treturn this.extensions.get( 'OES_texture_float' );\n\n\t\t},\n\t\tsupportsHalfFloatTextures: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .supportsHalfFloatTextures() is now .extensions.get( \\'OES_texture_half_float\\' ).' );\n\t\t\treturn this.extensions.get( 'OES_texture_half_float' );\n\n\t\t},\n\t\tsupportsStandardDerivatives: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .supportsStandardDerivatives() is now .extensions.get( \\'OES_standard_derivatives\\' ).' );\n\t\t\treturn this.extensions.get( 'OES_standard_derivatives' );\n\n\t\t},\n\t\tsupportsCompressedTextureS3TC: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .supportsCompressedTextureS3TC() is now .extensions.get( \\'WEBGL_compressed_texture_s3tc\\' ).' );\n\t\t\treturn this.extensions.get( 'WEBGL_compressed_texture_s3tc' );\n\n\t\t},\n\t\tsupportsCompressedTexturePVRTC: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .supportsCompressedTexturePVRTC() is now .extensions.get( \\'WEBGL_compressed_texture_pvrtc\\' ).' );\n\t\t\treturn this.extensions.get( 'WEBGL_compressed_texture_pvrtc' );\n\n\t\t},\n\t\tsupportsBlendMinMax: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .supportsBlendMinMax() is now .extensions.get( \\'EXT_blend_minmax\\' ).' );\n\t\t\treturn this.extensions.get( 'EXT_blend_minmax' );\n\n\t\t},\n\t\tsupportsVertexTextures: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .supportsVertexTextures() is now .capabilities.vertexTextures.' );\n\t\t\treturn this.capabilities.vertexTextures;\n\n\t\t},\n\t\tsupportsInstancedArrays: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .supportsInstancedArrays() is now .extensions.get( \\'ANGLE_instanced_arrays\\' ).' );\n\t\t\treturn this.extensions.get( 'ANGLE_instanced_arrays' );\n\n\t\t},\n\t\tenableScissorTest: function ( boolean ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .enableScissorTest() is now .setScissorTest().' );\n\t\t\tthis.setScissorTest( boolean );\n\n\t\t},\n\t\tinitMaterial: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .initMaterial() has been removed.' );\n\n\t\t},\n\t\taddPrePlugin: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .addPrePlugin() has been removed.' );\n\n\t\t},\n\t\taddPostPlugin: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .addPostPlugin() has been removed.' );\n\n\t\t},\n\t\tupdateShadowMap: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .updateShadowMap() has been removed.' );\n\n\t\t}\n\n\t} );\n\n\tObject.defineProperties( WebGLRenderer.prototype, {\n\n\t\tshadowMapEnabled: {\n\t\t\tget: function () {\n\n\t\t\t\treturn this.shadowMap.enabled;\n\n\t\t\t},\n\t\t\tset: function ( value ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: .shadowMapEnabled is now .shadowMap.enabled.' );\n\t\t\t\tthis.shadowMap.enabled = value;\n\n\t\t\t}\n\t\t},\n\t\tshadowMapType: {\n\t\t\tget: function () {\n\n\t\t\t\treturn this.shadowMap.type;\n\n\t\t\t},\n\t\t\tset: function ( value ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: .shadowMapType is now .shadowMap.type.' );\n\t\t\t\tthis.shadowMap.type = value;\n\n\t\t\t}\n\t\t},\n\t\tshadowMapCullFace: {\n\t\t\tget: function () {\n\n\t\t\t\treturn this.shadowMap.cullFace;\n\n\t\t\t},\n\t\t\tset: function ( value ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: .shadowMapCullFace is now .shadowMap.cullFace.' );\n\t\t\t\tthis.shadowMap.cullFace = value;\n\n\t\t\t}\n\t\t}\n\t} );\n\n\tObject.defineProperties( WebGLShadowMap.prototype, {\n\n\t\tcullFace: {\n\t\t\tget: function () {\n\n\t\t\t\treturn this.renderReverseSided ? CullFaceFront : CullFaceBack;\n\n\t\t\t},\n\t\t\tset: function ( cullFace ) {\n\n\t\t\t\tvar value = ( cullFace !== CullFaceBack );\n\t\t\t\tconsole.warn( \"WebGLRenderer: .shadowMap.cullFace is deprecated. Set .shadowMap.renderReverseSided to \" + value + \".\" );\n\t\t\t\tthis.renderReverseSided = value;\n\n\t\t\t}\n\t\t}\n\n\t} );\n\n\t//\n\n\tObject.defineProperties( WebGLRenderTarget.prototype, {\n\n\t\twrapS: {\n\t\t\tget: function () {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS.' );\n\t\t\t\treturn this.texture.wrapS;\n\n\t\t\t},\n\t\t\tset: function ( value ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS.' );\n\t\t\t\tthis.texture.wrapS = value;\n\n\t\t\t}\n\t\t},\n\t\twrapT: {\n\t\t\tget: function () {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT.' );\n\t\t\t\treturn this.texture.wrapT;\n\n\t\t\t},\n\t\t\tset: function ( value ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT.' );\n\t\t\t\tthis.texture.wrapT = value;\n\n\t\t\t}\n\t\t},\n\t\tmagFilter: {\n\t\t\tget: function () {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter.' );\n\t\t\t\treturn this.texture.magFilter;\n\n\t\t\t},\n\t\t\tset: function ( value ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter.' );\n\t\t\t\tthis.texture.magFilter = value;\n\n\t\t\t}\n\t\t},\n\t\tminFilter: {\n\t\t\tget: function () {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter.' );\n\t\t\t\treturn this.texture.minFilter;\n\n\t\t\t},\n\t\t\tset: function ( value ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter.' );\n\t\t\t\tthis.texture.minFilter = value;\n\n\t\t\t}\n\t\t},\n\t\tanisotropy: {\n\t\t\tget: function () {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy.' );\n\t\t\t\treturn this.texture.anisotropy;\n\n\t\t\t},\n\t\t\tset: function ( value ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy.' );\n\t\t\t\tthis.texture.anisotropy = value;\n\n\t\t\t}\n\t\t},\n\t\toffset: {\n\t\t\tget: function () {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .offset is now .texture.offset.' );\n\t\t\t\treturn this.texture.offset;\n\n\t\t\t},\n\t\t\tset: function ( value ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .offset is now .texture.offset.' );\n\t\t\t\tthis.texture.offset = value;\n\n\t\t\t}\n\t\t},\n\t\trepeat: {\n\t\t\tget: function () {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .repeat is now .texture.repeat.' );\n\t\t\t\treturn this.texture.repeat;\n\n\t\t\t},\n\t\t\tset: function ( value ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .repeat is now .texture.repeat.' );\n\t\t\t\tthis.texture.repeat = value;\n\n\t\t\t}\n\t\t},\n\t\tformat: {\n\t\t\tget: function () {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .format is now .texture.format.' );\n\t\t\t\treturn this.texture.format;\n\n\t\t\t},\n\t\t\tset: function ( value ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .format is now .texture.format.' );\n\t\t\t\tthis.texture.format = value;\n\n\t\t\t}\n\t\t},\n\t\ttype: {\n\t\t\tget: function () {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .type is now .texture.type.' );\n\t\t\t\treturn this.texture.type;\n\n\t\t\t},\n\t\t\tset: function ( value ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .type is now .texture.type.' );\n\t\t\t\tthis.texture.type = value;\n\n\t\t\t}\n\t\t},\n\t\tgenerateMipmaps: {\n\t\t\tget: function () {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps.' );\n\t\t\t\treturn this.texture.generateMipmaps;\n\n\t\t\t},\n\t\t\tset: function ( value ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps.' );\n\t\t\t\tthis.texture.generateMipmaps = value;\n\n\t\t\t}\n\t\t}\n\n\t} );\n\n\t//\n\n\tAudio.prototype.load = function ( file ) {\n\n\t\tconsole.warn( 'THREE.Audio: .load has been deprecated. Use THREE.AudioLoader instead.' );\n\t\tvar scope = this;\n\t\tvar audioLoader = new AudioLoader();\n\t\taudioLoader.load( file, function ( buffer ) {\n\n\t\t\tscope.setBuffer( buffer );\n\n\t\t} );\n\t\treturn this;\n\n\t};\n\n\tAudioAnalyser.prototype.getData = function () {\n\n\t\tconsole.warn( 'THREE.AudioAnalyser: .getData() is now .getFrequencyData().' );\n\t\treturn this.getFrequencyData();\n\n\t};\n\n\t//\n\n\tCubeCamera.prototype.updateCubeMap = function ( renderer, scene ) {\n\n\t\tconsole.warn( 'THREE.CubeCamera: .updateCubeMap() is now .update().' );\n\t\treturn this.update( renderer, scene );\n\n\t};\n\n\t//\n\n\tvar GeometryUtils = {\n\n\t\tmerge: function ( geometry1, geometry2, materialIndexOffset ) {\n\n\t\t\tconsole.warn( 'THREE.GeometryUtils: .merge() has been moved to Geometry. Use geometry.merge( geometry2, matrix, materialIndexOffset ) instead.' );\n\t\t\tvar matrix;\n\n\t\t\tif ( geometry2.isMesh ) {\n\n\t\t\t\tgeometry2.matrixAutoUpdate && geometry2.updateMatrix();\n\n\t\t\t\tmatrix = geometry2.matrix;\n\t\t\t\tgeometry2 = geometry2.geometry;\n\n\t\t\t}\n\n\t\t\tgeometry1.merge( geometry2, matrix, materialIndexOffset );\n\n\t\t},\n\n\t\tcenter: function ( geometry ) {\n\n\t\t\tconsole.warn( 'THREE.GeometryUtils: .center() has been moved to Geometry. Use geometry.center() instead.' );\n\t\t\treturn geometry.center();\n\n\t\t}\n\n\t};\n\n\tvar ImageUtils = {\n\n\t\tcrossOrigin: undefined,\n\n\t\tloadTexture: function ( url, mapping, onLoad, onError ) {\n\n\t\t\tconsole.warn( 'THREE.ImageUtils.loadTexture has been deprecated. Use THREE.TextureLoader() instead.' );\n\n\t\t\tvar loader = new TextureLoader();\n\t\t\tloader.setCrossOrigin( this.crossOrigin );\n\n\t\t\tvar texture = loader.load( url, onLoad, undefined, onError );\n\n\t\t\tif ( mapping ) texture.mapping = mapping;\n\n\t\t\treturn texture;\n\n\t\t},\n\n\t\tloadTextureCube: function ( urls, mapping, onLoad, onError ) {\n\n\t\t\tconsole.warn( 'THREE.ImageUtils.loadTextureCube has been deprecated. Use THREE.CubeTextureLoader() instead.' );\n\n\t\t\tvar loader = new CubeTextureLoader();\n\t\t\tloader.setCrossOrigin( this.crossOrigin );\n\n\t\t\tvar texture = loader.load( urls, onLoad, undefined, onError );\n\n\t\t\tif ( mapping ) texture.mapping = mapping;\n\n\t\t\treturn texture;\n\n\t\t},\n\n\t\tloadCompressedTexture: function () {\n\n\t\t\tconsole.error( 'THREE.ImageUtils.loadCompressedTexture has been removed. Use THREE.DDSLoader instead.' );\n\n\t\t},\n\n\t\tloadCompressedTextureCube: function () {\n\n\t\t\tconsole.error( 'THREE.ImageUtils.loadCompressedTextureCube has been removed. Use THREE.DDSLoader instead.' );\n\n\t\t}\n\n\t};\n\n\t//\n\n\tfunction Projector() {\n\n\t\tconsole.error( 'THREE.Projector has been moved to /examples/js/renderers/Projector.js.' );\n\n\t\tthis.projectVector = function ( vector, camera ) {\n\n\t\t\tconsole.warn( 'THREE.Projector: .projectVector() is now vector.project().' );\n\t\t\tvector.project( camera );\n\n\t\t};\n\n\t\tthis.unprojectVector = function ( vector, camera ) {\n\n\t\t\tconsole.warn( 'THREE.Projector: .unprojectVector() is now vector.unproject().' );\n\t\t\tvector.unproject( camera );\n\n\t\t};\n\n\t\tthis.pickingRay = function () {\n\n\t\t\tconsole.error( 'THREE.Projector: .pickingRay() is now raycaster.setFromCamera().' );\n\n\t\t};\n\n\t}\n\n\t//\n\n\tfunction CanvasRenderer() {\n\n\t\tconsole.error( 'THREE.CanvasRenderer has been moved to /examples/js/renderers/CanvasRenderer.js' );\n\n\t\tthis.domElement = document.createElementNS( 'http://www.w3.org/1999/xhtml', 'canvas' );\n\t\tthis.clear = function () {};\n\t\tthis.render = function () {};\n\t\tthis.setClearColor = function () {};\n\t\tthis.setSize = function () {};\n\n\t}\n\n\texports.WebGLRenderTargetCube = WebGLRenderTargetCube;\n\texports.WebGLRenderTarget = WebGLRenderTarget;\n\texports.WebGLRenderer = WebGLRenderer;\n\texports.ShaderLib = ShaderLib;\n\texports.UniformsLib = UniformsLib;\n\texports.UniformsUtils = UniformsUtils;\n\texports.ShaderChunk = ShaderChunk;\n\texports.FogExp2 = FogExp2;\n\texports.Fog = Fog;\n\texports.Scene = Scene;\n\texports.LensFlare = LensFlare;\n\texports.Sprite = Sprite;\n\texports.LOD = LOD;\n\texports.SkinnedMesh = SkinnedMesh;\n\texports.Skeleton = Skeleton;\n\texports.Bone = Bone;\n\texports.Mesh = Mesh;\n\texports.LineSegments = LineSegments;\n\texports.LineLoop = LineLoop;\n\texports.Line = Line;\n\texports.Points = Points;\n\texports.Group = Group;\n\texports.VideoTexture = VideoTexture;\n\texports.DataTexture = DataTexture;\n\texports.CompressedTexture = CompressedTexture;\n\texports.CubeTexture = CubeTexture;\n\texports.CanvasTexture = CanvasTexture;\n\texports.DepthTexture = DepthTexture;\n\texports.Texture = Texture;\n\texports.CompressedTextureLoader = CompressedTextureLoader;\n\texports.DataTextureLoader = DataTextureLoader;\n\texports.CubeTextureLoader = CubeTextureLoader;\n\texports.TextureLoader = TextureLoader;\n\texports.ObjectLoader = ObjectLoader;\n\texports.MaterialLoader = MaterialLoader;\n\texports.BufferGeometryLoader = BufferGeometryLoader;\n\texports.DefaultLoadingManager = DefaultLoadingManager;\n\texports.LoadingManager = LoadingManager;\n\texports.JSONLoader = JSONLoader;\n\texports.ImageLoader = ImageLoader;\n\texports.FontLoader = FontLoader;\n\texports.FileLoader = FileLoader;\n\texports.Loader = Loader;\n\texports.Cache = Cache;\n\texports.AudioLoader = AudioLoader;\n\texports.SpotLightShadow = SpotLightShadow;\n\texports.SpotLight = SpotLight;\n\texports.PointLight = PointLight;\n\texports.RectAreaLight = RectAreaLight;\n\texports.HemisphereLight = HemisphereLight;\n\texports.DirectionalLightShadow = DirectionalLightShadow;\n\texports.DirectionalLight = DirectionalLight;\n\texports.AmbientLight = AmbientLight;\n\texports.LightShadow = LightShadow;\n\texports.Light = Light;\n\texports.StereoCamera = StereoCamera;\n\texports.PerspectiveCamera = PerspectiveCamera;\n\texports.OrthographicCamera = OrthographicCamera;\n\texports.CubeCamera = CubeCamera;\n\texports.ArrayCamera = ArrayCamera;\n\texports.Camera = Camera;\n\texports.AudioListener = AudioListener;\n\texports.PositionalAudio = PositionalAudio;\n\texports.AudioContext = AudioContext;\n\texports.AudioAnalyser = AudioAnalyser;\n\texports.Audio = Audio;\n\texports.VectorKeyframeTrack = VectorKeyframeTrack;\n\texports.StringKeyframeTrack = StringKeyframeTrack;\n\texports.QuaternionKeyframeTrack = QuaternionKeyframeTrack;\n\texports.NumberKeyframeTrack = NumberKeyframeTrack;\n\texports.ColorKeyframeTrack = ColorKeyframeTrack;\n\texports.BooleanKeyframeTrack = BooleanKeyframeTrack;\n\texports.PropertyMixer = PropertyMixer;\n\texports.PropertyBinding = PropertyBinding;\n\texports.KeyframeTrack = KeyframeTrack;\n\texports.AnimationUtils = AnimationUtils;\n\texports.AnimationObjectGroup = AnimationObjectGroup;\n\texports.AnimationMixer = AnimationMixer;\n\texports.AnimationClip = AnimationClip;\n\texports.Uniform = Uniform;\n\texports.InstancedBufferGeometry = InstancedBufferGeometry;\n\texports.BufferGeometry = BufferGeometry;\n\texports.Geometry = Geometry;\n\texports.InterleavedBufferAttribute = InterleavedBufferAttribute;\n\texports.InstancedInterleavedBuffer = InstancedInterleavedBuffer;\n\texports.InterleavedBuffer = InterleavedBuffer;\n\texports.InstancedBufferAttribute = InstancedBufferAttribute;\n\texports.Face3 = Face3;\n\texports.Object3D = Object3D;\n\texports.Raycaster = Raycaster;\n\texports.Layers = Layers;\n\texports.EventDispatcher = EventDispatcher;\n\texports.Clock = Clock;\n\texports.QuaternionLinearInterpolant = QuaternionLinearInterpolant;\n\texports.LinearInterpolant = LinearInterpolant;\n\texports.DiscreteInterpolant = DiscreteInterpolant;\n\texports.CubicInterpolant = CubicInterpolant;\n\texports.Interpolant = Interpolant;\n\texports.Triangle = Triangle;\n\texports.Math = _Math;\n\texports.Spherical = Spherical;\n\texports.Cylindrical = Cylindrical;\n\texports.Plane = Plane;\n\texports.Frustum = Frustum;\n\texports.Sphere = Sphere;\n\texports.Ray = Ray;\n\texports.Matrix4 = Matrix4;\n\texports.Matrix3 = Matrix3;\n\texports.Box3 = Box3;\n\texports.Box2 = Box2;\n\texports.Line3 = Line3;\n\texports.Euler = Euler;\n\texports.Vector4 = Vector4;\n\texports.Vector3 = Vector3;\n\texports.Vector2 = Vector2;\n\texports.Quaternion = Quaternion;\n\texports.Color = Color;\n\texports.ImmediateRenderObject = ImmediateRenderObject;\n\texports.VertexNormalsHelper = VertexNormalsHelper;\n\texports.SpotLightHelper = SpotLightHelper;\n\texports.SkeletonHelper = SkeletonHelper;\n\texports.PointLightHelper = PointLightHelper;\n\texports.RectAreaLightHelper = RectAreaLightHelper;\n\texports.HemisphereLightHelper = HemisphereLightHelper;\n\texports.GridHelper = GridHelper;\n\texports.PolarGridHelper = PolarGridHelper;\n\texports.FaceNormalsHelper = FaceNormalsHelper;\n\texports.DirectionalLightHelper = DirectionalLightHelper;\n\texports.CameraHelper = CameraHelper;\n\texports.BoxHelper = BoxHelper;\n\texports.Box3Helper = Box3Helper;\n\texports.PlaneHelper = PlaneHelper;\n\texports.ArrowHelper = ArrowHelper;\n\texports.AxesHelper = AxesHelper;\n\texports.CatmullRomCurve3 = CatmullRomCurve3;\n\texports.CubicBezierCurve3 = CubicBezierCurve3;\n\texports.QuadraticBezierCurve3 = QuadraticBezierCurve3;\n\texports.LineCurve3 = LineCurve3;\n\texports.ArcCurve = ArcCurve;\n\texports.EllipseCurve = EllipseCurve;\n\texports.SplineCurve = SplineCurve;\n\texports.CubicBezierCurve = CubicBezierCurve;\n\texports.QuadraticBezierCurve = QuadraticBezierCurve;\n\texports.LineCurve = LineCurve;\n\texports.Shape = Shape;\n\texports.Path = Path;\n\texports.ShapePath = ShapePath;\n\texports.Font = Font;\n\texports.CurvePath = CurvePath;\n\texports.Curve = Curve;\n\texports.ShapeUtils = ShapeUtils;\n\texports.SceneUtils = SceneUtils;\n\texports.WebGLUtils = WebGLUtils;\n\texports.WireframeGeometry = WireframeGeometry;\n\texports.ParametricGeometry = ParametricGeometry;\n\texports.ParametricBufferGeometry = ParametricBufferGeometry;\n\texports.TetrahedronGeometry = TetrahedronGeometry;\n\texports.TetrahedronBufferGeometry = TetrahedronBufferGeometry;\n\texports.OctahedronGeometry = OctahedronGeometry;\n\texports.OctahedronBufferGeometry = OctahedronBufferGeometry;\n\texports.IcosahedronGeometry = IcosahedronGeometry;\n\texports.IcosahedronBufferGeometry = IcosahedronBufferGeometry;\n\texports.DodecahedronGeometry = DodecahedronGeometry;\n\texports.DodecahedronBufferGeometry = DodecahedronBufferGeometry;\n\texports.PolyhedronGeometry = PolyhedronGeometry;\n\texports.PolyhedronBufferGeometry = PolyhedronBufferGeometry;\n\texports.TubeGeometry = TubeGeometry;\n\texports.TubeBufferGeometry = TubeBufferGeometry;\n\texports.TorusKnotGeometry = TorusKnotGeometry;\n\texports.TorusKnotBufferGeometry = TorusKnotBufferGeometry;\n\texports.TorusGeometry = TorusGeometry;\n\texports.TorusBufferGeometry = TorusBufferGeometry;\n\texports.TextGeometry = TextGeometry;\n\texports.TextBufferGeometry = TextBufferGeometry;\n\texports.SphereGeometry = SphereGeometry;\n\texports.SphereBufferGeometry = SphereBufferGeometry;\n\texports.RingGeometry = RingGeometry;\n\texports.RingBufferGeometry = RingBufferGeometry;\n\texports.PlaneGeometry = PlaneGeometry;\n\texports.PlaneBufferGeometry = PlaneBufferGeometry;\n\texports.LatheGeometry = LatheGeometry;\n\texports.LatheBufferGeometry = LatheBufferGeometry;\n\texports.ShapeGeometry = ShapeGeometry;\n\texports.ShapeBufferGeometry = ShapeBufferGeometry;\n\texports.ExtrudeGeometry = ExtrudeGeometry;\n\texports.ExtrudeBufferGeometry = ExtrudeBufferGeometry;\n\texports.EdgesGeometry = EdgesGeometry;\n\texports.ConeGeometry = ConeGeometry;\n\texports.ConeBufferGeometry = ConeBufferGeometry;\n\texports.CylinderGeometry = CylinderGeometry;\n\texports.CylinderBufferGeometry = CylinderBufferGeometry;\n\texports.CircleGeometry = CircleGeometry;\n\texports.CircleBufferGeometry = CircleBufferGeometry;\n\texports.BoxGeometry = BoxGeometry;\n\texports.BoxBufferGeometry = BoxBufferGeometry;\n\texports.ShadowMaterial = ShadowMaterial;\n\texports.SpriteMaterial = SpriteMaterial;\n\texports.RawShaderMaterial = RawShaderMaterial;\n\texports.ShaderMaterial = ShaderMaterial;\n\texports.PointsMaterial = PointsMaterial;\n\texports.MeshPhysicalMaterial = MeshPhysicalMaterial;\n\texports.MeshStandardMaterial = MeshStandardMaterial;\n\texports.MeshPhongMaterial = MeshPhongMaterial;\n\texports.MeshToonMaterial = MeshToonMaterial;\n\texports.MeshNormalMaterial = MeshNormalMaterial;\n\texports.MeshLambertMaterial = MeshLambertMaterial;\n\texports.MeshDepthMaterial = MeshDepthMaterial;\n\texports.MeshDistanceMaterial = MeshDistanceMaterial;\n\texports.MeshBasicMaterial = MeshBasicMaterial;\n\texports.LineDashedMaterial = LineDashedMaterial;\n\texports.LineBasicMaterial = LineBasicMaterial;\n\texports.Material = Material;\n\texports.Float64BufferAttribute = Float64BufferAttribute;\n\texports.Float32BufferAttribute = Float32BufferAttribute;\n\texports.Uint32BufferAttribute = Uint32BufferAttribute;\n\texports.Int32BufferAttribute = Int32BufferAttribute;\n\texports.Uint16BufferAttribute = Uint16BufferAttribute;\n\texports.Int16BufferAttribute = Int16BufferAttribute;\n\texports.Uint8ClampedBufferAttribute = Uint8ClampedBufferAttribute;\n\texports.Uint8BufferAttribute = Uint8BufferAttribute;\n\texports.Int8BufferAttribute = Int8BufferAttribute;\n\texports.BufferAttribute = BufferAttribute;\n\texports.REVISION = REVISION;\n\texports.MOUSE = MOUSE;\n\texports.CullFaceNone = CullFaceNone;\n\texports.CullFaceBack = CullFaceBack;\n\texports.CullFaceFront = CullFaceFront;\n\texports.CullFaceFrontBack = CullFaceFrontBack;\n\texports.FrontFaceDirectionCW = FrontFaceDirectionCW;\n\texports.FrontFaceDirectionCCW = FrontFaceDirectionCCW;\n\texports.BasicShadowMap = BasicShadowMap;\n\texports.PCFShadowMap = PCFShadowMap;\n\texports.PCFSoftShadowMap = PCFSoftShadowMap;\n\texports.FrontSide = FrontSide;\n\texports.BackSide = BackSide;\n\texports.DoubleSide = DoubleSide;\n\texports.FlatShading = FlatShading;\n\texports.SmoothShading = SmoothShading;\n\texports.NoColors = NoColors;\n\texports.FaceColors = FaceColors;\n\texports.VertexColors = VertexColors;\n\texports.NoBlending = NoBlending;\n\texports.NormalBlending = NormalBlending;\n\texports.AdditiveBlending = AdditiveBlending;\n\texports.SubtractiveBlending = SubtractiveBlending;\n\texports.MultiplyBlending = MultiplyBlending;\n\texports.CustomBlending = CustomBlending;\n\texports.AddEquation = AddEquation;\n\texports.SubtractEquation = SubtractEquation;\n\texports.ReverseSubtractEquation = ReverseSubtractEquation;\n\texports.MinEquation = MinEquation;\n\texports.MaxEquation = MaxEquation;\n\texports.ZeroFactor = ZeroFactor;\n\texports.OneFactor = OneFactor;\n\texports.SrcColorFactor = SrcColorFactor;\n\texports.OneMinusSrcColorFactor = OneMinusSrcColorFactor;\n\texports.SrcAlphaFactor = SrcAlphaFactor;\n\texports.OneMinusSrcAlphaFactor = OneMinusSrcAlphaFactor;\n\texports.DstAlphaFactor = DstAlphaFactor;\n\texports.OneMinusDstAlphaFactor = OneMinusDstAlphaFactor;\n\texports.DstColorFactor = DstColorFactor;\n\texports.OneMinusDstColorFactor = OneMinusDstColorFactor;\n\texports.SrcAlphaSaturateFactor = SrcAlphaSaturateFactor;\n\texports.NeverDepth = NeverDepth;\n\texports.AlwaysDepth = AlwaysDepth;\n\texports.LessDepth = LessDepth;\n\texports.LessEqualDepth = LessEqualDepth;\n\texports.EqualDepth = EqualDepth;\n\texports.GreaterEqualDepth = GreaterEqualDepth;\n\texports.GreaterDepth = GreaterDepth;\n\texports.NotEqualDepth = NotEqualDepth;\n\texports.MultiplyOperation = MultiplyOperation;\n\texports.MixOperation = MixOperation;\n\texports.AddOperation = AddOperation;\n\texports.NoToneMapping = NoToneMapping;\n\texports.LinearToneMapping = LinearToneMapping;\n\texports.ReinhardToneMapping = ReinhardToneMapping;\n\texports.Uncharted2ToneMapping = Uncharted2ToneMapping;\n\texports.CineonToneMapping = CineonToneMapping;\n\texports.UVMapping = UVMapping;\n\texports.CubeReflectionMapping = CubeReflectionMapping;\n\texports.CubeRefractionMapping = CubeRefractionMapping;\n\texports.EquirectangularReflectionMapping = EquirectangularReflectionMapping;\n\texports.EquirectangularRefractionMapping = EquirectangularRefractionMapping;\n\texports.SphericalReflectionMapping = SphericalReflectionMapping;\n\texports.CubeUVReflectionMapping = CubeUVReflectionMapping;\n\texports.CubeUVRefractionMapping = CubeUVRefractionMapping;\n\texports.RepeatWrapping = RepeatWrapping;\n\texports.ClampToEdgeWrapping = ClampToEdgeWrapping;\n\texports.MirroredRepeatWrapping = MirroredRepeatWrapping;\n\texports.NearestFilter = NearestFilter;\n\texports.NearestMipMapNearestFilter = NearestMipMapNearestFilter;\n\texports.NearestMipMapLinearFilter = NearestMipMapLinearFilter;\n\texports.LinearFilter = LinearFilter;\n\texports.LinearMipMapNearestFilter = LinearMipMapNearestFilter;\n\texports.LinearMipMapLinearFilter = LinearMipMapLinearFilter;\n\texports.UnsignedByteType = UnsignedByteType;\n\texports.ByteType = ByteType;\n\texports.ShortType = ShortType;\n\texports.UnsignedShortType = UnsignedShortType;\n\texports.IntType = IntType;\n\texports.UnsignedIntType = UnsignedIntType;\n\texports.FloatType = FloatType;\n\texports.HalfFloatType = HalfFloatType;\n\texports.UnsignedShort4444Type = UnsignedShort4444Type;\n\texports.UnsignedShort5551Type = UnsignedShort5551Type;\n\texports.UnsignedShort565Type = UnsignedShort565Type;\n\texports.UnsignedInt248Type = UnsignedInt248Type;\n\texports.AlphaFormat = AlphaFormat;\n\texports.RGBFormat = RGBFormat;\n\texports.RGBAFormat = RGBAFormat;\n\texports.LuminanceFormat = LuminanceFormat;\n\texports.LuminanceAlphaFormat = LuminanceAlphaFormat;\n\texports.RGBEFormat = RGBEFormat;\n\texports.DepthFormat = DepthFormat;\n\texports.DepthStencilFormat = DepthStencilFormat;\n\texports.RGB_S3TC_DXT1_Format = RGB_S3TC_DXT1_Format;\n\texports.RGBA_S3TC_DXT1_Format = RGBA_S3TC_DXT1_Format;\n\texports.RGBA_S3TC_DXT3_Format = RGBA_S3TC_DXT3_Format;\n\texports.RGBA_S3TC_DXT5_Format = RGBA_S3TC_DXT5_Format;\n\texports.RGB_PVRTC_4BPPV1_Format = RGB_PVRTC_4BPPV1_Format;\n\texports.RGB_PVRTC_2BPPV1_Format = RGB_PVRTC_2BPPV1_Format;\n\texports.RGBA_PVRTC_4BPPV1_Format = RGBA_PVRTC_4BPPV1_Format;\n\texports.RGBA_PVRTC_2BPPV1_Format = RGBA_PVRTC_2BPPV1_Format;\n\texports.RGB_ETC1_Format = RGB_ETC1_Format;\n\texports.LoopOnce = LoopOnce;\n\texports.LoopRepeat = LoopRepeat;\n\texports.LoopPingPong = LoopPingPong;\n\texports.InterpolateDiscrete = InterpolateDiscrete;\n\texports.InterpolateLinear = InterpolateLinear;\n\texports.InterpolateSmooth = InterpolateSmooth;\n\texports.ZeroCurvatureEnding = ZeroCurvatureEnding;\n\texports.ZeroSlopeEnding = ZeroSlopeEnding;\n\texports.WrapAroundEnding = WrapAroundEnding;\n\texports.TrianglesDrawMode = TrianglesDrawMode;\n\texports.TriangleStripDrawMode = TriangleStripDrawMode;\n\texports.TriangleFanDrawMode = TriangleFanDrawMode;\n\texports.LinearEncoding = LinearEncoding;\n\texports.sRGBEncoding = sRGBEncoding;\n\texports.GammaEncoding = GammaEncoding;\n\texports.RGBEEncoding = RGBEEncoding;\n\texports.LogLuvEncoding = LogLuvEncoding;\n\texports.RGBM7Encoding = RGBM7Encoding;\n\texports.RGBM16Encoding = RGBM16Encoding;\n\texports.RGBDEncoding = RGBDEncoding;\n\texports.BasicDepthPacking = BasicDepthPacking;\n\texports.RGBADepthPacking = RGBADepthPacking;\n\texports.CubeGeometry = BoxGeometry;\n\texports.Face4 = Face4;\n\texports.LineStrip = LineStrip;\n\texports.LinePieces = LinePieces;\n\texports.MeshFaceMaterial = MeshFaceMaterial;\n\texports.MultiMaterial = MultiMaterial;\n\texports.PointCloud = PointCloud;\n\texports.Particle = Particle;\n\texports.ParticleSystem = ParticleSystem;\n\texports.PointCloudMaterial = PointCloudMaterial;\n\texports.ParticleBasicMaterial = ParticleBasicMaterial;\n\texports.ParticleSystemMaterial = ParticleSystemMaterial;\n\texports.Vertex = Vertex;\n\texports.DynamicBufferAttribute = DynamicBufferAttribute;\n\texports.Int8Attribute = Int8Attribute;\n\texports.Uint8Attribute = Uint8Attribute;\n\texports.Uint8ClampedAttribute = Uint8ClampedAttribute;\n\texports.Int16Attribute = Int16Attribute;\n\texports.Uint16Attribute = Uint16Attribute;\n\texports.Int32Attribute = Int32Attribute;\n\texports.Uint32Attribute = Uint32Attribute;\n\texports.Float32Attribute = Float32Attribute;\n\texports.Float64Attribute = Float64Attribute;\n\texports.ClosedSplineCurve3 = ClosedSplineCurve3;\n\texports.SplineCurve3 = SplineCurve3;\n\texports.Spline = Spline;\n\texports.AxisHelper = AxisHelper;\n\texports.BoundingBoxHelper = BoundingBoxHelper;\n\texports.EdgesHelper = EdgesHelper;\n\texports.WireframeHelper = WireframeHelper;\n\texports.XHRLoader = XHRLoader;\n\texports.BinaryTextureLoader = BinaryTextureLoader;\n\texports.GeometryUtils = GeometryUtils;\n\texports.ImageUtils = ImageUtils;\n\texports.Projector = Projector;\n\texports.CanvasRenderer = CanvasRenderer;\n\n\tObject.defineProperty(exports, '__esModule', { value: true });\n\n})));\n","/**\n * @author mrdoob / http://mrdoob.com/\n * @author Mugen87 / https://github.com/Mugen87\n */\n\nTHREE.ColladaLoader = function ( manager ) {\n\n\tthis.manager = ( manager !== undefined ) ? manager : THREE.DefaultLoadingManager;\n\n};\n\nTHREE.ColladaLoader.prototype = {\n\n\tconstructor: THREE.ColladaLoader,\n\n\tcrossOrigin: 'Anonymous',\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tvar scope = this;\n\n\t\tvar path = THREE.Loader.prototype.extractUrlBase( url );\n\n\t\tvar loader = new THREE.FileLoader( scope.manager );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\tonLoad( scope.parse( text, path ) );\n\n\t\t}, onProgress, onError );\n\n\t},\n\n\toptions: {\n\n\t\tset convertUpAxis( value ) {\n\n\t\t\tconsole.warn( 'THREE.ColladaLoader: options.convertUpAxis() has been removed. Up axis is converted automatically.' );\n\n\t\t}\n\n\t},\n\n\tsetCrossOrigin: function ( value ) {\n\n\t\tthis.crossOrigin = value;\n\n\t},\n\n\tparse: function ( text, path ) {\n\n\t\tfunction getElementsByTagName( xml, name ) {\n\n\t\t\t// Non recursive xml.getElementsByTagName() ...\n\n\t\t\tvar array = [];\n\t\t\tvar childNodes = xml.childNodes;\n\n\t\t\tfor ( var i = 0, l = childNodes.length; i < l; i ++ ) {\n\n\t\t\t\tvar child = childNodes[ i ];\n\n\t\t\t\tif ( child.nodeName === name ) {\n\n\t\t\t\t\tarray.push( child );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn array;\n\n\t\t}\n\n\t\tfunction parseStrings( text ) {\n\n\t\t\tif ( text.length === 0 ) return [];\n\n\t\t\tvar parts = text.trim().split( /\\s+/ );\n\t\t\tvar array = new Array( parts.length );\n\n\t\t\tfor ( var i = 0, l = parts.length; i < l; i ++ ) {\n\n\t\t\t\tarray[ i ] = parts[ i ];\n\n\t\t\t}\n\n\t\t\treturn array;\n\n\t\t}\n\n\t\tfunction parseFloats( text ) {\n\n\t\t\tif ( text.length === 0 ) return [];\n\n\t\t\tvar parts = text.trim().split( /\\s+/ );\n\t\t\tvar array = new Array( parts.length );\n\n\t\t\tfor ( var i = 0, l = parts.length; i < l; i ++ ) {\n\n\t\t\t\tarray[ i ] = parseFloat( parts[ i ] );\n\n\t\t\t}\n\n\t\t\treturn array;\n\n\t\t}\n\n\t\tfunction parseInts( text ) {\n\n\t\t\tif ( text.length === 0 ) return [];\n\n\t\t\tvar parts = text.trim().split( /\\s+/ );\n\t\t\tvar array = new Array( parts.length );\n\n\t\t\tfor ( var i = 0, l = parts.length; i < l; i ++ ) {\n\n\t\t\t\tarray[ i ] = parseInt( parts[ i ] );\n\n\t\t\t}\n\n\t\t\treturn array;\n\n\t\t}\n\n\t\tfunction parseId( text ) {\n\n\t\t\treturn text.substring( 1 );\n\n\t\t}\n\n\t\tfunction generateId() {\n\n\t\t\treturn 'three_default_' + ( count ++ );\n\n\t\t}\n\n\t\tfunction isEmpty( object ) {\n\n\t\t\treturn Object.keys( object ).length === 0;\n\n\t\t}\n\n\t\t// asset\n\n\t\tfunction parseAsset( xml ) {\n\n\t\t\treturn {\n\t\t\t\tunit: parseAssetUnit( getElementsByTagName( xml, 'unit' )[ 0 ] ),\n\t\t\t\tupAxis: parseAssetUpAxis( getElementsByTagName( xml, 'up_axis' )[ 0 ] )\n\t\t\t};\n\n\t\t}\n\n\t\tfunction parseAssetUnit( xml ) {\n\n\t\t\treturn xml !== undefined ? parseFloat( xml.getAttribute( 'meter' ) ) : 1;\n\n\t\t}\n\n\t\tfunction parseAssetUpAxis( xml ) {\n\n\t\t\treturn xml !== undefined ? xml.textContent : 'Y_UP';\n\n\t\t}\n\n\t\t// library\n\n\t\tfunction parseLibrary( xml, libraryName, nodeName, parser ) {\n\n\t\t\tvar library = getElementsByTagName( xml, libraryName )[ 0 ];\n\n\t\t\tif ( library !== undefined ) {\n\n\t\t\t\tvar elements = getElementsByTagName( library, nodeName );\n\n\t\t\t\tfor ( var i = 0; i < elements.length; i ++ ) {\n\n\t\t\t\t\tparser( elements[ i ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction buildLibrary( data, builder ) {\n\n\t\t\tfor ( var name in data ) {\n\n\t\t\t\tvar object = data[ name ];\n\t\t\t\tobject.build = builder( data[ name ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// get\n\n\t\tfunction getBuild( data, builder ) {\n\n\t\t\tif ( data.build !== undefined ) return data.build;\n\n\t\t\tdata.build = builder( data );\n\n\t\t\treturn data.build;\n\n\t\t}\n\n\t\t// animation\n\n\t\tfunction parseAnimation( xml ) {\n\n\t\t\tvar data = {\n\t\t\t\tsources: {},\n\t\t\t\tsamplers: {},\n\t\t\t\tchannels: {}\n\t\t\t};\n\n\t\t\tfor ( var i = 0, l = xml.childNodes.length; i < l; i ++ ) {\n\n\t\t\t\tvar child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tvar id;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'source':\n\t\t\t\t\t\tid = child.getAttribute( 'id' );\n\t\t\t\t\t\tdata.sources[ id ] = parseSource( child );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'sampler':\n\t\t\t\t\t\tid = child.getAttribute( 'id' );\n\t\t\t\t\t\tdata.samplers[ id ] = parseAnimationSampler( child );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'channel':\n\t\t\t\t\t\tid = child.getAttribute( 'target' );\n\t\t\t\t\t\tdata.channels[ id ] = parseAnimationChannel( child );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tconsole.log( child );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tlibrary.animations[ xml.getAttribute( 'id' ) ] = data;\n\n\t\t}\n\n\t\tfunction parseAnimationSampler( xml ) {\n\n\t\t\tvar data = {\n\t\t\t\tinputs: {},\n\t\t\t};\n\n\t\t\tfor ( var i = 0, l = xml.childNodes.length; i < l; i ++ ) {\n\n\t\t\t\tvar child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'input':\n\t\t\t\t\t\tvar id = parseId( child.getAttribute( 'source' ) );\n\t\t\t\t\t\tvar semantic = child.getAttribute( 'semantic' );\n\t\t\t\t\t\tdata.inputs[ semantic ] = id;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction parseAnimationChannel( xml ) {\n\n\t\t\tvar data = {};\n\n\t\t\tvar target = xml.getAttribute( 'target' );\n\n\t\t\t// parsing SID Addressing Syntax\n\n\t\t\tvar parts = target.split( '/' );\n\n\t\t\tvar id = parts.shift();\n\t\t\tvar sid = parts.shift();\n\n\t\t\t// check selection syntax\n\n\t\t\tvar arraySyntax = ( sid.indexOf( '(' ) !== - 1 );\n\t\t\tvar memberSyntax = ( sid.indexOf( '.' ) !== - 1 );\n\n\t\t\tif ( memberSyntax ) {\n\n\t\t\t\t// member selection access\n\n\t\t\t\tparts = sid.split( '.' );\n\t\t\t\tsid = parts.shift();\n\t\t\t\tdata.member = parts.shift();\n\n\t\t\t} else if ( arraySyntax ) {\n\n\t\t\t\t// array-access syntax. can be used to express fields in one-dimensional vectors or two-dimensional matrices.\n\n\t\t\t\tvar indices = sid.split( '(' );\n\t\t\t\tsid = indices.shift();\n\n\t\t\t\tfor ( var i = 0; i < indices.length; i ++ ) {\n\n\t\t\t\t\tindices[ i ] = parseInt( indices[ i ].replace( /\\)/, '' ) );\n\n\t\t\t\t}\n\n\t\t\t\tdata.indices = indices;\n\n\t\t\t}\n\n\t\t\tdata.id = id;\n\t\t\tdata.sid = sid;\n\n\t\t\tdata.arraySyntax = arraySyntax;\n\t\t\tdata.memberSyntax = memberSyntax;\n\n\t\t\tdata.sampler = parseId( xml.getAttribute( 'source' ) );\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction buildAnimation( data ) {\n\n\t\t\tvar tracks = [];\n\n\t\t\tvar channels = data.channels;\n\t\t\tvar samplers = data.samplers;\n\t\t\tvar sources = data.sources;\n\n\t\t\tfor ( var target in channels ) {\n\n\t\t\t\tif ( channels.hasOwnProperty( target ) ) {\n\n\t\t\t\t\tvar channel = channels[ target ];\n\t\t\t\t\tvar sampler = samplers[ channel.sampler ];\n\n\t\t\t\t\tvar inputId = sampler.inputs.INPUT;\n\t\t\t\t\tvar outputId = sampler.inputs.OUTPUT;\n\n\t\t\t\t\tvar inputSource = sources[ inputId ];\n\t\t\t\t\tvar outputSource = sources[ outputId ];\n\n\t\t\t\t\tvar animation = buildAnimationChannel( channel, inputSource, outputSource );\n\n\t\t\t\t\tcreateKeyframeTracks( animation, tracks );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn tracks;\n\n\t\t}\n\n\t\tfunction getAnimation( id ) {\n\n\t\t\treturn getBuild( library.animations[ id ], buildAnimation );\n\n\t\t}\n\n\t\tfunction buildAnimationChannel( channel, inputSource, outputSource ) {\n\n\t\t\tvar node = library.nodes[ channel.id ];\n\t\t\tvar object3D = getNode( node.id );\n\n\t\t\tvar transform = node.transforms[ channel.sid ];\n\t\t\tvar defaultMatrix = node.matrix.clone().transpose();\n\n\t\t\tvar time, stride;\n\t\t\tvar i, il, j, jl;\n\n\t\t\tvar data = {};\n\n\t\t\t// the collada spec allows the animation of data in various ways.\n\t\t\t// depending on the transform type (matrix, translate, rotate, scale), we execute different logic\n\n\t\t\tswitch ( transform ) {\n\n\t\t\t\tcase 'matrix':\n\n\t\t\t\t\tfor ( i = 0, il = inputSource.array.length; i < il; i ++ ) {\n\n\t\t\t\t\t\ttime = inputSource.array[ i ];\n\t\t\t\t\t\tstride = i * outputSource.stride;\n\n\t\t\t\t\t\tif ( data[ time ] === undefined ) data[ time ] = {};\n\n\t\t\t\t\t\tif ( channel.arraySyntax === true ) {\n\n\t\t\t\t\t\t\tvar value = outputSource.array[ stride ];\n\t\t\t\t\t\t\tvar index = channel.indices[ 0 ] + 4 * channel.indices[ 1 ];\n\n\t\t\t\t\t\t\tdata[ time ][ index ] = value;\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tfor ( j = 0, jl = outputSource.stride; j < jl; j ++ ) {\n\n\t\t\t\t\t\t\t\tdata[ time ][ j ] = outputSource.array[ stride + j ];\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\tbreak;\n\n\t\t\t\tcase 'translate':\n\t\t\t\t\tconsole.warn( 'THREE.ColladaLoader: Animation transform type \"%s\" not yet implemented.', transform );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'rotate':\n\t\t\t\t\tconsole.warn( 'THREE.ColladaLoader: Animation transform type \"%s\" not yet implemented.', transform );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'scale':\n\t\t\t\t\tconsole.warn( 'THREE.ColladaLoader: Animation transform type \"%s\" not yet implemented.', transform );\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tvar keyframes = prepareAnimationData( data, defaultMatrix );\n\n\t\t\tvar animation = {\n\t\t\t\tname: object3D.uuid,\n\t\t\t\tkeyframes: keyframes\n\t\t\t};\n\n\t\t\treturn animation;\n\n\t\t}\n\n\t\tfunction prepareAnimationData( data, defaultMatrix ) {\n\n\t\t\tvar keyframes = [];\n\n\t\t\t// transfer data into a sortable array\n\n\t\t\tfor ( var time in data ) {\n\n\t\t\t\tkeyframes.push( { time: parseFloat( time ), value: data[ time ] } );\n\n\t\t\t}\n\n\t\t\t// ensure keyframes are sorted by time\n\n\t\t\tkeyframes.sort( ascending );\n\n\t\t\t// now we clean up all animation data, so we can use them for keyframe tracks\n\n\t\t\tfor ( var i = 0; i < 16; i ++ ) {\n\n\t\t\t\ttransformAnimationData( keyframes, i, defaultMatrix.elements[ i ] );\n\n\t\t\t}\n\n\t\t\treturn keyframes;\n\n\t\t\t// array sort function\n\n\t\t\tfunction ascending( a, b ) {\n\n\t\t\t\treturn a.time - b.time;\n\n\t\t\t}\n\n\t\t}\n\n\t\tvar position = new THREE.Vector3();\n\t\tvar scale = new THREE.Vector3();\n\t\tvar quaternion = new THREE.Quaternion();\n\n\t\tfunction createKeyframeTracks( animation, tracks ) {\n\n\t\t\tvar keyframes = animation.keyframes;\n\t\t\tvar name = animation.name;\n\n\t\t\tvar times = [];\n\t\t\tvar positionData = [];\n\t\t\tvar quaternionData = [];\n\t\t\tvar scaleData = [];\n\n\t\t\tfor ( var i = 0, l = keyframes.length; i < l; i ++ ) {\n\n\t\t\t\tvar keyframe = keyframes[ i ];\n\n\t\t\t\tvar time = keyframe.time;\n\t\t\t\tvar value = keyframe.value;\n\n\t\t\t\tmatrix.fromArray( value ).transpose();\n\t\t\t\tmatrix.decompose( position, quaternion, scale );\n\n\t\t\t\ttimes.push( time );\n\t\t\t\tpositionData.push( position.x, position.y, position.z );\n\t\t\t\tquaternionData.push( quaternion.x, quaternion.y, quaternion.z, quaternion.w );\n\t\t\t\tscaleData.push( scale.x, scale.y, scale.z );\n\n\t\t\t}\n\n\t\t\tif ( positionData.length > 0 ) tracks.push( new THREE.VectorKeyframeTrack( name + '.position', times, positionData ) );\n\t\t\tif ( quaternionData.length > 0 ) tracks.push( new THREE.QuaternionKeyframeTrack( name + '.quaternion', times, quaternionData ) );\n\t\t\tif ( scaleData.length > 0 ) tracks.push( new THREE.VectorKeyframeTrack( name + '.scale', times, scaleData ) );\n\n\t\t\treturn tracks;\n\n\t\t}\n\n\t\tfunction transformAnimationData( keyframes, property, defaultValue ) {\n\n\t\t\tvar keyframe;\n\n\t\t\tvar empty = true;\n\t\t\tvar i, l;\n\n\t\t\t// check, if values of a property are missing in our keyframes\n\n\t\t\tfor ( i = 0, l = keyframes.length; i < l; i ++ ) {\n\n\t\t\t\tkeyframe = keyframes[ i ];\n\n\t\t\t\tif ( keyframe.value[ property ] === undefined ) {\n\n\t\t\t\t\tkeyframe.value[ property ] = null; // mark as missing\n\n\t\t\t\t} else {\n\n\t\t\t\t\tempty = false;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( empty === true ) {\n\n\t\t\t\t// no values at all, so we set a default value\n\n\t\t\t\tfor ( i = 0, l = keyframes.length; i < l; i ++ ) {\n\n\t\t\t\t\tkeyframe = keyframes[ i ];\n\n\t\t\t\t\tkeyframe.value[ property ] = defaultValue;\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// filling gaps\n\n\t\t\t\tcreateMissingKeyframes( keyframes, property );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction createMissingKeyframes( keyframes, property ) {\n\n\t\t\tvar prev, next;\n\n\t\t\tfor ( var i = 0, l = keyframes.length; i < l; i ++ ) {\n\n\t\t\t\tvar keyframe = keyframes[ i ];\n\n\t\t\t\tif ( keyframe.value[ property ] === null ) {\n\n\t\t\t\t\tprev = getPrev( keyframes, i, property );\n\t\t\t\t\tnext = getNext( keyframes, i, property );\n\n\t\t\t\t\tif ( prev === null ) {\n\n\t\t\t\t\t\tkeyframe.value[ property ] = next.value[ property ];\n\t\t\t\t\t\tcontinue;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( next === null ) {\n\n\t\t\t\t\t\tkeyframe.value[ property ] = prev.value[ property ];\n\t\t\t\t\t\tcontinue;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tinterpolate( keyframe, prev, next, property );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction getPrev( keyframes, i, property ) {\n\n\t\t\twhile ( i >= 0 ) {\n\n\t\t\t\tvar keyframe = keyframes[ i ];\n\n\t\t\t\tif ( keyframe.value[ property ] !== null ) return keyframe;\n\n\t\t\t\ti --;\n\n\t\t\t}\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\tfunction getNext( keyframes, i, property ) {\n\n\t\t\twhile ( i < keyframes.length ) {\n\n\t\t\t\tvar keyframe = keyframes[ i ];\n\n\t\t\t\tif ( keyframe.value[ property ] !== null ) return keyframe;\n\n\t\t\t\ti ++;\n\n\t\t\t}\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\tfunction interpolate( key, prev, next, property ) {\n\n\t\t\tif ( ( next.time - prev.time ) === 0 ) {\n\n\t\t\t\tkey.value[ property ] = prev.value[ property ];\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tkey.value[ property ] = ( ( key.time - prev.time ) * ( next.value[ property ] - prev.value[ property ] ) / ( next.time - prev.time ) ) + prev.value[ property ];\n\n\t\t}\n\n\t\t// animation clips\n\n\t\tfunction parseAnimationClip( xml ) {\n\n\t\t\tvar data = {\n\t\t\t\tname: xml.getAttribute( 'id' ) || 'default',\n\t\t\t\tstart: parseFloat( xml.getAttribute( 'start' ) || 0 ),\n\t\t\t\tend: parseFloat( xml.getAttribute( 'end' ) || 0 ),\n\t\t\t\tanimations: []\n\t\t\t};\n\n\t\t\tfor ( var i = 0, l = xml.childNodes.length; i < l; i ++ ) {\n\n\t\t\t\tvar child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'instance_animation':\n\t\t\t\t\t\tdata.animations.push( parseId( child.getAttribute( 'url' ) ) );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tlibrary.clips[ xml.getAttribute( 'id' ) ] = data;\n\n\t\t}\n\n\t\tfunction buildAnimationClip( data ) {\n\n\t\t\tvar tracks = [];\n\n\t\t\tvar name = data.name;\n\t\t\tvar duration = ( data.end - data.start ) || - 1;\n\t\t\tvar animations = data.animations;\n\n\t\t\tfor ( var i = 0, il = animations.length; i < il; i ++ ) {\n\n\t\t\t\tvar animationTracks = getAnimation( animations[ i ] );\n\n\t\t\t\tfor ( var j = 0, jl = animationTracks.length; j < jl; j ++ ) {\n\n\t\t\t\t\ttracks.push( animationTracks[ j ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn new THREE.AnimationClip( name, duration, tracks );\n\n\t\t}\n\n\t\tfunction getAnimationClip( id ) {\n\n\t\t\treturn getBuild( library.clips[ id ], buildAnimationClip );\n\n\t\t}\n\n\t\t// controller\n\n\t\tfunction parseController( xml ) {\n\n\t\t\tvar data = {};\n\n\t\t\tfor ( var i = 0, l = xml.childNodes.length; i < l; i ++ ) {\n\n\t\t\t\tvar child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'skin':\n\t\t\t\t\t\t// there is exactly one skin per controller\n\t\t\t\t\t\tdata.id = parseId( child.getAttribute( 'source' ) );\n\t\t\t\t\t\tdata.skin = parseSkin( child );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'morph':\n\t\t\t\t\t\tdata.id = parseId( child.getAttribute( 'source' ) );\n\t\t\t\t\t\tconsole.warn( 'THREE.ColladaLoader: Morph target animation not supported yet.' );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tlibrary.controllers[ xml.getAttribute( 'id' ) ] = data;\n\n\t\t}\n\n\t\tfunction parseSkin( xml ) {\n\n\t\t\tvar data = {\n\t\t\t\tsources: {}\n\t\t\t};\n\n\t\t\tfor ( var i = 0, l = xml.childNodes.length; i < l; i ++ ) {\n\n\t\t\t\tvar child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'bind_shape_matrix':\n\t\t\t\t\t\tdata.bindShapeMatrix = parseFloats( child.textContent );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'source':\n\t\t\t\t\t\tvar id = child.getAttribute( 'id' );\n\t\t\t\t\t\tdata.sources[ id ] = parseSource( child );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'joints':\n\t\t\t\t\t\tdata.joints = parseJoints( child );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'vertex_weights':\n\t\t\t\t\t\tdata.vertexWeights = parseVertexWeights( child );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction parseJoints( xml ) {\n\n\t\t\tvar data = {\n\t\t\t\tinputs: {}\n\t\t\t};\n\n\t\t\tfor ( var i = 0, l = xml.childNodes.length; i < l; i ++ ) {\n\n\t\t\t\tvar child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'input':\n\t\t\t\t\t\tvar semantic = child.getAttribute( 'semantic' );\n\t\t\t\t\t\tvar id = parseId( child.getAttribute( 'source' ) );\n\t\t\t\t\t\tdata.inputs[ semantic ] = id;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction parseVertexWeights( xml ) {\n\n\t\t\tvar data = {\n\t\t\t\tinputs: {}\n\t\t\t};\n\n\t\t\tfor ( var i = 0, l = xml.childNodes.length; i < l; i ++ ) {\n\n\t\t\t\tvar child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'input':\n\t\t\t\t\t\tvar semantic = child.getAttribute( 'semantic' );\n\t\t\t\t\t\tvar id = parseId( child.getAttribute( 'source' ) );\n\t\t\t\t\t\tvar offset = parseInt( child.getAttribute( 'offset' ) );\n\t\t\t\t\t\tdata.inputs[ semantic ] = { id: id, offset: offset };\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'vcount':\n\t\t\t\t\t\tdata.vcount = parseInts( child.textContent );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'v':\n\t\t\t\t\t\tdata.v = parseInts( child.textContent );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction buildController( data ) {\n\n\t\t\tvar build = {\n\t\t\t\tid: data.id\n\t\t\t};\n\n\t\t\tvar geometry = library.geometries[ build.id ];\n\n\t\t\tif ( data.skin !== undefined ) {\n\n\t\t\t\tbuild.skin = buildSkin( data.skin );\n\n\t\t\t\t// we enhance the 'sources' property of the corresponding geometry with our skin data\n\n\t\t\t\tgeometry.sources.skinIndices = build.skin.indices;\n\t\t\t\tgeometry.sources.skinWeights = build.skin.weights;\n\n\t\t\t}\n\n\t\t\treturn build;\n\n\t\t}\n\n\t\tfunction buildSkin( data ) {\n\n\t\t\tvar BONE_LIMIT = 4;\n\n\t\t\tvar build = {\n\t\t\t\tjoints: [], // this must be an array to preserve the joint order\n\t\t\t\tindices: {\n\t\t\t\t\tarray: [],\n\t\t\t\t\tstride: BONE_LIMIT\n\t\t\t\t},\n\t\t\t\tweights: {\n\t\t\t\t\tarray: [],\n\t\t\t\t\tstride: BONE_LIMIT\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tvar sources = data.sources;\n\t\t\tvar vertexWeights = data.vertexWeights;\n\n\t\t\tvar vcount = vertexWeights.vcount;\n\t\t\tvar v = vertexWeights.v;\n\t\t\tvar jointOffset = vertexWeights.inputs.JOINT.offset;\n\t\t\tvar weightOffset = vertexWeights.inputs.WEIGHT.offset;\n\n\t\t\tvar jointSource = data.sources[ data.joints.inputs.JOINT ];\n\t\t\tvar inverseSource = data.sources[ data.joints.inputs.INV_BIND_MATRIX ];\n\n\t\t\tvar weights = sources[ vertexWeights.inputs.WEIGHT.id ].array;\n\t\t\tvar stride = 0;\n\n\t\t\tvar i, j, l;\n\n\t\t\t// procces skin data for each vertex\n\n\t\t\tfor ( i = 0, l = vcount.length; i < l; i ++ ) {\n\n\t\t\t\tvar jointCount = vcount[ i ]; // this is the amount of joints that affect a single vertex\n\t\t\t\tvar vertexSkinData = [];\n\n\t\t\t\tfor ( j = 0; j < jointCount; j ++ ) {\n\n\t\t\t\t\tvar skinIndex = v[ stride + jointOffset ];\n\t\t\t\t\tvar weightId = v[ stride + weightOffset ];\n\t\t\t\t\tvar skinWeight = weights[ weightId ];\n\n\t\t\t\t\tvertexSkinData.push( { index: skinIndex, weight: skinWeight } );\n\n\t\t\t\t\tstride += 2;\n\n\t\t\t\t}\n\n\t\t\t\t// we sort the joints in descending order based on the weights.\n\t\t\t\t// this ensures, we only procced the most important joints of the vertex\n\n\t\t\t\tvertexSkinData.sort( descending );\n\n\t\t\t\t// now we provide for each vertex a set of four index and weight values.\n\t\t\t\t// the order of the skin data matches the order of vertices\n\n\t\t\t\tfor ( j = 0; j < BONE_LIMIT; j ++ ) {\n\n\t\t\t\t\tvar d = vertexSkinData[ j ];\n\n\t\t\t\t\tif ( d !== undefined ) {\n\n\t\t\t\t\t\tbuild.indices.array.push( d.index );\n\t\t\t\t\t\tbuild.weights.array.push( d.weight );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tbuild.indices.array.push( 0 );\n\t\t\t\t\t\tbuild.weights.array.push( 0 );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// setup bind matrix\n\n\t\t\tbuild.bindMatrix = new THREE.Matrix4().fromArray( data.bindShapeMatrix ).transpose();\n\n\t\t\t// process bones and inverse bind matrix data\n\n\t\t\tfor ( i = 0, l = jointSource.array.length; i < l; i ++ ) {\n\n\t\t\t\tvar name = jointSource.array[ i ];\n\t\t\t\tvar boneInverse = new THREE.Matrix4().fromArray( inverseSource.array, i * inverseSource.stride ).transpose();\n\n\t\t\t\tbuild.joints.push( { name: name, boneInverse: boneInverse } );\n\n\t\t\t}\n\n\t\t\treturn build;\n\n\t\t\t// array sort function\n\n\t\t\tfunction descending( a, b ) {\n\n\t\t\t\treturn b.weight - a.weight;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction getController( id ) {\n\n\t\t\treturn getBuild( library.controllers[ id ], buildController );\n\n\t\t}\n\n\t\t// image\n\n\t\tfunction parseImage( xml ) {\n\n\t\t\tvar data = {\n\t\t\t\tinit_from: getElementsByTagName( xml, 'init_from' )[ 0 ].textContent\n\t\t\t};\n\n\t\t\tlibrary.images[ xml.getAttribute( 'id' ) ] = data;\n\n\t\t}\n\n\t\tfunction buildImage( data ) {\n\n\t\t\tif ( data.build !== undefined ) return data.build;\n\n\t\t\treturn data.init_from;\n\n\t\t}\n\n\t\tfunction getImage( id ) {\n\n\t\t\treturn getBuild( library.images[ id ], buildImage );\n\n\t\t}\n\n\t\t// effect\n\n\t\tfunction parseEffect( xml ) {\n\n\t\t\tvar data = {};\n\n\t\t\tfor ( var i = 0, l = xml.childNodes.length; i < l; i ++ ) {\n\n\t\t\t\tvar child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'profile_COMMON':\n\t\t\t\t\t\tdata.profile = parseEffectProfileCOMMON( child );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tlibrary.effects[ xml.getAttribute( 'id' ) ] = data;\n\n\t\t}\n\n\t\tfunction parseEffectProfileCOMMON( xml ) {\n\n\t\t\tvar data = {\n\t\t\t\tsurfaces: {},\n\t\t\t\tsamplers: {}\n\t\t\t};\n\n\t\t\tfor ( var i = 0, l = xml.childNodes.length; i < l; i ++ ) {\n\n\t\t\t\tvar child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'newparam':\n\t\t\t\t\t\tparseEffectNewparam( child, data );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'technique':\n\t\t\t\t\t\tdata.technique = parseEffectTechnique( child );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction parseEffectNewparam( xml, data ) {\n\n\t\t\tvar sid = xml.getAttribute( 'sid' );\n\n\t\t\tfor ( var i = 0, l = xml.childNodes.length; i < l; i ++ ) {\n\n\t\t\t\tvar child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'surface':\n\t\t\t\t\t\tdata.surfaces[ sid ] = parseEffectSurface( child );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'sampler2D':\n\t\t\t\t\t\tdata.samplers[ sid ] = parseEffectSampler( child );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction parseEffectSurface( xml ) {\n\n\t\t\tvar data = {};\n\n\t\t\tfor ( var i = 0, l = xml.childNodes.length; i < l; i ++ ) {\n\n\t\t\t\tvar child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'init_from':\n\t\t\t\t\t\tdata.init_from = child.textContent;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction parseEffectSampler( xml ) {\n\n\t\t\tvar data = {};\n\n\t\t\tfor ( var i = 0, l = xml.childNodes.length; i < l; i ++ ) {\n\n\t\t\t\tvar child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'source':\n\t\t\t\t\t\tdata.source = child.textContent;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction parseEffectTechnique( xml ) {\n\n\t\t\tvar data = {};\n\n\t\t\tfor ( var i = 0, l = xml.childNodes.length; i < l; i ++ ) {\n\n\t\t\t\tvar child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'constant':\n\t\t\t\t\tcase 'lambert':\n\t\t\t\t\tcase 'blinn':\n\t\t\t\t\tcase 'phong':\n\t\t\t\t\t\tdata.type = child.nodeName;\n\t\t\t\t\t\tdata.parameters = parseEffectParameters( child );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction parseEffectParameters( xml ) {\n\n\t\t\tvar data = {};\n\n\t\t\tfor ( var i = 0, l = xml.childNodes.length; i < l; i ++ ) {\n\n\t\t\t\tvar child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'emission':\n\t\t\t\t\tcase 'diffuse':\n\t\t\t\t\tcase 'specular':\n\t\t\t\t\tcase 'shininess':\n\t\t\t\t\tcase 'transparent':\n\t\t\t\t\tcase 'transparency':\n\t\t\t\t\t\tdata[ child.nodeName ] = parseEffectParameter( child );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction parseEffectParameter( xml ) {\n\n\t\t\tvar data = {};\n\n\t\t\tfor ( var i = 0, l = xml.childNodes.length; i < l; i ++ ) {\n\n\t\t\t\tvar child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'color':\n\t\t\t\t\t\tdata[ child.nodeName ] = parseFloats( child.textContent );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'float':\n\t\t\t\t\t\tdata[ child.nodeName ] = parseFloat( child.textContent );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'texture':\n\t\t\t\t\t\tdata[ child.nodeName ] = { id: child.getAttribute( 'texture' ), extra: parseEffectParameterTexture( child ) };\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction parseEffectParameterTexture( xml ) {\n\n\t\t\tvar data = {\n\t\t\t\ttechnique: {}\n\t\t\t};\n\n\t\t\tfor ( var i = 0, l = xml.childNodes.length; i < l; i ++ ) {\n\n\t\t\t\tvar child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'extra':\n\t\t\t\t\t\tparseEffectParameterTextureExtra( child, data );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction parseEffectParameterTextureExtra( xml, data ) {\n\n\t\t\tfor ( var i = 0, l = xml.childNodes.length; i < l; i ++ ) {\n\n\t\t\t\tvar child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'technique':\n\t\t\t\t\t\tparseEffectParameterTextureExtraTechnique( child, data );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction parseEffectParameterTextureExtraTechnique( xml, data ) {\n\n\t\t\tfor ( var i = 0, l = xml.childNodes.length; i < l; i ++ ) {\n\n\t\t\t\tvar child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'repeatU':\n\t\t\t\t\tcase 'repeatV':\n\t\t\t\t\tcase 'offsetU':\n\t\t\t\t\tcase 'offsetV':\n\t\t\t\t\t\tdata.technique[ child.nodeName ] = parseFloat( child.textContent );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'wrapU':\n\t\t\t\t\tcase 'wrapV':\n\n\t\t\t\t\t\t// some files have values for wrapU/wrapV which become NaN via parseInt\n\n\t\t\t\t\t\tif ( child.textContent.toUpperCase() === 'TRUE' ) {\n\n\t\t\t\t\t\t\tdata.technique[ child.nodeName ] = 1;\n\n\t\t\t\t\t\t} else if ( child.textContent.toUpperCase() === 'FALSE' ) {\n\n\t\t\t\t\t\t\tdata.technique[ child.nodeName ] = 0;\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tdata.technique[ child.nodeName ] = parseInt( child.textContent );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction buildEffect( data ) {\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction getEffect( id ) {\n\n\t\t\treturn getBuild( library.effects[ id ], buildEffect );\n\n\t\t}\n\n\t\t// material\n\n\t\tfunction parseMaterial( xml ) {\n\n\t\t\tvar data = {\n\t\t\t\tname: xml.getAttribute( 'name' )\n\t\t\t};\n\n\t\t\tfor ( var i = 0, l = xml.childNodes.length; i < l; i ++ ) {\n\n\t\t\t\tvar child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'instance_effect':\n\t\t\t\t\t\tdata.url = parseId( child.getAttribute( 'url' ) );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tlibrary.materials[ xml.getAttribute( 'id' ) ] = data;\n\n\t\t}\n\n\t\tfunction buildMaterial( data ) {\n\n\t\t\tvar effect = getEffect( data.url );\n\t\t\tvar technique = effect.profile.technique;\n\n\t\t\tvar material;\n\n\t\t\tswitch ( technique.type ) {\n\n\t\t\t\tcase 'phong':\n\t\t\t\tcase 'blinn':\n\t\t\t\t\tmaterial = new THREE.MeshPhongMaterial();\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'lambert':\n\t\t\t\t\tmaterial = new THREE.MeshLambertMaterial();\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\tmaterial = new THREE.MeshBasicMaterial();\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tmaterial.name = data.name;\n\n\t\t\tfunction getTexture( textureObject ) {\n\n\t\t\t\tvar sampler = effect.profile.samplers[ textureObject.id ];\n\n\t\t\t\tif ( sampler !== undefined ) {\n\n\t\t\t\t\tvar surface = effect.profile.surfaces[ sampler.source ];\n\n\t\t\t\t\tvar texture = textureLoader.load( getImage( surface.init_from ) );\n\n\t\t\t\t\tvar extra = textureObject.extra;\n\n\t\t\t\t\tif ( extra !== undefined && extra.technique !== undefined && isEmpty( extra.technique ) === false ) {\n\n\t\t\t\t\t\tvar technique = extra.technique;\n\n\t\t\t\t\t\ttexture.wrapS = technique.wrapU ? THREE.RepeatWrapping : THREE.ClampToEdgeWrapping;\n\t\t\t\t\t\ttexture.wrapT = technique.wrapV ? THREE.RepeatWrapping : THREE.ClampToEdgeWrapping;\n\n\t\t\t\t\t\ttexture.offset.set( technique.offsetU || 0, technique.offsetV || 0 );\n\t\t\t\t\t\ttexture.repeat.set( technique.repeatU || 1, technique.repeatV || 1 );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\ttexture.wrapS = THREE.RepeatWrapping;\n\t\t\t\t\t\ttexture.wrapT = THREE.RepeatWrapping;\n\n\t\t\t\t\t}\n\n\t\t\t\t\treturn texture;\n\n\t\t\t\t}\n\n\t\t\t\tconsole.error( 'THREE.ColladaLoader: Undefined sampler', textureObject.id );\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t\tvar parameters = technique.parameters;\n\n\t\t\tfor ( var key in parameters ) {\n\n\t\t\t\tvar parameter = parameters[ key ];\n\n\t\t\t\tswitch ( key ) {\n\n\t\t\t\t\tcase 'diffuse':\n\t\t\t\t\t\tif ( parameter.color ) material.color.fromArray( parameter.color );\n\t\t\t\t\t\tif ( parameter.texture ) material.map = getTexture( parameter.texture );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'specular':\n\t\t\t\t\t\tif ( parameter.color && material.specular ) material.specular.fromArray( parameter.color );\n\t\t\t\t\t\tif ( parameter.texture ) material.specularMap = getTexture( parameter.texture );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'shininess':\n\t\t\t\t\t\tif ( parameter.float && material.shininess )\n\t\t\t\t\t\t\tmaterial.shininess = parameter.float;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'emission':\n\t\t\t\t\t\tif ( parameter.color && material.emissive )\n\t\t\t\t\t\t\tmaterial.emissive.fromArray( parameter.color );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'transparent':\n\t\t\t\t\t\t// if ( parameter.texture ) material.alphaMap = getTexture( parameter.texture );\n\t\t\t\t\t\tmaterial.transparent = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'transparency':\n\t\t\t\t\t\tif ( parameter.float !== undefined ) material.opacity = parameter.float;\n\t\t\t\t\t\tmaterial.transparent = true;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn material;\n\n\t\t}\n\n\t\tfunction getMaterial( id ) {\n\n\t\t\treturn getBuild( library.materials[ id ], buildMaterial );\n\n\t\t}\n\n\t\t// camera\n\n\t\tfunction parseCamera( xml ) {\n\n\t\t\tvar data = {\n\t\t\t\tname: xml.getAttribute( 'name' )\n\t\t\t};\n\n\t\t\tfor ( var i = 0, l = xml.childNodes.length; i < l; i ++ ) {\n\n\t\t\t\tvar child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'optics':\n\t\t\t\t\t\tdata.optics = parseCameraOptics( child );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tlibrary.cameras[ xml.getAttribute( 'id' ) ] = data;\n\n\t\t}\n\n\t\tfunction parseCameraOptics( xml ) {\n\n\t\t\tfor ( var i = 0; i < xml.childNodes.length; i ++ ) {\n\n\t\t\t\tvar child = xml.childNodes[ i ];\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'technique_common':\n\t\t\t\t\t\treturn parseCameraTechnique( child );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn {};\n\n\t\t}\n\n\t\tfunction parseCameraTechnique( xml ) {\n\n\t\t\tvar data = {};\n\n\t\t\tfor ( var i = 0; i < xml.childNodes.length; i ++ ) {\n\n\t\t\t\tvar child = xml.childNodes[ i ];\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'perspective':\n\t\t\t\t\tcase 'orthographic':\n\n\t\t\t\t\t\tdata.technique = child.nodeName;\n\t\t\t\t\t\tdata.parameters = parseCameraParameters( child );\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction parseCameraParameters( xml ) {\n\n\t\t\tvar data = {};\n\n\t\t\tfor ( var i = 0; i < xml.childNodes.length; i ++ ) {\n\n\t\t\t\tvar child = xml.childNodes[ i ];\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'xfov':\n\t\t\t\t\tcase 'yfov':\n\t\t\t\t\tcase 'xmag':\n\t\t\t\t\tcase 'ymag':\n\t\t\t\t\tcase 'znear':\n\t\t\t\t\tcase 'zfar':\n\t\t\t\t\tcase 'aspect_ratio':\n\t\t\t\t\t\tdata[ child.nodeName ] = parseFloat( child.textContent );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction buildCamera( data ) {\n\n\t\t\tvar camera;\n\n\t\t\tswitch ( data.optics.technique ) {\n\n\t\t\t\tcase 'perspective':\n\t\t\t\t\tcamera = new THREE.PerspectiveCamera(\n\t\t\t\t\t\tdata.optics.parameters.yfov,\n\t\t\t\t\t\tdata.optics.parameters.aspect_ratio,\n\t\t\t\t\t\tdata.optics.parameters.znear,\n\t\t\t\t\t\tdata.optics.parameters.zfar\n\t\t\t\t\t);\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'orthographic':\n\t\t\t\t\tvar ymag = data.optics.parameters.ymag;\n\t\t\t\t\tvar xmag = data.optics.parameters.xmag;\n\t\t\t\t\tvar aspectRatio = data.optics.parameters.aspect_ratio;\n\n\t\t\t\t\txmag = ( xmag === undefined ) ? ( ymag * aspectRatio ) : xmag;\n\t\t\t\t\tymag = ( ymag === undefined ) ? ( xmag / aspectRatio ) : ymag;\n\n\t\t\t\t\txmag *= 0.5;\n\t\t\t\t\tymag *= 0.5;\n\n\t\t\t\t\tcamera = new THREE.OrthographicCamera(\n\t\t\t\t\t\t- xmag, xmag, ymag, - ymag, // left, right, top, bottom\n\t\t\t\t\t\tdata.optics.parameters.znear,\n\t\t\t\t\t\tdata.optics.parameters.zfar\n\t\t\t\t\t);\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\tcamera = new THREE.PerspectiveCamera();\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tcamera.name = data.name;\n\n\t\t\treturn camera;\n\n\t\t}\n\n\t\tfunction getCamera( id ) {\n\n\t\t\treturn getBuild( library.cameras[ id ], buildCamera );\n\n\t\t}\n\n\t\t// light\n\n\t\tfunction parseLight( xml ) {\n\n\t\t\tvar data = {};\n\n\t\t\tfor ( var i = 0, l = xml.childNodes.length; i < l; i ++ ) {\n\n\t\t\t\tvar child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'technique_common':\n\t\t\t\t\t\tdata = parseLightTechnique( child );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tlibrary.lights[ xml.getAttribute( 'id' ) ] = data;\n\n\t\t}\n\n\t\tfunction parseLightTechnique( xml ) {\n\n\t\t\tvar data = {};\n\n\t\t\tfor ( var i = 0, l = xml.childNodes.length; i < l; i ++ ) {\n\n\t\t\t\tvar child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'directional':\n\t\t\t\t\tcase 'point':\n\t\t\t\t\tcase 'spot':\n\t\t\t\t\tcase 'ambient':\n\n\t\t\t\t\t\tdata.technique = child.nodeName;\n\t\t\t\t\t\tdata.parameters = parseLightParameters( child );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction parseLightParameters( xml ) {\n\n\t\t\tvar data = {};\n\n\t\t\tfor ( var i = 0, l = xml.childNodes.length; i < l; i ++ ) {\n\n\t\t\t\tvar child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'color':\n\t\t\t\t\t\tvar array = parseFloats( child.textContent );\n\t\t\t\t\t\tdata.color = new THREE.Color().fromArray( array );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'falloff_angle':\n\t\t\t\t\t\tdata.falloffAngle = parseFloat( child.textContent );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'quadratic_attenuation':\n\t\t\t\t\t\tvar f = parseFloat( child.textContent );\n\t\t\t\t\t\tdata.distance = f ? Math.sqrt( 1 / f ) : 0;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction buildLight( data ) {\n\n\t\t\tvar light;\n\n\t\t\tswitch ( data.technique ) {\n\n\t\t\t\tcase 'directional':\n\t\t\t\t\tlight = new THREE.DirectionalLight();\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'point':\n\t\t\t\t\tlight = new THREE.PointLight();\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'spot':\n\t\t\t\t\tlight = new THREE.SpotLight();\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'ambient':\n\t\t\t\t\tlight = new THREE.AmbientLight();\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tif ( data.parameters.color ) light.color.copy( data.parameters.color );\n\t\t\tif ( data.parameters.distance ) light.distance = data.parameters.distance;\n\n\t\t\treturn light;\n\n\t\t}\n\n\t\tfunction getLight( id ) {\n\n\t\t\treturn getBuild( library.lights[ id ], buildLight );\n\n\t\t}\n\n\t\t// geometry\n\n\t\tfunction parseGeometry( xml ) {\n\n\t\t\tvar data = {\n\t\t\t\tname: xml.getAttribute( 'name' ),\n\t\t\t\tsources: {},\n\t\t\t\tvertices: {},\n\t\t\t\tprimitives: []\n\t\t\t};\n\n\t\t\tvar mesh = getElementsByTagName( xml, 'mesh' )[ 0 ];\n\n\t\t\tfor ( var i = 0; i < mesh.childNodes.length; i ++ ) {\n\n\t\t\t\tvar child = mesh.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tvar id = child.getAttribute( 'id' );\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'source':\n\t\t\t\t\t\tdata.sources[ id ] = parseSource( child );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'vertices':\n\t\t\t\t\t\t// data.sources[ id ] = data.sources[ parseId( getElementsByTagName( child, 'input' )[ 0 ].getAttribute( 'source' ) ) ];\n\t\t\t\t\t\tdata.vertices = parseGeometryVertices( child );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'polygons':\n\t\t\t\t\t\tconsole.warn( 'THREE.ColladaLoader: Unsupported primitive type: ', child.nodeName );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'lines':\n\t\t\t\t\tcase 'linestrips':\n\t\t\t\t\tcase 'polylist':\n\t\t\t\t\tcase 'triangles':\n\t\t\t\t\t\tdata.primitives.push( parseGeometryPrimitive( child ) );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tconsole.log( child );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tlibrary.geometries[ xml.getAttribute( 'id' ) ] = data;\n\n\t\t}\n\n\t\tfunction parseSource( xml ) {\n\n\t\t\tvar data = {\n\t\t\t\tarray: [],\n\t\t\t\tstride: 3\n\t\t\t};\n\n\t\t\tfor ( var i = 0; i < xml.childNodes.length; i ++ ) {\n\n\t\t\t\tvar child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'float_array':\n\t\t\t\t\t\tdata.array = parseFloats( child.textContent );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'Name_array':\n\t\t\t\t\t\tdata.array = parseStrings( child.textContent );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'technique_common':\n\t\t\t\t\t\tvar accessor = getElementsByTagName( child, 'accessor' )[ 0 ];\n\n\t\t\t\t\t\tif ( accessor !== undefined ) {\n\n\t\t\t\t\t\t\tdata.stride = parseInt( accessor.getAttribute( 'stride' ) );\n\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction parseGeometryVertices( xml ) {\n\n\t\t\tvar data = {};\n\n\t\t\tfor ( var i = 0; i < xml.childNodes.length; i ++ ) {\n\n\t\t\t\tvar child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tdata[ child.getAttribute( 'semantic' ) ] = parseId( child.getAttribute( 'source' ) );\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction parseGeometryPrimitive( xml ) {\n\n\t\t\tvar primitive = {\n\t\t\t\ttype: xml.nodeName,\n\t\t\t\tmaterial: xml.getAttribute( 'material' ),\n\t\t\t\tcount: parseInt( xml.getAttribute( 'count' ) ),\n\t\t\t\tinputs: {},\n\t\t\t\tstride: 0\n\t\t\t};\n\n\t\t\tfor ( var i = 0, l = xml.childNodes.length; i < l; i ++ ) {\n\n\t\t\t\tvar child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'input':\n\t\t\t\t\t\tvar id = parseId( child.getAttribute( 'source' ) );\n\t\t\t\t\t\tvar semantic = child.getAttribute( 'semantic' );\n\t\t\t\t\t\tvar offset = parseInt( child.getAttribute( 'offset' ) );\n\t\t\t\t\t\tprimitive.inputs[ semantic ] = { id: id, offset: offset };\n\t\t\t\t\t\tprimitive.stride = Math.max( primitive.stride, offset + 1 );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'vcount':\n\t\t\t\t\t\tprimitive.vcount = parseInts( child.textContent );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'p':\n\t\t\t\t\t\tprimitive.p = parseInts( child.textContent );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn primitive;\n\n\t\t}\n\n\t\tfunction groupPrimitives( primitives ) {\n\n\t\t\tvar build = {};\n\n\t\t\tfor ( var i = 0; i < primitives.length; i ++ ) {\n\n\t\t\t\tvar primitive = primitives[ i ];\n\n\t\t\t\tif ( build[ primitive.type ] === undefined ) build[ primitive.type ] = [];\n\n\t\t\t\tbuild[ primitive.type ].push( primitive );\n\n\t\t\t}\n\n\t\t\treturn build;\n\n\t\t}\n\n\t\tfunction buildGeometry( data ) {\n\n\t\t\tvar build = {};\n\n\t\t\tvar sources = data.sources;\n\t\t\tvar vertices = data.vertices;\n\t\t\tvar primitives = data.primitives;\n\n\t\t\tif ( primitives.length === 0 ) return {};\n\n\t\t\t// our goal is to create one buffer geoemtry for a single type of primitives\n\t\t\t// first, we group all primitives by their type\n\n\t\t\tvar groupedPrimitives = groupPrimitives( primitives );\n\n\t\t\tfor ( var type in groupedPrimitives ) {\n\n\t\t\t\t// second, we create for each type of primitives (polylist,triangles or lines) a buffer geometry\n\n\t\t\t\tbuild[ type ] = buildGeometryType( groupedPrimitives[ type ], sources, vertices );\n\n\t\t\t}\n\n\t\t\treturn build;\n\n\t\t}\n\n\t\tfunction buildGeometryType( primitives, sources, vertices ) {\n\n\t\t\tvar build = {};\n\n\t\t\tvar position = { array: [], stride: 0 };\n\t\t\tvar normal = { array: [], stride: 0 };\n\t\t\tvar uv = { array: [], stride: 0 };\n\t\t\tvar color = { array: [], stride: 0 };\n\n\t\t\tvar skinIndex = { array: [], stride: 4 };\n\t\t\tvar skinWeight = { array: [], stride: 4 };\n\n\t\t\tvar geometry = new THREE.BufferGeometry();\n\n\t\t\tvar materialKeys = [];\n\n\t\t\tvar start = 0, count = 0;\n\n\t\t\tfor ( var p = 0; p < primitives.length; p ++ ) {\n\n\t\t\t\tvar primitive = primitives[ p ];\n\t\t\t\tvar inputs = primitive.inputs;\n\t\t\t\tvar triangleCount = 1;\n\n\t\t\t\tif ( primitive.vcount && primitive.vcount[ 0 ] === 4 ) {\n\n\t\t\t\t\ttriangleCount = 2; // one quad -> two triangles\n\n\t\t\t\t}\n\n\t\t\t\t// groups\n\n\t\t\t\tif ( primitive.type === 'lines' || primitive.type === 'linestrips' ) {\n\n\t\t\t\t\tcount = primitive.count * 2;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tcount = primitive.count * 3 * triangleCount;\n\n\t\t\t\t}\n\n\t\t\t\tgeometry.addGroup( start, count, p );\n\t\t\t\tstart += count;\n\n\t\t\t\t// material\n\n\t\t\t\tif ( primitive.material ) {\n\n\t\t\t\t\tmaterialKeys.push( primitive.material );\n\n\t\t\t\t}\n\n\t\t\t\t// geometry data\n\n\t\t\t\tfor ( var name in inputs ) {\n\n\t\t\t\t\tvar input = inputs[ name ];\n\n\t\t\t\t\tswitch ( name )\t{\n\n\t\t\t\t\t\tcase 'VERTEX':\n\t\t\t\t\t\t\tfor ( var key in vertices ) {\n\n\t\t\t\t\t\t\t\tvar id = vertices[ key ];\n\n\t\t\t\t\t\t\t\tswitch ( key ) {\n\n\t\t\t\t\t\t\t\t\tcase 'POSITION':\n\t\t\t\t\t\t\t\t\t\tbuildGeometryData( primitive, sources[ id ], input.offset, position.array );\n\t\t\t\t\t\t\t\t\t\tposition.stride = sources[ id ].stride;\n\n\t\t\t\t\t\t\t\t\t\tif ( sources.skinWeights && sources.skinIndices ) {\n\n\t\t\t\t\t\t\t\t\t\t\tbuildGeometryData( primitive, sources.skinIndices, input.offset, skinIndex.array );\n\t\t\t\t\t\t\t\t\t\t\tbuildGeometryData( primitive, sources.skinWeights, input.offset, skinWeight.array );\n\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\t\tcase 'NORMAL':\n\t\t\t\t\t\t\t\t\t\tbuildGeometryData( primitive, sources[ id ], input.offset, normal.array );\n\t\t\t\t\t\t\t\t\t\tnormal.stride = sources[ id ].stride;\n\t\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\t\tcase 'COLOR':\n\t\t\t\t\t\t\t\t\t\tbuildGeometryData( primitive, sources[ id ], input.offset, color.array );\n\t\t\t\t\t\t\t\t\t\tcolor.stride = sources[ id ].stride;\n\t\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\t\tcase 'TEXCOORD':\n\t\t\t\t\t\t\t\t\t\tbuildGeometryData( primitive, sources[ id ], input.offset, uv.array );\n\t\t\t\t\t\t\t\t\t\tuv.stride = sources[ id ].stride;\n\t\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\t\tconsole.warn( 'THREE.ColladaLoader: Semantic \"%s\" not handled in geometry build process.', key );\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'NORMAL':\n\t\t\t\t\t\t\tbuildGeometryData( primitive, sources[ input.id ], input.offset, normal.array );\n\t\t\t\t\t\t\tnormal.stride = sources[ input.id ].stride;\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'COLOR':\n\t\t\t\t\t\t\tbuildGeometryData( primitive, sources[ input.id ], input.offset, color.array );\n\t\t\t\t\t\t\tcolor.stride = sources[ input.id ].stride;\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'TEXCOORD':\n\t\t\t\t\t\t\tbuildGeometryData( primitive, sources[ input.id ], input.offset, uv.array );\n\t\t\t\t\t\t\tuv.stride = sources[ input.id ].stride;\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}\n\n\t\t\t// build geometry\n\n\t\t\tif ( position.array.length > 0 ) geometry.addAttribute( 'position', new THREE.Float32BufferAttribute( position.array, position.stride ) );\n\t\t\tif ( normal.array.length > 0 ) geometry.addAttribute( 'normal', new THREE.Float32BufferAttribute( normal.array, normal.stride ) );\n\t\t\tif ( color.array.length > 0 ) geometry.addAttribute( 'color', new THREE.Float32BufferAttribute( color.array, color.stride ) );\n\t\t\tif ( uv.array.length > 0 ) geometry.addAttribute( 'uv', new THREE.Float32BufferAttribute( uv.array, uv.stride ) );\n\n\t\t\tif ( skinIndex.array.length > 0 ) geometry.addAttribute( 'skinIndex', new THREE.Float32BufferAttribute( skinIndex.array, skinIndex.stride ) );\n\t\t\tif ( skinWeight.array.length > 0 ) geometry.addAttribute( 'skinWeight', new THREE.Float32BufferAttribute( skinWeight.array, skinWeight.stride ) );\n\n\t\t\tbuild.data = geometry;\n\t\t\tbuild.type = primitives[ 0 ].type;\n\t\t\tbuild.materialKeys = materialKeys;\n\n\t\t\treturn build;\n\n\t\t}\n\n\t\tfunction buildGeometryData( primitive, source, offset, array ) {\n\n\t\t\tvar indices = primitive.p;\n\t\t\tvar stride = primitive.stride;\n\t\t\tvar vcount = primitive.vcount;\n\n\t\t\tfunction pushVector( i ) {\n\n\t\t\t\tvar index = indices[ i + offset ] * sourceStride;\n\t\t\t\tvar length = index + sourceStride;\n\n\t\t\t\tfor ( ; index < length; index ++ ) {\n\n\t\t\t\t\tarray.push( sourceArray[ index ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tvar maxcount = 0;\n\n\t\t\tvar sourceArray = source.array;\n\t\t\tvar sourceStride = source.stride;\n\n\t\t\tif ( primitive.vcount !== undefined ) {\n\n\t\t\t\tvar index = 0;\n\n\t\t\t\tfor ( var i = 0, l = vcount.length; i < l; i ++ ) {\n\n\t\t\t\t\tvar count = vcount[ i ];\n\n\t\t\t\t\tif ( count === 4 ) {\n\n\t\t\t\t\t\tvar a = index + stride * 0;\n\t\t\t\t\t\tvar b = index + stride * 1;\n\t\t\t\t\t\tvar c = index + stride * 2;\n\t\t\t\t\t\tvar d = index + stride * 3;\n\n\t\t\t\t\t\tpushVector( a ); pushVector( b ); pushVector( d );\n\t\t\t\t\t\tpushVector( b ); pushVector( c ); pushVector( d );\n\n\t\t\t\t\t} else if ( count === 3 ) {\n\n\t\t\t\t\t\tvar a = index + stride * 0;\n\t\t\t\t\t\tvar b = index + stride * 1;\n\t\t\t\t\t\tvar c = index + stride * 2;\n\n\t\t\t\t\t\tpushVector( a ); pushVector( b ); pushVector( c );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tmaxcount = Math.max( maxcount, count );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tindex += stride * count;\n\n\t\t\t\t}\n\n\t\t\t\tif ( maxcount > 0 ) {\n\n\t\t\t\t\tconsole.log( 'THREE.ColladaLoader: Geometry has faces with more than 4 vertices.' );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tfor ( var i = 0, l = indices.length; i < l; i += stride ) {\n\n\t\t\t\t\tpushVector( i );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction getGeometry( id ) {\n\n\t\t\treturn getBuild( library.geometries[ id ], buildGeometry );\n\n\t\t}\n\n\t\t// kinematics\n\n\t\tfunction parseKinematicsModel( xml ) {\n\n\t\t\tvar data = {\n\t\t\t\tname: xml.getAttribute( 'name' ) || '',\n\t\t\t\tjoints: {},\n\t\t\t\tlinks: []\n\t\t\t};\n\n\t\t\tfor ( var i = 0; i < xml.childNodes.length; i ++ ) {\n\n\t\t\t\tvar child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'technique_common':\n\t\t\t\t\t\tparseKinematicsTechniqueCommon( child, data );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tlibrary.kinematicsModels[ xml.getAttribute( 'id' ) ] = data;\n\n\t\t}\n\n\t\tfunction buildKinematicsModel( data ) {\n\n\t\t\tif ( data.build !== undefined ) return data.build;\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction getKinematicsModel( id ) {\n\n\t\t\treturn getBuild( library.kinematicsModels[ id ], buildKinematicsModel );\n\n\t\t}\n\n\t\tfunction parseKinematicsTechniqueCommon( xml, data ) {\n\n\t\t\tfor ( var i = 0; i < xml.childNodes.length; i ++ ) {\n\n\t\t\t\tvar child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'joint':\n\t\t\t\t\t\tdata.joints[ child.getAttribute( 'sid' ) ] = parseKinematicsJoint( child );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'link':\n\t\t\t\t\t\tdata.links.push( parseKinematicsLink( child ) );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction parseKinematicsJoint( xml ) {\n\n\t\t\tvar data;\n\n\t\t\tfor ( var i = 0; i < xml.childNodes.length; i ++ ) {\n\n\t\t\t\tvar child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'prismatic':\n\t\t\t\t\tcase 'revolute':\n\t\t\t\t\t\tdata = parseKinematicsJointParameter( child );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction parseKinematicsJointParameter( xml, data ) {\n\n\t\t\tvar data = {\n\t\t\t\tsid: xml.getAttribute( 'sid' ),\n\t\t\t\tname: xml.getAttribute( 'name' ) || '',\n\t\t\t\taxis: new THREE.Vector3(),\n\t\t\t\tlimits: {\n\t\t\t\t\tmin: 0,\n\t\t\t\t\tmax: 0\n\t\t\t\t},\n\t\t\t\ttype: xml.nodeName,\n\t\t\t\tstatic: false,\n\t\t\t\tzeroPosition: 0,\n\t\t\t\tmiddlePosition: 0\n\t\t\t};\n\n\t\t\tfor ( var i = 0; i < xml.childNodes.length; i ++ ) {\n\n\t\t\t\tvar child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'axis':\n\t\t\t\t\t\tvar array = parseFloats( child.textContent );\n\t\t\t\t\t\tdata.axis.fromArray( array );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'limits':\n\t\t\t\t\t\tvar max = child.getElementsByTagName( 'max' )[ 0 ];\n\t\t\t\t\t\tvar min = child.getElementsByTagName( 'min' )[ 0 ];\n\n\t\t\t\t\t\tdata.limits.max = parseFloat( max.textContent );\n\t\t\t\t\t\tdata.limits.min = parseFloat( min.textContent );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// if min is equal to or greater than max, consider the joint static\n\n\t\t\tif ( data.limits.min >= data.limits.max ) {\n\n\t\t\t\tdata.static = true;\n\n\t\t\t}\n\n\t\t\t// calculate middle position\n\n\t\t\tdata.middlePosition = ( data.limits.min + data.limits.max ) / 2.0;\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction parseKinematicsLink( xml ) {\n\n\t\t\tvar data = {\n\t\t\t\tsid: xml.getAttribute( 'sid' ),\n\t\t\t\tname: xml.getAttribute( 'name' ) || '',\n\t\t\t\tattachments: [],\n\t\t\t\ttransforms: []\n\t\t\t};\n\n\t\t\tfor ( var i = 0; i < xml.childNodes.length; i ++ ) {\n\n\t\t\t\tvar child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'attachment_full':\n\t\t\t\t\t\tdata.attachments.push( parseKinematicsAttachment( child ) );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'matrix':\n\t\t\t\t\tcase 'translate':\n\t\t\t\t\tcase 'rotate':\n\t\t\t\t\t\tdata.transforms.push( parseKinematicsTransform( child ) );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction parseKinematicsAttachment( xml ) {\n\n\t\t\tvar data = {\n\t\t\t\tjoint: xml.getAttribute( 'joint' ).split( '/' ).pop(),\n\t\t\t\ttransforms: [],\n\t\t\t\tlinks: []\n\t\t\t};\n\n\t\t\tfor ( var i = 0; i < xml.childNodes.length; i ++ ) {\n\n\t\t\t\tvar child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'link':\n\t\t\t\t\t\tdata.links.push( parseKinematicsLink( child ) );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'matrix':\n\t\t\t\t\tcase 'translate':\n\t\t\t\t\tcase 'rotate':\n\t\t\t\t\t\tdata.transforms.push( parseKinematicsTransform( child ) );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction parseKinematicsTransform( xml ) {\n\n\t\t\tvar data = {\n\t\t\t\ttype: xml.nodeName\n\t\t\t};\n\n\t\t\tvar array = parseFloats( xml.textContent );\n\n\t\t\tswitch ( data.type ) {\n\n\t\t\t\tcase 'matrix':\n\t\t\t\t\tdata.obj = new THREE.Matrix4();\n\t\t\t\t\tdata.obj.fromArray( array ).transpose();\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'translate':\n\t\t\t\t\tdata.obj = new THREE.Vector3();\n\t\t\t\t\tdata.obj.fromArray( array );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'rotate':\n\t\t\t\t\tdata.obj = new THREE.Vector3();\n\t\t\t\t\tdata.obj.fromArray( array );\n\t\t\t\t\tdata.angle = THREE.Math.degToRad( array[ 3 ] );\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction parseKinematicsScene( xml ) {\n\n\t\t\tvar data = {\n\t\t\t\tbindJointAxis: []\n\t\t\t};\n\n\t\t\tfor ( var i = 0; i < xml.childNodes.length; i ++ ) {\n\n\t\t\t\tvar child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'bind_joint_axis':\n\t\t\t\t\t\tdata.bindJointAxis.push( parseKinematicsBindJointAxis( child ) );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tlibrary.kinematicsScenes[ parseId( xml.getAttribute( 'url' ) ) ] = data;\n\n\t\t}\n\n\t\tfunction parseKinematicsBindJointAxis( xml ) {\n\n\t\t\tvar data = {\n\t\t\t\ttarget: xml.getAttribute( 'target' ).split( '/' ).pop()\n\t\t\t};\n\n\t\t\tfor ( var i = 0; i < xml.childNodes.length; i ++ ) {\n\n\t\t\t\tvar child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'axis':\n\t\t\t\t\t\tvar param = child.getElementsByTagName( 'param' )[ 0 ];\n\t\t\t\t\t\tdata.axis = param.textContent;\n\t\t\t\t\t\tvar tmpJointIndex = data.axis.split( 'inst_' ).pop().split( 'axis' )[ 0 ];\n\t\t\t\t\t\tdata.jointIndex = tmpJointIndex.substr( 0, tmpJointIndex.length - 1 );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction buildKinematicsScene( data ) {\n\n\t\t\tif ( data.build !== undefined ) return data.build;\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction getKinematicsScene( id ) {\n\n\t\t\treturn getBuild( library.kinematicsScenes[ id ], buildKinematicsScene );\n\n\t\t}\n\n\t\tfunction setupKinematics() {\n\n\t\t\tvar kinematicsModelId = Object.keys( library.kinematicsModels )[ 0 ];\n\t\t\tvar kinematicsSceneId = Object.keys( library.kinematicsScenes )[ 0 ];\n\t\t\tvar visualSceneId = Object.keys( library.visualScenes )[ 0 ];\n\n\t\t\tif ( kinematicsModelId === undefined || kinematicsSceneId === undefined ) return;\n\n\t\t\tvar kinematicsModel = getKinematicsModel( kinematicsModelId );\n\t\t\tvar kinematicsScene = getKinematicsScene( kinematicsSceneId );\n\t\t\tvar visualScene = getVisualScene( visualSceneId );\n\n\t\t\tvar bindJointAxis = kinematicsScene.bindJointAxis;\n\t\t\tvar jointMap = {};\n\n\t\t\tfor ( var i = 0, l = bindJointAxis.length; i < l; i ++ ) {\n\n\t\t\t\tvar axis = bindJointAxis[ i ];\n\n\t\t\t\t// the result of the following query is an element of type 'translate', 'rotate','scale' or 'matrix'\n\n\t\t\t\tvar targetElement = collada.querySelector( '[sid=\"' + axis.target + '\"]' );\n\n\t\t\t\tif ( targetElement ) {\n\n\t\t\t\t\t// get the parent of the transfrom element\n\n\t\t\t\t\tvar parentVisualElement = targetElement.parentElement;\n\n\t\t\t\t\t// connect the joint of the kinematics model with the element in the visual scene\n\n\t\t\t\t\tconnect( axis.jointIndex, parentVisualElement );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tfunction connect( jointIndex, visualElement ) {\n\n\t\t\t\tvar visualElementName = visualElement.getAttribute( 'name' );\n\t\t\t\tvar joint = kinematicsModel.joints[ jointIndex ];\n\n\t\t\t\tvisualScene.traverse( function ( object ) {\n\n\t\t\t\t\tif ( object.name === visualElementName ) {\n\n\t\t\t\t\t\tjointMap[ jointIndex ] = {\n\t\t\t\t\t\t\tobject: object,\n\t\t\t\t\t\t\ttransforms: buildTransformList( visualElement ),\n\t\t\t\t\t\t\tjoint: joint,\n\t\t\t\t\t\t\tposition: joint.zeroPosition\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\tvar m0 = new THREE.Matrix4();\n\n\t\t\tkinematics = {\n\n\t\t\t\tjoints: kinematicsModel && kinematicsModel.joints,\n\n\t\t\t\tgetJointValue: function ( jointIndex ) {\n\n\t\t\t\t\tvar jointData = jointMap[ jointIndex ];\n\n\t\t\t\t\tif ( jointData ) {\n\n\t\t\t\t\t\treturn jointData.position;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tconsole.warn( 'THREE.ColladaLoader: Joint ' + jointIndex + ' doesn\\'t exist.' );\n\n\t\t\t\t\t}\n\n\t\t\t\t},\n\n\t\t\t\tsetJointValue: function ( jointIndex, value ) {\n\n\t\t\t\t\tvar jointData = jointMap[ jointIndex ];\n\n\t\t\t\t\tif ( jointData ) {\n\n\t\t\t\t\t\tvar joint = jointData.joint;\n\n\t\t\t\t\t\tif ( value > joint.limits.max || value < joint.limits.min ) {\n\n\t\t\t\t\t\t\tconsole.warn( 'THREE.ColladaLoader: Joint ' + jointIndex + ' value ' + value + ' outside of limits (min: ' + joint.limits.min + ', max: ' + joint.limits.max + ').' );\n\n\t\t\t\t\t\t} else if ( joint.static ) {\n\n\t\t\t\t\t\t\tconsole.warn( 'THREE.ColladaLoader: Joint ' + jointIndex + ' is static.' );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tvar object = jointData.object;\n\t\t\t\t\t\t\tvar axis = joint.axis;\n\t\t\t\t\t\t\tvar transforms = jointData.transforms;\n\n\t\t\t\t\t\t\tmatrix.identity();\n\n\t\t\t\t\t\t\t// each update, we have to apply all transforms in the correct order\n\n\t\t\t\t\t\t\tfor ( var i = 0; i < transforms.length; i ++ ) {\n\n\t\t\t\t\t\t\t\tvar transform = transforms[ i ];\n\n\t\t\t\t\t\t\t\t// if there is a connection of the transform node with a joint, apply the joint value\n\n\t\t\t\t\t\t\t\tif ( transform.sid && transform.sid.indexOf( jointIndex ) !== - 1 ) {\n\n\t\t\t\t\t\t\t\t\tswitch ( joint.type ) {\n\n\t\t\t\t\t\t\t\t\t\tcase 'revolute':\n\t\t\t\t\t\t\t\t\t\t\tmatrix.multiply( m0.makeRotationAxis( axis, THREE.Math.degToRad( value ) ) );\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\t\t\tcase 'prismatic':\n\t\t\t\t\t\t\t\t\t\t\tmatrix.multiply( m0.makeTranslation( axis.x * value, axis.y * value, axis.z * value ) );\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\t\t\tconsole.warn( 'THREE.ColladaLoader: Unknown joint type: ' + joint.type );\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\tswitch ( transform.type ) {\n\n\t\t\t\t\t\t\t\t\t\tcase 'matrix':\n\t\t\t\t\t\t\t\t\t\t\tmatrix.multiply( transform.obj );\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\t\t\tcase 'translate':\n\t\t\t\t\t\t\t\t\t\t\tmatrix.multiply( m0.makeTranslation( transform.obj.x, transform.obj.y, transform.obj.z ) );\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\t\t\tcase 'scale':\n\t\t\t\t\t\t\t\t\t\t\tmatrix.scale( transform.obj );\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\t\t\tcase 'rotate':\n\t\t\t\t\t\t\t\t\t\t\tmatrix.multiply( m0.makeRotationAxis( transform.obj, transform.angle ) );\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tobject.matrix.copy( matrix );\n\t\t\t\t\t\t\tobject.matrix.decompose( object.position, object.quaternion, object.scale );\n\n\t\t\t\t\t\t\tjointMap[ jointIndex ].position = value;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tconsole.log( 'THREE.ColladaLoader: ' + jointIndex + ' does not exist.' );\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 buildTransformList( node ) {\n\n\t\t\tvar transforms = [];\n\n\t\t\tvar xml = collada.querySelector( '[id=\"' + node.id + '\"]' );\n\n\t\t\tfor ( var i = 0; i < xml.childNodes.length; i ++ ) {\n\n\t\t\t\tvar child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'matrix':\n\t\t\t\t\t\tvar array = parseFloats( child.textContent );\n\t\t\t\t\t\tvar matrix = new THREE.Matrix4().fromArray( array ).transpose();\n\t\t\t\t\t\ttransforms.push( {\n\t\t\t\t\t\t\tsid: child.getAttribute( 'sid' ),\n\t\t\t\t\t\t\ttype: child.nodeName,\n\t\t\t\t\t\t\tobj: matrix\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'translate':\n\t\t\t\t\tcase 'scale':\n\t\t\t\t\t\tvar array = parseFloats( child.textContent );\n\t\t\t\t\t\tvar vector = new THREE.Vector3().fromArray( array );\n\t\t\t\t\t\ttransforms.push( {\n\t\t\t\t\t\t\tsid: child.getAttribute( 'sid' ),\n\t\t\t\t\t\t\ttype: child.nodeName,\n\t\t\t\t\t\t\tobj: vector\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'rotate':\n\t\t\t\t\t\tvar array = parseFloats( child.textContent );\n\t\t\t\t\t\tvar vector = new THREE.Vector3().fromArray( array );\n\t\t\t\t\t\tvar angle = THREE.Math.degToRad( array[ 3 ] );\n\t\t\t\t\t\ttransforms.push( {\n\t\t\t\t\t\t\tsid: child.getAttribute( 'sid' ),\n\t\t\t\t\t\t\ttype: child.nodeName,\n\t\t\t\t\t\t\tobj: vector,\n\t\t\t\t\t\t\tangle: angle\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn transforms;\n\n\t\t}\n\n\t\t// nodes\n\n\t\tfunction prepareNodes( xml ) {\n\n\t\t\tvar elements = xml.getElementsByTagName( 'node' );\n\n\t\t\t// ensure all node elements have id attributes\n\n\t\t\tfor ( var i = 0; i < elements.length; i ++ ) {\n\n\t\t\t\tvar element = elements[ i ];\n\n\t\t\t\tif ( element.hasAttribute( 'id' ) === false ) {\n\n\t\t\t\t\telement.setAttribute( 'id', generateId() );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tvar matrix = new THREE.Matrix4();\n\t\tvar vector = new THREE.Vector3();\n\n\t\tfunction parseNode( xml ) {\n\n\t\t\tvar data = {\n\t\t\t\tname: xml.getAttribute( 'name' ) || '',\n\t\t\t\ttype: xml.getAttribute( 'type' ),\n\t\t\t\tid: xml.getAttribute( 'id' ),\n\t\t\t\tsid: xml.getAttribute( 'sid' ),\n\t\t\t\tmatrix: new THREE.Matrix4(),\n\t\t\t\tnodes: [],\n\t\t\t\tinstanceCameras: [],\n\t\t\t\tinstanceControllers: [],\n\t\t\t\tinstanceLights: [],\n\t\t\t\tinstanceGeometries: [],\n\t\t\t\tinstanceNodes: [],\n\t\t\t\ttransforms: {}\n\t\t\t};\n\n\t\t\tfor ( var i = 0; i < xml.childNodes.length; i ++ ) {\n\n\t\t\t\tvar child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'node':\n\t\t\t\t\t\tdata.nodes.push( child.getAttribute( 'id' ) );\n\t\t\t\t\t\tparseNode( child );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'instance_camera':\n\t\t\t\t\t\tdata.instanceCameras.push( parseId( child.getAttribute( 'url' ) ) );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'instance_controller':\n\t\t\t\t\t\tdata.instanceControllers.push( parseNodeInstance( child ) );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'instance_light':\n\t\t\t\t\t\tdata.instanceLights.push( parseId( child.getAttribute( 'url' ) ) );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'instance_geometry':\n\t\t\t\t\t\tdata.instanceGeometries.push( parseNodeInstance( child ) );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'instance_node':\n\t\t\t\t\t\tdata.instanceNodes.push( parseId( child.getAttribute( 'url' ) ) );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'matrix':\n\t\t\t\t\t\tvar array = parseFloats( child.textContent );\n\t\t\t\t\t\tdata.matrix.multiply( matrix.fromArray( array ).transpose() );\n\t\t\t\t\t\tdata.transforms[ child.getAttribute( 'sid' ) ] = child.nodeName;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'translate':\n\t\t\t\t\t\tvar array = parseFloats( child.textContent );\n\t\t\t\t\t\tvector.fromArray( array );\n\t\t\t\t\t\tdata.matrix.multiply( matrix.makeTranslation( vector.x, vector.y, vector.z ) );\n\t\t\t\t\t\tdata.transforms[ child.getAttribute( 'sid' ) ] = child.nodeName;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'rotate':\n\t\t\t\t\t\tvar array = parseFloats( child.textContent );\n\t\t\t\t\t\tvar angle = THREE.Math.degToRad( array[ 3 ] );\n\t\t\t\t\t\tdata.matrix.multiply( matrix.makeRotationAxis( vector.fromArray( array ), angle ) );\n\t\t\t\t\t\tdata.transforms[ child.getAttribute( 'sid' ) ] = child.nodeName;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'scale':\n\t\t\t\t\t\tvar array = parseFloats( child.textContent );\n\t\t\t\t\t\tdata.matrix.scale( vector.fromArray( array ) );\n\t\t\t\t\t\tdata.transforms[ child.getAttribute( 'sid' ) ] = child.nodeName;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'extra':\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tconsole.log( child );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tlibrary.nodes[ data.id ] = data;\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction parseNodeInstance( xml ) {\n\n\t\t\tvar data = {\n\t\t\t\tid: parseId( xml.getAttribute( 'url' ) ),\n\t\t\t\tmaterials: {},\n\t\t\t\tskeletons: []\n\t\t\t};\n\n\t\t\tfor ( var i = 0; i < xml.childNodes.length; i ++ ) {\n\n\t\t\t\tvar child = xml.childNodes[ i ];\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'bind_material':\n\t\t\t\t\t\tvar instances = child.getElementsByTagName( 'instance_material' );\n\n\t\t\t\t\t\tfor ( var j = 0; j < instances.length; j ++ ) {\n\n\t\t\t\t\t\t\tvar instance = instances[ j ];\n\t\t\t\t\t\t\tvar symbol = instance.getAttribute( 'symbol' );\n\t\t\t\t\t\t\tvar target = instance.getAttribute( 'target' );\n\n\t\t\t\t\t\t\tdata.materials[ symbol ] = parseId( target );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'skeleton':\n\t\t\t\t\t\tdata.skeletons.push( parseId( child.textContent ) );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction buildSkeleton( skeletons, joints ) {\n\n\t\t\tvar boneData = [];\n\t\t\tvar sortedBoneData = [];\n\n\t\t\tvar i, j, data;\n\n\t\t\t// a skeleton can have multiple root bones. collada expresses this\n\t\t\t// situtation with multiple \"skeleton\" tags per controller instance\n\n\t\t\tfor ( i = 0; i < skeletons.length; i ++ ) {\n\n\t\t\t\tvar skeleton = skeletons[ i ];\n\t\t\t\tvar root = getNode( skeleton );\n\n\t\t\t\t// setup bone data for a single bone hierarchy\n\n\t\t\t\tbuildBoneHierarchy( root, joints, boneData );\n\n\t\t\t}\n\n\t\t\t// sort bone data (the order is defined in the corresponding controller)\n\n\t\t\tfor ( i = 0; i < joints.length; i ++ ) {\n\n\t\t\t\tfor ( j = 0; j < boneData.length; j ++ ) {\n\n\t\t\t\t\tdata = boneData[ j ];\n\n\t\t\t\t\tif ( data.bone.name === joints[ i ].name ) {\n\n\t\t\t\t\t\tsortedBoneData[ i ] = data;\n\t\t\t\t\t\tdata.processed = true;\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\t// add unprocessed bone data at the end of the list\n\n\t\t\tfor ( i = 0; i < boneData.length; i ++ ) {\n\n\t\t\t\tdata = boneData[ i ];\n\n\t\t\t\tif ( data.processed === false ) {\n\n\t\t\t\t\tsortedBoneData.push( data );\n\t\t\t\t\tdata.processed = true;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// setup arrays for skeleton creation\n\n\t\t\tvar bones = [];\n\t\t\tvar boneInverses = [];\n\n\t\t\tfor ( i = 0; i < sortedBoneData.length; i ++ ) {\n\n\t\t\t\tdata = sortedBoneData[ i ];\n\n\t\t\t\tbones.push( data.bone );\n\t\t\t\tboneInverses.push( data.boneInverse );\n\n\t\t\t}\n\n\t\t\treturn new THREE.Skeleton( bones, boneInverses );\n\n\t\t}\n\n\t\tfunction buildBoneHierarchy( root, joints, boneData ) {\n\n\t\t\t// setup bone data from visual scene\n\n\t\t\troot.traverse( function ( object ) {\n\n\t\t\t\tif ( object.isBone === true ) {\n\n\t\t\t\t\tvar boneInverse;\n\n\t\t\t\t\t// retrieve the boneInverse from the controller data\n\n\t\t\t\t\tfor ( var i = 0; i < joints.length; i ++ ) {\n\n\t\t\t\t\t\tvar joint = joints[ i ];\n\n\t\t\t\t\t\tif ( joint.name === object.name ) {\n\n\t\t\t\t\t\t\tboneInverse = joint.boneInverse;\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\tif ( boneInverse === undefined ) {\n\n\t\t\t\t\t\t// Unfortunately, there can be joints in the visual scene that are not part of the\n\t\t\t\t\t\t// corresponding controller. In this case, we have to create a dummy boneInverse matrix\n\t\t\t\t\t\t// for the respective bone. This bone won't affect any vertices, because there are no skin indices\n\t\t\t\t\t\t// and weights defined for it. But we still have to add the bone to the sorted bone list in order to\n\t\t\t\t\t\t// ensure a correct animation of the model.\n\n\t\t\t\t\t\t boneInverse = new THREE.Matrix4();\n\n\t\t\t\t\t}\n\n\t\t\t\t\tboneData.push( { bone: object, boneInverse: boneInverse, processed: false } );\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t}\n\n\t\tfunction buildNode( data ) {\n\n\t\t\tvar objects = [];\n\n\t\t\tvar matrix = data.matrix;\n\t\t\tvar nodes = data.nodes;\n\t\t\tvar type = data.type;\n\t\t\tvar instanceCameras = data.instanceCameras;\n\t\t\tvar instanceControllers = data.instanceControllers;\n\t\t\tvar instanceLights = data.instanceLights;\n\t\t\tvar instanceGeometries = data.instanceGeometries;\n\t\t\tvar instanceNodes = data.instanceNodes;\n\n\t\t\t// nodes\n\n\t\t\tfor ( var i = 0, l = nodes.length; i < l; i ++ ) {\n\n\t\t\t\tobjects.push( getNode( nodes[ i ] ) );\n\n\t\t\t}\n\n\t\t\t// instance cameras\n\n\t\t\tfor ( var i = 0, l = instanceCameras.length; i < l; i ++ ) {\n\n\t\t\t\tobjects.push( getCamera( instanceCameras[ i ] ).clone() );\n\n\t\t\t}\n\n\t\t\t// instance controllers\n\n\t\t\tfor ( var i = 0, l = instanceControllers.length; i < l; i ++ ) {\n\n\t\t\t\tvar instance = instanceControllers[ i ];\n\t\t\t\tvar controller = getController( instance.id );\n\t\t\t\tvar geometries = getGeometry( controller.id );\n\t\t\t\tvar newObjects = buildObjects( geometries, instance.materials );\n\n\t\t\t\tvar skeletons = instance.skeletons;\n\t\t\t\tvar joints = controller.skin.joints;\n\n\t\t\t\tvar skeleton = buildSkeleton( skeletons, joints );\n\n\t\t\t\tfor ( var j = 0, jl = newObjects.length; j < jl; j ++ ) {\n\n\t\t\t\t\tvar object = newObjects[ j ];\n\n\t\t\t\t\tif ( object.isSkinnedMesh ) {\n\n\t\t\t\t\t\tobject.bind( skeleton, controller.skin.bindMatrix );\n\t\t\t\t\t\tobject.normalizeSkinWeights();\n\n\t\t\t\t\t}\n\n\t\t\t\t\tobjects.push( object );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// instance lights\n\n\t\t\tfor ( var i = 0, l = instanceLights.length; i < l; i ++ ) {\n\n\t\t\t\tobjects.push( getLight( instanceLights[ i ] ).clone() );\n\n\t\t\t}\n\n\t\t\t// instance geometries\n\n\t\t\tfor ( var i = 0, l = instanceGeometries.length; i < l; i ++ ) {\n\n\t\t\t\tvar instance = instanceGeometries[ i ];\n\n\t\t\t\t// a single geometry instance in collada can lead to multiple object3Ds.\n\t\t\t\t// this is the case when primitives are combined like triangles and lines\n\n\t\t\t\tvar geometries = getGeometry( instance.id );\n\t\t\t\tvar newObjects = buildObjects( geometries, instance.materials );\n\n\t\t\t\tfor ( var j = 0, jl = newObjects.length; j < jl; j ++ ) {\n\n\t\t\t\t\tobjects.push( newObjects[ j ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// instance nodes\n\n\t\t\tfor ( var i = 0, l = instanceNodes.length; i < l; i ++ ) {\n\n\t\t\t\tobjects.push( getNode( instanceNodes[ i ] ).clone() );\n\n\t\t\t}\n\n\t\t\tvar object;\n\n\t\t\tif ( nodes.length === 0 && objects.length === 1 ) {\n\n\t\t\t\tobject = objects[ 0 ];\n\n\t\t\t} else {\n\n\t\t\t\tobject = ( type === 'JOINT' ) ? new THREE.Bone() : new THREE.Group();\n\n\t\t\t\tfor ( var i = 0; i < objects.length; i ++ ) {\n\n\t\t\t\t\tobject.add( objects[ i ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tobject.name = ( type === 'JOINT' ) ? data.sid : data.name;\n\t\t\tobject.matrix.copy( matrix );\n\t\t\tobject.matrix.decompose( object.position, object.quaternion, object.scale );\n\n\t\t\treturn object;\n\n\t\t}\n\n\t\tfunction resolveMaterialBinding( keys, instanceMaterials ) {\n\n\t\t\tvar materials = [];\n\n\t\t\tfor ( var i = 0, l = keys.length; i < l; i ++ ) {\n\n\t\t\t\tvar id = instanceMaterials[ keys[ i ] ];\n\t\t\t\tmaterials.push( getMaterial( id ) );\n\n\t\t\t}\n\n\t\t\treturn materials;\n\n\t\t}\n\n\t\tfunction buildObjects( geometries, instanceMaterials ) {\n\n\t\t\tvar objects = [];\n\n\t\t\tfor ( var type in geometries ) {\n\n\t\t\t\tvar geometry = geometries[ type ];\n\n\t\t\t\tvar materials = resolveMaterialBinding( geometry.materialKeys, instanceMaterials );\n\n\t\t\t\t// handle case if no materials are defined\n\n\t\t\t\tif ( materials.length === 0 ) {\n\n\t\t\t\t\tif ( type === 'lines' || type === 'linestrips' ) {\n\n\t\t\t\t\t\tmaterials.push( new THREE.LineBasicMaterial() );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tmaterials.push( new THREE.MeshPhongMaterial() );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t// regard skinning\n\n\t\t\t\tvar skinning = ( geometry.data.attributes.skinIndex !== undefined );\n\n\t\t\t\tif ( skinning ) {\n\n\t\t\t\t\tfor ( var i = 0, l = materials.length; i < l; i ++ ) {\n\n\t\t\t\t\t\tmaterials[ i ].skinning = true;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t// choose between a single or multi materials (material array)\n\n\t\t\t\tvar material = ( materials.length === 1 ) ? materials[ 0 ] : materials;\n\n\t\t\t\t// now create a specific 3D object\n\n\t\t\t\tvar object;\n\n\t\t\t\tswitch ( type ) {\n\n\t\t\t\t\tcase 'lines':\n\t\t\t\t\t\tobject = new THREE.LineSegments( geometry.data, material );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'linestrips':\n\t\t\t\t\t\tobject = new THREE.Line( geometry.data, material );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'triangles':\n\t\t\t\t\tcase 'polylist':\n\t\t\t\t\t\tif ( skinning ) {\n\n\t\t\t\t\t\t\tobject = new THREE.SkinnedMesh( geometry.data, material );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tobject = new THREE.Mesh( geometry.data, material );\n\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t\tobjects.push( object );\n\n\t\t\t}\n\n\t\t\treturn objects;\n\n\t\t}\n\n\t\tfunction getNode( id ) {\n\n\t\t\treturn getBuild( library.nodes[ id ], buildNode );\n\n\t\t}\n\n\t\t// visual scenes\n\n\t\tfunction parseVisualScene( xml ) {\n\n\t\t\tvar data = {\n\t\t\t\tname: xml.getAttribute( 'name' ),\n\t\t\t\tchildren: []\n\t\t\t};\n\n\t\t\tprepareNodes( xml );\n\n\t\t\tvar elements = getElementsByTagName( xml, 'node' );\n\n\t\t\tfor ( var i = 0; i < elements.length; i ++ ) {\n\n\t\t\t\tdata.children.push( parseNode( elements[ i ] ) );\n\n\t\t\t}\n\n\t\t\tlibrary.visualScenes[ xml.getAttribute( 'id' ) ] = data;\n\n\t\t}\n\n\t\tfunction buildVisualScene( data ) {\n\n\t\t\tvar group = new THREE.Group();\n\t\t\tgroup.name = data.name;\n\n\t\t\tvar children = data.children;\n\n\t\t\tfor ( var i = 0; i < children.length; i ++ ) {\n\n\t\t\t\tvar child = children[ i ];\n\n\t\t\t\tif ( child.id === null ) {\n\n\t\t\t\t\tgroup.add( buildNode( child ) );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// if there is an ID, let's try to get the finished build (e.g. joints are already build)\n\n\t\t\t\t\tgroup.add( getNode( child.id ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn group;\n\n\t\t}\n\n\t\tfunction getVisualScene( id ) {\n\n\t\t\treturn getBuild( library.visualScenes[ id ], buildVisualScene );\n\n\t\t}\n\n\t\t// scenes\n\n\t\tfunction parseScene( xml ) {\n\n\t\t\tvar instance = getElementsByTagName( xml, 'instance_visual_scene' )[ 0 ];\n\t\t\treturn getVisualScene( parseId( instance.getAttribute( 'url' ) ) );\n\n\t\t}\n\n\t\tfunction setupAnimations() {\n\n\t\t\tvar clips = library.clips;\n\n\t\t\tif ( isEmpty( clips ) === true ) {\n\n\t\t\t\tif ( isEmpty( library.animations ) === false ) {\n\n\t\t\t\t\t// if there are animations but no clips, we create a default clip for playback\n\n\t\t\t\t\tvar tracks = [];\n\n\t\t\t\t\tfor ( var id in library.animations ) {\n\n\t\t\t\t\t\tvar animationTracks = getAnimation( id );\n\n\t\t\t\t\t\tfor ( var i = 0, l = animationTracks.length; i < l; i ++ ) {\n\n\t\t\t\t\t\t\ttracks.push( animationTracks[ i ] );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tanimations.push( new THREE.AnimationClip( 'default', - 1, tracks ) );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tfor ( var id in clips ) {\n\n\t\t\t\t\tanimations.push( getAnimationClip( id ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tconsole.time( 'THREE.ColladaLoader' );\n\n\t\tif ( text.length === 0 ) {\n\n\t\t\treturn { scene: new THREE.Scene() };\n\n\t\t}\n\n\t\tconsole.time( 'THREE.ColladaLoader: DOMParser' );\n\n\t\tvar xml = new DOMParser().parseFromString( text, 'application/xml' );\n\n\t\tconsole.timeEnd( 'THREE.ColladaLoader: DOMParser' );\n\n\t\tvar collada = getElementsByTagName( xml, 'COLLADA' )[ 0 ];\n\n\t\t// metadata\n\n\t\tvar version = collada.getAttribute( 'version' );\n\t\tconsole.log( 'THREE.ColladaLoader: File version', version );\n\n\t\tvar asset = parseAsset( getElementsByTagName( collada, 'asset' )[ 0 ] );\n\t\tvar textureLoader = new THREE.TextureLoader( this.manager );\n\t\ttextureLoader.setPath( path ).setCrossOrigin( this.crossOrigin );\n\n\t\t//\n\n\t\tvar animations = [];\n\t\tvar kinematics = {};\n\t\tvar count = 0;\n\n\t\t//\n\n\t\tvar library = {\n\t\t\tanimations: {},\n\t\t\tclips: {},\n\t\t\tcontrollers: {},\n\t\t\timages: {},\n\t\t\teffects: {},\n\t\t\tmaterials: {},\n\t\t\tcameras: {},\n\t\t\tlights: {},\n\t\t\tgeometries: {},\n\t\t\tnodes: {},\n\t\t\tvisualScenes: {},\n\t\t\tkinematicsModels: {},\n\t\t\tkinematicsScenes: {}\n\t\t};\n\n\t\tconsole.time( 'THREE.ColladaLoader: Parse' );\n\n\t\tparseLibrary( collada, 'library_animations', 'animation', parseAnimation );\n\t\tparseLibrary( collada, 'library_animation_clips', 'animation_clip', parseAnimationClip );\n\t\tparseLibrary( collada, 'library_controllers', 'controller', parseController );\n\t\tparseLibrary( collada, 'library_images', 'image', parseImage );\n\t\tparseLibrary( collada, 'library_effects', 'effect', parseEffect );\n\t\tparseLibrary( collada, 'library_materials', 'material', parseMaterial );\n\t\tparseLibrary( collada, 'library_cameras', 'camera', parseCamera );\n\t\tparseLibrary( collada, 'library_lights', 'light', parseLight );\n\t\tparseLibrary( collada, 'library_geometries', 'geometry', parseGeometry );\n\t\tparseLibrary( collada, 'library_nodes', 'node', parseNode );\n\t\tparseLibrary( collada, 'library_visual_scenes', 'visual_scene', parseVisualScene );\n\t\tparseLibrary( collada, 'library_kinematics_models', 'kinematics_model', parseKinematicsModel );\n\t\tparseLibrary( collada, 'scene', 'instance_kinematics_scene', parseKinematicsScene );\n\n\t\tconsole.timeEnd( 'THREE.ColladaLoader: Parse' );\n\n\t\tconsole.time( 'THREE.ColladaLoader: Build' );\n\n\t\tbuildLibrary( library.animations, buildAnimation );\n\t\tbuildLibrary( library.clips, buildAnimationClip );\n\t\tbuildLibrary( library.controllers, buildController );\n\t\tbuildLibrary( library.images, buildImage );\n\t\tbuildLibrary( library.effects, buildEffect );\n\t\tbuildLibrary( library.materials, buildMaterial );\n\t\tbuildLibrary( library.cameras, buildCamera );\n\t\tbuildLibrary( library.lights, buildLight );\n\t\tbuildLibrary( library.geometries, buildGeometry );\n\t\tbuildLibrary( library.visualScenes, buildVisualScene );\n\n\t\tconsole.timeEnd( 'THREE.ColladaLoader: Build' );\n\n\t\tsetupAnimations();\n\t\tsetupKinematics();\n\n\t\tvar scene = parseScene( getElementsByTagName( collada, 'scene' )[ 0 ] );\n\n\t\tif ( asset.upAxis === 'Z_UP' ) {\n\n\t\t\tscene.rotation.x = - Math.PI / 2;\n\n\t\t}\n\n\t\tscene.scale.multiplyScalar( asset.unit );\n\n\t\tconsole.timeEnd( 'THREE.ColladaLoader' );\n\n\t\treturn {\n\t\t\tanimations: animations,\n\t\t\tkinematics: kinematics,\n\t\t\tlibrary: library,\n\t\t\tscene: scene\n\t\t};\n\n\t}\n\n};\n","/**\n * @author Rich Tibbett / https://github.com/richtr\n * @author mrdoob / http://mrdoob.com/\n * @author Tony Parisi / http://www.tonyparisi.com/\n * @author Takahiro / https://github.com/takahirox\n * @author Don McCurdy / https://www.donmccurdy.com\n */\n\nTHREE.GLTFLoader = ( function () {\n\n\tfunction GLTFLoader( manager ) {\n\n\t\tthis.manager = ( manager !== undefined ) ? manager : THREE.DefaultLoadingManager;\n\n\t}\n\n\tGLTFLoader.prototype = {\n\n\t\tconstructor: GLTFLoader,\n\n\t\tcrossOrigin: 'Anonymous',\n\n\t\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\t\tvar scope = this;\n\n\t\t\tvar path = this.path !== undefined ? this.path : THREE.Loader.prototype.extractUrlBase( url );\n\n\t\t\tvar loader = new THREE.FileLoader( scope.manager );\n\n\t\t\tloader.setResponseType( 'arraybuffer' );\n\n\t\t\tloader.load( url, function ( data ) {\n\n\t\t\t\ttry {\n\n\t\t\t\t\tscope.parse( data, path, onLoad, onError );\n\n\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\tif ( onError !== undefined ) {\n\n\t\t\t\t\t\t// For SyntaxError or TypeError, return a generic failure message.\n\t\t\t\t\t\tonError( e.constructor === Error ? e : new Error( 'THREE.GLTFLoader: Unable to parse model.' ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}, onProgress, onError );\n\n\t\t},\n\n\t\tsetCrossOrigin: function ( value ) {\n\n\t\t\tthis.crossOrigin = value;\n\n\t\t},\n\n\t\tsetPath: function ( value ) {\n\n\t\t\tthis.path = value;\n\n\t\t},\n\n\t\tparse: function ( data, path, onLoad, onError ) {\n\n\t\t\tvar content;\n\t\t\tvar extensions = {};\n\n\t\t\tif ( typeof data === 'string' ) {\n\n\t\t\t\tcontent = data;\n\n\t\t\t} else {\n\n\t\t\t\tvar magic = convertUint8ArrayToString( new Uint8Array( data, 0, 4 ) );\n\n\t\t\t\tif ( magic === BINARY_EXTENSION_HEADER_MAGIC ) {\n\n\t\t\t\t\textensions[ EXTENSIONS.KHR_BINARY_GLTF ] = new GLTFBinaryExtension( data );\n\t\t\t\t\tcontent = extensions[ EXTENSIONS.KHR_BINARY_GLTF ].content;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tcontent = convertUint8ArrayToString( new Uint8Array( data ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tvar json = JSON.parse( content );\n\n\t\t\tif ( json.asset === undefined || json.asset.version[ 0 ] < 2 ) {\n\n\t\t\t\tonError( new Error( 'THREE.GLTFLoader: Unsupported asset. glTF versions >=2.0 are supported.' ) );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tif ( json.extensionsUsed ) {\n\n\t\t\t\tif ( json.extensionsUsed.indexOf( EXTENSIONS.KHR_LIGHTS ) >= 0 ) {\n\n\t\t\t\t\textensions[ EXTENSIONS.KHR_LIGHTS ] = new GLTFLightsExtension( json );\n\n\t\t\t\t}\n\n\t\t\t\tif ( json.extensionsUsed.indexOf( EXTENSIONS.KHR_MATERIALS_COMMON ) >= 0 ) {\n\n\t\t\t\t\textensions[ EXTENSIONS.KHR_MATERIALS_COMMON ] = new GLTFMaterialsCommonExtension( json );\n\n\t\t\t\t}\n\n\t\t\t\tif ( json.extensionsUsed.indexOf( EXTENSIONS.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS ) >= 0 ) {\n\n\t\t\t\t\textensions[ EXTENSIONS.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS ] = new GLTFMaterialsPbrSpecularGlossinessExtension();\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconsole.time( 'GLTFLoader' );\n\n\t\t\tvar parser = new GLTFParser( json, extensions, {\n\n\t\t\t\tpath: path || this.path || '',\n\t\t\t\tcrossOrigin: this.crossOrigin,\n\t\t\t\tmanager: this.manager\n\n\t\t\t} );\n\n\t\t\tparser.parse( function ( scene, scenes, cameras, animations ) {\n\n\t\t\t\tconsole.timeEnd( 'GLTFLoader' );\n\n\t\t\t\tvar glTF = {\n\t\t\t\t\tscene: scene,\n\t\t\t\t\tscenes: scenes,\n\t\t\t\t\tcameras: cameras,\n\t\t\t\t\tanimations: animations\n\t\t\t\t};\n\n\t\t\t\tonLoad( glTF );\n\n\t\t\t}, onError );\n\n\t\t}\n\n\t};\n\n\t/* GLTFREGISTRY */\n\n\tfunction GLTFRegistry() {\n\n\t\tvar objects = {};\n\n\t\treturn\t{\n\n\t\t\tget: function ( key ) {\n\n\t\t\t\treturn objects[ key ];\n\n\t\t\t},\n\n\t\t\tadd: function ( key, object ) {\n\n\t\t\t\tobjects[ key ] = object;\n\n\t\t\t},\n\n\t\t\tremove: function ( key ) {\n\n\t\t\t\tdelete objects[ key ];\n\n\t\t\t},\n\n\t\t\tremoveAll: function () {\n\n\t\t\t\tobjects = {};\n\n\t\t\t}\n\n\t\t};\n\n\t}\n\n\t/*********************************/\n\t/********** EXTENSIONS ***********/\n\t/*********************************/\n\n\tvar EXTENSIONS = {\n\t\tKHR_BINARY_GLTF: 'KHR_binary_glTF',\n\t\tKHR_LIGHTS: 'KHR_lights',\n\t\tKHR_MATERIALS_COMMON: 'KHR_materials_common',\n\t\tKHR_MATERIALS_PBR_SPECULAR_GLOSSINESS: 'KHR_materials_pbrSpecularGlossiness'\n\t};\n\n\t/**\n\t * Lights Extension\n\t *\n\t * Specification: PENDING\n\t */\n\tfunction GLTFLightsExtension( json ) {\n\n\t\tthis.name = EXTENSIONS.KHR_LIGHTS;\n\n\t\tthis.lights = {};\n\n\t\tvar extension = ( json.extensions && json.extensions[ EXTENSIONS.KHR_LIGHTS ] ) || {};\n\t\tvar lights = extension.lights || {};\n\n\t\tfor ( var lightId in lights ) {\n\n\t\t\tvar light = lights[ lightId ];\n\t\t\tvar lightNode;\n\n\t\t\tvar color = new THREE.Color().fromArray( light.color );\n\n\t\t\tswitch ( light.type ) {\n\n\t\t\t\tcase 'directional':\n\t\t\t\t\tlightNode = new THREE.DirectionalLight( color );\n\t\t\t\t\tlightNode.position.set( 0, 0, 1 );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'point':\n\t\t\t\t\tlightNode = new THREE.PointLight( color );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'spot':\n\t\t\t\t\tlightNode = new THREE.SpotLight( color );\n\t\t\t\t\tlightNode.position.set( 0, 0, 1 );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'ambient':\n\t\t\t\t\tlightNode = new THREE.AmbientLight( color );\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tif ( lightNode ) {\n\n\t\t\t\tif ( light.constantAttenuation !== undefined ) {\n\n\t\t\t\t\tlightNode.intensity = light.constantAttenuation;\n\n\t\t\t\t}\n\n\t\t\t\tif ( light.linearAttenuation !== undefined ) {\n\n\t\t\t\t\tlightNode.distance = 1 / light.linearAttenuation;\n\n\t\t\t\t}\n\n\t\t\t\tif ( light.quadraticAttenuation !== undefined ) {\n\n\t\t\t\t\tlightNode.decay = light.quadraticAttenuation;\n\n\t\t\t\t}\n\n\t\t\t\tif ( light.fallOffAngle !== undefined ) {\n\n\t\t\t\t\tlightNode.angle = light.fallOffAngle;\n\n\t\t\t\t}\n\n\t\t\t\tif ( light.fallOffExponent !== undefined ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.GLTFLoader:: light.fallOffExponent not currently supported.' );\n\n\t\t\t\t}\n\n\t\t\t\tlightNode.name = light.name || ( 'light_' + lightId );\n\t\t\t\tthis.lights[ lightId ] = lightNode;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Common Materials Extension\n\t *\n\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/Khronos/KHR_materials_common\n\t */\n\tfunction GLTFMaterialsCommonExtension( json ) {\n\n\t\tthis.name = EXTENSIONS.KHR_MATERIALS_COMMON;\n\n\t}\n\n\tGLTFMaterialsCommonExtension.prototype.getMaterialType = function ( material ) {\n\n\t\tvar khrMaterial = material.extensions[ this.name ];\n\n\t\tswitch ( khrMaterial.type ) {\n\n\t\t\tcase 'commonBlinn' :\n\t\t\tcase 'commonPhong' :\n\t\t\t\treturn THREE.MeshPhongMaterial;\n\n\t\t\tcase 'commonLambert' :\n\t\t\t\treturn THREE.MeshLambertMaterial;\n\n\t\t\tcase 'commonConstant' :\n\t\t\tdefault :\n\t\t\t\treturn THREE.MeshBasicMaterial;\n\n\t\t}\n\n\t};\n\n\tGLTFMaterialsCommonExtension.prototype.extendParams = function ( materialParams, material, parser ) {\n\n\t\tvar khrMaterial = material.extensions[ this.name ];\n\n\t\tvar pending = [];\n\n\t\tvar keys = [];\n\n\t\t// TODO: Currently ignored: 'ambientFactor', 'ambientTexture'\n\t\tswitch ( khrMaterial.type ) {\n\n\t\t\tcase 'commonBlinn' :\n\t\t\tcase 'commonPhong' :\n\t\t\t\tkeys.push( 'diffuseFactor', 'diffuseTexture', 'specularFactor', 'specularTexture', 'shininessFactor' );\n\t\t\t\tbreak;\n\n\t\t\tcase 'commonLambert' :\n\t\t\t\tkeys.push( 'diffuseFactor', 'diffuseTexture' );\n\t\t\t\tbreak;\n\n\t\t\tcase 'commonConstant' :\n\t\t\tdefault :\n\t\t\t\tbreak;\n\n\t\t}\n\n\t\tvar materialValues = {};\n\n\t\tkeys.forEach( function ( v ) {\n\n\t\t\tif ( khrMaterial[ v ] !== undefined ) materialValues[ v ] = khrMaterial[ v ];\n\n\t\t} );\n\n\t\tif ( materialValues.diffuseFactor !== undefined ) {\n\n\t\t\tmaterialParams.color = new THREE.Color().fromArray( materialValues.diffuseFactor );\n\t\t\tmaterialParams.opacity = materialValues.diffuseFactor[ 3 ];\n\n\t\t}\n\n\t\tif ( materialValues.diffuseTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'map', materialValues.diffuseTexture.index ) );\n\n\t\t}\n\n\t\tif ( materialValues.specularFactor !== undefined ) {\n\n\t\t\tmaterialParams.specular = new THREE.Color().fromArray( materialValues.specularFactor );\n\n\t\t}\n\n\t\tif ( materialValues.specularTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'specularMap', materialValues.specularTexture.index ) );\n\n\t\t}\n\n\t\tif ( materialValues.shininessFactor !== undefined ) {\n\n\t\t\tmaterialParams.shininess = materialValues.shininessFactor;\n\n\t\t}\n\n\t\treturn Promise.all( pending );\n\n\t};\n\n\t/* BINARY EXTENSION */\n\n\tvar BINARY_EXTENSION_BUFFER_NAME = 'binary_glTF';\n\tvar BINARY_EXTENSION_HEADER_MAGIC = 'glTF';\n\tvar BINARY_EXTENSION_HEADER_LENGTH = 12;\n\tvar BINARY_EXTENSION_CHUNK_TYPES = { JSON: 0x4E4F534A, BIN: 0x004E4942 };\n\n\tfunction GLTFBinaryExtension( data ) {\n\n\t\tthis.name = EXTENSIONS.KHR_BINARY_GLTF;\n\t\tthis.content = null;\n\t\tthis.body = null;\n\n\t\tvar headerView = new DataView( data, 0, BINARY_EXTENSION_HEADER_LENGTH );\n\n\t\tthis.header = {\n\t\t\tmagic: convertUint8ArrayToString( new Uint8Array( data.slice( 0, 4 ) ) ),\n\t\t\tversion: headerView.getUint32( 4, true ),\n\t\t\tlength: headerView.getUint32( 8, true )\n\t\t};\n\n\t\tif ( this.header.magic !== BINARY_EXTENSION_HEADER_MAGIC ) {\n\n\t\t\tthrow new Error( 'THREE.GLTFLoader: Unsupported glTF-Binary header.' );\n\n\t\t} else if ( this.header.version < 2.0 ) {\n\n\t\t\tthrow new Error( 'THREE.GLTFLoader: Legacy binary file detected. Use GLTFLoader instead.' );\n\n\t\t}\n\n\t\tvar chunkView = new DataView( data, BINARY_EXTENSION_HEADER_LENGTH );\n\t\tvar chunkIndex = 0;\n\n\t\twhile ( chunkIndex < chunkView.byteLength ) {\n\n\t\t\tvar chunkLength = chunkView.getUint32( chunkIndex, true );\n\t\t\tchunkIndex += 4;\n\n\t\t\tvar chunkType = chunkView.getUint32( chunkIndex, true );\n\t\t\tchunkIndex += 4;\n\n\t\t\tif ( chunkType === BINARY_EXTENSION_CHUNK_TYPES.JSON ) {\n\n\t\t\t\tvar contentArray = new Uint8Array( data, BINARY_EXTENSION_HEADER_LENGTH + chunkIndex, chunkLength );\n\t\t\t\tthis.content = convertUint8ArrayToString( contentArray );\n\n\t\t\t} else if ( chunkType === BINARY_EXTENSION_CHUNK_TYPES.BIN ) {\n\n\t\t\t\tvar byteOffset = BINARY_EXTENSION_HEADER_LENGTH + chunkIndex;\n\t\t\t\tthis.body = data.slice( byteOffset, byteOffset + chunkLength );\n\n\t\t\t}\n\n\t\t\t// Clients must ignore chunks with unknown types.\n\n\t\t\tchunkIndex += chunkLength;\n\n\t\t}\n\n\t\tif ( this.content === null ) {\n\n\t\t\tthrow new Error( 'THREE.GLTFLoader: JSON content not found.' );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Specular-Glossiness Extension\n\t *\n\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/Khronos/KHR_materials_pbrSpecularGlossiness\n\t */\n\tfunction GLTFMaterialsPbrSpecularGlossinessExtension() {\n\n\t\treturn {\n\n\t\t\tname: EXTENSIONS.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS,\n\n\t\t\tspecularGlossinessParams: [\n\t\t\t\t'color',\n\t\t\t\t'map',\n\t\t\t\t'lightMap',\n\t\t\t\t'lightMapIntensity',\n\t\t\t\t'aoMap',\n\t\t\t\t'aoMapIntensity',\n\t\t\t\t'emissive',\n\t\t\t\t'emissiveIntensity',\n\t\t\t\t'emissiveMap',\n\t\t\t\t'bumpMap',\n\t\t\t\t'bumpScale',\n\t\t\t\t'normalMap',\n\t\t\t\t'displacementMap',\n\t\t\t\t'displacementScale',\n\t\t\t\t'displacementBias',\n\t\t\t\t'specularMap',\n\t\t\t\t'specular',\n\t\t\t\t'glossinessMap',\n\t\t\t\t'glossiness',\n\t\t\t\t'alphaMap',\n\t\t\t\t'envMap',\n\t\t\t\t'envMapIntensity',\n\t\t\t\t'refractionRatio',\n\t\t\t],\n\n\t\t\tgetMaterialType: function () {\n\n\t\t\t\treturn THREE.ShaderMaterial;\n\n\t\t\t},\n\n\t\t\textendParams: function ( params, material, parser ) {\n\n\t\t\t\tvar pbrSpecularGlossiness = material.extensions[ this.name ];\n\n\t\t\t\tvar shader = THREE.ShaderLib[ 'standard' ];\n\n\t\t\t\tvar uniforms = THREE.UniformsUtils.clone( shader.uniforms );\n\n\t\t\t\tvar specularMapParsFragmentChunk = [\n\t\t\t\t\t'#ifdef USE_SPECULARMAP',\n\t\t\t\t\t'\tuniform sampler2D specularMap;',\n\t\t\t\t\t'#endif'\n\t\t\t\t].join( '\\n' );\n\n\t\t\t\tvar glossinessMapParsFragmentChunk = [\n\t\t\t\t\t'#ifdef USE_GLOSSINESSMAP',\n\t\t\t\t\t'\tuniform sampler2D glossinessMap;',\n\t\t\t\t\t'#endif'\n\t\t\t\t].join( '\\n' );\n\n\t\t\t\tvar specularMapFragmentChunk = [\n\t\t\t\t\t'vec3 specularFactor = specular;',\n\t\t\t\t\t'#ifdef USE_SPECULARMAP',\n\t\t\t\t\t'\tvec4 texelSpecular = texture2D( specularMap, vUv );',\n\t\t\t\t\t'\t// reads channel RGB, compatible with a glTF Specular-Glossiness (RGBA) texture',\n\t\t\t\t\t'\tspecularFactor *= texelSpecular.rgb;',\n\t\t\t\t\t'#endif'\n\t\t\t\t].join( '\\n' );\n\n\t\t\t\tvar glossinessMapFragmentChunk = [\n\t\t\t\t\t'float glossinessFactor = glossiness;',\n\t\t\t\t\t'#ifdef USE_GLOSSINESSMAP',\n\t\t\t\t\t'\tvec4 texelGlossiness = texture2D( glossinessMap, vUv );',\n\t\t\t\t\t'\t// reads channel A, compatible with a glTF Specular-Glossiness (RGBA) texture',\n\t\t\t\t\t'\tglossinessFactor *= texelGlossiness.a;',\n\t\t\t\t\t'#endif'\n\t\t\t\t].join( '\\n' );\n\n\t\t\t\tvar lightPhysicalFragmentChunk = [\n\t\t\t\t\t'PhysicalMaterial material;',\n\t\t\t\t\t'material.diffuseColor = diffuseColor.rgb;',\n\t\t\t\t\t'material.specularRoughness = clamp( 1.0 - glossinessFactor, 0.04, 1.0 );',\n\t\t\t\t\t'material.specularColor = specularFactor.rgb;',\n\t\t\t\t].join( '\\n' );\n\n\t\t\t\tvar fragmentShader = shader.fragmentShader\n\t\t\t\t\t.replace( '#include ', '' )\n\t\t\t\t\t.replace( 'uniform float roughness;', 'uniform vec3 specular;' )\n\t\t\t\t\t.replace( 'uniform float metalness;', 'uniform float glossiness;' )\n\t\t\t\t\t.replace( '#include ', specularMapParsFragmentChunk )\n\t\t\t\t\t.replace( '#include ', glossinessMapParsFragmentChunk )\n\t\t\t\t\t.replace( '#include ', specularMapFragmentChunk )\n\t\t\t\t\t.replace( '#include ', glossinessMapFragmentChunk )\n\t\t\t\t\t.replace( '#include ', lightPhysicalFragmentChunk );\n\n\t\t\t\tdelete uniforms.roughness;\n\t\t\t\tdelete uniforms.metalness;\n\t\t\t\tdelete uniforms.roughnessMap;\n\t\t\t\tdelete uniforms.metalnessMap;\n\n\t\t\t\tuniforms.specular = { value: new THREE.Color().setHex( 0x111111 ) };\n\t\t\t\tuniforms.glossiness = { value: 0.5 };\n\t\t\t\tuniforms.specularMap = { value: null };\n\t\t\t\tuniforms.glossinessMap = { value: null };\n\n\t\t\t\tparams.vertexShader = shader.vertexShader;\n\t\t\t\tparams.fragmentShader = fragmentShader;\n\t\t\t\tparams.uniforms = uniforms;\n\t\t\t\tparams.defines = { 'STANDARD': '' };\n\n\t\t\t\tparams.color = new THREE.Color( 1.0, 1.0, 1.0 );\n\t\t\t\tparams.opacity = 1.0;\n\n\t\t\t\tvar pending = [];\n\n\t\t\t\tif ( Array.isArray( pbrSpecularGlossiness.diffuseFactor ) ) {\n\n\t\t\t\t\tvar array = pbrSpecularGlossiness.diffuseFactor;\n\n\t\t\t\t\tparams.color.fromArray( array );\n\t\t\t\t\tparams.opacity = array[ 3 ];\n\n\t\t\t\t}\n\n\t\t\t\tif ( pbrSpecularGlossiness.diffuseTexture !== undefined ) {\n\n\t\t\t\t\tpending.push( parser.assignTexture( params, 'map', pbrSpecularGlossiness.diffuseTexture.index ) );\n\n\t\t\t\t}\n\n\t\t\t\tparams.emissive = new THREE.Color( 0.0, 0.0, 0.0 );\n\t\t\t\tparams.glossiness = pbrSpecularGlossiness.glossinessFactor !== undefined ? pbrSpecularGlossiness.glossinessFactor : 1.0;\n\t\t\t\tparams.specular = new THREE.Color( 1.0, 1.0, 1.0 );\n\n\t\t\t\tif ( Array.isArray( pbrSpecularGlossiness.specularFactor ) ) {\n\n\t\t\t\t\tparams.specular.fromArray( pbrSpecularGlossiness.specularFactor );\n\n\t\t\t\t}\n\n\t\t\t\tif ( pbrSpecularGlossiness.specularGlossinessTexture !== undefined ) {\n\n\t\t\t\t\tvar specGlossIndex = pbrSpecularGlossiness.specularGlossinessTexture.index;\n\t\t\t\t\tpending.push( parser.assignTexture( params, 'glossinessMap', specGlossIndex ) );\n\t\t\t\t\tpending.push( parser.assignTexture( params, 'specularMap', specGlossIndex ) );\n\n\t\t\t\t}\n\n\t\t\t\treturn Promise.all( pending );\n\n\t\t\t},\n\n\t\t\tcreateMaterial: function ( params ) {\n\n\t\t\t\t// setup material properties based on MeshStandardMaterial for Specular-Glossiness\n\n\t\t\t\tvar material = new THREE.ShaderMaterial( {\n\t\t\t\t\tdefines: params.defines,\n\t\t\t\t\tvertexShader: params.vertexShader,\n\t\t\t\t\tfragmentShader: params.fragmentShader,\n\t\t\t\t\tuniforms: params.uniforms,\n\t\t\t\t\tfog: true,\n\t\t\t\t\tlights: true,\n\t\t\t\t\topacity: params.opacity,\n\t\t\t\t\ttransparent: params.transparent\n\t\t\t\t} );\n\n\t\t\t\tmaterial.isGLTFSpecularGlossinessMaterial = true;\n\n\t\t\t\tmaterial.color = params.color;\n\n\t\t\t\tmaterial.map = params.map === undefined ? null : params.map;\n\n\t\t\t\tmaterial.lightMap = null;\n\t\t\t\tmaterial.lightMapIntensity = 1.0;\n\n\t\t\t\tmaterial.aoMap = params.aoMap === undefined ? null : params.aoMap;\n\t\t\t\tmaterial.aoMapIntensity = 1.0;\n\n\t\t\t\tmaterial.emissive = params.emissive;\n\t\t\t\tmaterial.emissiveIntensity = 1.0;\n\t\t\t\tmaterial.emissiveMap = params.emissiveMap === undefined ? null : params.emissiveMap;\n\n\t\t\t\tmaterial.bumpMap = params.bumpMap === undefined ? null : params.bumpMap;\n\t\t\t\tmaterial.bumpScale = 1;\n\n\t\t\t\tmaterial.normalMap = params.normalMap === undefined ? null : params.normalMap;\n\t\t\t\tif ( params.normalScale ) material.normalScale = params.normalScale;\n\n\t\t\t\tmaterial.displacementMap = null;\n\t\t\t\tmaterial.displacementScale = 1;\n\t\t\t\tmaterial.displacementBias = 0;\n\n\t\t\t\tmaterial.specularMap = params.specularMap === undefined ? null : params.specularMap;\n\t\t\t\tmaterial.specular = params.specular;\n\n\t\t\t\tmaterial.glossinessMap = params.glossinessMap === undefined ? null : params.glossinessMap;\n\t\t\t\tmaterial.glossiness = params.glossiness;\n\n\t\t\t\tmaterial.alphaMap = null;\n\n\t\t\t\tmaterial.envMap = params.envMap === undefined ? null : params.envMap;\n\t\t\t\tmaterial.envMapIntensity = 1.0;\n\n\t\t\t\tmaterial.refractionRatio = 0.98;\n\n\t\t\t\tmaterial.extensions.derivatives = true;\n\n\t\t\t\treturn material;\n\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Clones a GLTFSpecularGlossinessMaterial instance. The ShaderMaterial.copy() method can\n\t\t\t * copy only properties it knows about or inherits, and misses many properties that would\n\t\t\t * normally be defined by MeshStandardMaterial.\n\t\t\t *\n\t\t\t * This method allows GLTFSpecularGlossinessMaterials to be cloned in the process of\n\t\t\t * loading a glTF model, but cloning later (e.g. by the user) would require these changes\n\t\t\t * AND also updating `.onBeforeRender` on the parent mesh.\n\t\t\t *\n\t\t\t * @param {THREE.ShaderMaterial} source\n\t\t\t * @return {THREE.ShaderMaterial}\n\t\t\t */\n\t\t\tcloneMaterial: function ( source ) {\n\n\t\t\t\tvar target = source.clone();\n\n\t\t\t\ttarget.isGLTFSpecularGlossinessMaterial = true;\n\n\t\t\t\tvar params = this.specularGlossinessParams;\n\n\t\t\t\tfor ( var i = 0; i < params.length; i ++ ) {\n\n\t\t\t\t\ttarget[ params[ i ] ] = source[ params[ i ] ];\n\n\t\t\t\t}\n\n\t\t\t\treturn target;\n\n\t\t\t},\n\n\t\t\t// Here's based on refreshUniformsCommon() and refreshUniformsStandard() in WebGLRenderer.\n\t\t\trefreshUniforms: function ( renderer, scene, camera, geometry, material, group ) {\n\n\t\t\t\tvar uniforms = material.uniforms;\n\t\t\t\tvar defines = material.defines;\n\n\t\t\t\tuniforms.opacity.value = material.opacity;\n\n\t\t\t\tuniforms.diffuse.value.copy( material.color );\n\t\t\t\tuniforms.emissive.value.copy( material.emissive ).multiplyScalar( material.emissiveIntensity );\n\n\t\t\t\tuniforms.map.value = material.map;\n\t\t\t\tuniforms.specularMap.value = material.specularMap;\n\t\t\t\tuniforms.alphaMap.value = material.alphaMap;\n\n\t\t\t\tuniforms.lightMap.value = material.lightMap;\n\t\t\t\tuniforms.lightMapIntensity.value = material.lightMapIntensity;\n\n\t\t\t\tuniforms.aoMap.value = material.aoMap;\n\t\t\t\tuniforms.aoMapIntensity.value = material.aoMapIntensity;\n\n\t\t\t\t// uv repeat and offset setting priorities\n\t\t\t\t// 1. color map\n\t\t\t\t// 2. specular map\n\t\t\t\t// 3. normal map\n\t\t\t\t// 4. bump map\n\t\t\t\t// 5. alpha map\n\t\t\t\t// 6. emissive map\n\n\t\t\t\tvar uvScaleMap;\n\n\t\t\t\tif ( material.map ) {\n\n\t\t\t\t\tuvScaleMap = material.map;\n\n\t\t\t\t} else if ( material.specularMap ) {\n\n\t\t\t\t\tuvScaleMap = material.specularMap;\n\n\t\t\t\t} else if ( material.displacementMap ) {\n\n\t\t\t\t\tuvScaleMap = material.displacementMap;\n\n\t\t\t\t} else if ( material.normalMap ) {\n\n\t\t\t\t\tuvScaleMap = material.normalMap;\n\n\t\t\t\t} else if ( material.bumpMap ) {\n\n\t\t\t\t\tuvScaleMap = material.bumpMap;\n\n\t\t\t\t} else if ( material.glossinessMap ) {\n\n\t\t\t\t\tuvScaleMap = material.glossinessMap;\n\n\t\t\t\t} else if ( material.alphaMap ) {\n\n\t\t\t\t\tuvScaleMap = material.alphaMap;\n\n\t\t\t\t} else if ( material.emissiveMap ) {\n\n\t\t\t\t\tuvScaleMap = material.emissiveMap;\n\n\t\t\t\t}\n\n\t\t\t\tif ( uvScaleMap !== undefined ) {\n\n\t\t\t\t\t// backwards compatibility\n\t\t\t\t\tif ( uvScaleMap.isWebGLRenderTarget ) {\n\n\t\t\t\t\t\tuvScaleMap = uvScaleMap.texture;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tvar offset;\n\t\t\t\t\tvar repeat;\n\n\t\t\t\t\tif ( uvScaleMap.matrix !== undefined ) {\n\n\t\t\t\t\t\t// > r88.\n\n\t\t\t\t\t\tif ( uvScaleMap.matrixAutoUpdate === true ) {\n\n\t\t\t\t\t\t\toffset = uvScaleMap.offset;\n\t\t\t\t\t\t\trepeat = uvScaleMap.repeat;\n\t\t\t\t\t\t\tvar rotation = uvScaleMap.rotation;\n\t\t\t\t\t\t\tvar center = uvScaleMap.center;\n\n\t\t\t\t\t\t\tuvScaleMap.matrix.setUvTransform( offset.x, offset.y, repeat.x, repeat.y, rotation, center.x, center.y );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tuniforms.uvTransform.value.copy( uvScaleMap.matrix );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// <= r87. Remove when reasonable.\n\n\t\t\t\t\t\t\toffset = uvScaleMap.offset;\n\t\t\t\t\t\t\trepeat = uvScaleMap.repeat;\n\n\t\t\t\t\t\t\tuniforms.offsetRepeat.value.set( offset.x, offset.y, repeat.x, repeat.y );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tuniforms.envMap.value = material.envMap;\n\t\t\t\tuniforms.envMapIntensity.value = material.envMapIntensity;\n\t\t\t\tuniforms.flipEnvMap.value = ( material.envMap && material.envMap.isCubeTexture ) ? - 1 : 1;\n\n\t\t\t\tuniforms.refractionRatio.value = material.refractionRatio;\n\n\t\t\t\tuniforms.specular.value.copy( material.specular );\n\t\t\t\tuniforms.glossiness.value = material.glossiness;\n\n\t\t\t\tuniforms.glossinessMap.value = material.glossinessMap;\n\n\t\t\t\tuniforms.emissiveMap.value = material.emissiveMap;\n\t\t\t\tuniforms.bumpMap.value = material.bumpMap;\n\t\t\t\tuniforms.normalMap.value = material.normalMap;\n\n\t\t\t\tuniforms.displacementMap.value = material.displacementMap;\n\t\t\t\tuniforms.displacementScale.value = material.displacementScale;\n\t\t\t\tuniforms.displacementBias.value = material.displacementBias;\n\n\t\t\t\tif ( uniforms.glossinessMap.value !== null && defines.USE_GLOSSINESSMAP === undefined ) {\n\n\t\t\t\t\tdefines.USE_GLOSSINESSMAP = '';\n\t\t\t\t\t// set USE_ROUGHNESSMAP to enable vUv\n\t\t\t\t\tdefines.USE_ROUGHNESSMAP = '';\n\n\t\t\t\t}\n\n\t\t\t\tif ( uniforms.glossinessMap.value === null && defines.USE_GLOSSINESSMAP !== undefined ) {\n\n\t\t\t\t\tdelete defines.USE_GLOSSINESSMAP;\n\t\t\t\t\tdelete defines.USE_ROUGHNESSMAP;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t};\n\n\t}\n\n\t/*********************************/\n\t/********** INTERNALS ************/\n\t/*********************************/\n\n\t/* CONSTANTS */\n\n\tvar WEBGL_CONSTANTS = {\n\t\tFLOAT: 5126,\n\t\t//FLOAT_MAT2: 35674,\n\t\tFLOAT_MAT3: 35675,\n\t\tFLOAT_MAT4: 35676,\n\t\tFLOAT_VEC2: 35664,\n\t\tFLOAT_VEC3: 35665,\n\t\tFLOAT_VEC4: 35666,\n\t\tLINEAR: 9729,\n\t\tREPEAT: 10497,\n\t\tSAMPLER_2D: 35678,\n\t\tPOINTS: 0,\n\t\tLINES: 1,\n\t\tLINE_LOOP: 2,\n\t\tLINE_STRIP: 3,\n\t\tTRIANGLES: 4,\n\t\tTRIANGLE_STRIP: 5,\n\t\tTRIANGLE_FAN: 6,\n\t\tUNSIGNED_BYTE: 5121,\n\t\tUNSIGNED_SHORT: 5123\n\t};\n\n\tvar WEBGL_TYPE = {\n\t\t5126: Number,\n\t\t//35674: THREE.Matrix2,\n\t\t35675: THREE.Matrix3,\n\t\t35676: THREE.Matrix4,\n\t\t35664: THREE.Vector2,\n\t\t35665: THREE.Vector3,\n\t\t35666: THREE.Vector4,\n\t\t35678: THREE.Texture\n\t};\n\n\tvar WEBGL_COMPONENT_TYPES = {\n\t\t5120: Int8Array,\n\t\t5121: Uint8Array,\n\t\t5122: Int16Array,\n\t\t5123: Uint16Array,\n\t\t5125: Uint32Array,\n\t\t5126: Float32Array\n\t};\n\n\tvar WEBGL_FILTERS = {\n\t\t9728: THREE.NearestFilter,\n\t\t9729: THREE.LinearFilter,\n\t\t9984: THREE.NearestMipMapNearestFilter,\n\t\t9985: THREE.LinearMipMapNearestFilter,\n\t\t9986: THREE.NearestMipMapLinearFilter,\n\t\t9987: THREE.LinearMipMapLinearFilter\n\t};\n\n\tvar WEBGL_WRAPPINGS = {\n\t\t33071: THREE.ClampToEdgeWrapping,\n\t\t33648: THREE.MirroredRepeatWrapping,\n\t\t10497: THREE.RepeatWrapping\n\t};\n\n\tvar WEBGL_TEXTURE_FORMATS = {\n\t\t6406: THREE.AlphaFormat,\n\t\t6407: THREE.RGBFormat,\n\t\t6408: THREE.RGBAFormat,\n\t\t6409: THREE.LuminanceFormat,\n\t\t6410: THREE.LuminanceAlphaFormat\n\t};\n\n\tvar WEBGL_TEXTURE_DATATYPES = {\n\t\t5121: THREE.UnsignedByteType,\n\t\t32819: THREE.UnsignedShort4444Type,\n\t\t32820: THREE.UnsignedShort5551Type,\n\t\t33635: THREE.UnsignedShort565Type\n\t};\n\n\tvar WEBGL_SIDES = {\n\t\t1028: THREE.BackSide, // Culling front\n\t\t1029: THREE.FrontSide // Culling back\n\t\t//1032: THREE.NoSide // Culling front and back, what to do?\n\t};\n\n\tvar WEBGL_DEPTH_FUNCS = {\n\t\t512: THREE.NeverDepth,\n\t\t513: THREE.LessDepth,\n\t\t514: THREE.EqualDepth,\n\t\t515: THREE.LessEqualDepth,\n\t\t516: THREE.GreaterEqualDepth,\n\t\t517: THREE.NotEqualDepth,\n\t\t518: THREE.GreaterEqualDepth,\n\t\t519: THREE.AlwaysDepth\n\t};\n\n\tvar WEBGL_BLEND_EQUATIONS = {\n\t\t32774: THREE.AddEquation,\n\t\t32778: THREE.SubtractEquation,\n\t\t32779: THREE.ReverseSubtractEquation\n\t};\n\n\tvar WEBGL_BLEND_FUNCS = {\n\t\t0: THREE.ZeroFactor,\n\t\t1: THREE.OneFactor,\n\t\t768: THREE.SrcColorFactor,\n\t\t769: THREE.OneMinusSrcColorFactor,\n\t\t770: THREE.SrcAlphaFactor,\n\t\t771: THREE.OneMinusSrcAlphaFactor,\n\t\t772: THREE.DstAlphaFactor,\n\t\t773: THREE.OneMinusDstAlphaFactor,\n\t\t774: THREE.DstColorFactor,\n\t\t775: THREE.OneMinusDstColorFactor,\n\t\t776: THREE.SrcAlphaSaturateFactor\n\t\t// The followings are not supported by Three.js yet\n\t\t//32769: CONSTANT_COLOR,\n\t\t//32770: ONE_MINUS_CONSTANT_COLOR,\n\t\t//32771: CONSTANT_ALPHA,\n\t\t//32772: ONE_MINUS_CONSTANT_COLOR\n\t};\n\n\tvar WEBGL_TYPE_SIZES = {\n\t\t'SCALAR': 1,\n\t\t'VEC2': 2,\n\t\t'VEC3': 3,\n\t\t'VEC4': 4,\n\t\t'MAT2': 4,\n\t\t'MAT3': 9,\n\t\t'MAT4': 16\n\t};\n\n\tvar PATH_PROPERTIES = {\n\t\tscale: 'scale',\n\t\ttranslation: 'position',\n\t\trotation: 'quaternion',\n\t\tweights: 'morphTargetInfluences'\n\t};\n\n\tvar INTERPOLATION = {\n\t\tCATMULLROMSPLINE: THREE.InterpolateSmooth,\n\t\tCUBICSPLINE: THREE.InterpolateSmooth,\n\t\tLINEAR: THREE.InterpolateLinear,\n\t\tSTEP: THREE.InterpolateDiscrete\n\t};\n\n\tvar STATES_ENABLES = {\n\t\t2884: 'CULL_FACE',\n\t\t2929: 'DEPTH_TEST',\n\t\t3042: 'BLEND',\n\t\t3089: 'SCISSOR_TEST',\n\t\t32823: 'POLYGON_OFFSET_FILL',\n\t\t32926: 'SAMPLE_ALPHA_TO_COVERAGE'\n\t};\n\n\tvar ALPHA_MODES = {\n\t\tOPAQUE: 'OPAQUE',\n\t\tMASK: 'MASK',\n\t\tBLEND: 'BLEND'\n\t};\n\n\t/* UTILITY FUNCTIONS */\n\n\tfunction _each( object, callback, thisObj ) {\n\n\t\tif ( ! object ) {\n\n\t\t\treturn Promise.resolve();\n\n\t\t}\n\n\t\tvar results;\n\t\tvar fns = [];\n\n\t\tif ( Object.prototype.toString.call( object ) === '[object Array]' ) {\n\n\t\t\tresults = [];\n\n\t\t\tvar length = object.length;\n\n\t\t\tfor ( var idx = 0; idx < length; idx ++ ) {\n\n\t\t\t\tvar value = callback.call( thisObj || this, object[ idx ], idx );\n\n\t\t\t\tif ( value ) {\n\n\t\t\t\t\tif ( value instanceof Promise ) {\n\n\t\t\t\t\t\tvalue = value.then( function ( key, value ) {\n\n\t\t\t\t\t\t\tresults[ key ] = value;\n\n\t\t\t\t\t\t}.bind( this, idx ) );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tresults[ idx ] = value;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tfns.push( value );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tresults = {};\n\n\t\t\tfor ( var key in object ) {\n\n\t\t\t\tif ( object.hasOwnProperty( key ) ) {\n\n\t\t\t\t\tvar value = callback.call( thisObj || this, object[ key ], key );\n\n\t\t\t\t\tif ( value ) {\n\n\t\t\t\t\t\tif ( value instanceof Promise ) {\n\n\t\t\t\t\t\t\tvalue = value.then( function ( key, value ) {\n\n\t\t\t\t\t\t\t\tresults[ key ] = value;\n\n\t\t\t\t\t\t\t}.bind( this, key ) );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tresults[ key ] = value;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tfns.push( value );\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 Promise.all( fns ).then( function () {\n\n\t\t\treturn results;\n\n\t\t} );\n\n\t}\n\n\tfunction resolveURL( url, path ) {\n\n\t\t// Invalid URL\n\t\tif ( typeof url !== 'string' || url === '' )\n\t\t\treturn '';\n\n\t\t// Absolute URL http://,https://,//\n\t\tif ( /^(https?:)?\\/\\//i.test( url ) ) {\n\n\t\t\treturn url;\n\n\t\t}\n\n\t\t// Data URI\n\t\tif ( /^data:.*,.*$/i.test( url ) ) {\n\n\t\t\treturn url;\n\n\t\t}\n\n\t\t// Blob URL\n\t\tif ( /^blob:.*$/i.test( url ) ) {\n\n\t\t\treturn url;\n\n\t\t}\n\n\t\t// Relative URL\n\t\treturn path + url;\n\n\t}\n\n\tfunction convertUint8ArrayToString( array ) {\n\n\t\tif ( window.TextDecoder !== undefined ) {\n\n\t\t\treturn new TextDecoder().decode( array );\n\n\t\t}\n\n\t\t// Avoid the String.fromCharCode.apply(null, array) shortcut, which\n\t\t// throws a \"maximum call stack size exceeded\" error for large arrays.\n\n\t\tvar s = '';\n\n\t\tfor ( var i = 0, il = array.length; i < il; i ++ ) {\n\n\t\t\ts += String.fromCharCode( array[ i ] );\n\n\t\t}\n\n\t\treturn s;\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#default-material\n\t */\n\tfunction createDefaultMaterial() {\n\n\t\treturn new THREE.MeshStandardMaterial( {\n\t\t\tcolor: 0xFFFFFF,\n\t\t\temissive: 0x000000,\n\t\t\tmetalness: 1,\n\t\t\troughness: 1,\n\t\t\ttransparent: false,\n\t\t\tdepthTest: true,\n\t\t\tside: THREE.FrontSide\n\t\t} );\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#morph-targets\n\t *\n\t * TODO: Implement support for morph targets on TANGENT attribute.\n\t *\n\t * @param {THREE.Mesh} mesh\n\t * @param {GLTF.Mesh} meshDef\n\t * @param {GLTF.Primitive} primitiveDef\n\t * @param {Object} dependencies\n\t */\n\tfunction addMorphTargets( mesh, meshDef, primitiveDef, dependencies ) {\n\n\t\tvar geometry = mesh.geometry;\n\t\tvar material = mesh.material;\n\n\t\tvar targets = primitiveDef.targets;\n\t\tvar morphAttributes = geometry.morphAttributes;\n\n\t\tmorphAttributes.position = [];\n\t\tmorphAttributes.normal = [];\n\n\t\tmaterial.morphTargets = true;\n\n\t\tfor ( var i = 0, il = targets.length; i < il; i ++ ) {\n\n\t\t\tvar target = targets[ i ];\n\t\t\tvar attributeName = 'morphTarget' + i;\n\n\t\t\tvar positionAttribute, normalAttribute;\n\n\t\t\tif ( target.POSITION !== undefined ) {\n\n\t\t\t\t// Three.js morph formula is\n\t\t\t\t// position\n\t\t\t\t// + weight0 * ( morphTarget0 - position )\n\t\t\t\t// + weight1 * ( morphTarget1 - position )\n\t\t\t\t// ...\n\t\t\t\t// while the glTF one is\n\t\t\t\t// position\n\t\t\t\t// + weight0 * morphTarget0\n\t\t\t\t// + weight1 * morphTarget1\n\t\t\t\t// ...\n\t\t\t\t// then adding position to morphTarget.\n\t\t\t\t// So morphTarget value will depend on mesh's position, then cloning attribute\n\t\t\t\t// for the case if attribute is shared among two or more meshes.\n\n\t\t\t\tpositionAttribute = dependencies.accessors[ target.POSITION ].clone();\n\t\t\t\tvar position = geometry.attributes.position;\n\n\t\t\t\tfor ( var j = 0, jl = positionAttribute.count; j < jl; j ++ ) {\n\n\t\t\t\t\tpositionAttribute.setXYZ(\n\t\t\t\t\t\tj,\n\t\t\t\t\t\tpositionAttribute.getX( j ) + position.getX( j ),\n\t\t\t\t\t\tpositionAttribute.getY( j ) + position.getY( j ),\n\t\t\t\t\t\tpositionAttribute.getZ( j ) + position.getZ( j )\n\t\t\t\t\t);\n\n\t\t\t\t}\n\n\t\t\t} else if ( geometry.attributes.position ) {\n\n\t\t\t\t// Copying the original position not to affect the final position.\n\t\t\t\t// See the formula above.\n\t\t\t\tpositionAttribute = geometry.attributes.position.clone();\n\n\t\t\t}\n\n\t\t\tif ( positionAttribute !== undefined ) {\n\n\t\t\t\tpositionAttribute.name = attributeName;\n\t\t\t\tmorphAttributes.position.push( positionAttribute );\n\n\t\t\t}\n\n\t\t\tif ( target.NORMAL !== undefined ) {\n\n\t\t\t\tmaterial.morphNormals = true;\n\n\t\t\t\t// see target.POSITION's comment\n\n\t\t\t\tnormalAttribute = dependencies.accessors[ target.NORMAL ].clone();\n\t\t\t\tvar normal = geometry.attributes.normal;\n\n\t\t\t\tfor ( var j = 0, jl = normalAttribute.count; j < jl; j ++ ) {\n\n\t\t\t\t\tnormalAttribute.setXYZ(\n\t\t\t\t\t\tj,\n\t\t\t\t\t\tnormalAttribute.getX( j ) + normal.getX( j ),\n\t\t\t\t\t\tnormalAttribute.getY( j ) + normal.getY( j ),\n\t\t\t\t\t\tnormalAttribute.getZ( j ) + normal.getZ( j )\n\t\t\t\t\t);\n\n\t\t\t\t}\n\n\t\t\t} else if ( geometry.attributes.normal !== undefined ) {\n\n\t\t\t\tnormalAttribute = geometry.attributes.normal.clone();\n\n\t\t\t}\n\n\t\t\tif ( normalAttribute !== undefined ) {\n\n\t\t\t\tnormalAttribute.name = attributeName;\n\t\t\t\tmorphAttributes.normal.push( normalAttribute );\n\n\t\t\t}\n\n\t\t}\n\n\t\tmesh.updateMorphTargets();\n\n\t\tif ( meshDef.weights !== undefined ) {\n\n\t\t\tfor ( var i = 0, il = meshDef.weights.length; i < il; i ++ ) {\n\n\t\t\t\tmesh.morphTargetInfluences[ i ] = meshDef.weights[ i ];\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t/* GLTF PARSER */\n\n\tfunction GLTFParser( json, extensions, options ) {\n\n\t\tthis.json = json || {};\n\t\tthis.extensions = extensions || {};\n\t\tthis.options = options || {};\n\n\t\t// loader object cache\n\t\tthis.cache = new GLTFRegistry();\n\n\t\tthis.textureLoader = new THREE.TextureLoader( this.options.manager );\n\t\tthis.textureLoader.setCrossOrigin( this.options.crossOrigin );\n\n\t\tthis.fileLoader = new THREE.FileLoader( this.options.manager );\n\t\tthis.fileLoader.setResponseType( 'arraybuffer' );\n\n\t}\n\n\tGLTFParser.prototype._withDependencies = function ( dependencies ) {\n\n\t\tvar _dependencies = {};\n\n\t\tfor ( var i = 0; i < dependencies.length; i ++ ) {\n\n\t\t\tvar dependency = dependencies[ i ];\n\t\t\tvar fnName = 'load' + dependency.charAt( 0 ).toUpperCase() + dependency.slice( 1 );\n\n\t\t\tvar cached = this.cache.get( dependency );\n\n\t\t\tif ( cached !== undefined ) {\n\n\t\t\t\t_dependencies[ dependency ] = cached;\n\n\t\t\t} else if ( this[ fnName ] ) {\n\n\t\t\t\tvar fn = this[ fnName ]();\n\t\t\t\tthis.cache.add( dependency, fn );\n\n\t\t\t\t_dependencies[ dependency ] = fn;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn _each( _dependencies, function ( dependency ) {\n\n\t\t\treturn dependency;\n\n\t\t} );\n\n\t};\n\n\tGLTFParser.prototype.parse = function ( onLoad, onError ) {\n\n\t\tvar json = this.json;\n\t\tvar parser = this;\n\n\t\t// Clear the loader cache\n\t\tthis.cache.removeAll();\n\n\t\t// Fire the callback on complete\n\t\tthis._withDependencies( [\n\n\t\t\t'scenes',\n\t\t\t'animations'\n\n\t\t] ).then( function ( dependencies ) {\n\n\t\t\tvar scenes = dependencies.scenes || [];\n\t\t\tvar scene = scenes[ json.scene || 0 ];\n\t\t\tvar animations = dependencies.animations || [];\n\n\t\t\tparser.getDependencies( 'camera' ).then( function ( cameras ) {\n\n\t\t\t\tonLoad( scene, scenes, cameras, animations );\n\n\t\t\t} ).catch( onError );\n\n\t\t} ).catch( onError );\n\n\t};\n\n\t/**\n\t * Requests the specified dependency asynchronously, with caching.\n\t * @param {string} type\n\t * @param {number} index\n\t * @return {Promise}\n\t */\n\tGLTFParser.prototype.getDependency = function ( type, index ) {\n\n\t\tvar cacheKey = type + ':' + index;\n\t\tvar dependency = this.cache.get( cacheKey );\n\n\t\tif ( ! dependency ) {\n\n\t\t\tvar fnName = 'load' + type.charAt( 0 ).toUpperCase() + type.slice( 1 );\n\t\t\tdependency = this[ fnName ]( index );\n\t\t\tthis.cache.add( cacheKey, dependency );\n\n\t\t}\n\n\t\treturn dependency;\n\n\t};\n\n\t/**\n\t * Requests all dependencies of the specified type asynchronously, with caching.\n\t * @param {string} type\n\t * @return {Promise>}\n\t */\n\tGLTFParser.prototype.getDependencies = function ( type ) {\n\n\t\tvar parser = this;\n\t\tvar defs = this.json[ type + 's' ] || [];\n\n\t\treturn Promise.all( defs.map( function ( def, index ) {\n\n\t\t\treturn parser.getDependency( type, index );\n\n\t\t} ) );\n\n\t};\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#buffers-and-buffer-views\n\t * @param {number} bufferIndex\n\t * @return {Promise}\n\t */\n\tGLTFParser.prototype.loadBuffer = function ( bufferIndex ) {\n\n\t\tvar bufferDef = this.json.buffers[ bufferIndex ];\n\t\tvar loader = this.fileLoader;\n\n\t\tif ( bufferDef.type && bufferDef.type !== 'arraybuffer' ) {\n\n\t\t\tthrow new Error( 'THREE.GLTFLoader: ' + bufferDef.type + ' buffer type is not supported.' );\n\n\t\t}\n\n\t\t// If present, GLB container is required to be the first buffer.\n\t\tif ( bufferDef.uri === undefined && bufferIndex === 0 ) {\n\n\t\t\treturn Promise.resolve( this.extensions[ EXTENSIONS.KHR_BINARY_GLTF ].body );\n\n\t\t}\n\n\t\tvar options = this.options;\n\n\t\treturn new Promise( function ( resolve, reject ) {\n\n\t\t\tloader.load( resolveURL( bufferDef.uri, options.path ), resolve, undefined, function () {\n\n\t\t\t\treject( new Error( 'THREE.GLTFLoader: Failed to load buffer \"' + bufferDef.uri + '\".' ) );\n\n\t\t\t} );\n\n\t\t} );\n\n\t};\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#buffers-and-buffer-views\n\t * @param {number} bufferViewIndex\n\t * @return {Promise}\n\t */\n\tGLTFParser.prototype.loadBufferView = function ( bufferViewIndex ) {\n\n\t\tvar bufferViewDef = this.json.bufferViews[ bufferViewIndex ];\n\n\t\treturn this.getDependency( 'buffer', bufferViewDef.buffer ).then( function ( buffer ) {\n\n\t\t\tvar byteLength = bufferViewDef.byteLength || 0;\n\t\t\tvar byteOffset = bufferViewDef.byteOffset || 0;\n\t\t\treturn buffer.slice( byteOffset, byteOffset + byteLength );\n\n\t\t} );\n\n\t};\n\n\tGLTFParser.prototype.loadAccessors = function () {\n\n\t\tvar parser = this;\n\t\tvar json = this.json;\n\n\t\treturn _each( json.accessors, function ( accessor ) {\n\n\t\t\treturn parser.getDependency( 'bufferView', accessor.bufferView ).then( function ( bufferView ) {\n\n\t\t\t\tvar itemSize = WEBGL_TYPE_SIZES[ accessor.type ];\n\t\t\t\tvar TypedArray = WEBGL_COMPONENT_TYPES[ accessor.componentType ];\n\n\t\t\t\t// For VEC3: itemSize is 3, elementBytes is 4, itemBytes is 12.\n\t\t\t\tvar elementBytes = TypedArray.BYTES_PER_ELEMENT;\n\t\t\t\tvar itemBytes = elementBytes * itemSize;\n\t\t\t\tvar byteStride = json.bufferViews[ accessor.bufferView ].byteStride;\n\t\t\t\tvar normalized = accessor.normalized === true;\n\t\t\t\tvar array;\n\n\t\t\t\t// The buffer is not interleaved if the stride is the item size in bytes.\n\t\t\t\tif ( byteStride && byteStride !== itemBytes ) {\n\n\t\t\t\t\t// Use the full buffer if it's interleaved.\n\t\t\t\t\tarray = new TypedArray( bufferView );\n\n\t\t\t\t\t// Integer parameters to IB/IBA are in array elements, not bytes.\n\t\t\t\t\tvar ib = new THREE.InterleavedBuffer( array, byteStride / elementBytes );\n\n\t\t\t\t\treturn new THREE.InterleavedBufferAttribute( ib, itemSize, accessor.byteOffset / elementBytes, normalized );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tarray = new TypedArray( bufferView, accessor.byteOffset, accessor.count * itemSize );\n\n\t\t\t\t\treturn new THREE.BufferAttribute( array, itemSize, normalized );\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t} );\n\n\t};\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#textures\n\t * @param {number} textureIndex\n\t * @return {Promise}\n\t */\n\tGLTFParser.prototype.loadTexture = function ( textureIndex ) {\n\n\t\tvar parser = this;\n\t\tvar json = this.json;\n\t\tvar options = this.options;\n\t\tvar textureLoader = this.textureLoader;\n\n\t\tvar URL = window.URL || window.webkitURL;\n\n\t\tvar textureDef = json.textures[ textureIndex ];\n\t\tvar source = json.images[ textureDef.source ];\n\t\tvar sourceURI = source.uri;\n\t\tvar isObjectURL = false;\n\n\t\tif ( source.bufferView !== undefined ) {\n\n\t\t\t// Load binary image data from bufferView, if provided.\n\n\t\t\tsourceURI = parser.getDependency( 'bufferView', source.bufferView )\n\t\t\t\t.then( function ( bufferView ) {\n\n\t\t\t\t\tisObjectURL = true;\n\t\t\t\t\tvar blob = new Blob( [ bufferView ], { type: source.mimeType } );\n\t\t\t\t\tsourceURI = URL.createObjectURL( blob );\n\t\t\t\t\treturn sourceURI;\n\n\t\t\t\t} );\n\n\t\t}\n\n\t\treturn Promise.resolve( sourceURI ).then( function ( sourceURI ) {\n\n\t\t\t// Load Texture resource.\n\n\t\t\tvar loader = THREE.Loader.Handlers.get( sourceURI ) || textureLoader;\n\n\t\t\treturn new Promise( function ( resolve, reject ) {\n\n\t\t\t\tloader.load( resolveURL( sourceURI, options.path ), resolve, undefined, reject );\n\n\t\t\t} );\n\n\t\t} ).then( function ( texture ) {\n\n\t\t\t// Clean up resources and configure Texture.\n\n\t\t\tif ( isObjectURL === true ) {\n\n\t\t\t\tURL.revokeObjectURL( sourceURI );\n\n\t\t\t}\n\n\t\t\ttexture.flipY = false;\n\n\t\t\tif ( textureDef.name !== undefined ) texture.name = textureDef.name;\n\n\t\t\ttexture.format = textureDef.format !== undefined ? WEBGL_TEXTURE_FORMATS[ textureDef.format ] : THREE.RGBAFormat;\n\n\t\t\tif ( textureDef.internalFormat !== undefined && texture.format !== WEBGL_TEXTURE_FORMATS[ textureDef.internalFormat ] ) {\n\n\t\t\t\tconsole.warn( 'THREE.GLTFLoader: Three.js does not support texture internalFormat which is different from texture format. ' +\n\t\t\t\t\t\t\t\t\t\t\t'internalFormat will be forced to be the same value as format.' );\n\n\t\t\t}\n\n\t\t\ttexture.type = textureDef.type !== undefined ? WEBGL_TEXTURE_DATATYPES[ textureDef.type ] : THREE.UnsignedByteType;\n\n\t\t\tvar samplers = json.samplers || {};\n\t\t\tvar sampler = samplers[ textureDef.sampler ] || {};\n\n\t\t\ttexture.magFilter = WEBGL_FILTERS[ sampler.magFilter ] || THREE.LinearFilter;\n\t\t\ttexture.minFilter = WEBGL_FILTERS[ sampler.minFilter ] || THREE.LinearMipMapLinearFilter;\n\t\t\ttexture.wrapS = WEBGL_WRAPPINGS[ sampler.wrapS ] || THREE.RepeatWrapping;\n\t\t\ttexture.wrapT = WEBGL_WRAPPINGS[ sampler.wrapT ] || THREE.RepeatWrapping;\n\n\t\t\treturn texture;\n\n\t\t} );\n\n\t};\n\n\t/**\n\t * Asynchronously assigns a texture to the given material parameters.\n\t * @param {Object} materialParams\n\t * @param {string} textureName\n\t * @param {number} textureIndex\n\t * @return {Promise}\n\t */\n\tGLTFParser.prototype.assignTexture = function ( materialParams, textureName, textureIndex ) {\n\n\t\treturn this.getDependency( 'texture', textureIndex ).then( function ( texture ) {\n\n\t\t\tmaterialParams[ textureName ] = texture;\n\n\t\t} );\n\n\t};\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#materials\n\t * @return {Promise>}\n\t */\n\tGLTFParser.prototype.loadMaterials = function () {\n\n\t\tvar parser = this;\n\t\tvar json = this.json;\n\t\tvar extensions = this.extensions;\n\n\t\treturn _each( json.materials, function ( material ) {\n\n\t\t\tvar materialType;\n\t\t\tvar materialParams = {};\n\t\t\tvar materialExtensions = material.extensions || {};\n\n\t\t\tvar pending = [];\n\n\t\t\tif ( materialExtensions[ EXTENSIONS.KHR_MATERIALS_COMMON ] ) {\n\n\t\t\t\tvar khcExtension = extensions[ EXTENSIONS.KHR_MATERIALS_COMMON ];\n\t\t\t\tmaterialType = khcExtension.getMaterialType( material );\n\t\t\t\tpending.push( khcExtension.extendParams( materialParams, material, parser ) );\n\n\t\t\t} else if ( materialExtensions[ EXTENSIONS.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS ] ) {\n\n\t\t\t\tvar sgExtension = extensions[ EXTENSIONS.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS ];\n\t\t\t\tmaterialType = sgExtension.getMaterialType( material );\n\t\t\t\tpending.push( sgExtension.extendParams( materialParams, material, parser ) );\n\n\t\t\t} else if ( material.pbrMetallicRoughness !== undefined ) {\n\n\t\t\t\t// Specification:\n\t\t\t\t// https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#metallic-roughness-material\n\n\t\t\t\tmaterialType = THREE.MeshStandardMaterial;\n\n\t\t\t\tvar metallicRoughness = material.pbrMetallicRoughness;\n\n\t\t\t\tmaterialParams.color = new THREE.Color( 1.0, 1.0, 1.0 );\n\t\t\t\tmaterialParams.opacity = 1.0;\n\n\t\t\t\tif ( Array.isArray( metallicRoughness.baseColorFactor ) ) {\n\n\t\t\t\t\tvar array = metallicRoughness.baseColorFactor;\n\n\t\t\t\t\tmaterialParams.color.fromArray( array );\n\t\t\t\t\tmaterialParams.opacity = array[ 3 ];\n\n\t\t\t\t}\n\n\t\t\t\tif ( metallicRoughness.baseColorTexture !== undefined ) {\n\n\t\t\t\t\tpending.push( parser.assignTexture( materialParams, 'map', metallicRoughness.baseColorTexture.index ) );\n\n\t\t\t\t}\n\n\t\t\t\tmaterialParams.metalness = metallicRoughness.metallicFactor !== undefined ? metallicRoughness.metallicFactor : 1.0;\n\t\t\t\tmaterialParams.roughness = metallicRoughness.roughnessFactor !== undefined ? metallicRoughness.roughnessFactor : 1.0;\n\n\t\t\t\tif ( metallicRoughness.metallicRoughnessTexture !== undefined ) {\n\n\t\t\t\t\tvar textureIndex = metallicRoughness.metallicRoughnessTexture.index;\n\t\t\t\t\tpending.push( parser.assignTexture( materialParams, 'metalnessMap', textureIndex ) );\n\t\t\t\t\tpending.push( parser.assignTexture( materialParams, 'roughnessMap', textureIndex ) );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tmaterialType = THREE.MeshPhongMaterial;\n\n\t\t\t}\n\n\t\t\tif ( material.doubleSided === true ) {\n\n\t\t\t\tmaterialParams.side = THREE.DoubleSide;\n\n\t\t\t}\n\n\t\t\tvar alphaMode = material.alphaMode || ALPHA_MODES.OPAQUE;\n\n\t\t\tif ( alphaMode !== ALPHA_MODES.OPAQUE ) {\n\n\t\t\t\tmaterialParams.transparent = true;\n\n\t\t\t\tif ( alphaMode === ALPHA_MODES.MASK ) {\n\n\t\t\t\t\tmaterialParams.alphaTest = material.alphaCutoff || 0.5;\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tmaterialParams.transparent = false;\n\n\t\t\t}\n\n\t\t\tif ( material.normalTexture !== undefined ) {\n\n\t\t\t\tpending.push( parser.assignTexture( materialParams, 'normalMap', material.normalTexture.index ) );\n\n\t\t\t\tmaterialParams.normalScale = new THREE.Vector2( 1, 1 );\n\n\t\t\t\tif ( material.normalTexture.scale !== undefined ) {\n\n\t\t\t\t\tmaterialParams.normalScale.set( material.normalTexture.scale, material.normalTexture.scale );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( material.occlusionTexture !== undefined ) {\n\n\t\t\t\tpending.push( parser.assignTexture( materialParams, 'aoMap', material.occlusionTexture.index ) );\n\n\t\t\t\tif ( material.occlusionTexture.strength !== undefined ) {\n\n\t\t\t\t\tmaterialParams.aoMapIntensity = material.occlusionTexture.strength;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( material.emissiveFactor !== undefined ) {\n\n\t\t\t\tif ( materialType === THREE.MeshBasicMaterial ) {\n\n\t\t\t\t\tmaterialParams.color = new THREE.Color().fromArray( material.emissiveFactor );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tmaterialParams.emissive = new THREE.Color().fromArray( material.emissiveFactor );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( material.emissiveTexture !== undefined ) {\n\n\t\t\t\tif ( materialType === THREE.MeshBasicMaterial ) {\n\n\t\t\t\t\tpending.push( parser.assignTexture( materialParams, 'map', material.emissiveTexture.index ) );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tpending.push( parser.assignTexture( materialParams, 'emissiveMap', material.emissiveTexture.index ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn Promise.all( pending ).then( function () {\n\n\t\t\t\tvar _material;\n\n\t\t\t\tif ( materialType === THREE.ShaderMaterial ) {\n\n\t\t\t\t\t_material = extensions[ EXTENSIONS.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS ].createMaterial( materialParams );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t_material = new materialType( materialParams );\n\n\t\t\t\t}\n\n\t\t\t\tif ( material.name !== undefined ) _material.name = material.name;\n\n\t\t\t\t// Normal map textures use OpenGL conventions:\n\t\t\t\t// https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#materialnormaltexture\n\t\t\t\tif ( _material.normalScale ) {\n\n\t\t\t\t\t_material.normalScale.x = - _material.normalScale.x;\n\n\t\t\t\t}\n\n\t\t\t\t// emissiveTexture and baseColorTexture use sRGB encoding.\n\t\t\t\tif ( _material.map ) _material.map.encoding = THREE.sRGBEncoding;\n\t\t\t\tif ( _material.emissiveMap ) _material.emissiveMap.encoding = THREE.sRGBEncoding;\n\n\t\t\t\tif ( material.extras ) _material.userData = material.extras;\n\n\t\t\t\treturn _material;\n\n\t\t\t} );\n\n\t\t} );\n\n\t};\n\n\tGLTFParser.prototype.loadGeometries = function ( primitives ) {\n\n\t\treturn this._withDependencies( [\n\n\t\t\t'accessors',\n\n\t\t] ).then( function ( dependencies ) {\n\n\t\t\treturn _each( primitives, function ( primitive ) {\n\n\t\t\t\tvar geometry = new THREE.BufferGeometry();\n\n\t\t\t\tvar attributes = primitive.attributes;\n\n\t\t\t\tfor ( var attributeId in attributes ) {\n\n\t\t\t\t\tvar attributeEntry = attributes[ attributeId ];\n\n\t\t\t\t\tif ( attributeEntry === undefined ) return;\n\n\t\t\t\t\tvar bufferAttribute = dependencies.accessors[ attributeEntry ];\n\n\t\t\t\t\tswitch ( attributeId ) {\n\n\t\t\t\t\t\tcase 'POSITION':\n\n\t\t\t\t\t\t\tgeometry.addAttribute( 'position', bufferAttribute );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'NORMAL':\n\n\t\t\t\t\t\t\tgeometry.addAttribute( 'normal', bufferAttribute );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'TEXCOORD_0':\n\t\t\t\t\t\tcase 'TEXCOORD0':\n\t\t\t\t\t\tcase 'TEXCOORD':\n\n\t\t\t\t\t\t\tgeometry.addAttribute( 'uv', bufferAttribute );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'TEXCOORD_1':\n\n\t\t\t\t\t\t\tgeometry.addAttribute( 'uv2', bufferAttribute );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'COLOR_0':\n\t\t\t\t\t\tcase 'COLOR0':\n\t\t\t\t\t\tcase 'COLOR':\n\n\t\t\t\t\t\t\tgeometry.addAttribute( 'color', bufferAttribute );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'WEIGHTS_0':\n\t\t\t\t\t\tcase 'WEIGHT': // WEIGHT semantic deprecated.\n\n\t\t\t\t\t\t\tgeometry.addAttribute( 'skinWeight', bufferAttribute );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'JOINTS_0':\n\t\t\t\t\t\tcase 'JOINT': // JOINT semantic deprecated.\n\n\t\t\t\t\t\t\tgeometry.addAttribute( 'skinIndex', bufferAttribute );\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\tif ( primitive.indices !== undefined ) {\n\n\t\t\t\t\tgeometry.setIndex( dependencies.accessors[ primitive.indices ] );\n\n\t\t\t\t}\n\n\t\t\t\treturn geometry;\n\n\t\t\t} );\n\n\t\t} );\n\n\t};\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#meshes\n\t */\n\tGLTFParser.prototype.loadMeshes = function () {\n\n\t\tvar scope = this;\n\t\tvar json = this.json;\n\t\tvar extensions = this.extensions;\n\n\t\treturn this._withDependencies( [\n\n\t\t\t'accessors',\n\t\t\t'materials'\n\n\t\t] ).then( function ( dependencies ) {\n\n\t\t\treturn _each( json.meshes, function ( meshDef, meshIndex ) {\n\n\t\t\t\tvar group = new THREE.Group();\n\n\t\t\t\tvar primitives = meshDef.primitives || [];\n\n\t\t\t\treturn scope.loadGeometries( primitives ).then( function ( geometries ) {\n\n\t\t\t\t\tfor ( var i = 0; i < primitives.length; i ++ ) {\n\n\t\t\t\t\t\tvar primitive = primitives[ i ];\n\t\t\t\t\t\tvar geometry = geometries[ i ];\n\n\t\t\t\t\t\tvar material = primitive.material === undefined\n\t\t\t\t\t\t\t? createDefaultMaterial()\n\t\t\t\t\t\t\t: dependencies.materials[ primitive.material ];\n\n\t\t\t\t\t\tif ( material.aoMap\n\t\t\t\t\t\t\t\t&& geometry.attributes.uv2 === undefined\n\t\t\t\t\t\t\t\t&& geometry.attributes.uv !== undefined ) {\n\n\t\t\t\t\t\t\tconsole.log( 'THREE.GLTFLoader: Duplicating UVs to support aoMap.' );\n\t\t\t\t\t\t\tgeometry.addAttribute( 'uv2', new THREE.BufferAttribute( geometry.attributes.uv.array, 2 ) );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar useVertexColors = geometry.attributes.color !== undefined;\n\t\t\t\t\t\tvar useFlatShading = geometry.attributes.normal === undefined;\n\n\t\t\t\t\t\tif ( useVertexColors || useFlatShading ) {\n\n\t\t\t\t\t\t\tif ( material.isGLTFSpecularGlossinessMaterial ) {\n\n\t\t\t\t\t\t\t\tvar specGlossExtension = extensions[ EXTENSIONS.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS ];\n\t\t\t\t\t\t\t\tmaterial = specGlossExtension.cloneMaterial( material );\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tmaterial = material.clone();\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( useVertexColors ) {\n\n\t\t\t\t\t\t\tmaterial.vertexColors = THREE.VertexColors;\n\t\t\t\t\t\t\tmaterial.needsUpdate = true;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( useFlatShading ) {\n\n\t\t\t\t\t\t\tmaterial.flatShading = true;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar mesh;\n\n\t\t\t\t\t\tif ( primitive.mode === WEBGL_CONSTANTS.TRIANGLES || primitive.mode === undefined ) {\n\n\t\t\t\t\t\t\tmesh = new THREE.Mesh( geometry, material );\n\n\t\t\t\t\t\t} else if ( primitive.mode === WEBGL_CONSTANTS.TRIANGLE_STRIP ) {\n\n\t\t\t\t\t\t\tmesh = new THREE.Mesh( geometry, material );\n\t\t\t\t\t\t\tmesh.drawMode = THREE.TriangleStripDrawMode;\n\n\t\t\t\t\t\t} else if ( primitive.mode === WEBGL_CONSTANTS.TRIANGLE_FAN ) {\n\n\t\t\t\t\t\t\tmesh = new THREE.Mesh( geometry, material );\n\t\t\t\t\t\t\tmesh.drawMode = THREE.TriangleFanDrawMode;\n\n\t\t\t\t\t\t} else if ( primitive.mode === WEBGL_CONSTANTS.LINES ) {\n\n\t\t\t\t\t\t\tmesh = new THREE.LineSegments( geometry, material );\n\n\t\t\t\t\t\t} else if ( primitive.mode === WEBGL_CONSTANTS.LINE_STRIP ) {\n\n\t\t\t\t\t\t\tmesh = new THREE.Line( geometry, material );\n\n\t\t\t\t\t\t} else if ( primitive.mode === WEBGL_CONSTANTS.LINE_LOOP ) {\n\n\t\t\t\t\t\t\tmesh = new THREE.LineLoop( geometry, material );\n\n\t\t\t\t\t\t} else if ( primitive.mode === WEBGL_CONSTANTS.POINTS ) {\n\n\t\t\t\t\t\t\tmesh = new THREE.Points( geometry, material );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tthrow new Error( 'THREE.GLTFLoader: Primitive mode unsupported: ', primitive.mode );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tmesh.name = meshDef.name || ( 'mesh_' + meshIndex );\n\n\t\t\t\t\t\tif ( primitive.targets !== undefined ) {\n\n\t\t\t\t\t\t\taddMorphTargets( mesh, meshDef, primitive, dependencies );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( primitive.extras ) mesh.userData = primitive.extras;\n\n\t\t\t\t\t\tif ( primitives.length > 1 ) {\n\n\t\t\t\t\t\t\tmesh.name += '_' + i;\n\n\t\t\t\t\t\t\tgroup.add( mesh );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\treturn mesh;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\treturn group;\n\n\t\t\t\t} );\n\n\t\t\t} );\n\n\t\t} );\n\n\t};\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#cameras\n\t * @param {number} cameraIndex\n\t * @return {Promise}\n\t */\n\tGLTFParser.prototype.loadCamera = function ( cameraIndex ) {\n\n\t\tvar camera;\n\t\tvar cameraDef = this.json.cameras[ cameraIndex ];\n\t\tvar params = cameraDef[ cameraDef.type ];\n\n\t\tif ( ! params ) {\n\n\t\t\tconsole.warn( 'THREE.GLTFLoader: Missing camera parameters.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( cameraDef.type === 'perspective' ) {\n\n\t\t\tvar aspectRatio = params.aspectRatio || 1;\n\t\t\tvar xfov = params.yfov * aspectRatio;\n\n\t\t\tcamera = new THREE.PerspectiveCamera( THREE.Math.radToDeg( xfov ), aspectRatio, params.znear || 1, params.zfar || 2e6 );\n\n\t\t} else if ( cameraDef.type === 'orthographic' ) {\n\n\t\t\tcamera = new THREE.OrthographicCamera( params.xmag / -2, params.xmag / 2, params.ymag / 2, params.ymag / -2, params.znear, params.zfar );\n\n\t\t}\n\n\t\tif ( cameraDef.name !== undefined ) camera.name = cameraDef.name;\n\t\tif ( cameraDef.extras ) camera.userData = cameraDef.extras;\n\n\t\treturn Promise.resolve( camera );\n\n\t};\n\n\tGLTFParser.prototype.loadSkins = function () {\n\n\t\tvar json = this.json;\n\n\t\treturn this._withDependencies( [\n\n\t\t\t'accessors'\n\n\t\t] ).then( function ( dependencies ) {\n\n\t\t\treturn _each( json.skins, function ( skin ) {\n\n\t\t\t\tvar _skin = {\n\t\t\t\t\tjoints: skin.joints,\n\t\t\t\t\tinverseBindMatrices: dependencies.accessors[ skin.inverseBindMatrices ]\n\t\t\t\t};\n\n\t\t\t\treturn _skin;\n\n\t\t\t} );\n\n\t\t} );\n\n\t};\n\n\tGLTFParser.prototype.loadAnimations = function () {\n\n\t\tvar json = this.json;\n\n\t\treturn this._withDependencies( [\n\n\t\t\t'accessors',\n\t\t\t'nodes'\n\n\t\t] ).then( function ( dependencies ) {\n\n\t\t\treturn _each( json.animations, function ( animation, animationId ) {\n\n\t\t\t\tvar tracks = [];\n\n\t\t\t\tfor ( var i = 0; i < animation.channels.length; i ++ ) {\n\n\t\t\t\t\tvar channel = animation.channels[ i ];\n\t\t\t\t\tvar sampler = animation.samplers[ channel.sampler ];\n\n\t\t\t\t\tif ( sampler ) {\n\n\t\t\t\t\t\tvar target = channel.target;\n\t\t\t\t\t\tvar name = target.node !== undefined ? target.node : target.id; // NOTE: target.id is deprecated.\n\t\t\t\t\t\tvar input = animation.parameters !== undefined ? animation.parameters[ sampler.input ] : sampler.input;\n\t\t\t\t\t\tvar output = animation.parameters !== undefined ? animation.parameters[ sampler.output ] : sampler.output;\n\n\t\t\t\t\t\tvar inputAccessor = dependencies.accessors[ input ];\n\t\t\t\t\t\tvar outputAccessor = dependencies.accessors[ output ];\n\n\t\t\t\t\t\tvar node = dependencies.nodes[ name ];\n\n\t\t\t\t\t\tif ( node ) {\n\n\t\t\t\t\t\t\tnode.updateMatrix();\n\t\t\t\t\t\t\tnode.matrixAutoUpdate = true;\n\n\t\t\t\t\t\t\tvar TypedKeyframeTrack;\n\n\t\t\t\t\t\t\tswitch ( PATH_PROPERTIES[ target.path ] ) {\n\n\t\t\t\t\t\t\t\tcase PATH_PROPERTIES.weights:\n\n\t\t\t\t\t\t\t\t\tTypedKeyframeTrack = THREE.NumberKeyframeTrack;\n\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\tcase PATH_PROPERTIES.rotation:\n\n\t\t\t\t\t\t\t\t\tTypedKeyframeTrack = THREE.QuaternionKeyframeTrack;\n\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\tcase PATH_PROPERTIES.position:\n\t\t\t\t\t\t\t\tcase PATH_PROPERTIES.scale:\n\t\t\t\t\t\t\t\tdefault:\n\n\t\t\t\t\t\t\t\t\tTypedKeyframeTrack = THREE.VectorKeyframeTrack;\n\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tvar targetName = node.name ? node.name : node.uuid;\n\n\t\t\t\t\t\t\tif ( sampler.interpolation === 'CATMULLROMSPLINE' ) {\n\n\t\t\t\t\t\t\t\tconsole.warn( 'THREE.GLTFLoader: CATMULLROMSPLINE interpolation is not supported. Using CUBICSPLINE instead.' );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tvar interpolation = sampler.interpolation !== undefined ? INTERPOLATION[ sampler.interpolation ] : THREE.InterpolateLinear;\n\n\t\t\t\t\t\t\tvar targetNames = [];\n\n\t\t\t\t\t\t\tif ( PATH_PROPERTIES[ target.path ] === PATH_PROPERTIES.weights ) {\n\n\t\t\t\t\t\t\t\t// node should be THREE.Group here but\n\t\t\t\t\t\t\t\t// PATH_PROPERTIES.weights(morphTargetInfluences) should be\n\t\t\t\t\t\t\t\t// the property of a mesh object under node.\n\t\t\t\t\t\t\t\t// So finding targets here.\n\n\t\t\t\t\t\t\t\tnode.traverse( function ( object ) {\n\n\t\t\t\t\t\t\t\t\tif ( object.isMesh === true && object.material.morphTargets === true ) {\n\n\t\t\t\t\t\t\t\t\t\ttargetNames.push( object.name ? object.name : object.uuid );\n\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t} );\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\ttargetNames.push( targetName );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// KeyframeTrack.optimize() will modify given 'times' and 'values'\n\t\t\t\t\t\t\t// buffers before creating a truncated copy to keep. Because buffers may\n\t\t\t\t\t\t\t// be reused by other tracks, make copies here.\n\t\t\t\t\t\t\tfor ( var j = 0, jl = targetNames.length; j < jl; j ++ ) {\n\n\t\t\t\t\t\t\t\ttracks.push( new TypedKeyframeTrack(\n\t\t\t\t\t\t\t\t\ttargetNames[ j ] + '.' + PATH_PROPERTIES[ target.path ],\n\t\t\t\t\t\t\t\t\tTHREE.AnimationUtils.arraySlice( inputAccessor.array, 0 ),\n\t\t\t\t\t\t\t\t\tTHREE.AnimationUtils.arraySlice( outputAccessor.array, 0 ),\n\t\t\t\t\t\t\t\t\tinterpolation\n\t\t\t\t\t\t\t\t) );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tvar name = animation.name !== undefined ? animation.name : 'animation_' + animationId;\n\n\t\t\t\treturn new THREE.AnimationClip( name, undefined, tracks );\n\n\t\t\t} );\n\n\t\t} );\n\n\t};\n\n\tGLTFParser.prototype.loadNodes = function () {\n\n\t\tvar json = this.json;\n\t\tvar extensions = this.extensions;\n\t\tvar scope = this;\n\n\t\tvar nodes = json.nodes || [];\n\t\tvar skins = json.skins || [];\n\n\t\tvar meshReferences = {};\n\t\tvar meshUses = {};\n\n\t\t// Nothing in the node definition indicates whether it is a Bone or an\n\t\t// Object3D. Use the skins' joint references to mark bones.\n\t\tfor ( var skinIndex in skins ) {\n\n\t\t\tvar joints = skins[ skinIndex ].joints;\n\n\t\t\tfor ( var i = 0; i < joints.length; ++ i ) {\n\n\t\t\t\tnodes[ joints[ i ] ].isBone = true;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Meshes can (and should) be reused by multiple nodes in a glTF asset. To\n\t\t// avoid having more than one THREE.Mesh with the same name, count\n\t\t// references and rename instances below.\n\t\t//\n\t\t// Example: CesiumMilkTruck sample model reuses \"Wheel\" meshes.\n\t\tfor ( var nodeIndex in nodes ) {\n\n\t\t\tvar nodeDef = nodes[ nodeIndex ];\n\n\t\t\tif ( nodeDef.mesh !== undefined ) {\n\n\t\t\t\tif ( meshReferences[ nodeDef.mesh ] === undefined ) {\n\n\t\t\t\t\tmeshReferences[ nodeDef.mesh ] = meshUses[ nodeDef.mesh ] = 0;\n\n\t\t\t\t}\n\n\t\t\t\tmeshReferences[ nodeDef.mesh ]++;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn scope._withDependencies( [\n\n\t\t\t'meshes',\n\t\t\t'skins',\n\t\t\t'cameras'\n\n\t\t] ).then( function ( dependencies ) {\n\n\t\t\treturn _each( json.nodes, function ( nodeDef ) {\n\n\t\t\t\tif ( nodeDef.isBone === true ) {\n\n\t\t\t\t\treturn new THREE.Bone();\n\n\t\t\t\t} else if ( nodeDef.mesh !== undefined ) {\n\n\t\t\t\t\tvar mesh = dependencies.meshes[ nodeDef.mesh ].clone();\n\n\t\t\t\t\tif ( meshReferences[ nodeDef.mesh ] > 1 ) {\n\n\t\t\t\t\t\tmesh.name += '_instance_' + meshUses[ nodeDef.mesh ]++;\n\n\t\t\t\t\t}\n\n\t\t\t\t\treturn mesh;\n\n\t\t\t\t} else if ( nodeDef.camera !== undefined ) {\n\n\t\t\t\t\treturn scope.getDependency( 'camera', nodeDef.camera );\n\n\t\t\t\t} else if ( nodeDef.extensions\n\t\t\t\t\t\t\t\t && nodeDef.extensions[ EXTENSIONS.KHR_LIGHTS ]\n\t\t\t\t\t\t\t\t && nodeDef.extensions[ EXTENSIONS.KHR_LIGHTS ].light !== undefined ) {\n\n\t\t\t\t\tvar lights = extensions[ EXTENSIONS.KHR_LIGHTS ].lights;\n\t\t\t\t\treturn lights[ nodeDef.extensions[ EXTENSIONS.KHR_LIGHTS ].light ];\n\n\t\t\t\t} else {\n\n\t\t\t\t\treturn new THREE.Object3D();\n\n\t\t\t\t}\n\n\t\t\t} ).then( function ( __nodes ) {\n\n\t\t\t\treturn _each( __nodes, function ( node, nodeIndex ) {\n\n\t\t\t\t\tvar nodeDef = json.nodes[ nodeIndex ];\n\n\t\t\t\t\tif ( nodeDef.name !== undefined ) {\n\n\t\t\t\t\t\tnode.name = THREE.PropertyBinding.sanitizeNodeName( nodeDef.name );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( nodeDef.extras ) node.userData = nodeDef.extras;\n\n\t\t\t\t\tif ( nodeDef.matrix !== undefined ) {\n\n\t\t\t\t\t\tvar matrix = new THREE.Matrix4();\n\t\t\t\t\t\tmatrix.fromArray( nodeDef.matrix );\n\t\t\t\t\t\tnode.applyMatrix( matrix );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tif ( nodeDef.translation !== undefined ) {\n\n\t\t\t\t\t\t\tnode.position.fromArray( nodeDef.translation );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( nodeDef.rotation !== undefined ) {\n\n\t\t\t\t\t\t\tnode.quaternion.fromArray( nodeDef.rotation );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( nodeDef.scale !== undefined ) {\n\n\t\t\t\t\t\t\tnode.scale.fromArray( nodeDef.scale );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( nodeDef.skin !== undefined ) {\n\n\t\t\t\t\t\tvar skinnedMeshes = [];\n\n\t\t\t\t\t\tvar meshes = node.children.length > 0 ? node.children : [ node ];\n\n\t\t\t\t\t\tfor ( var i = 0; i < meshes.length; i ++ ) {\n\n\t\t\t\t\t\t\tvar mesh = meshes[ i ];\n\t\t\t\t\t\t\tvar skinEntry = dependencies.skins[ nodeDef.skin ];\n\n\t\t\t\t\t\t\t// Replace Mesh with SkinnedMesh.\n\t\t\t\t\t\t\tvar geometry = mesh.geometry;\n\t\t\t\t\t\t\tvar material = mesh.material;\n\t\t\t\t\t\t\tmaterial.skinning = true;\n\n\t\t\t\t\t\t\tvar skinnedMesh = new THREE.SkinnedMesh( geometry, material );\n\t\t\t\t\t\t\tskinnedMesh.morphTargetInfluences = mesh.morphTargetInfluences;\n\t\t\t\t\t\t\tskinnedMesh.userData = mesh.userData;\n\t\t\t\t\t\t\tskinnedMesh.name = mesh.name;\n\n\t\t\t\t\t\t\tvar bones = [];\n\t\t\t\t\t\t\tvar boneInverses = [];\n\n\t\t\t\t\t\t\tfor ( var j = 0, l = skinEntry.joints.length; j < l; j ++ ) {\n\n\t\t\t\t\t\t\t\tvar jointId = skinEntry.joints[ j ];\n\t\t\t\t\t\t\t\tvar jointNode = __nodes[ jointId ];\n\n\t\t\t\t\t\t\t\tif ( jointNode ) {\n\n\t\t\t\t\t\t\t\t\tbones.push( jointNode );\n\n\t\t\t\t\t\t\t\t\tvar m = skinEntry.inverseBindMatrices.array;\n\t\t\t\t\t\t\t\t\tvar mat = new THREE.Matrix4().fromArray( m, j * 16 );\n\t\t\t\t\t\t\t\t\tboneInverses.push( mat );\n\n\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\tconsole.warn( 'THREE.GLTFLoader: Joint \"%s\" could not be found.', jointId );\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tskinnedMesh.bind( new THREE.Skeleton( bones, boneInverses ), skinnedMesh.matrixWorld );\n\n\t\t\t\t\t\t\tskinnedMeshes.push( skinnedMesh );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( node.children.length > 0 ) {\n\n\t\t\t\t\t\t\tnode.remove.apply( node, node.children );\n\t\t\t\t\t\t\tnode.add.apply( node, skinnedMeshes );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tnode = skinnedMeshes[ 0 ];\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\treturn node;\n\n\t\t\t\t} );\n\n\t\t\t} );\n\n\t\t} );\n\n\t};\n\n\tGLTFParser.prototype.loadScenes = function () {\n\n\t\tvar json = this.json;\n\t\tvar extensions = this.extensions;\n\n\t\t// scene node hierachy builder\n\n\t\tfunction buildNodeHierachy( nodeId, parentObject, allNodes ) {\n\n\t\t\tvar _node = allNodes[ nodeId ];\n\t\t\tparentObject.add( _node );\n\n\t\t\tvar node = json.nodes[ nodeId ];\n\n\t\t\tif ( node.children ) {\n\n\t\t\t\tvar children = node.children;\n\n\t\t\t\tfor ( var i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\t\t\tvar child = children[ i ];\n\t\t\t\t\tbuildNodeHierachy( child, _node, allNodes );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn this._withDependencies( [\n\n\t\t\t'nodes'\n\n\t\t] ).then( function ( dependencies ) {\n\n\t\t\treturn _each( json.scenes, function ( scene ) {\n\n\t\t\t\tvar _scene = new THREE.Scene();\n\t\t\t\tif ( scene.name !== undefined ) _scene.name = scene.name;\n\n\t\t\t\tif ( scene.extras ) _scene.userData = scene.extras;\n\n\t\t\t\tvar nodes = scene.nodes || [];\n\n\t\t\t\tfor ( var i = 0, l = nodes.length; i < l; i ++ ) {\n\n\t\t\t\t\tvar nodeId = nodes[ i ];\n\t\t\t\t\tbuildNodeHierachy( nodeId, _scene, dependencies.nodes );\n\n\t\t\t\t}\n\n\t\t\t\t_scene.traverse( function ( child ) {\n\n\t\t\t\t\t// for Specular-Glossiness.\n\t\t\t\t\tif ( child.material && child.material.isGLTFSpecularGlossinessMaterial ) {\n\n\t\t\t\t\t\tchild.onBeforeRender = extensions[ EXTENSIONS.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS ].refreshUniforms;\n\n\t\t\t\t\t}\n\n\t\t\t\t} );\n\n\t\t\t\t// Ambient lighting, if present, is always attached to the scene root.\n\t\t\t\tif ( scene.extensions\n\t\t\t\t\t\t\t && scene.extensions[ EXTENSIONS.KHR_LIGHTS ]\n\t\t\t\t\t\t\t && scene.extensions[ EXTENSIONS.KHR_LIGHTS ].light !== undefined ) {\n\n\t\t\t\t\tvar lights = extensions[ EXTENSIONS.KHR_LIGHTS ].lights;\n\t\t\t\t\t_scene.add( lights[ scene.extensions[ EXTENSIONS.KHR_LIGHTS ].light ] );\n\n\t\t\t\t}\n\n\t\t\t\treturn _scene;\n\n\t\t\t} );\n\n\t\t} );\n\n\t};\n\n\treturn GLTFLoader;\n\n} )();\n","/**\n * Loads a Wavefront .mtl file specifying materials\n *\n * @author angelxuanchang\n */\n\nTHREE.MTLLoader = function ( manager ) {\n\n\tthis.manager = ( manager !== undefined ) ? manager : THREE.DefaultLoadingManager;\n\n};\n\nTHREE.MTLLoader.prototype = {\n\n\tconstructor: THREE.MTLLoader,\n\n\t/**\n\t * Loads and parses a MTL asset from a URL.\n\t *\n\t * @param {String} url - URL to the MTL file.\n\t * @param {Function} [onLoad] - Callback invoked with the loaded object.\n\t * @param {Function} [onProgress] - Callback for download progress.\n\t * @param {Function} [onError] - Callback for download errors.\n\t *\n\t * @see setPath setTexturePath\n\t *\n\t * @note In order for relative texture references to resolve correctly\n\t * you must call setPath and/or setTexturePath explicitly prior to load.\n\t */\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tvar scope = this;\n\n\t\tvar loader = new THREE.FileLoader( this.manager );\n\t\tloader.setPath( this.path );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\tonLoad( scope.parse( text ) );\n\n\t\t}, onProgress, onError );\n\n\t},\n\n\t/**\n\t * Set base path for resolving references.\n\t * If set this path will be prepended to each loaded and found reference.\n\t *\n\t * @see setTexturePath\n\t * @param {String} path\n\t *\n\t * @example\n\t * mtlLoader.setPath( 'assets/obj/' );\n\t * mtlLoader.load( 'my.mtl', ... );\n\t */\n\tsetPath: function ( path ) {\n\n\t\tthis.path = path;\n\n\t},\n\n\t/**\n\t * Set base path for resolving texture references.\n\t * If set this path will be prepended found texture reference.\n\t * If not set and setPath is, it will be used as texture base path.\n\t *\n\t * @see setPath\n\t * @param {String} path\n\t *\n\t * @example\n\t * mtlLoader.setPath( 'assets/obj/' );\n\t * mtlLoader.setTexturePath( 'assets/textures/' );\n\t * mtlLoader.load( 'my.mtl', ... );\n\t */\n\tsetTexturePath: function ( path ) {\n\n\t\tthis.texturePath = path;\n\n\t},\n\n\tsetBaseUrl: function ( path ) {\n\n\t\tconsole.warn( 'THREE.MTLLoader: .setBaseUrl() is deprecated. Use .setTexturePath( path ) for texture path or .setPath( path ) for general base path instead.' );\n\n\t\tthis.setTexturePath( path );\n\n\t},\n\n\tsetCrossOrigin: function ( value ) {\n\n\t\tthis.crossOrigin = value;\n\n\t},\n\n\tsetMaterialOptions: function ( value ) {\n\n\t\tthis.materialOptions = value;\n\n\t},\n\n\t/**\n\t * Parses a MTL file.\n\t *\n\t * @param {String} text - Content of MTL file\n\t * @return {THREE.MTLLoader.MaterialCreator}\n\t *\n\t * @see setPath setTexturePath\n\t *\n\t * @note In order for relative texture references to resolve correctly\n\t * you must call setPath and/or setTexturePath explicitly prior to parse.\n\t */\n\tparse: function ( text ) {\n\n\t\tvar lines = text.split( '\\n' );\n\t\tvar info = {};\n\t\tvar delimiter_pattern = /\\s+/;\n\t\tvar materialsInfo = {};\n\n\t\tfor ( var i = 0; i < lines.length; i ++ ) {\n\n\t\t\tvar line = lines[ i ];\n\t\t\tline = line.trim();\n\n\t\t\tif ( line.length === 0 || line.charAt( 0 ) === '#' ) {\n\n\t\t\t\t// Blank line or comment ignore\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\tvar pos = line.indexOf( ' ' );\n\n\t\t\tvar key = ( pos >= 0 ) ? line.substring( 0, pos ) : line;\n\t\t\tkey = key.toLowerCase();\n\n\t\t\tvar value = ( pos >= 0 ) ? line.substring( pos + 1 ) : '';\n\t\t\tvalue = value.trim();\n\n\t\t\tif ( key === 'newmtl' ) {\n\n\t\t\t\t// New material\n\n\t\t\t\tinfo = { name: value };\n\t\t\t\tmaterialsInfo[ value ] = info;\n\n\t\t\t} else if ( info ) {\n\n\t\t\t\tif ( key === 'ka' || key === 'kd' || key === 'ks' ) {\n\n\t\t\t\t\tvar ss = value.split( delimiter_pattern, 3 );\n\t\t\t\t\tinfo[ key ] = [ parseFloat( ss[ 0 ] ), parseFloat( ss[ 1 ] ), parseFloat( ss[ 2 ] ) ];\n\n\t\t\t\t} else {\n\n\t\t\t\t\tinfo[ key ] = value;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tvar materialCreator = new THREE.MTLLoader.MaterialCreator( this.texturePath || this.path, this.materialOptions );\n\t\tmaterialCreator.setCrossOrigin( this.crossOrigin );\n\t\tmaterialCreator.setManager( this.manager );\n\t\tmaterialCreator.setMaterials( materialsInfo );\n\t\treturn materialCreator;\n\n\t}\n\n};\n\n/**\n * Create a new THREE-MTLLoader.MaterialCreator\n * @param baseUrl - Url relative to which textures are loaded\n * @param options - Set of options on how to construct the materials\n * side: Which side to apply the material\n * THREE.FrontSide (default), THREE.BackSide, THREE.DoubleSide\n * wrap: What type of wrapping to apply for textures\n * THREE.RepeatWrapping (default), THREE.ClampToEdgeWrapping, THREE.MirroredRepeatWrapping\n * normalizeRGB: RGBs need to be normalized to 0-1 from 0-255\n * Default: false, assumed to be already normalized\n * ignoreZeroRGBs: Ignore values of RGBs (Ka,Kd,Ks) that are all 0's\n * Default: false\n * @constructor\n */\n\nTHREE.MTLLoader.MaterialCreator = function ( baseUrl, options ) {\n\n\tthis.baseUrl = baseUrl || '';\n\tthis.options = options;\n\tthis.materialsInfo = {};\n\tthis.materials = {};\n\tthis.materialsArray = [];\n\tthis.nameLookup = {};\n\n\tthis.side = ( this.options && this.options.side ) ? this.options.side : THREE.FrontSide;\n\tthis.wrap = ( this.options && this.options.wrap ) ? this.options.wrap : THREE.RepeatWrapping;\n\n};\n\nTHREE.MTLLoader.MaterialCreator.prototype = {\n\n\tconstructor: THREE.MTLLoader.MaterialCreator,\n\n\tcrossOrigin: 'Anonymous',\n\n\tsetCrossOrigin: function ( value ) {\n\n\t\tthis.crossOrigin = value;\n\n\t},\n\n\tsetManager: function ( value ) {\n\n\t\tthis.manager = value;\n\n\t},\n\n\tsetMaterials: function ( materialsInfo ) {\n\n\t\tthis.materialsInfo = this.convert( materialsInfo );\n\t\tthis.materials = {};\n\t\tthis.materialsArray = [];\n\t\tthis.nameLookup = {};\n\n\t},\n\n\tconvert: function ( materialsInfo ) {\n\n\t\tif ( ! this.options ) return materialsInfo;\n\n\t\tvar converted = {};\n\n\t\tfor ( var mn in materialsInfo ) {\n\n\t\t\t// Convert materials info into normalized form based on options\n\n\t\t\tvar mat = materialsInfo[ mn ];\n\n\t\t\tvar covmat = {};\n\n\t\t\tconverted[ mn ] = covmat;\n\n\t\t\tfor ( var prop in mat ) {\n\n\t\t\t\tvar save = true;\n\t\t\t\tvar value = mat[ prop ];\n\t\t\t\tvar lprop = prop.toLowerCase();\n\n\t\t\t\tswitch ( lprop ) {\n\n\t\t\t\t\tcase 'kd':\n\t\t\t\t\tcase 'ka':\n\t\t\t\t\tcase 'ks':\n\n\t\t\t\t\t\t// Diffuse color (color under white light) using RGB values\n\n\t\t\t\t\t\tif ( this.options && this.options.normalizeRGB ) {\n\n\t\t\t\t\t\t\tvalue = [ value[ 0 ] / 255, value[ 1 ] / 255, value[ 2 ] / 255 ];\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( this.options && this.options.ignoreZeroRGBs ) {\n\n\t\t\t\t\t\t\tif ( value[ 0 ] === 0 && value[ 1 ] === 0 && value[ 2 ] === 0 ) {\n\n\t\t\t\t\t\t\t\t// ignore\n\n\t\t\t\t\t\t\t\tsave = false;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t\tif ( save ) {\n\n\t\t\t\t\tcovmat[ lprop ] = value;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn converted;\n\n\t},\n\n\tpreload: function () {\n\n\t\tfor ( var mn in this.materialsInfo ) {\n\n\t\t\tthis.create( mn );\n\n\t\t}\n\n\t},\n\n\tgetIndex: function ( materialName ) {\n\n\t\treturn this.nameLookup[ materialName ];\n\n\t},\n\n\tgetAsArray: function () {\n\n\t\tvar index = 0;\n\n\t\tfor ( var mn in this.materialsInfo ) {\n\n\t\t\tthis.materialsArray[ index ] = this.create( mn );\n\t\t\tthis.nameLookup[ mn ] = index;\n\t\t\tindex ++;\n\n\t\t}\n\n\t\treturn this.materialsArray;\n\n\t},\n\n\tcreate: function ( materialName ) {\n\n\t\tif ( this.materials[ materialName ] === undefined ) {\n\n\t\t\tthis.createMaterial_( materialName );\n\n\t\t}\n\n\t\treturn this.materials[ materialName ];\n\n\t},\n\n\tcreateMaterial_: function ( materialName ) {\n\n\t\t// Create material\n\n\t\tvar scope = this;\n\t\tvar mat = this.materialsInfo[ materialName ];\n\t\tvar params = {\n\n\t\t\tname: materialName,\n\t\t\tside: this.side\n\n\t\t};\n\n\t\tfunction resolveURL( baseUrl, url ) {\n\n\t\t\tif ( typeof url !== 'string' || url === '' )\n\t\t\t\treturn '';\n\n\t\t\t// Absolute URL\n\t\t\tif ( /^https?:\\/\\//i.test( url ) ) return url;\n\n\t\t\treturn baseUrl + url;\n\n\t\t}\n\n\t\tfunction setMapForType( mapType, value ) {\n\n\t\t\tif ( params[ mapType ] ) return; // Keep the first encountered texture\n\n\t\t\tvar texParams = scope.getTextureParams( value, params );\n\t\t\tvar map = scope.loadTexture( resolveURL( scope.baseUrl, texParams.url ) );\n\n\t\t\tmap.repeat.copy( texParams.scale );\n\t\t\tmap.offset.copy( texParams.offset );\n\n\t\t\tmap.wrapS = scope.wrap;\n\t\t\tmap.wrapT = scope.wrap;\n\n\t\t\tparams[ mapType ] = map;\n\n\t\t}\n\n\t\tfor ( var prop in mat ) {\n\n\t\t\tvar value = mat[ prop ];\n\t\t\tvar n;\n\n\t\t\tif ( value === '' ) continue;\n\n\t\t\tswitch ( prop.toLowerCase() ) {\n\n\t\t\t\t// Ns is material specular exponent\n\n\t\t\t\tcase 'kd':\n\n\t\t\t\t\t// Diffuse color (color under white light) using RGB values\n\n\t\t\t\t\tparams.color = new THREE.Color().fromArray( value );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'ks':\n\n\t\t\t\t\t// Specular color (color when light is reflected from shiny surface) using RGB values\n\t\t\t\t\tparams.specular = new THREE.Color().fromArray( value );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'map_kd':\n\n\t\t\t\t\t// Diffuse texture map\n\n\t\t\t\t\tsetMapForType( \"map\", value );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'map_ks':\n\n\t\t\t\t\t// Specular map\n\n\t\t\t\t\tsetMapForType( \"specularMap\", value );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'norm':\n\n\t\t\t\t\tsetMapForType( \"normalMap\", value );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'map_bump':\n\t\t\t\tcase 'bump':\n\n\t\t\t\t\t// Bump texture map\n\n\t\t\t\t\tsetMapForType( \"bumpMap\", value );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'ns':\n\n\t\t\t\t\t// The specular exponent (defines the focus of the specular highlight)\n\t\t\t\t\t// A high exponent results in a tight, concentrated highlight. Ns values normally range from 0 to 1000.\n\n\t\t\t\t\tparams.shininess = parseFloat( value );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'd':\n\t\t\t\t\tn = parseFloat( value );\n\n\t\t\t\t\tif ( n < 1 ) {\n\n\t\t\t\t\t\tparams.opacity = n;\n\t\t\t\t\t\tparams.transparent = true;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'tr':\n\t\t\t\t\tn = parseFloat( value );\n\n\t\t\t\t\tif ( n > 0 ) {\n\n\t\t\t\t\t\tparams.opacity = 1 - n;\n\t\t\t\t\t\tparams.transparent = true;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.materials[ materialName ] = new THREE.MeshPhongMaterial( params );\n\t\treturn this.materials[ materialName ];\n\n\t},\n\n\tgetTextureParams: function ( value, matParams ) {\n\n\t\tvar texParams = {\n\n\t\t\tscale: new THREE.Vector2( 1, 1 ),\n\t\t\toffset: new THREE.Vector2( 0, 0 )\n\n\t\t };\n\n\t\tvar items = value.split( /\\s+/ );\n\t\tvar pos;\n\n\t\tpos = items.indexOf( '-bm' );\n\n\t\tif ( pos >= 0 ) {\n\n\t\t\tmatParams.bumpScale = parseFloat( items[ pos + 1 ] );\n\t\t\titems.splice( pos, 2 );\n\n\t\t}\n\n\t\tpos = items.indexOf( '-s' );\n\n\t\tif ( pos >= 0 ) {\n\n\t\t\ttexParams.scale.set( parseFloat( items[ pos + 1 ] ), parseFloat( items[ pos + 2 ] ) );\n\t\t\titems.splice( pos, 4 ); // we expect 3 parameters here!\n\n\t\t}\n\n\t\tpos = items.indexOf( '-o' );\n\n\t\tif ( pos >= 0 ) {\n\n\t\t\ttexParams.offset.set( parseFloat( items[ pos + 1 ] ), parseFloat( items[ pos + 2 ] ) );\n\t\t\titems.splice( pos, 4 ); // we expect 3 parameters here!\n\n\t\t}\n\n\t\ttexParams.url = items.join( ' ' ).trim();\n\t\treturn texParams;\n\n\t},\n\n\tloadTexture: function ( url, mapping, onLoad, onProgress, onError ) {\n\n\t\tvar texture;\n\t\tvar loader = THREE.Loader.Handlers.get( url );\n\t\tvar manager = ( this.manager !== undefined ) ? this.manager : THREE.DefaultLoadingManager;\n\n\t\tif ( loader === null ) {\n\n\t\t\tloader = new THREE.TextureLoader( manager );\n\n\t\t}\n\n\t\tif ( loader.setCrossOrigin ) loader.setCrossOrigin( this.crossOrigin );\n\t\ttexture = loader.load( url, onLoad, onProgress, onError );\n\n\t\tif ( mapping !== undefined ) texture.mapping = mapping;\n\n\t\treturn texture;\n\n\t}\n\n};\n","/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nTHREE.OBJLoader = ( function () {\n\n\t// o object_name | g group_name\n\tvar object_pattern = /^[og]\\s*(.+)?/;\n\t// mtllib file_reference\n\tvar material_library_pattern = /^mtllib /;\n\t// usemtl material_name\n\tvar material_use_pattern = /^usemtl /;\n\n\tfunction ParserState() {\n\n\t\tvar state = {\n\t\t\tobjects: [],\n\t\t\tobject: {},\n\n\t\t\tvertices: [],\n\t\t\tnormals: [],\n\t\t\tcolors: [],\n\t\t\tuvs: [],\n\n\t\t\tmaterialLibraries: [],\n\n\t\t\tstartObject: function ( name, fromDeclaration ) {\n\n\t\t\t\t// If the current object (initial from reset) is not from a g/o declaration in the parsed\n\t\t\t\t// file. We need to use it for the first parsed g/o to keep things in sync.\n\t\t\t\tif ( this.object && this.object.fromDeclaration === false ) {\n\n\t\t\t\t\tthis.object.name = name;\n\t\t\t\t\tthis.object.fromDeclaration = ( fromDeclaration !== false );\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t\tvar previousMaterial = ( this.object && typeof this.object.currentMaterial === 'function' ? this.object.currentMaterial() : undefined );\n\n\t\t\t\tif ( this.object && typeof this.object._finalize === 'function' ) {\n\n\t\t\t\t\tthis.object._finalize( true );\n\n\t\t\t\t}\n\n\t\t\t\tthis.object = {\n\t\t\t\t\tname: name || '',\n\t\t\t\t\tfromDeclaration: ( fromDeclaration !== false ),\n\n\t\t\t\t\tgeometry: {\n\t\t\t\t\t\tvertices: [],\n\t\t\t\t\t\tnormals: [],\n\t\t\t\t\t\tcolors: [],\n\t\t\t\t\t\tuvs: []\n\t\t\t\t\t},\n\t\t\t\t\tmaterials: [],\n\t\t\t\t\tsmooth: true,\n\n\t\t\t\t\tstartMaterial: function ( name, libraries ) {\n\n\t\t\t\t\t\tvar previous = this._finalize( false );\n\n\t\t\t\t\t\t// New usemtl declaration overwrites an inherited material, except if faces were declared\n\t\t\t\t\t\t// after the material, then it must be preserved for proper MultiMaterial continuation.\n\t\t\t\t\t\tif ( previous && ( previous.inherited || previous.groupCount <= 0 ) ) {\n\n\t\t\t\t\t\t\tthis.materials.splice( previous.index, 1 );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar material = {\n\t\t\t\t\t\t\tindex: this.materials.length,\n\t\t\t\t\t\t\tname: name || '',\n\t\t\t\t\t\t\tmtllib: ( Array.isArray( libraries ) && libraries.length > 0 ? libraries[ libraries.length - 1 ] : '' ),\n\t\t\t\t\t\t\tsmooth: ( previous !== undefined ? previous.smooth : this.smooth ),\n\t\t\t\t\t\t\tgroupStart: ( previous !== undefined ? previous.groupEnd : 0 ),\n\t\t\t\t\t\t\tgroupEnd: - 1,\n\t\t\t\t\t\t\tgroupCount: - 1,\n\t\t\t\t\t\t\tinherited: false,\n\n\t\t\t\t\t\t\tclone: function ( index ) {\n\n\t\t\t\t\t\t\t\tvar cloned = {\n\t\t\t\t\t\t\t\t\tindex: ( typeof index === 'number' ? index : this.index ),\n\t\t\t\t\t\t\t\t\tname: this.name,\n\t\t\t\t\t\t\t\t\tmtllib: this.mtllib,\n\t\t\t\t\t\t\t\t\tsmooth: this.smooth,\n\t\t\t\t\t\t\t\t\tgroupStart: 0,\n\t\t\t\t\t\t\t\t\tgroupEnd: - 1,\n\t\t\t\t\t\t\t\t\tgroupCount: - 1,\n\t\t\t\t\t\t\t\t\tinherited: false\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\tcloned.clone = this.clone.bind( cloned );\n\t\t\t\t\t\t\t\treturn cloned;\n\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tthis.materials.push( material );\n\n\t\t\t\t\t\treturn material;\n\n\t\t\t\t\t},\n\n\t\t\t\t\tcurrentMaterial: function () {\n\n\t\t\t\t\t\tif ( this.materials.length > 0 ) {\n\n\t\t\t\t\t\t\treturn this.materials[ this.materials.length - 1 ];\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn undefined;\n\n\t\t\t\t\t},\n\n\t\t\t\t\t_finalize: function ( end ) {\n\n\t\t\t\t\t\tvar lastMultiMaterial = this.currentMaterial();\n\t\t\t\t\t\tif ( lastMultiMaterial && lastMultiMaterial.groupEnd === - 1 ) {\n\n\t\t\t\t\t\t\tlastMultiMaterial.groupEnd = this.geometry.vertices.length / 3;\n\t\t\t\t\t\t\tlastMultiMaterial.groupCount = lastMultiMaterial.groupEnd - lastMultiMaterial.groupStart;\n\t\t\t\t\t\t\tlastMultiMaterial.inherited = false;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Ignore objects tail materials if no face declarations followed them before a new o/g started.\n\t\t\t\t\t\tif ( end && this.materials.length > 1 ) {\n\n\t\t\t\t\t\t\tfor ( var mi = this.materials.length - 1; mi >= 0; mi -- ) {\n\n\t\t\t\t\t\t\t\tif ( this.materials[ mi ].groupCount <= 0 ) {\n\n\t\t\t\t\t\t\t\t\tthis.materials.splice( mi, 1 );\n\n\t\t\t\t\t\t\t\t}\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// Guarantee at least one empty material, this makes the creation later more straight forward.\n\t\t\t\t\t\tif ( end && this.materials.length === 0 ) {\n\n\t\t\t\t\t\t\tthis.materials.push( {\n\t\t\t\t\t\t\t\tname: '',\n\t\t\t\t\t\t\t\tsmooth: this.smooth\n\t\t\t\t\t\t\t} );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn lastMultiMaterial;\n\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\t// Inherit previous objects material.\n\t\t\t\t// Spec tells us that a declared material must be set to all objects until a new material is declared.\n\t\t\t\t// If a usemtl declaration is encountered while this new object is being parsed, it will\n\t\t\t\t// overwrite the inherited material. Exception being that there was already face declarations\n\t\t\t\t// to the inherited material, then it will be preserved for proper MultiMaterial continuation.\n\n\t\t\t\tif ( previousMaterial && previousMaterial.name && typeof previousMaterial.clone === 'function' ) {\n\n\t\t\t\t\tvar declared = previousMaterial.clone( 0 );\n\t\t\t\t\tdeclared.inherited = true;\n\t\t\t\t\tthis.object.materials.push( declared );\n\n\t\t\t\t}\n\n\t\t\t\tthis.objects.push( this.object );\n\n\t\t\t},\n\n\t\t\tfinalize: function () {\n\n\t\t\t\tif ( this.object && typeof this.object._finalize === 'function' ) {\n\n\t\t\t\t\tthis.object._finalize( true );\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tparseVertexIndex: function ( value, len ) {\n\n\t\t\t\tvar index = parseInt( value, 10 );\n\t\t\t\treturn ( index >= 0 ? index - 1 : index + len / 3 ) * 3;\n\n\t\t\t},\n\n\t\t\tparseNormalIndex: function ( value, len ) {\n\n\t\t\t\tvar index = parseInt( value, 10 );\n\t\t\t\treturn ( index >= 0 ? index - 1 : index + len / 3 ) * 3;\n\n\t\t\t},\n\n\t\t\tparseUVIndex: function ( value, len ) {\n\n\t\t\t\tvar index = parseInt( value, 10 );\n\t\t\t\treturn ( index >= 0 ? index - 1 : index + len / 2 ) * 2;\n\n\t\t\t},\n\n\t\t\taddVertex: function ( a, b, c ) {\n\n\t\t\t\tvar src = this.vertices;\n\t\t\t\tvar dst = this.object.geometry.vertices;\n\n\t\t\t\tdst.push( src[ a + 0 ], src[ a + 1 ], src[ a + 2 ] );\n\t\t\t\tdst.push( src[ b + 0 ], src[ b + 1 ], src[ b + 2 ] );\n\t\t\t\tdst.push( src[ c + 0 ], src[ c + 1 ], src[ c + 2 ] );\n\n\t\t\t},\n\n\t\t\taddVertexLine: function ( a ) {\n\n\t\t\t\tvar src = this.vertices;\n\t\t\t\tvar dst = this.object.geometry.vertices;\n\n\t\t\t\tdst.push( src[ a + 0 ], src[ a + 1 ], src[ a + 2 ] );\n\n\t\t\t},\n\n\t\t\taddNormal: function ( a, b, c ) {\n\n\t\t\t\tvar src = this.normals;\n\t\t\t\tvar dst = this.object.geometry.normals;\n\n\t\t\t\tdst.push( src[ a + 0 ], src[ a + 1 ], src[ a + 2 ] );\n\t\t\t\tdst.push( src[ b + 0 ], src[ b + 1 ], src[ b + 2 ] );\n\t\t\t\tdst.push( src[ c + 0 ], src[ c + 1 ], src[ c + 2 ] );\n\n\t\t\t},\n\n\t\t\taddColor: function ( a, b, c ) {\n\n\t\t\t\tvar src = this.colors;\n\t\t\t\tvar dst = this.object.geometry.colors;\n\n\t\t\t\tdst.push( src[ a + 0 ], src[ a + 1 ], src[ a + 2 ] );\n\t\t\t\tdst.push( src[ b + 0 ], src[ b + 1 ], src[ b + 2 ] );\n\t\t\t\tdst.push( src[ c + 0 ], src[ c + 1 ], src[ c + 2 ] );\n\n\t\t\t},\n\n\t\t\taddUV: function ( a, b, c ) {\n\n\t\t\t\tvar src = this.uvs;\n\t\t\t\tvar dst = this.object.geometry.uvs;\n\n\t\t\t\tdst.push( src[ a + 0 ], src[ a + 1 ] );\n\t\t\t\tdst.push( src[ b + 0 ], src[ b + 1 ] );\n\t\t\t\tdst.push( src[ c + 0 ], src[ c + 1 ] );\n\n\t\t\t},\n\n\t\t\taddUVLine: function ( a ) {\n\n\t\t\t\tvar src = this.uvs;\n\t\t\t\tvar dst = this.object.geometry.uvs;\n\n\t\t\t\tdst.push( src[ a + 0 ], src[ a + 1 ] );\n\n\t\t\t},\n\n\t\t\taddFace: function ( a, b, c, ua, ub, uc, na, nb, nc ) {\n\n\t\t\t\tvar vLen = this.vertices.length;\n\n\t\t\t\tvar ia = this.parseVertexIndex( a, vLen );\n\t\t\t\tvar ib = this.parseVertexIndex( b, vLen );\n\t\t\t\tvar ic = this.parseVertexIndex( c, vLen );\n\n\t\t\t\tthis.addVertex( ia, ib, ic );\n\n\t\t\t\tif ( ua !== undefined ) {\n\n\t\t\t\t\tvar uvLen = this.uvs.length;\n\n\t\t\t\t\tia = this.parseUVIndex( ua, uvLen );\n\t\t\t\t\tib = this.parseUVIndex( ub, uvLen );\n\t\t\t\t\tic = this.parseUVIndex( uc, uvLen );\n\n\t\t\t\t\tthis.addUV( ia, ib, ic );\n\n\t\t\t\t}\n\n\t\t\t\tif ( na !== undefined ) {\n\n\t\t\t\t\t// Normals are many times the same. If so, skip function call and parseInt.\n\t\t\t\t\tvar nLen = this.normals.length;\n\t\t\t\t\tia = this.parseNormalIndex( na, nLen );\n\n\t\t\t\t\tib = na === nb ? ia : this.parseNormalIndex( nb, nLen );\n\t\t\t\t\tic = na === nc ? ia : this.parseNormalIndex( nc, nLen );\n\n\t\t\t\t\tthis.addNormal( ia, ib, ic );\n\n\t\t\t\t}\n\n\t\t\t\tif ( this.colors.length > 0 ) {\n\n\t\t\t\t\tthis.addColor( ia, ib, ic );\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\taddLineGeometry: function ( vertices, uvs ) {\n\n\t\t\t\tthis.object.geometry.type = 'Line';\n\n\t\t\t\tvar vLen = this.vertices.length;\n\t\t\t\tvar uvLen = this.uvs.length;\n\n\t\t\t\tfor ( var vi = 0, l = vertices.length; vi < l; vi ++ ) {\n\n\t\t\t\t\tthis.addVertexLine( this.parseVertexIndex( vertices[ vi ], vLen ) );\n\n\t\t\t\t}\n\n\t\t\t\tfor ( var uvi = 0, l = uvs.length; uvi < l; uvi ++ ) {\n\n\t\t\t\t\tthis.addUVLine( this.parseUVIndex( uvs[ uvi ], uvLen ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t};\n\n\t\tstate.startObject( '', false );\n\n\t\treturn state;\n\n\t}\n\n\t//\n\n\tfunction OBJLoader( manager ) {\n\n\t\tthis.manager = ( manager !== undefined ) ? manager : THREE.DefaultLoadingManager;\n\n\t\tthis.materials = null;\n\n\t}\n\n\tOBJLoader.prototype = {\n\n\t\tconstructor: OBJLoader,\n\n\t\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\t\tvar scope = this;\n\n\t\t\tvar loader = new THREE.FileLoader( scope.manager );\n\t\t\tloader.setPath( this.path );\n\t\t\tloader.load( url, function ( text ) {\n\n\t\t\t\tonLoad( scope.parse( text ) );\n\n\t\t\t}, onProgress, onError );\n\n\t\t},\n\n\t\tsetPath: function ( value ) {\n\n\t\t\tthis.path = value;\n\n\t\t},\n\n\t\tsetMaterials: function ( materials ) {\n\n\t\t\tthis.materials = materials;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tparse: function ( text ) {\n\n\t\t\tconsole.time( 'OBJLoader' );\n\n\t\t\tvar state = new ParserState();\n\n\t\t\tif ( text.indexOf( '\\r\\n' ) !== - 1 ) {\n\n\t\t\t\t// This is faster than String.split with regex that splits on both\n\t\t\t\ttext = text.replace( /\\r\\n/g, '\\n' );\n\n\t\t\t}\n\n\t\t\tif ( text.indexOf( '\\\\\\n' ) !== - 1 ) {\n\n\t\t\t\t// join lines separated by a line continuation character (\\)\n\t\t\t\ttext = text.replace( /\\\\\\n/g, '' );\n\n\t\t\t}\n\n\t\t\tvar lines = text.split( '\\n' );\n\t\t\tvar line = '', lineFirstChar = '';\n\t\t\tvar lineLength = 0;\n\t\t\tvar result = [];\n\n\t\t\t// Faster to just trim left side of the line. Use if available.\n\t\t\tvar trimLeft = ( typeof ''.trimLeft === 'function' );\n\n\t\t\tfor ( var i = 0, l = lines.length; i < l; i ++ ) {\n\n\t\t\t\tline = lines[ i ];\n\n\t\t\t\tline = trimLeft ? line.trimLeft() : line.trim();\n\n\t\t\t\tlineLength = line.length;\n\n\t\t\t\tif ( lineLength === 0 ) continue;\n\n\t\t\t\tlineFirstChar = line.charAt( 0 );\n\n\t\t\t\t// @todo invoke passed in handler if any\n\t\t\t\tif ( lineFirstChar === '#' ) continue;\n\n\t\t\t\tif ( lineFirstChar === 'v' ) {\n\n\t\t\t\t\tvar data = line.split( /\\s+/ );\n\n\t\t\t\t\tswitch ( data[ 0 ] ) {\n\n\t\t\t\t\t\tcase 'v':\n\t\t\t\t\t\t\tstate.vertices.push(\n\t\t\t\t\t\t\t\tparseFloat( data[ 1 ] ),\n\t\t\t\t\t\t\t\tparseFloat( data[ 2 ] ),\n\t\t\t\t\t\t\t\tparseFloat( data[ 3 ] )\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tif ( data.length === 8 ) {\n\n\t\t\t\t\t\t\t\tstate.colors.push(\n\t\t\t\t\t\t\t\t\tparseFloat( data[ 4 ] ),\n\t\t\t\t\t\t\t\t\tparseFloat( data[ 5 ] ),\n\t\t\t\t\t\t\t\t\tparseFloat( data[ 6 ] )\n\n\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'vn':\n\t\t\t\t\t\t\tstate.normals.push(\n\t\t\t\t\t\t\t\tparseFloat( data[ 1 ] ),\n\t\t\t\t\t\t\t\tparseFloat( data[ 2 ] ),\n\t\t\t\t\t\t\t\tparseFloat( data[ 3 ] )\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'vt':\n\t\t\t\t\t\t\tstate.uvs.push(\n\t\t\t\t\t\t\t\tparseFloat( data[ 1 ] ),\n\t\t\t\t\t\t\t\tparseFloat( data[ 2 ] )\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( lineFirstChar === 'f' ) {\n\n\t\t\t\t\tvar lineData = line.substr( 1 ).trim();\n\t\t\t\t\tvar vertexData = lineData.split( /\\s+/ );\n\t\t\t\t\tvar faceVertices = [];\n\n\t\t\t\t\t// Parse the face vertex data into an easy to work with format\n\n\t\t\t\t\tfor ( var j = 0, jl = vertexData.length; j < jl; j ++ ) {\n\n\t\t\t\t\t\tvar vertex = vertexData[ j ];\n\n\t\t\t\t\t\tif ( vertex.length > 0 ) {\n\n\t\t\t\t\t\t\tvar vertexParts = vertex.split( '/' );\n\t\t\t\t\t\t\tfaceVertices.push( vertexParts );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// Draw an edge between the first vertex and all subsequent vertices to form an n-gon\n\n\t\t\t\t\tvar v1 = faceVertices[ 0 ];\n\n\t\t\t\t\tfor ( var j = 1, jl = faceVertices.length - 1; j < jl; j ++ ) {\n\n\t\t\t\t\t\tvar v2 = faceVertices[ j ];\n\t\t\t\t\t\tvar v3 = faceVertices[ j + 1 ];\n\n\t\t\t\t\t\tstate.addFace(\n\t\t\t\t\t\t\tv1[ 0 ], v2[ 0 ], v3[ 0 ],\n\t\t\t\t\t\t\tv1[ 1 ], v2[ 1 ], v3[ 1 ],\n\t\t\t\t\t\t\tv1[ 2 ], v2[ 2 ], v3[ 2 ]\n\t\t\t\t\t\t);\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( lineFirstChar === 'l' ) {\n\n\t\t\t\t\tvar lineParts = line.substring( 1 ).trim().split( \" \" );\n\t\t\t\t\tvar lineVertices = [], lineUVs = [];\n\n\t\t\t\t\tif ( line.indexOf( \"/\" ) === - 1 ) {\n\n\t\t\t\t\t\tlineVertices = lineParts;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tfor ( var li = 0, llen = lineParts.length; li < llen; li ++ ) {\n\n\t\t\t\t\t\t\tvar parts = lineParts[ li ].split( \"/\" );\n\n\t\t\t\t\t\t\tif ( parts[ 0 ] !== \"\" ) lineVertices.push( parts[ 0 ] );\n\t\t\t\t\t\t\tif ( parts[ 1 ] !== \"\" ) lineUVs.push( parts[ 1 ] );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\t\t\t\t\tstate.addLineGeometry( lineVertices, lineUVs );\n\n\t\t\t\t} else if ( ( result = object_pattern.exec( line ) ) !== null ) {\n\n\t\t\t\t\t// o object_name\n\t\t\t\t\t// or\n\t\t\t\t\t// g group_name\n\n\t\t\t\t\t// WORKAROUND: https://bugs.chromium.org/p/v8/issues/detail?id=2869\n\t\t\t\t\t// var name = result[ 0 ].substr( 1 ).trim();\n\t\t\t\t\tvar name = ( \" \" + result[ 0 ].substr( 1 ).trim() ).substr( 1 );\n\n\t\t\t\t\tstate.startObject( name );\n\n\t\t\t\t} else if ( material_use_pattern.test( line ) ) {\n\n\t\t\t\t\t// material\n\n\t\t\t\t\tstate.object.startMaterial( line.substring( 7 ).trim(), state.materialLibraries );\n\n\t\t\t\t} else if ( material_library_pattern.test( line ) ) {\n\n\t\t\t\t\t// mtl file\n\n\t\t\t\t\tstate.materialLibraries.push( line.substring( 7 ).trim() );\n\n\t\t\t\t} else if ( lineFirstChar === 's' ) {\n\n\t\t\t\t\tresult = line.split( ' ' );\n\n\t\t\t\t\t// smooth shading\n\n\t\t\t\t\t// @todo Handle files that have varying smooth values for a set of faces inside one geometry,\n\t\t\t\t\t// but does not define a usemtl for each face set.\n\t\t\t\t\t// This should be detected and a dummy material created (later MultiMaterial and geometry groups).\n\t\t\t\t\t// This requires some care to not create extra material on each smooth value for \"normal\" obj files.\n\t\t\t\t\t// where explicit usemtl defines geometry groups.\n\t\t\t\t\t// Example asset: examples/models/obj/cerberus/Cerberus.obj\n\n\t\t\t\t\t/*\n\t\t\t\t\t * http://paulbourke.net/dataformats/obj/\n\t\t\t\t\t * or\n\t\t\t\t\t * http://www.cs.utah.edu/~boulos/cs3505/obj_spec.pdf\n\t\t\t\t\t *\n\t\t\t\t\t * From chapter \"Grouping\" Syntax explanation \"s group_number\":\n\t\t\t\t\t * \"group_number is the smoothing group number. To turn off smoothing groups, use a value of 0 or off.\n\t\t\t\t\t * Polygonal elements use group numbers to put elements in different smoothing groups. For free-form\n\t\t\t\t\t * surfaces, smoothing groups are either turned on or off; there is no difference between values greater\n\t\t\t\t\t * than 0.\"\n\t\t\t\t\t */\n\t\t\t\t\tif ( result.length > 1 ) {\n\n\t\t\t\t\t\tvar value = result[ 1 ].trim().toLowerCase();\n\t\t\t\t\t\tstate.object.smooth = ( value !== '0' && value !== 'off' );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// ZBrush can produce \"s\" lines #11707\n\t\t\t\t\t\tstate.object.smooth = true;\n\n\t\t\t\t\t}\n\t\t\t\t\tvar material = state.object.currentMaterial();\n\t\t\t\t\tif ( material ) material.smooth = state.object.smooth;\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// Handle null terminated files without exception\n\t\t\t\t\tif ( line === '\\0' ) continue;\n\n\t\t\t\t\tthrow new Error( 'THREE.OBJLoader: Unexpected line: \"' + line + '\"' );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tstate.finalize();\n\n\t\t\tvar container = new THREE.Group();\n\t\t\tcontainer.materialLibraries = [].concat( state.materialLibraries );\n\n\t\t\tfor ( var i = 0, l = state.objects.length; i < l; i ++ ) {\n\n\t\t\t\tvar object = state.objects[ i ];\n\t\t\t\tvar geometry = object.geometry;\n\t\t\t\tvar materials = object.materials;\n\t\t\t\tvar isLine = ( geometry.type === 'Line' );\n\n\t\t\t\t// Skip o/g line declarations that did not follow with any faces\n\t\t\t\tif ( geometry.vertices.length === 0 ) continue;\n\n\t\t\t\tvar buffergeometry = new THREE.BufferGeometry();\n\n\t\t\t\tbuffergeometry.addAttribute( 'position', new THREE.Float32BufferAttribute( geometry.vertices, 3 ) );\n\n\t\t\t\tif ( geometry.normals.length > 0 ) {\n\n\t\t\t\t\tbuffergeometry.addAttribute( 'normal', new THREE.Float32BufferAttribute( geometry.normals, 3 ) );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tbuffergeometry.computeVertexNormals();\n\n\t\t\t\t}\n\n\t\t\t\tif ( geometry.colors.length > 0 ) {\n\n\t\t\t\t\tbuffergeometry.addAttribute( 'color', new THREE.Float32BufferAttribute( geometry.colors, 3 ) );\n\n\t\t\t\t}\n\n\t\t\t\tif ( geometry.uvs.length > 0 ) {\n\n\t\t\t\t\tbuffergeometry.addAttribute( 'uv', new THREE.Float32BufferAttribute( geometry.uvs, 2 ) );\n\n\t\t\t\t}\n\n\t\t\t\t// Create materials\n\n\t\t\t\tvar createdMaterials = [];\n\n\t\t\t\tfor ( var mi = 0, miLen = materials.length; mi < miLen; mi ++ ) {\n\n\t\t\t\t\tvar sourceMaterial = materials[ mi ];\n\t\t\t\t\tvar material = undefined;\n\n\t\t\t\t\tif ( this.materials !== null ) {\n\n\t\t\t\t\t\tmaterial = this.materials.create( sourceMaterial.name );\n\n\t\t\t\t\t\t// mtl etc. loaders probably can't create line materials correctly, copy properties to a line material.\n\t\t\t\t\t\tif ( isLine && material && ! ( material instanceof THREE.LineBasicMaterial ) ) {\n\n\t\t\t\t\t\t\tvar materialLine = new THREE.LineBasicMaterial();\n\t\t\t\t\t\t\tmaterialLine.copy( material );\n\t\t\t\t\t\t\tmaterial = materialLine;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( ! material ) {\n\n\t\t\t\t\t\tmaterial = ( ! isLine ? new THREE.MeshPhongMaterial() : new THREE.LineBasicMaterial() );\n\t\t\t\t\t\tmaterial.name = sourceMaterial.name;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tmaterial.flatShading = sourceMaterial.smooth ? false : true;\n\n\t\t\t\t\tcreatedMaterials.push( material );\n\n\t\t\t\t}\n\n\t\t\t\t// Create mesh\n\n\t\t\t\tvar mesh;\n\n\t\t\t\tif ( createdMaterials.length > 1 ) {\n\n\t\t\t\t\tfor ( var mi = 0, miLen = materials.length; mi < miLen; mi ++ ) {\n\n\t\t\t\t\t\tvar sourceMaterial = materials[ mi ];\n\t\t\t\t\t\tbuffergeometry.addGroup( sourceMaterial.groupStart, sourceMaterial.groupCount, mi );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tmesh = ( ! isLine ? new THREE.Mesh( buffergeometry, createdMaterials ) : new THREE.LineSegments( buffergeometry, createdMaterials ) );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tmesh = ( ! isLine ? new THREE.Mesh( buffergeometry, createdMaterials[ 0 ] ) : new THREE.LineSegments( buffergeometry, createdMaterials[ 0 ] ) );\n\n\t\t\t\t}\n\n\t\t\t\tmesh.name = object.name;\n\n\t\t\t\tcontainer.add( mesh );\n\n\t\t\t}\n\n\t\t\tconsole.timeEnd( 'OBJLoader' );\n\n\t\t\treturn container;\n\n\t\t}\n\n\t};\n\n\treturn OBJLoader;\n\n} )();\n","/**\n * Tween.js - Licensed under the MIT license\n * https://github.com/tweenjs/tween.js\n * ----------------------------------------------\n *\n * See https://github.com/tweenjs/tween.js/graphs/contributors for the full list of contributors.\n * Thank you all, you're awesome!\n */\n\n\nvar _Group = function () {\n\tthis._tweens = {};\n\tthis._tweensAddedDuringUpdate = {};\n};\n\n_Group.prototype = {\n\tgetAll: function () {\n\n\t\treturn Object.keys(this._tweens).map(function (tweenId) {\n\t\t\treturn this._tweens[tweenId];\n\t\t}.bind(this));\n\n\t},\n\n\tremoveAll: function () {\n\n\t\tthis._tweens = {};\n\n\t},\n\n\tadd: function (tween) {\n\n\t\tthis._tweens[tween.getId()] = tween;\n\t\tthis._tweensAddedDuringUpdate[tween.getId()] = tween;\n\n\t},\n\n\tremove: function (tween) {\n\n\t\tdelete this._tweens[tween.getId()];\n\t\tdelete this._tweensAddedDuringUpdate[tween.getId()];\n\n\t},\n\n\tupdate: function (time, preserve) {\n\n\t\tvar tweenIds = Object.keys(this._tweens);\n\n\t\tif (tweenIds.length === 0) {\n\t\t\treturn false;\n\t\t}\n\n\t\ttime = time !== undefined ? time : TWEEN.now();\n\n\t\t// Tweens are updated in \"batches\". If you add a new tween during an update, then the\n\t\t// new tween will be updated in the next batch.\n\t\t// If you remove a tween during an update, it will normally still be updated. However,\n\t\t// if the removed tween was added during the current batch, then it will not be updated.\n\t\twhile (tweenIds.length > 0) {\n\t\t\tthis._tweensAddedDuringUpdate = {};\n\n\t\t\tfor (var i = 0; i < tweenIds.length; i++) {\n\n\t\t\t\tif (this._tweens[tweenIds[i]].update(time) === false) {\n\t\t\t\t\tthis._tweens[tweenIds[i]]._isPlaying = false;\n\n\t\t\t\t\tif (!preserve) {\n\t\t\t\t\t\tdelete this._tweens[tweenIds[i]];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\ttweenIds = Object.keys(this._tweensAddedDuringUpdate);\n\t\t}\n\n\t\treturn true;\n\n\t}\n};\n\nvar TWEEN = new _Group();\n\nTWEEN.Group = _Group;\nTWEEN._nextId = 0;\nTWEEN.nextId = function () {\n\treturn TWEEN._nextId++;\n};\n\n\n// Include a performance.now polyfill.\n// In node.js, use process.hrtime.\nif (typeof (window) === 'undefined' && typeof (process) !== 'undefined') {\n\tTWEEN.now = function () {\n\t\tvar time = process.hrtime();\n\n\t\t// Convert [seconds, nanoseconds] to milliseconds.\n\t\treturn time[0] * 1000 + time[1] / 1000000;\n\t};\n}\n// In a browser, use window.performance.now if it is available.\nelse if (typeof (window) !== 'undefined' &&\n window.performance !== undefined &&\n\t\t window.performance.now !== undefined) {\n\t// This must be bound, because directly assigning this function\n\t// leads to an invocation exception in Chrome.\n\tTWEEN.now = window.performance.now.bind(window.performance);\n}\n// Use Date.now if it is available.\nelse if (Date.now !== undefined) {\n\tTWEEN.now = Date.now;\n}\n// Otherwise, use 'new Date().getTime()'.\nelse {\n\tTWEEN.now = function () {\n\t\treturn new Date().getTime();\n\t};\n}\n\n\nTWEEN.Tween = function (object, group) {\n\tthis._object = object;\n\tthis._valuesStart = {};\n\tthis._valuesEnd = {};\n\tthis._valuesStartRepeat = {};\n\tthis._duration = 1000;\n\tthis._repeat = 0;\n\tthis._repeatDelayTime = undefined;\n\tthis._yoyo = false;\n\tthis._isPlaying = false;\n\tthis._reversed = false;\n\tthis._delayTime = 0;\n\tthis._startTime = null;\n\tthis._easingFunction = TWEEN.Easing.Linear.None;\n\tthis._interpolationFunction = TWEEN.Interpolation.Linear;\n\tthis._chainedTweens = [];\n\tthis._onStartCallback = null;\n\tthis._onStartCallbackFired = false;\n\tthis._onUpdateCallback = null;\n\tthis._onCompleteCallback = null;\n\tthis._onStopCallback = null;\n\tthis._group = group || TWEEN;\n\tthis._id = TWEEN.nextId();\n\n};\n\nTWEEN.Tween.prototype = {\n\tgetId: function getId() {\n\t\treturn this._id;\n\t},\n\n\tisPlaying: function isPlaying() {\n\t\treturn this._isPlaying;\n\t},\n\n\tto: function to(properties, duration) {\n\n\t\tthis._valuesEnd = properties;\n\n\t\tif (duration !== undefined) {\n\t\t\tthis._duration = duration;\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tstart: function start(time) {\n\n\t\tthis._group.add(this);\n\n\t\tthis._isPlaying = true;\n\n\t\tthis._onStartCallbackFired = false;\n\n\t\tthis._startTime = time !== undefined ? time : TWEEN.now();\n\t\tthis._startTime += this._delayTime;\n\n\t\tfor (var property in this._valuesEnd) {\n\n\t\t\t// Check if an Array was provided as property value\n\t\t\tif (this._valuesEnd[property] instanceof Array) {\n\n\t\t\t\tif (this._valuesEnd[property].length === 0) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Create a local copy of the Array with the start value at the front\n\t\t\t\tthis._valuesEnd[property] = [this._object[property]].concat(this._valuesEnd[property]);\n\n\t\t\t}\n\n\t\t\t// If `to()` specifies a property that doesn't exist in the source object,\n\t\t\t// we should not set that property in the object\n\t\t\tif (this._object[property] === undefined) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// Save the starting value.\n\t\t\tthis._valuesStart[property] = this._object[property];\n\n\t\t\tif ((this._valuesStart[property] instanceof Array) === false) {\n\t\t\t\tthis._valuesStart[property] *= 1.0; // Ensures we're using numbers, not strings\n\t\t\t}\n\n\t\t\tthis._valuesStartRepeat[property] = this._valuesStart[property] || 0;\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tstop: function stop() {\n\n\t\tif (!this._isPlaying) {\n\t\t\treturn this;\n\t\t}\n\n\t\tthis._group.remove(this);\n\t\tthis._isPlaying = false;\n\n\t\tif (this._onStopCallback !== null) {\n\t\t\tthis._onStopCallback.call(this._object, this._object);\n\t\t}\n\n\t\tthis.stopChainedTweens();\n\t\treturn this;\n\n\t},\n\n\tend: function end() {\n\n\t\tthis.update(this._startTime + this._duration);\n\t\treturn this;\n\n\t},\n\n\tstopChainedTweens: function stopChainedTweens() {\n\n\t\tfor (var i = 0, numChainedTweens = this._chainedTweens.length; i < numChainedTweens; i++) {\n\t\t\tthis._chainedTweens[i].stop();\n\t\t}\n\n\t},\n\n\tdelay: function delay(amount) {\n\n\t\tthis._delayTime = amount;\n\t\treturn this;\n\n\t},\n\n\trepeat: function repeat(times) {\n\n\t\tthis._repeat = times;\n\t\treturn this;\n\n\t},\n\n\trepeatDelay: function repeatDelay(amount) {\n\n\t\tthis._repeatDelayTime = amount;\n\t\treturn this;\n\n\t},\n\n\tyoyo: function yoyo(yoyo) {\n\n\t\tthis._yoyo = yoyo;\n\t\treturn this;\n\n\t},\n\n\teasing: function easing(easing) {\n\n\t\tthis._easingFunction = easing;\n\t\treturn this;\n\n\t},\n\n\tinterpolation: function interpolation(interpolation) {\n\n\t\tthis._interpolationFunction = interpolation;\n\t\treturn this;\n\n\t},\n\n\tchain: function chain() {\n\n\t\tthis._chainedTweens = arguments;\n\t\treturn this;\n\n\t},\n\n\tonStart: function onStart(callback) {\n\n\t\tthis._onStartCallback = callback;\n\t\treturn this;\n\n\t},\n\n\tonUpdate: function onUpdate(callback) {\n\n\t\tthis._onUpdateCallback = callback;\n\t\treturn this;\n\n\t},\n\n\tonComplete: function onComplete(callback) {\n\n\t\tthis._onCompleteCallback = callback;\n\t\treturn this;\n\n\t},\n\n\tonStop: function onStop(callback) {\n\n\t\tthis._onStopCallback = callback;\n\t\treturn this;\n\n\t},\n\n\tupdate: function update(time) {\n\n\t\tvar property;\n\t\tvar elapsed;\n\t\tvar value;\n\n\t\tif (time < this._startTime) {\n\t\t\treturn true;\n\t\t}\n\n\t\tif (this._onStartCallbackFired === false) {\n\n\t\t\tif (this._onStartCallback !== null) {\n\t\t\t\tthis._onStartCallback.call(this._object, this._object);\n\t\t\t}\n\n\t\t\tthis._onStartCallbackFired = true;\n\t\t}\n\n\t\telapsed = (time - this._startTime) / this._duration;\n\t\telapsed = elapsed > 1 ? 1 : elapsed;\n\n\t\tvalue = this._easingFunction(elapsed);\n\n\t\tfor (property in this._valuesEnd) {\n\n\t\t\t// Don't update properties that do not exist in the source object\n\t\t\tif (this._valuesStart[property] === undefined) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tvar start = this._valuesStart[property] || 0;\n\t\t\tvar end = this._valuesEnd[property];\n\n\t\t\tif (end instanceof Array) {\n\n\t\t\t\tthis._object[property] = this._interpolationFunction(end, value);\n\n\t\t\t} else {\n\n\t\t\t\t// Parses relative end values with start as base (e.g.: +10, -3)\n\t\t\t\tif (typeof (end) === 'string') {\n\n\t\t\t\t\tif (end.charAt(0) === '+' || end.charAt(0) === '-') {\n\t\t\t\t\t\tend = start + parseFloat(end);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tend = parseFloat(end);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Protect against non numeric properties.\n\t\t\t\tif (typeof (end) === 'number') {\n\t\t\t\t\tthis._object[property] = start + (end - start) * value;\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tif (this._onUpdateCallback !== null) {\n\t\t\tthis._onUpdateCallback.call(this._object, value);\n\t\t}\n\n\t\tif (elapsed === 1) {\n\n\t\t\tif (this._repeat > 0) {\n\n\t\t\t\tif (isFinite(this._repeat)) {\n\t\t\t\t\tthis._repeat--;\n\t\t\t\t}\n\n\t\t\t\t// Reassign starting values, restart by making startTime = now\n\t\t\t\tfor (property in this._valuesStartRepeat) {\n\n\t\t\t\t\tif (typeof (this._valuesEnd[property]) === 'string') {\n\t\t\t\t\t\tthis._valuesStartRepeat[property] = this._valuesStartRepeat[property] + parseFloat(this._valuesEnd[property]);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (this._yoyo) {\n\t\t\t\t\t\tvar tmp = this._valuesStartRepeat[property];\n\n\t\t\t\t\t\tthis._valuesStartRepeat[property] = this._valuesEnd[property];\n\t\t\t\t\t\tthis._valuesEnd[property] = tmp;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis._valuesStart[property] = this._valuesStartRepeat[property];\n\n\t\t\t\t}\n\n\t\t\t\tif (this._yoyo) {\n\t\t\t\t\tthis._reversed = !this._reversed;\n\t\t\t\t}\n\n\t\t\t\tif (this._repeatDelayTime !== undefined) {\n\t\t\t\t\tthis._startTime = time + this._repeatDelayTime;\n\t\t\t\t} else {\n\t\t\t\t\tthis._startTime = time + this._delayTime;\n\t\t\t\t}\n\n\t\t\t\treturn true;\n\n\t\t\t} else {\n\n\t\t\t\tif (this._onCompleteCallback !== null) {\n\n\t\t\t\t\tthis._onCompleteCallback.call(this._object, this._object);\n\t\t\t\t}\n\n\t\t\t\tfor (var i = 0, numChainedTweens = this._chainedTweens.length; i < numChainedTweens; i++) {\n\t\t\t\t\t// Make the chained tweens start exactly at the time they should,\n\t\t\t\t\t// even if the `update()` method was called way past the duration of the tween\n\t\t\t\t\tthis._chainedTweens[i].start(this._startTime + this._duration);\n\t\t\t\t}\n\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n};\n\n\nTWEEN.Easing = {\n\n\tLinear: {\n\n\t\tNone: function (k) {\n\n\t\t\treturn k;\n\n\t\t}\n\n\t},\n\n\tQuadratic: {\n\n\t\tIn: function (k) {\n\n\t\t\treturn k * k;\n\n\t\t},\n\n\t\tOut: function (k) {\n\n\t\t\treturn k * (2 - k);\n\n\t\t},\n\n\t\tInOut: function (k) {\n\n\t\t\tif ((k *= 2) < 1) {\n\t\t\t\treturn 0.5 * k * k;\n\t\t\t}\n\n\t\t\treturn - 0.5 * (--k * (k - 2) - 1);\n\n\t\t}\n\n\t},\n\n\tCubic: {\n\n\t\tIn: function (k) {\n\n\t\t\treturn k * k * k;\n\n\t\t},\n\n\t\tOut: function (k) {\n\n\t\t\treturn --k * k * k + 1;\n\n\t\t},\n\n\t\tInOut: function (k) {\n\n\t\t\tif ((k *= 2) < 1) {\n\t\t\t\treturn 0.5 * k * k * k;\n\t\t\t}\n\n\t\t\treturn 0.5 * ((k -= 2) * k * k + 2);\n\n\t\t}\n\n\t},\n\n\tQuartic: {\n\n\t\tIn: function (k) {\n\n\t\t\treturn k * k * k * k;\n\n\t\t},\n\n\t\tOut: function (k) {\n\n\t\t\treturn 1 - (--k * k * k * k);\n\n\t\t},\n\n\t\tInOut: function (k) {\n\n\t\t\tif ((k *= 2) < 1) {\n\t\t\t\treturn 0.5 * k * k * k * k;\n\t\t\t}\n\n\t\t\treturn - 0.5 * ((k -= 2) * k * k * k - 2);\n\n\t\t}\n\n\t},\n\n\tQuintic: {\n\n\t\tIn: function (k) {\n\n\t\t\treturn k * k * k * k * k;\n\n\t\t},\n\n\t\tOut: function (k) {\n\n\t\t\treturn --k * k * k * k * k + 1;\n\n\t\t},\n\n\t\tInOut: function (k) {\n\n\t\t\tif ((k *= 2) < 1) {\n\t\t\t\treturn 0.5 * k * k * k * k * k;\n\t\t\t}\n\n\t\t\treturn 0.5 * ((k -= 2) * k * k * k * k + 2);\n\n\t\t}\n\n\t},\n\n\tSinusoidal: {\n\n\t\tIn: function (k) {\n\n\t\t\treturn 1 - Math.cos(k * Math.PI / 2);\n\n\t\t},\n\n\t\tOut: function (k) {\n\n\t\t\treturn Math.sin(k * Math.PI / 2);\n\n\t\t},\n\n\t\tInOut: function (k) {\n\n\t\t\treturn 0.5 * (1 - Math.cos(Math.PI * k));\n\n\t\t}\n\n\t},\n\n\tExponential: {\n\n\t\tIn: function (k) {\n\n\t\t\treturn k === 0 ? 0 : Math.pow(1024, k - 1);\n\n\t\t},\n\n\t\tOut: function (k) {\n\n\t\t\treturn k === 1 ? 1 : 1 - Math.pow(2, - 10 * k);\n\n\t\t},\n\n\t\tInOut: function (k) {\n\n\t\t\tif (k === 0) {\n\t\t\t\treturn 0;\n\t\t\t}\n\n\t\t\tif (k === 1) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\tif ((k *= 2) < 1) {\n\t\t\t\treturn 0.5 * Math.pow(1024, k - 1);\n\t\t\t}\n\n\t\t\treturn 0.5 * (- Math.pow(2, - 10 * (k - 1)) + 2);\n\n\t\t}\n\n\t},\n\n\tCircular: {\n\n\t\tIn: function (k) {\n\n\t\t\treturn 1 - Math.sqrt(1 - k * k);\n\n\t\t},\n\n\t\tOut: function (k) {\n\n\t\t\treturn Math.sqrt(1 - (--k * k));\n\n\t\t},\n\n\t\tInOut: function (k) {\n\n\t\t\tif ((k *= 2) < 1) {\n\t\t\t\treturn - 0.5 * (Math.sqrt(1 - k * k) - 1);\n\t\t\t}\n\n\t\t\treturn 0.5 * (Math.sqrt(1 - (k -= 2) * k) + 1);\n\n\t\t}\n\n\t},\n\n\tElastic: {\n\n\t\tIn: function (k) {\n\n\t\t\tif (k === 0) {\n\t\t\t\treturn 0;\n\t\t\t}\n\n\t\t\tif (k === 1) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\treturn -Math.pow(2, 10 * (k - 1)) * Math.sin((k - 1.1) * 5 * Math.PI);\n\n\t\t},\n\n\t\tOut: function (k) {\n\n\t\t\tif (k === 0) {\n\t\t\t\treturn 0;\n\t\t\t}\n\n\t\t\tif (k === 1) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\treturn Math.pow(2, -10 * k) * Math.sin((k - 0.1) * 5 * Math.PI) + 1;\n\n\t\t},\n\n\t\tInOut: function (k) {\n\n\t\t\tif (k === 0) {\n\t\t\t\treturn 0;\n\t\t\t}\n\n\t\t\tif (k === 1) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\tk *= 2;\n\n\t\t\tif (k < 1) {\n\t\t\t\treturn -0.5 * Math.pow(2, 10 * (k - 1)) * Math.sin((k - 1.1) * 5 * Math.PI);\n\t\t\t}\n\n\t\t\treturn 0.5 * Math.pow(2, -10 * (k - 1)) * Math.sin((k - 1.1) * 5 * Math.PI) + 1;\n\n\t\t}\n\n\t},\n\n\tBack: {\n\n\t\tIn: function (k) {\n\n\t\t\tvar s = 1.70158;\n\n\t\t\treturn k * k * ((s + 1) * k - s);\n\n\t\t},\n\n\t\tOut: function (k) {\n\n\t\t\tvar s = 1.70158;\n\n\t\t\treturn --k * k * ((s + 1) * k + s) + 1;\n\n\t\t},\n\n\t\tInOut: function (k) {\n\n\t\t\tvar s = 1.70158 * 1.525;\n\n\t\t\tif ((k *= 2) < 1) {\n\t\t\t\treturn 0.5 * (k * k * ((s + 1) * k - s));\n\t\t\t}\n\n\t\t\treturn 0.5 * ((k -= 2) * k * ((s + 1) * k + s) + 2);\n\n\t\t}\n\n\t},\n\n\tBounce: {\n\n\t\tIn: function (k) {\n\n\t\t\treturn 1 - TWEEN.Easing.Bounce.Out(1 - k);\n\n\t\t},\n\n\t\tOut: function (k) {\n\n\t\t\tif (k < (1 / 2.75)) {\n\t\t\t\treturn 7.5625 * k * k;\n\t\t\t} else if (k < (2 / 2.75)) {\n\t\t\t\treturn 7.5625 * (k -= (1.5 / 2.75)) * k + 0.75;\n\t\t\t} else if (k < (2.5 / 2.75)) {\n\t\t\t\treturn 7.5625 * (k -= (2.25 / 2.75)) * k + 0.9375;\n\t\t\t} else {\n\t\t\t\treturn 7.5625 * (k -= (2.625 / 2.75)) * k + 0.984375;\n\t\t\t}\n\n\t\t},\n\n\t\tInOut: function (k) {\n\n\t\t\tif (k < 0.5) {\n\t\t\t\treturn TWEEN.Easing.Bounce.In(k * 2) * 0.5;\n\t\t\t}\n\n\t\t\treturn TWEEN.Easing.Bounce.Out(k * 2 - 1) * 0.5 + 0.5;\n\n\t\t}\n\n\t}\n\n};\n\nTWEEN.Interpolation = {\n\n\tLinear: function (v, k) {\n\n\t\tvar m = v.length - 1;\n\t\tvar f = m * k;\n\t\tvar i = Math.floor(f);\n\t\tvar fn = TWEEN.Interpolation.Utils.Linear;\n\n\t\tif (k < 0) {\n\t\t\treturn fn(v[0], v[1], f);\n\t\t}\n\n\t\tif (k > 1) {\n\t\t\treturn fn(v[m], v[m - 1], m - f);\n\t\t}\n\n\t\treturn fn(v[i], v[i + 1 > m ? m : i + 1], f - i);\n\n\t},\n\n\tBezier: function (v, k) {\n\n\t\tvar b = 0;\n\t\tvar n = v.length - 1;\n\t\tvar pw = Math.pow;\n\t\tvar bn = TWEEN.Interpolation.Utils.Bernstein;\n\n\t\tfor (var i = 0; i <= n; i++) {\n\t\t\tb += pw(1 - k, n - i) * pw(k, i) * v[i] * bn(n, i);\n\t\t}\n\n\t\treturn b;\n\n\t},\n\n\tCatmullRom: function (v, k) {\n\n\t\tvar m = v.length - 1;\n\t\tvar f = m * k;\n\t\tvar i = Math.floor(f);\n\t\tvar fn = TWEEN.Interpolation.Utils.CatmullRom;\n\n\t\tif (v[0] === v[m]) {\n\n\t\t\tif (k < 0) {\n\t\t\t\ti = Math.floor(f = m * (1 + k));\n\t\t\t}\n\n\t\t\treturn fn(v[(i - 1 + m) % m], v[i], v[(i + 1) % m], v[(i + 2) % m], f - i);\n\n\t\t} else {\n\n\t\t\tif (k < 0) {\n\t\t\t\treturn v[0] - (fn(v[0], v[0], v[1], v[1], -f) - v[0]);\n\t\t\t}\n\n\t\t\tif (k > 1) {\n\t\t\t\treturn v[m] - (fn(v[m], v[m], v[m - 1], v[m - 1], f - m) - v[m]);\n\t\t\t}\n\n\t\t\treturn fn(v[i ? i - 1 : 0], v[i], v[m < i + 1 ? m : i + 1], v[m < i + 2 ? m : i + 2], f - i);\n\n\t\t}\n\n\t},\n\n\tUtils: {\n\n\t\tLinear: function (p0, p1, t) {\n\n\t\t\treturn (p1 - p0) * t + p0;\n\n\t\t},\n\n\t\tBernstein: function (n, i) {\n\n\t\t\tvar fc = TWEEN.Interpolation.Utils.Factorial;\n\n\t\t\treturn fc(n) / fc(i) / fc(n - i);\n\n\t\t},\n\n\t\tFactorial: (function () {\n\n\t\t\tvar a = [1];\n\n\t\t\treturn function (n) {\n\n\t\t\t\tvar s = 1;\n\n\t\t\t\tif (a[n]) {\n\t\t\t\t\treturn a[n];\n\t\t\t\t}\n\n\t\t\t\tfor (var i = n; i > 1; i--) {\n\t\t\t\t\ts *= i;\n\t\t\t\t}\n\n\t\t\t\ta[n] = s;\n\t\t\t\treturn s;\n\n\t\t\t};\n\n\t\t})(),\n\n\t\tCatmullRom: function (p0, p1, p2, p3, t) {\n\n\t\t\tvar v0 = (p2 - p0) * 0.5;\n\t\t\tvar v1 = (p3 - p1) * 0.5;\n\t\t\tvar t2 = t * t;\n\t\t\tvar t3 = t * t2;\n\n\t\t\treturn (2 * p1 - 2 * p2 + v0 + v1) * t3 + (- 3 * p1 + 3 * p2 - 2 * v0 - v1) * t2 + v0 * t + p1;\n\n\t\t}\n\n\t}\n\n};\n\n// UMD (Universal Module Definition)\n(function (root) {\n\n\tif (typeof define === 'function' && define.amd) {\n\n\t\t// AMD\n\t\tdefine([], function () {\n\t\t\treturn TWEEN;\n\t\t});\n\n\t} else if (typeof module !== 'undefined' && typeof exports === 'object') {\n\n\t\t// Node.js\n\t\tmodule.exports = TWEEN;\n\n\t} else if (root !== undefined) {\n\n\t\t// Global variable\n\t\troot.TWEEN = TWEEN;\n\n\t}\n\n})(this);\n","var str = Object.prototype.toString\n\nmodule.exports = anArray\n\nfunction anArray(arr) {\n return (\n arr.BYTES_PER_ELEMENT\n && str.call(arr.buffer) === '[object ArrayBuffer]'\n || Array.isArray(arr)\n )\n}\n","module.exports = function numtype(num, def) {\n\treturn typeof num === 'number'\n\t\t? num \n\t\t: (typeof def === 'number' ? def : 0)\n}","'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i]\n revLookup[code.charCodeAt(i)] = i\n}\n\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction placeHoldersCount (b64) {\n var len = b64.length\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4')\n }\n\n // the number of equal signs (place holders)\n // if there are two placeholders, than the two characters before it\n // represent one byte\n // if there is only one, then the three characters before it represent 2 bytes\n // this is just a cheap hack to not do indexOf twice\n return b64[len - 2] === '=' ? 2 : b64[len - 1] === '=' ? 1 : 0\n}\n\nfunction byteLength (b64) {\n // base64 is 4/3 + up to two characters of the original data\n return (b64.length * 3 / 4) - placeHoldersCount(b64)\n}\n\nfunction toByteArray (b64) {\n var i, l, tmp, placeHolders, arr\n var len = b64.length\n placeHolders = placeHoldersCount(b64)\n\n arr = new Arr((len * 3 / 4) - placeHolders)\n\n // if there are placeholders, only get up to the last complete 4 chars\n l = placeHolders > 0 ? len - 4 : len\n\n var L = 0\n\n for (i = 0; i < l; i += 4) {\n tmp = (revLookup[b64.charCodeAt(i)] << 18) | (revLookup[b64.charCodeAt(i + 1)] << 12) | (revLookup[b64.charCodeAt(i + 2)] << 6) | revLookup[b64.charCodeAt(i + 3)]\n arr[L++] = (tmp >> 16) & 0xFF\n arr[L++] = (tmp >> 8) & 0xFF\n arr[L++] = tmp & 0xFF\n }\n\n if (placeHolders === 2) {\n tmp = (revLookup[b64.charCodeAt(i)] << 2) | (revLookup[b64.charCodeAt(i + 1)] >> 4)\n arr[L++] = tmp & 0xFF\n } else if (placeHolders === 1) {\n tmp = (revLookup[b64.charCodeAt(i)] << 10) | (revLookup[b64.charCodeAt(i + 1)] << 4) | (revLookup[b64.charCodeAt(i + 2)] >> 2)\n arr[L++] = (tmp >> 8) & 0xFF\n arr[L++] = tmp & 0xFF\n }\n\n return arr\n}\n\nfunction tripletToBase64 (num) {\n return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n var tmp\n var output = []\n for (var i = start; i < end; i += 3) {\n tmp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])\n output.push(tripletToBase64(tmp))\n }\n return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n var tmp\n var len = uint8.length\n var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n var output = ''\n var parts = []\n var maxChunkLength = 16383 // must be multiple of 3\n\n // go through the array every three bytes, we'll deal with trailing stuff later\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))\n }\n\n // pad the end with zeros, but make sure to not forget the extra bytes\n if (extraBytes === 1) {\n tmp = uint8[len - 1]\n output += lookup[tmp >> 2]\n output += lookup[(tmp << 4) & 0x3F]\n output += '=='\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + (uint8[len - 1])\n output += lookup[tmp >> 10]\n output += lookup[(tmp >> 4) & 0x3F]\n output += lookup[(tmp << 2) & 0x3F]\n output += '='\n }\n\n parts.push(output)\n\n return parts.join('')\n}\n","'use strict';\n// For more information about browser field, check out the browser field at https://github.com/substack/browserify-handbook#browser-field.\n\nmodule.exports = {\n // Create a tag with optional data attributes\n createLink: function(href, attributes) {\n var head = document.head || document.getElementsByTagName('head')[0];\n var link = document.createElement('link');\n\n link.href = href;\n link.rel = 'stylesheet';\n\n for (var key in attributes) {\n if ( ! attributes.hasOwnProperty(key)) {\n continue;\n }\n var value = attributes[key];\n link.setAttribute('data-' + key, value);\n }\n\n head.appendChild(link);\n },\n // Create a