{"version":3,"file":"gaussian-splats-3d.umd.cjs","sources":["../src/AbortablePromise.js","../src/Util.js","../src/loaders/UncompressedSplatArray.js","../src/Constants.js","../src/loaders/SplatBuffer.js","../src/loaders/ply/PlayCanvasCompressedPlyParser.js","../src/loaders/ply/PlyFormat.js","../src/loaders/ply/PlyParserUtils.js","../src/loaders/ply/INRIAV1PlyParser.js","../src/loaders/ply/INRIAV2PlyParser.js","../src/loaders/ply/PlyParser.js","../src/loaders/SplatPartitioner.js","../src/loaders/SplatBufferGenerator.js","../src/loaders/LoaderStatus.js","../src/loaders/DirectLoadError.js","../src/loaders/InternalLoadType.js","../src/loaders/ply/PlyLoader.js","../src/loaders/Compression.js","../src/loaders/spz/SpzLoader.js","../src/loaders/splat/SplatParser.js","../src/loaders/splat/SplatLoader.js","../src/loaders/ksplat/KSplatLoader.js","../src/loaders/SceneFormat.js","../src/loaders/Utils.js","../src/OrbitControls.js","../src/ui/Util.js","../src/ui/LoadingSpinner.js","../src/ui/LoadingProgressBar.js","../src/ui/InfoPanel.js","../src/ArrowHelper.js","../src/SceneHelper.js","../src/raycaster/Ray.js","../src/raycaster/Hit.js","../src/SplatRenderMode.js","../src/raycaster/Raycaster.js","../src/splatmesh/SplatMaterial.js","../src/splatmesh/SplatMaterial3D.js","../src/splatmesh/SplatMaterial2D.js","../src/splatmesh/SplatGeometry.js","../src/splatmesh/SplatScene.js","../src/splattree/SplatTree.js","../src/three-shim/WebGLExtensions.js","../src/three-shim/WebGLCapabilities.js","../src/SceneRevealMode.js","../src/LogLevel.js","../src/splatmesh/SplatMesh.js","../src/worker/sorter.wasm","../src/worker/sorter_no_simd.wasm","../src/worker/sorter_non_shared.wasm","../src/worker/sorter_no_simd_non_shared.wasm","../src/worker/SortWorker.js","../src/webxr/WebXRMode.js","../src/webxr/VRButton.js","../src/webxr/ARButton.js","../src/RenderMode.js","../src/Viewer.js","../src/DropInViewer.js"],"sourcesContent":["/**\n * AbortablePromise: A quick & dirty wrapper for JavaScript's Promise class that allows the underlying\n * asynchronous operation to be cancelled. It is only meant for simple situations where no complex promise\n * chaining or merging occurs. It needs a significant amount of work to truly replicate the full\n * functionality of JavaScript's Promise class. Look at Util.fetchWithProgress() for example usage.\n *\n * This class was primarily added to allow splat scene downloads to be cancelled. It has not been tested\n * very thoroughly and the implementation is kinda janky. If you can at all help it, please avoid using it :)\n */\nexport class AbortablePromise {\n\n    static idGen = 0;\n\n    constructor(promiseFunc, abortHandler) {\n\n        let resolver;\n        let rejecter;\n        this.promise = new Promise((resolve, reject) => {\n            resolver = resolve;\n            rejecter = reject;\n        });\n\n        const promiseResolve = resolver.bind(this);\n        const promiseReject = rejecter.bind(this);\n\n        const resolve = (...args) => {\n            promiseResolve(...args);\n        };\n\n        const reject = (error) => {\n            promiseReject(error);\n        };\n\n        promiseFunc(resolve.bind(this), reject.bind(this));\n        this.abortHandler = abortHandler;\n        this.id = AbortablePromise.idGen++;\n    }\n\n    then(onResolve) {\n        return new AbortablePromise((resolve, reject) => {\n            this.promise = this.promise\n            .then((...args) => {\n                const onResolveResult = onResolve(...args);\n                if (onResolveResult instanceof Promise || onResolveResult instanceof AbortablePromise) {\n                    onResolveResult.then((...args2) => {\n                        resolve(...args2);\n                    });\n                } else {\n                    resolve(onResolveResult);\n                }\n            })\n            .catch((error) => {\n                reject(error);\n            });\n        }, this.abortHandler);\n    }\n\n    catch(onFail) {\n        return new AbortablePromise((resolve) => {\n            this.promise = this.promise.then((...args) => {\n                resolve(...args);\n            })\n            .catch(onFail);\n        }, this.abortHandler);\n    }\n\n    abort(reason) {\n        if (this.abortHandler) this.abortHandler(reason);\n    }\n\n}\n\nexport class AbortedPromiseError extends Error {\n\n    constructor(msg) {\n        super(msg);\n    }\n\n}\n","import { AbortablePromise, AbortedPromiseError } from './AbortablePromise.js';\n\nexport const floatToHalf = function() {\n\n    const floatView = new Float32Array(1);\n    const int32View = new Int32Array(floatView.buffer);\n\n    return function(val) {\n        floatView[0] = val;\n        const x = int32View[0];\n\n        let bits = (x >> 16) & 0x8000;\n        let m = (x >> 12) & 0x07ff;\n        const e = (x >> 23) & 0xff;\n\n        if (e < 103) return bits;\n\n        if (e > 142) {\n            bits |= 0x7c00;\n            bits |= ((e == 255) ? 0 : 1) && (x & 0x007fffff);\n            return bits;\n        }\n\n        if (e < 113) {\n            m |= 0x0800;\n            bits |= (m >> (114 - e)) + ((m >> (113 - e)) & 1);\n            return bits;\n        }\n\n        bits |= (( e - 112) << 10) | (m >> 1);\n        bits += m & 1;\n        return bits;\n    };\n\n}();\n\nexport const uintEncodedFloat = function() {\n\n    const floatView = new Float32Array(1);\n    const int32View = new Int32Array(floatView.buffer);\n\n    return function(f) {\n        floatView[0] = f;\n        return int32View[0];\n    };\n\n}();\n\nexport const rgbaToInteger = function(r, g, b, a) {\n    return r + (g << 8) + (b << 16) + (a << 24);\n};\n\nexport const rgbaArrayToInteger = function(arr, offset) {\n    return arr[offset] + (arr[offset + 1] << 8) + (arr[offset + 2] << 16) + (arr[offset + 3] << 24);\n};\n\nexport const fetchWithProgress = function(path, onProgress, saveChunks = true, headers) {\n\n    const abortController = new AbortController();\n    const signal = abortController.signal;\n    let aborted = false;\n    const abortHandler = (reason) => {\n        abortController.abort(reason);\n        aborted = true;\n    };\n\n    let onProgressCalledAtComplete = false;\n    const localOnProgress = (percent, percentLabel, chunk, fileSize) => {\n        if (onProgress && !onProgressCalledAtComplete) {\n            onProgress(percent, percentLabel, chunk, fileSize);\n            if (percent === 100) {\n                onProgressCalledAtComplete = true;\n            }\n        }\n    };\n\n    return new AbortablePromise((resolve, reject) => {\n        const fetchOptions = { signal };\n        if (headers) fetchOptions.headers = headers;\n         fetch(path, fetchOptions)\n        .then(async (data) => {\n            // Handle error conditions where data is still returned\n            if (!data.ok) {\n                const errorText = await data.text();\n                reject(new Error(`Fetch failed: ${data.status} ${data.statusText} ${errorText}`));\n                return;\n            }\n\n            const reader = data.body.getReader();\n            let bytesDownloaded = 0;\n            let _fileSize = data.headers.get('Content-Length');\n            let fileSize = _fileSize ? parseInt(_fileSize) : undefined;\n\n            const chunks = [];\n\n            while (!aborted) {\n                try {\n                    const { value: chunk, done } = await reader.read();\n                    if (done) {\n                        localOnProgress(100, '100%', chunk, fileSize);\n                        if (saveChunks) {\n                            const buffer = new Blob(chunks).arrayBuffer();\n                            resolve(buffer);\n                        } else {\n                            resolve();\n                        }\n                        break;\n                    }\n                    bytesDownloaded += chunk.length;\n                    let percent;\n                    let percentLabel;\n                    if (fileSize !== undefined) {\n                        percent = bytesDownloaded / fileSize * 100;\n                        percentLabel = `${percent.toFixed(2)}%`;\n                    }\n                    if (saveChunks) {\n                        chunks.push(chunk);\n                    }\n                    localOnProgress(percent, percentLabel, chunk, fileSize);\n                } catch (error) {\n                    reject(error);\n                    return;\n                }\n            }\n        })\n        .catch((error) => {\n            reject(new AbortedPromiseError(error));\n        });\n    }, abortHandler);\n\n};\n\nexport const clamp = function(val, min, max) {\n    return Math.max(Math.min(val, max), min);\n};\n\nexport const getCurrentTime = function() {\n    return performance.now() / 1000;\n};\n\nexport const disposeAllMeshes = (object3D) => {\n    if (object3D.geometry) {\n        object3D.geometry.dispose();\n        object3D.geometry = null;\n    }\n    if (object3D.material) {\n        object3D.material.dispose();\n        object3D.material = null;\n    }\n    if (object3D.children) {\n        for (let child of object3D.children) {\n            disposeAllMeshes(child);\n        }\n    }\n};\n\nexport const delayedExecute = (func, fast) => {\n    return new Promise((resolve) => {\n        window.setTimeout(() => {\n            resolve(func ? func() : undefined);\n        }, fast ? 1 : 50);\n    });\n};\n\n\nexport const getSphericalHarmonicsComponentCountForDegree = (sphericalHarmonicsDegree = 0) => {\n    let shCoeffPerSplat = 0;\n    if (sphericalHarmonicsDegree === 1) {\n        shCoeffPerSplat = 9;\n    } else if (sphericalHarmonicsDegree === 2) {\n        shCoeffPerSplat = 24;\n    } else if (sphericalHarmonicsDegree === 3) {\n        shCoeffPerSplat = 45;\n    } else if (sphericalHarmonicsDegree > 3) {\n        throw new Error('getSphericalHarmonicsComponentCountForDegree() -> Invalid spherical harmonics degree');\n    }\n    return shCoeffPerSplat;\n};\n\nexport const nativePromiseWithExtractedComponents = () => {\n    let resolver;\n    let rejecter;\n    const promise = new Promise((resolve, reject) => {\n        resolver = resolve;\n        rejecter = reject;\n    });\n    return {\n        'promise': promise,\n        'resolve': resolver,\n        'reject': rejecter\n    };\n};\n\nexport const abortablePromiseWithExtractedComponents = (abortHandler) => {\n    let resolver;\n    let rejecter;\n    if (!abortHandler) {\n        abortHandler = () => {};\n    }\n    const promise = new AbortablePromise((resolve, reject) => {\n        resolver = resolve;\n        rejecter = reject;\n    }, abortHandler);\n    return {\n        'promise': promise,\n        'resolve': resolver,\n        'reject': rejecter\n    };\n};\n\nclass Semver {\n    constructor(major, minor, patch) {\n        this.major = major;\n        this.minor = minor;\n        this.patch = patch;\n    }\n\n    toString() {\n        return `${this.major}_${this.minor}_${this.patch}`;\n    }\n}\n\nexport function isIOS() {\n    const ua = navigator.userAgent;\n    return ua.indexOf('iPhone') > 0 || ua.indexOf('iPad') > 0;\n}\n\nexport function getIOSSemever() {\n    if (isIOS()) {\n        const extract = navigator.userAgent.match(/OS (\\d+)_(\\d+)_?(\\d+)?/);\n        return new Semver(\n            parseInt(extract[1] || 0, 10),\n            parseInt(extract[2] || 0, 10),\n            parseInt(extract[3] || 0, 10)\n        );\n    } else {\n        return null; // or [0,0,0]\n    }\n}\n","import { getSphericalHarmonicsComponentCountForDegree } from '../Util.js';\n\nconst BASE_COMPONENT_COUNT = 14;\n\nexport class UncompressedSplatArray {\n\n    static OFFSET = {\n        X: 0,\n        Y: 1,\n        Z: 2,\n        SCALE0: 3,\n        SCALE1: 4,\n        SCALE2: 5,\n        ROTATION0: 6,\n        ROTATION1: 7,\n        ROTATION2: 8,\n        ROTATION3: 9,\n        FDC0: 10,\n        FDC1: 11,\n        FDC2: 12,\n        OPACITY: 13,\n        FRC0: 14,\n        FRC1: 15,\n        FRC2: 16,\n        FRC3: 17,\n        FRC4: 18,\n        FRC5: 19,\n        FRC6: 20,\n        FRC7: 21,\n        FRC8: 22,\n        FRC9: 23,\n        FRC10: 24,\n        FRC11: 25,\n        FRC12: 26,\n        FRC13: 27,\n        FRC14: 28,\n        FRC15: 29,\n        FRC16: 30,\n        FRC17: 31,\n        FRC18: 32,\n        FRC19: 33,\n        FRC20: 34,\n        FRC21: 35,\n        FRC22: 36,\n        FRC23: 37\n    };\n\n    constructor(sphericalHarmonicsDegree = 0) {\n        this.sphericalHarmonicsDegree = sphericalHarmonicsDegree;\n        this.sphericalHarmonicsCount = getSphericalHarmonicsComponentCountForDegree(this.sphericalHarmonicsDegree);\n        this.componentCount = this.sphericalHarmonicsCount + BASE_COMPONENT_COUNT;\n        this.defaultSphericalHarmonics = new Array(this.sphericalHarmonicsCount).fill(0);\n        this.splats = [];\n        this.splatCount = 0;\n    }\n\n    static createSplat(sphericalHarmonicsDegree = 0) {\n        const baseSplat = [0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0];\n        let shEntries = getSphericalHarmonicsComponentCountForDegree(sphericalHarmonicsDegree);\n        for (let i = 0; i < shEntries; i++) baseSplat.push(0);\n        return baseSplat;\n    }\n\n    addSplat(splat) {\n        this.splats.push(splat);\n        this.splatCount++;\n    }\n\n    getSplat(index) {\n        return this.splats[index];\n    }\n\n    addDefaultSplat() {\n        const newSplat = UncompressedSplatArray.createSplat(this.sphericalHarmonicsDegree);\n        this.addSplat(newSplat);\n        return newSplat;\n    }\n\n    addSplatFromComonents(x, y, z, scale0, scale1, scale2, rot0, rot1, rot2, rot3, r, g, b, opacity, ...rest) {\n        const newSplat = [x, y, z, scale0, scale1, scale2, rot0, rot1, rot2, rot3, r, g, b, opacity, ...this.defaultSphericalHarmonics];\n        for (let i = 0; i < rest.length && i < this.sphericalHarmonicsCount; i++) {\n            newSplat[i] = rest[i];\n        }\n        this.addSplat(newSplat);\n        return newSplat;\n    }\n\n    addSplatFromArray(src, srcIndex) {\n        const srcSplat = src.splats[srcIndex];\n        const newSplat = UncompressedSplatArray.createSplat(this.sphericalHarmonicsDegree);\n        for (let i = 0; i < this.componentCount && i < srcSplat.length; i++) {\n            newSplat[i] = srcSplat[i];\n        }\n        this.addSplat(newSplat);\n    }\n}\n","export class Constants {\n\n    static DefaultSplatSortDistanceMapPrecision = 16;\n    static MemoryPageSize = 65536;\n    static BytesPerFloat = 4;\n    static BytesPerInt = 4;\n    static MaxScenes = 32;\n    static ProgressiveLoadSectionSize = 262144;\n    static ProgressiveLoadSectionDelayDuration = 15;\n    static SphericalHarmonics8BitCompressionRange = 3;\n}\n","import * as THREE from 'three';\nimport { UncompressedSplatArray } from './UncompressedSplatArray.js';\nimport { clamp, getSphericalHarmonicsComponentCountForDegree } from '../Util.js';\nimport { Constants } from '../Constants.js';\n\nconst DefaultSphericalHarmonics8BitCompressionRange = Constants.SphericalHarmonics8BitCompressionRange;\nconst DefaultSphericalHarmonics8BitCompressionHalfRange = DefaultSphericalHarmonics8BitCompressionRange / 2.0;\n\nconst toHalfFloat = THREE.DataUtils.toHalfFloat.bind(THREE.DataUtils);\nconst fromHalfFloat = THREE.DataUtils.fromHalfFloat.bind(THREE.DataUtils);\n\nconst toUncompressedFloat = (f, compressionLevel, isSH = false, range8BitMin, range8BitMax) => {\n    if (compressionLevel === 0) {\n        return f;\n    } else if (compressionLevel === 1 || compressionLevel === 2 && !isSH) {\n        return THREE.DataUtils.fromHalfFloat(f);\n    } else if (compressionLevel === 2) {\n        return fromUint8(f, range8BitMin, range8BitMax);\n    }\n};\n\nconst toUint8 = (v, rangeMin, rangeMax) => {\n    v = clamp(v, rangeMin, rangeMax);\n    const range = (rangeMax - rangeMin);\n    return clamp(Math.floor((v - rangeMin) / range * 255), 0, 255);\n};\n\nconst fromUint8 = (v, rangeMin, rangeMax) => {\n    const range = (rangeMax - rangeMin);\n    return (v / 255 * range + rangeMin);\n};\n\nconst fromHalfFloatToUint8 = (v, rangeMin, rangeMax) => {\n    return toUint8(fromHalfFloat(v, rangeMin, rangeMax));\n};\n\nconst fromUint8ToHalfFloat = (v, rangeMin, rangeMax) => {\n    return toHalfFloat(fromUint8(v, rangeMin, rangeMax));\n};\n\nconst dataViewFloatForCompressionLevel = (dataView, floatIndex, compressionLevel, isSH = false) => {\n    if (compressionLevel === 0) {\n        return dataView.getFloat32(floatIndex * 4, true);\n    } else if (compressionLevel === 1 || compressionLevel === 2 && !isSH) {\n        return dataView.getUint16(floatIndex * 2, true);\n    } else {\n        return dataView.getUint8(floatIndex, true);\n    }\n};\n\nconst convertBetweenCompressionLevels = function() {\n\n    const noop = (v) => v;\n\n    return function(val, fromLevel, toLevel, isSH = false) {\n        if (fromLevel === toLevel) return val;\n        let outputConversionFunc = noop;\n\n        if (fromLevel === 2 && isSH) {\n            if (toLevel === 1) outputConversionFunc = fromUint8ToHalfFloat;\n            else if (toLevel == 0) {\n                outputConversionFunc = fromUint8;\n            }\n        } else if (fromLevel === 2 || fromLevel === 1) {\n            if (toLevel === 0) outputConversionFunc = fromHalfFloat;\n            else if (toLevel == 2) {\n                if (!isSH) outputConversionFunc = noop;\n                else outputConversionFunc = fromHalfFloatToUint8;\n            }\n        } else if (fromLevel === 0) {\n            if (toLevel === 1) outputConversionFunc = toHalfFloat;\n            else if (toLevel == 2) {\n                if (!isSH) outputConversionFunc = toHalfFloat;\n                else outputConversionFunc = toUint8;\n            }\n        }\n\n        return outputConversionFunc(val);\n    };\n\n}();\n\nconst copyBetweenBuffers = (srcBuffer, srcOffset, destBuffer, destOffset, byteCount = 0) => {\n    const src = new Uint8Array(srcBuffer, srcOffset);\n    const dest = new Uint8Array(destBuffer, destOffset);\n    for (let i = 0; i < byteCount; i++) {\n        dest[i] = src[i];\n    }\n};\n\n/**\n * SplatBuffer: Container for splat data from a single scene/file and capable of (mediocre) compression.\n */\nexport class SplatBuffer {\n\n    static CurrentMajorVersion = 0;\n    static CurrentMinorVersion = 1;\n\n    static CenterComponentCount = 3;\n    static ScaleComponentCount = 3;\n    static RotationComponentCount = 4;\n    static ColorComponentCount = 4;\n    static CovarianceComponentCount = 6;\n\n    static SplatScaleOffsetFloat = 3;\n    static SplatRotationOffsetFloat = 6;\n\n    static CompressionLevels = {\n        0: {\n            BytesPerCenter: 12,\n            BytesPerScale: 12,\n            BytesPerRotation: 16,\n            BytesPerColor: 4,\n            ScaleOffsetBytes: 12,\n            RotationffsetBytes: 24,\n            ColorOffsetBytes: 40,\n            SphericalHarmonicsOffsetBytes: 44,\n            ScaleRange: 1,\n            BytesPerSphericalHarmonicsComponent: 4,\n            SphericalHarmonicsOffsetFloat: 11,\n            SphericalHarmonicsDegrees: {\n                0: { BytesPerSplat: 44 },\n                1: { BytesPerSplat: 80 },\n                2: { BytesPerSplat: 140 }\n            },\n        },\n        1: {\n            BytesPerCenter: 6,\n            BytesPerScale: 6,\n            BytesPerRotation: 8,\n            BytesPerColor: 4,\n            ScaleOffsetBytes: 6,\n            RotationffsetBytes: 12,\n            ColorOffsetBytes: 20,\n            SphericalHarmonicsOffsetBytes: 24,\n            ScaleRange: 32767,\n            BytesPerSphericalHarmonicsComponent: 2,\n            SphericalHarmonicsOffsetFloat: 12,\n            SphericalHarmonicsDegrees: {\n                0: { BytesPerSplat: 24 },\n                1: { BytesPerSplat: 42 },\n                2: { BytesPerSplat: 72 }\n            },\n        },\n        2: {\n            BytesPerCenter: 6,\n            BytesPerScale: 6,\n            BytesPerRotation: 8,\n            BytesPerColor: 4,\n            ScaleOffsetBytes: 6,\n            RotationffsetBytes: 12,\n            ColorOffsetBytes: 20,\n            SphericalHarmonicsOffsetBytes: 24,\n            ScaleRange: 32767,\n            BytesPerSphericalHarmonicsComponent: 1,\n            SphericalHarmonicsOffsetFloat: 12,\n            SphericalHarmonicsDegrees: {\n                0: { BytesPerSplat: 24 },\n                1: { BytesPerSplat: 33 },\n                2: { BytesPerSplat: 48 }\n            },\n        }\n    };\n\n    static CovarianceSizeFloats = 6;\n\n    static HeaderSizeBytes = 4096;\n    static SectionHeaderSizeBytes = 1024;\n\n    static BucketStorageSizeBytes = 12;\n    static BucketStorageSizeFloats = 3;\n\n    static BucketBlockSize = 5.0;\n    static BucketSize = 256;\n\n    constructor(bufferData, secLoadedCountsToMax = true) {\n        this.constructFromBuffer(bufferData, secLoadedCountsToMax);\n    }\n\n    getSplatCount() {\n        return this.splatCount;\n    }\n\n    getMaxSplatCount() {\n        return this.maxSplatCount;\n    }\n\n    getMinSphericalHarmonicsDegree() {\n        let minSphericalHarmonicsDegree = 0;\n        for (let i = 0; i < this.sections.length; i++) {\n            const section = this.sections[i];\n            if (i === 0 || section.sphericalHarmonicsDegree < minSphericalHarmonicsDegree) {\n                minSphericalHarmonicsDegree = section.sphericalHarmonicsDegree;\n            }\n        }\n        return minSphericalHarmonicsDegree;\n    }\n\n    getBucketIndex(section, localSplatIndex) {\n        let bucketIndex;\n        const maxSplatIndexInFullBuckets = section.fullBucketCount * section.bucketSize;\n        if (localSplatIndex < maxSplatIndexInFullBuckets) {\n            bucketIndex = Math.floor(localSplatIndex / section.bucketSize);\n        } else {\n            let bucketSplatIndex = maxSplatIndexInFullBuckets;\n            bucketIndex = section.fullBucketCount;\n            let partiallyFullBucketIndex = 0;\n            while (bucketSplatIndex < section.splatCount) {\n                let currentPartiallyFilledBucketSize = section.partiallyFilledBucketLengths[partiallyFullBucketIndex];\n                if (localSplatIndex >= bucketSplatIndex && localSplatIndex < bucketSplatIndex + currentPartiallyFilledBucketSize) {\n                    break;\n                }\n                bucketSplatIndex += currentPartiallyFilledBucketSize;\n                bucketIndex++;\n                partiallyFullBucketIndex++;\n            }\n        }\n        return bucketIndex;\n    }\n\n    getSplatCenter(globalSplatIndex, outCenter, transform) {\n        const sectionIndex = this.globalSplatIndexToSectionMap[globalSplatIndex];\n        const section = this.sections[sectionIndex];\n        const localSplatIndex = globalSplatIndex - section.splatCountOffset;\n\n        const srcSplatCentersBase = section.bytesPerSplat * localSplatIndex;\n        const dataView = new DataView(this.bufferData, section.dataBase + srcSplatCentersBase);\n\n        const x = dataViewFloatForCompressionLevel(dataView, 0, this.compressionLevel);\n        const y = dataViewFloatForCompressionLevel(dataView, 1, this.compressionLevel);\n        const z = dataViewFloatForCompressionLevel(dataView, 2, this.compressionLevel);\n        if (this.compressionLevel >= 1) {\n            const bucketIndex = this.getBucketIndex(section, localSplatIndex);\n            const bucketBase = bucketIndex * SplatBuffer.BucketStorageSizeFloats;\n            const sf = section.compressionScaleFactor;\n            const sr = section.compressionScaleRange;\n            outCenter.x = (x - sr) * sf + section.bucketArray[bucketBase];\n            outCenter.y = (y - sr) * sf + section.bucketArray[bucketBase + 1];\n            outCenter.z = (z - sr) * sf + section.bucketArray[bucketBase + 2];\n        } else {\n            outCenter.x = x;\n            outCenter.y = y;\n            outCenter.z = z;\n        }\n        if (transform) outCenter.applyMatrix4(transform);\n    }\n\n    getSplatScaleAndRotation = function() {\n\n        const scaleMatrix = new THREE.Matrix4();\n        const rotationMatrix = new THREE.Matrix4();\n        const tempMatrix = new THREE.Matrix4();\n        const tempPosition = new THREE.Vector3();\n        const scale = new THREE.Vector3();\n        const rotation = new THREE.Quaternion();\n\n        return function(index, outScale, outRotation, transform, scaleOverride) {\n            const sectionIndex = this.globalSplatIndexToSectionMap[index];\n            const section = this.sections[sectionIndex];\n            const localSplatIndex = index - section.splatCountOffset;\n\n            const srcSplatScalesBase = section.bytesPerSplat * localSplatIndex +\n                                       SplatBuffer.CompressionLevels[this.compressionLevel].ScaleOffsetBytes;\n\n            const dataView = new DataView(this.bufferData, section.dataBase + srcSplatScalesBase);\n\n            scale.set(toUncompressedFloat(dataViewFloatForCompressionLevel(dataView, 0, this.compressionLevel), this.compressionLevel),\n                      toUncompressedFloat(dataViewFloatForCompressionLevel(dataView, 1, this.compressionLevel), this.compressionLevel),\n                      toUncompressedFloat(dataViewFloatForCompressionLevel(dataView, 2, this.compressionLevel), this.compressionLevel));\n            if (scaleOverride) {\n                if (scaleOverride.x !== undefined) scale.x = scaleOverride.x;\n                if (scaleOverride.y !== undefined) scale.y = scaleOverride.y;\n                if (scaleOverride.z !== undefined) scale.z = scaleOverride.z;\n            }\n\n            rotation.set(toUncompressedFloat(dataViewFloatForCompressionLevel(dataView, 4, this.compressionLevel), this.compressionLevel),\n                         toUncompressedFloat(dataViewFloatForCompressionLevel(dataView, 5, this.compressionLevel), this.compressionLevel),\n                         toUncompressedFloat(dataViewFloatForCompressionLevel(dataView, 6, this.compressionLevel), this.compressionLevel),\n                         toUncompressedFloat(dataViewFloatForCompressionLevel(dataView, 3, this.compressionLevel), this.compressionLevel));\n\n            if (transform) {\n                scaleMatrix.makeScale(scale.x, scale.y, scale.z);\n                rotationMatrix.makeRotationFromQuaternion(rotation);\n                tempMatrix.copy(scaleMatrix).multiply(rotationMatrix).multiply(transform);\n                tempMatrix.decompose(tempPosition, outRotation, outScale);\n            } else {\n                outScale.copy(scale);\n                outRotation.copy(rotation);\n            }\n        };\n\n    }();\n\n    getSplatColor(globalSplatIndex, outColor) {\n        const sectionIndex = this.globalSplatIndexToSectionMap[globalSplatIndex];\n        const section = this.sections[sectionIndex];\n        const localSplatIndex = globalSplatIndex - section.splatCountOffset;\n\n        const srcSplatColorsBase = section.bytesPerSplat * localSplatIndex +\n                                   SplatBuffer.CompressionLevels[this.compressionLevel].ColorOffsetBytes;\n        const splatColorsArray = new Uint8Array(this.bufferData, section.dataBase + srcSplatColorsBase, 4);\n\n        outColor.set(splatColorsArray[0], splatColorsArray[1],\n                     splatColorsArray[2], splatColorsArray[3]);\n    }\n\n    fillSplatCenterArray(outCenterArray, transform, srcFrom, srcTo, destFrom) {\n        const splatCount = this.splatCount;\n\n        srcFrom = srcFrom || 0;\n        srcTo = srcTo || splatCount - 1;\n        if (destFrom === undefined) destFrom = srcFrom;\n\n        const center = new THREE.Vector3();\n        for (let i = srcFrom; i <= srcTo; i++) {\n            const sectionIndex = this.globalSplatIndexToSectionMap[i];\n            const section = this.sections[sectionIndex];\n            const localSplatIndex = i - section.splatCountOffset;\n            const centerDestBase = (i - srcFrom + destFrom) * SplatBuffer.CenterComponentCount;\n\n            const srcSplatCentersBase = section.bytesPerSplat * localSplatIndex;\n            const dataView = new DataView(this.bufferData, section.dataBase + srcSplatCentersBase);\n\n            const x = dataViewFloatForCompressionLevel(dataView, 0, this.compressionLevel);\n            const y = dataViewFloatForCompressionLevel(dataView, 1, this.compressionLevel);\n            const z = dataViewFloatForCompressionLevel(dataView, 2, this.compressionLevel);\n            if (this.compressionLevel >= 1) {\n                const bucketIndex = this.getBucketIndex(section, localSplatIndex);\n                const bucketBase = bucketIndex * SplatBuffer.BucketStorageSizeFloats;\n                const sf = section.compressionScaleFactor;\n                const sr = section.compressionScaleRange;\n                center.x = (x - sr) * sf + section.bucketArray[bucketBase];\n                center.y = (y - sr) * sf + section.bucketArray[bucketBase + 1];\n                center.z = (z - sr) * sf + section.bucketArray[bucketBase + 2];\n            } else {\n                center.x = x;\n                center.y = y;\n                center.z = z;\n            }\n            if (transform) {\n                center.applyMatrix4(transform);\n            }\n            outCenterArray[centerDestBase] = center.x;\n            outCenterArray[centerDestBase + 1] = center.y;\n            outCenterArray[centerDestBase + 2] = center.z;\n        }\n    }\n\n    fillSplatScaleRotationArray = function() {\n\n        const scaleMatrix = new THREE.Matrix4();\n        const rotationMatrix = new THREE.Matrix4();\n        const tempMatrix = new THREE.Matrix4();\n        const scale = new THREE.Vector3();\n        const rotation = new THREE.Quaternion();\n        const tempPosition = new THREE.Vector3();\n\n        const ensurePositiveW = (quaternion) => {\n            const flip = quaternion.w < 0 ? -1 : 1;\n            quaternion.x *= flip;\n            quaternion.y *= flip;\n            quaternion.z *= flip;\n            quaternion.w *= flip;\n        };\n\n        return function(outScaleArray, outRotationArray, transform, srcFrom, srcTo, destFrom,\n                        desiredOutputCompressionLevel, scaleOverride) {\n            const splatCount = this.splatCount;\n\n            srcFrom = srcFrom || 0;\n            srcTo = srcTo || splatCount - 1;\n            if (destFrom === undefined) destFrom = srcFrom;\n\n            const outputConversion = (value, srcCompressionLevel) => {\n                if (srcCompressionLevel === undefined) srcCompressionLevel = this.compressionLevel;\n                return convertBetweenCompressionLevels(value, srcCompressionLevel, desiredOutputCompressionLevel);\n            };\n\n            for (let i = srcFrom; i <= srcTo; i++) {\n                const sectionIndex = this.globalSplatIndexToSectionMap[i];\n                const section = this.sections[sectionIndex];\n                const localSplatIndex = i - section.splatCountOffset;\n\n                const srcSplatScalesBase = section.bytesPerSplat * localSplatIndex +\n                                        SplatBuffer.CompressionLevels[this.compressionLevel].ScaleOffsetBytes;\n\n                const scaleDestBase = (i - srcFrom + destFrom) * SplatBuffer.ScaleComponentCount;\n                const rotationDestBase = (i - srcFrom + destFrom) * SplatBuffer.RotationComponentCount;\n                const dataView = new DataView(this.bufferData, section.dataBase + srcSplatScalesBase);\n\n                const srcScaleX = (scaleOverride && scaleOverride.x !== undefined) ? scaleOverride.x :\n                                   dataViewFloatForCompressionLevel(dataView, 0, this.compressionLevel);\n                const srcScaleY = (scaleOverride && scaleOverride.y !== undefined) ? scaleOverride.y :\n                                   dataViewFloatForCompressionLevel(dataView, 1, this.compressionLevel);\n                const srcScaleZ = (scaleOverride && scaleOverride.z !== undefined) ? scaleOverride.z :\n                                   dataViewFloatForCompressionLevel(dataView, 2, this.compressionLevel);\n\n                const srcRotationW = dataViewFloatForCompressionLevel(dataView, 3, this.compressionLevel);\n                const srcRotationX = dataViewFloatForCompressionLevel(dataView, 4, this.compressionLevel);\n                const srcRotationY = dataViewFloatForCompressionLevel(dataView, 5, this.compressionLevel);\n                const srcRotationZ = dataViewFloatForCompressionLevel(dataView, 6, this.compressionLevel);\n\n                scale.set(toUncompressedFloat(srcScaleX, this.compressionLevel),\n                          toUncompressedFloat(srcScaleY, this.compressionLevel),\n                          toUncompressedFloat(srcScaleZ, this.compressionLevel));\n\n                rotation.set(toUncompressedFloat(srcRotationX, this.compressionLevel),\n                             toUncompressedFloat(srcRotationY, this.compressionLevel),\n                             toUncompressedFloat(srcRotationZ, this.compressionLevel),\n                             toUncompressedFloat(srcRotationW, this.compressionLevel)).normalize();\n\n                if (transform) {\n                    tempPosition.set(0, 0, 0);\n                    scaleMatrix.makeScale(scale.x, scale.y, scale.z);\n                    rotationMatrix.makeRotationFromQuaternion(rotation);\n                    tempMatrix.identity().premultiply(scaleMatrix).premultiply(rotationMatrix);\n                    tempMatrix.premultiply(transform);\n                    tempMatrix.decompose(tempPosition, rotation, scale);\n                    rotation.normalize();\n                }\n\n                ensurePositiveW(rotation);\n\n                if (outScaleArray) {\n                    outScaleArray[scaleDestBase] = outputConversion(scale.x, 0);\n                    outScaleArray[scaleDestBase + 1] = outputConversion(scale.y, 0);\n                    outScaleArray[scaleDestBase + 2] = outputConversion(scale.z, 0);\n                }\n\n                if (outRotationArray) {\n                    outRotationArray[rotationDestBase] = outputConversion(rotation.x, 0);\n                    outRotationArray[rotationDestBase + 1] = outputConversion(rotation.y, 0);\n                    outRotationArray[rotationDestBase + 2] = outputConversion(rotation.z, 0);\n                    outRotationArray[rotationDestBase + 3] = outputConversion(rotation.w, 0);\n                }\n            }\n        };\n    }();\n\n    static computeCovariance = function() {\n\n        const tempMatrix4 = new THREE.Matrix4();\n        const scaleMatrix = new THREE.Matrix3();\n        const rotationMatrix = new THREE.Matrix3();\n        const covarianceMatrix = new THREE.Matrix3();\n        const transformedCovariance = new THREE.Matrix3();\n        const transform3x3 = new THREE.Matrix3();\n        const transform3x3Transpose = new THREE.Matrix3();\n\n        return function(scale, rotation, transform, outCovariance, outOffset = 0, desiredOutputCompressionLevel) {\n\n            tempMatrix4.makeScale(scale.x, scale.y, scale.z);\n            scaleMatrix.setFromMatrix4(tempMatrix4);\n\n            tempMatrix4.makeRotationFromQuaternion(rotation);\n            rotationMatrix.setFromMatrix4(tempMatrix4);\n\n            covarianceMatrix.copy(rotationMatrix).multiply(scaleMatrix);\n            transformedCovariance.copy(covarianceMatrix).transpose().premultiply(covarianceMatrix);\n\n            if (transform) {\n                transform3x3.setFromMatrix4(transform);\n                transform3x3Transpose.copy(transform3x3).transpose();\n                transformedCovariance.multiply(transform3x3Transpose);\n                transformedCovariance.premultiply(transform3x3);\n            }\n\n            if (desiredOutputCompressionLevel >= 1) {\n                outCovariance[outOffset] = toHalfFloat(transformedCovariance.elements[0]);\n                outCovariance[outOffset + 1] = toHalfFloat(transformedCovariance.elements[3]);\n                outCovariance[outOffset + 2] = toHalfFloat(transformedCovariance.elements[6]);\n                outCovariance[outOffset + 3] = toHalfFloat(transformedCovariance.elements[4]);\n                outCovariance[outOffset + 4] = toHalfFloat(transformedCovariance.elements[7]);\n                outCovariance[outOffset + 5] = toHalfFloat(transformedCovariance.elements[8]);\n            } else {\n                outCovariance[outOffset] = transformedCovariance.elements[0];\n                outCovariance[outOffset + 1] = transformedCovariance.elements[3];\n                outCovariance[outOffset + 2] = transformedCovariance.elements[6];\n                outCovariance[outOffset + 3] = transformedCovariance.elements[4];\n                outCovariance[outOffset + 4] = transformedCovariance.elements[7];\n                outCovariance[outOffset + 5] = transformedCovariance.elements[8];\n            }\n\n        };\n\n    }();\n\n    fillSplatCovarianceArray(covarianceArray, transform, srcFrom, srcTo, destFrom, desiredOutputCompressionLevel) {\n        const splatCount = this.splatCount;\n\n        const scale = new THREE.Vector3();\n        const rotation = new THREE.Quaternion();\n\n        srcFrom = srcFrom || 0;\n        srcTo = srcTo || splatCount - 1;\n        if (destFrom === undefined) destFrom = srcFrom;\n\n        for (let i = srcFrom; i <= srcTo; i++) {\n            const sectionIndex = this.globalSplatIndexToSectionMap[i];\n            const section = this.sections[sectionIndex];\n            const localSplatIndex = i - section.splatCountOffset;\n\n            const covarianceDestBase = (i - srcFrom + destFrom) * SplatBuffer.CovarianceComponentCount;\n            const srcSplatScalesBase = section.bytesPerSplat * localSplatIndex +\n                                       SplatBuffer.CompressionLevels[this.compressionLevel].ScaleOffsetBytes;\n\n            const dataView = new DataView(this.bufferData, section.dataBase + srcSplatScalesBase);\n\n            scale.set(toUncompressedFloat(dataViewFloatForCompressionLevel(dataView, 0, this.compressionLevel), this.compressionLevel),\n                      toUncompressedFloat(dataViewFloatForCompressionLevel(dataView, 1, this.compressionLevel), this.compressionLevel),\n                      toUncompressedFloat(dataViewFloatForCompressionLevel(dataView, 2, this.compressionLevel), this.compressionLevel));\n\n            rotation.set(toUncompressedFloat(dataViewFloatForCompressionLevel(dataView, 4, this.compressionLevel), this.compressionLevel),\n                         toUncompressedFloat(dataViewFloatForCompressionLevel(dataView, 5, this.compressionLevel), this.compressionLevel),\n                         toUncompressedFloat(dataViewFloatForCompressionLevel(dataView, 6, this.compressionLevel), this.compressionLevel),\n                         toUncompressedFloat(dataViewFloatForCompressionLevel(dataView, 3, this.compressionLevel), this.compressionLevel));\n\n            SplatBuffer.computeCovariance(scale, rotation, transform, covarianceArray, covarianceDestBase, desiredOutputCompressionLevel);\n        }\n    }\n\n    fillSplatColorArray(outColorArray, minimumAlpha, srcFrom, srcTo, destFrom) {\n        const splatCount = this.splatCount;\n\n        srcFrom = srcFrom || 0;\n        srcTo = srcTo || splatCount - 1;\n        if (destFrom === undefined) destFrom = srcFrom;\n\n        for (let i = srcFrom; i <= srcTo; i++) {\n\n            const sectionIndex = this.globalSplatIndexToSectionMap[i];\n            const section = this.sections[sectionIndex];\n            const localSplatIndex = i - section.splatCountOffset;\n\n            const colorDestBase = (i - srcFrom + destFrom) * SplatBuffer.ColorComponentCount;\n            const srcSplatColorsBase = section.bytesPerSplat * localSplatIndex +\n                                       SplatBuffer.CompressionLevels[this.compressionLevel].ColorOffsetBytes;\n\n            const dataView = new Uint8Array(this.bufferData, section.dataBase + srcSplatColorsBase);\n\n            let alpha = dataView[3];\n            alpha = (alpha >= minimumAlpha) ? alpha : 0;\n\n            outColorArray[colorDestBase] = dataView[0];\n            outColorArray[colorDestBase + 1] = dataView[1];\n            outColorArray[colorDestBase + 2] = dataView[2];\n            outColorArray[colorDestBase + 3] = alpha;\n        }\n    }\n\n    fillSphericalHarmonicsArray = function() {\n\n        const sphericalHarmonicVectors = [];\n        for (let i = 0; i < 15; i++) {\n            sphericalHarmonicVectors[i] = new THREE.Vector3();\n        }\n\n        const tempMatrix3 = new THREE.Matrix3();\n        const tempMatrix4 = new THREE.Matrix4();\n\n        const tempTranslation = new THREE.Vector3();\n        const tempScale = new THREE.Vector3();\n        const tempRotation = new THREE.Quaternion();\n\n        const sh11 = [];\n        const sh12 = [];\n        const sh13 = [];\n\n        const sh21 = [];\n        const sh22 = [];\n        const sh23 = [];\n        const sh24 = [];\n        const sh25 = [];\n\n        const shIn1 = [];\n        const shIn2 = [];\n        const shIn3 = [];\n        const shIn4 = [];\n        const shIn5 = [];\n\n        const shOut1 = [];\n        const shOut2 = [];\n        const shOut3 = [];\n        const shOut4 = [];\n        const shOut5 = [];\n\n        const noop = (v) => v;\n\n        const set3 = (array, val1, val2, val3) => {\n            array[0] = val1;\n            array[1] = val2;\n            array[2] = val3;\n        };\n\n        const set3FromArray = (array, srcDestView, stride, srcBase, compressionLevel) => {\n            array[0] = dataViewFloatForCompressionLevel(srcDestView, srcBase, compressionLevel, true);\n            array[1] = dataViewFloatForCompressionLevel(srcDestView, srcBase + stride, compressionLevel, true);\n            array[2] = dataViewFloatForCompressionLevel(srcDestView, srcBase + stride + stride, compressionLevel, true);\n        };\n\n        const copy3 = (srcArray, destArray) => {\n            destArray[0] = srcArray[0];\n            destArray[1] = srcArray[1];\n            destArray[2] = srcArray[2];\n        };\n\n        const setOutput3 = (srcArray, destArray, destBase, conversionFunc) => {\n            destArray[destBase] = conversionFunc(srcArray[0]);\n            destArray[destBase + 1] = conversionFunc(srcArray[1]);\n            destArray[destBase + 2] = conversionFunc(srcArray[2]);\n        };\n\n        const toUncompressedFloatArray3 = (src, dest, compressionLevel, range8BitMin, range8BitMax) => {\n            dest[0] = toUncompressedFloat(src[0], compressionLevel, true, range8BitMin, range8BitMax);\n            dest[1] = toUncompressedFloat(src[1], compressionLevel, true, range8BitMin, range8BitMax);\n            dest[2] = toUncompressedFloat(src[2], compressionLevel, true, range8BitMin, range8BitMax);\n            return dest;\n        };\n\n        return function(outSphericalHarmonicsArray, outSphericalHarmonicsDegree, transform,\n                        srcFrom, srcTo, destFrom, desiredOutputCompressionLevel) {\n            const splatCount = this.splatCount;\n\n            srcFrom = srcFrom || 0;\n            srcTo = srcTo || splatCount - 1;\n            if (destFrom === undefined) destFrom = srcFrom;\n\n            if (transform && outSphericalHarmonicsDegree >= 1) {\n                tempMatrix4.copy(transform);\n                tempMatrix4.decompose(tempTranslation, tempRotation, tempScale);\n                tempRotation.normalize();\n                tempMatrix4.makeRotationFromQuaternion(tempRotation);\n                tempMatrix3.setFromMatrix4(tempMatrix4);\n                set3(sh11, tempMatrix3.elements[4], -tempMatrix3.elements[7], tempMatrix3.elements[1]);\n                set3(sh12, -tempMatrix3.elements[5], tempMatrix3.elements[8], -tempMatrix3.elements[2]);\n                set3(sh13, tempMatrix3.elements[3], -tempMatrix3.elements[6], tempMatrix3.elements[0]);\n            }\n\n            const localFromHalfFloatToUint8 = (v) => {\n                return fromHalfFloatToUint8(v, this.minSphericalHarmonicsCoeff, this.maxSphericalHarmonicsCoeff);\n            };\n\n            const localToUint8 = (v) => {\n                return toUint8(v, this.minSphericalHarmonicsCoeff, this.maxSphericalHarmonicsCoeff);\n            };\n\n            for (let i = srcFrom; i <= srcTo; i++) {\n\n                const sectionIndex = this.globalSplatIndexToSectionMap[i];\n                const section = this.sections[sectionIndex];\n                outSphericalHarmonicsDegree = Math.min(outSphericalHarmonicsDegree, section.sphericalHarmonicsDegree);\n                const outSphericalHarmonicsComponentsCount = getSphericalHarmonicsComponentCountForDegree(outSphericalHarmonicsDegree);\n\n                const localSplatIndex = i - section.splatCountOffset;\n\n                const srcSplatSHBase = section.bytesPerSplat * localSplatIndex +\n                                       SplatBuffer.CompressionLevels[this.compressionLevel].SphericalHarmonicsOffsetBytes;\n\n                const dataView = new DataView(this.bufferData, section.dataBase + srcSplatSHBase);\n\n                const shDestBase = (i - srcFrom + destFrom) * outSphericalHarmonicsComponentsCount;\n\n                let compressionLevelForOutputConversion = transform ? 0 : this.compressionLevel;\n                let outputConversionFunc = noop;\n                if (compressionLevelForOutputConversion !== desiredOutputCompressionLevel) {\n                    if (compressionLevelForOutputConversion === 1) {\n                        if (desiredOutputCompressionLevel === 0) outputConversionFunc = fromHalfFloat;\n                        else if (desiredOutputCompressionLevel == 2) outputConversionFunc = localFromHalfFloatToUint8;\n                    } else if (compressionLevelForOutputConversion === 0) {\n                        if (desiredOutputCompressionLevel === 1) outputConversionFunc = toHalfFloat;\n                        else if (desiredOutputCompressionLevel == 2) outputConversionFunc = localToUint8;\n                    }\n                }\n\n                const minShCoeff = this.minSphericalHarmonicsCoeff;\n                const maxShCoeff = this.maxSphericalHarmonicsCoeff;\n\n                if (outSphericalHarmonicsDegree >= 1) {\n\n                    set3FromArray(shIn1, dataView, 3, 0, this.compressionLevel);\n                    set3FromArray(shIn2, dataView, 3, 1, this.compressionLevel);\n                    set3FromArray(shIn3, dataView, 3, 2, this.compressionLevel);\n\n                    if (transform) {\n                        toUncompressedFloatArray3(shIn1, shIn1, this.compressionLevel, minShCoeff, maxShCoeff);\n                        toUncompressedFloatArray3(shIn2, shIn2, this.compressionLevel, minShCoeff, maxShCoeff);\n                        toUncompressedFloatArray3(shIn3, shIn3, this.compressionLevel, minShCoeff, maxShCoeff);\n                        SplatBuffer.rotateSphericalHarmonics3(shIn1, shIn2, shIn3, sh11, sh12, sh13, shOut1, shOut2, shOut3);\n                    } else {\n                        copy3(shIn1, shOut1);\n                        copy3(shIn2, shOut2);\n                        copy3(shIn3, shOut3);\n                    }\n\n                    setOutput3(shOut1, outSphericalHarmonicsArray, shDestBase, outputConversionFunc);\n                    setOutput3(shOut2, outSphericalHarmonicsArray, shDestBase + 3, outputConversionFunc);\n                    setOutput3(shOut3, outSphericalHarmonicsArray, shDestBase + 6, outputConversionFunc);\n\n                    if (outSphericalHarmonicsDegree >= 2) {\n\n                        set3FromArray(shIn1, dataView, 5, 9, this.compressionLevel);\n                        set3FromArray(shIn2, dataView, 5, 10, this.compressionLevel);\n                        set3FromArray(shIn3, dataView, 5, 11, this.compressionLevel);\n                        set3FromArray(shIn4, dataView, 5, 12, this.compressionLevel);\n                        set3FromArray(shIn5, dataView, 5, 13, this.compressionLevel);\n\n                        if (transform) {\n                            toUncompressedFloatArray3(shIn1, shIn1, this.compressionLevel, minShCoeff, maxShCoeff);\n                            toUncompressedFloatArray3(shIn2, shIn2, this.compressionLevel, minShCoeff, maxShCoeff);\n                            toUncompressedFloatArray3(shIn3, shIn3, this.compressionLevel, minShCoeff, maxShCoeff);\n                            toUncompressedFloatArray3(shIn4, shIn4, this.compressionLevel, minShCoeff, maxShCoeff);\n                            toUncompressedFloatArray3(shIn5, shIn5, this.compressionLevel, minShCoeff, maxShCoeff);\n                            SplatBuffer.rotateSphericalHarmonics5(shIn1, shIn2, shIn3, shIn4, shIn5,\n                                                                  sh11, sh12, sh13, sh21, sh22, sh23, sh24, sh25,\n                                                                  shOut1, shOut2, shOut3, shOut4, shOut5);\n                        } else {\n                            copy3(shIn1, shOut1);\n                            copy3(shIn2, shOut2);\n                            copy3(shIn3, shOut3);\n                            copy3(shIn4, shOut4);\n                            copy3(shIn5, shOut5);\n                        }\n\n                        setOutput3(shOut1, outSphericalHarmonicsArray, shDestBase + 9, outputConversionFunc);\n                        setOutput3(shOut2, outSphericalHarmonicsArray, shDestBase + 12, outputConversionFunc);\n                        setOutput3(shOut3, outSphericalHarmonicsArray, shDestBase + 15, outputConversionFunc);\n                        setOutput3(shOut4, outSphericalHarmonicsArray, shDestBase + 18, outputConversionFunc);\n                        setOutput3(shOut5, outSphericalHarmonicsArray, shDestBase + 21, outputConversionFunc);\n                    }\n                }\n            }\n        };\n\n    }();\n\n    static dot3 = (v1, v2, v3, transformRow, outArray) => {\n        outArray[0] = outArray[1] = outArray[2] = 0;\n        const t0 = transformRow[0];\n        const t1 = transformRow[1];\n        const t2 = transformRow[2];\n        SplatBuffer.addInto3(v1[0] * t0, v1[1] * t0, v1[2] * t0, outArray);\n        SplatBuffer.addInto3(v2[0] * t1, v2[1] * t1, v2[2] * t1, outArray);\n        SplatBuffer.addInto3(v3[0] * t2, v3[1] * t2, v3[2] * t2, outArray);\n    };\n\n    static addInto3 = (val1, val2, val3, destArray) => {\n        destArray[0] = destArray[0] + val1;\n        destArray[1] = destArray[1] + val2;\n        destArray[2] = destArray[2] + val3;\n    };\n\n    static dot5 = (v1, v2, v3, v4, v5, transformRow, outArray) => {\n        outArray[0] = outArray[1] = outArray[2] = 0;\n        const t0 = transformRow[0];\n        const t1 = transformRow[1];\n        const t2 = transformRow[2];\n        const t3 = transformRow[3];\n        const t4 = transformRow[4];\n        SplatBuffer.addInto3(v1[0] * t0, v1[1] * t0, v1[2] * t0, outArray);\n        SplatBuffer.addInto3(v2[0] * t1, v2[1] * t1, v2[2] * t1, outArray);\n        SplatBuffer.addInto3(v3[0] * t2, v3[1] * t2, v3[2] * t2, outArray);\n        SplatBuffer.addInto3(v4[0] * t3, v4[1] * t3, v4[2] * t3, outArray);\n        SplatBuffer.addInto3(v5[0] * t4, v5[1] * t4, v5[2] * t4, outArray);\n    };\n\n    static rotateSphericalHarmonics3 = (in1, in2, in3, tsh11, tsh12, tsh13, out1, out2, out3) => {\n        SplatBuffer.dot3(in1, in2, in3, tsh11, out1);\n        SplatBuffer.dot3(in1, in2, in3, tsh12, out2);\n        SplatBuffer.dot3(in1, in2, in3, tsh13, out3);\n    };\n\n    static rotateSphericalHarmonics5 = (in1, in2, in3, in4, in5, tsh11, tsh12, tsh13,\n                                        tsh21, tsh22, tsh23, tsh24, tsh25, out1, out2, out3, out4, out5) => {\n\n        const kSqrt0104 = Math.sqrt(1.0 / 4.0);\n        const kSqrt0304 = Math.sqrt(3.0 / 4.0);\n        const kSqrt0103 = Math.sqrt(1.0 / 3.0);\n        const kSqrt0403 = Math.sqrt(4.0 / 3.0);\n        const kSqrt0112 = Math.sqrt(1.0 / 12.0);\n\n        tsh21[0] = kSqrt0104 * ((tsh13[2] * tsh11[0] + tsh13[0] * tsh11[2]) + (tsh11[2] * tsh13[0] + tsh11[0] * tsh13[2]));\n        tsh21[1] = (tsh13[1] * tsh11[0] + tsh11[1] * tsh13[0]);\n        tsh21[2] = kSqrt0304 * (tsh13[1] * tsh11[1] + tsh11[1] * tsh13[1]);\n        tsh21[3] = (tsh13[1] * tsh11[2] + tsh11[1] * tsh13[2]);\n        tsh21[4] = kSqrt0104 * ((tsh13[2] * tsh11[2] - tsh13[0] * tsh11[0]) + (tsh11[2] * tsh13[2] - tsh11[0] * tsh13[0]));\n        SplatBuffer.dot5(in1, in2, in3, in4, in5, tsh21, out1);\n\n        tsh22[0] = kSqrt0104 * ((tsh12[2] * tsh11[0] + tsh12[0] * tsh11[2]) + (tsh11[2] * tsh12[0] + tsh11[0] * tsh12[2]));\n        tsh22[1] = tsh12[1] * tsh11[0] + tsh11[1] * tsh12[0];\n        tsh22[2] = kSqrt0304 * (tsh12[1] * tsh11[1] + tsh11[1] * tsh12[1]);\n        tsh22[3] = tsh12[1] * tsh11[2] + tsh11[1] * tsh12[2];\n        tsh22[4] = kSqrt0104 * ((tsh12[2] * tsh11[2] - tsh12[0] * tsh11[0]) + (tsh11[2] * tsh12[2] - tsh11[0] * tsh12[0]));\n        SplatBuffer.dot5(in1, in2, in3, in4, in5, tsh22, out2);\n\n        tsh23[0] = kSqrt0103 * (tsh12[2] * tsh12[0] + tsh12[0] * tsh12[2]) + -kSqrt0112 *\n                   ((tsh13[2] * tsh13[0] + tsh13[0] * tsh13[2]) + (tsh11[2] * tsh11[0] + tsh11[0] * tsh11[2]));\n        tsh23[1] = kSqrt0403 * tsh12[1] * tsh12[0] + -kSqrt0103 * (tsh13[1] * tsh13[0] + tsh11[1] * tsh11[0]);\n        tsh23[2] = tsh12[1] * tsh12[1] + -kSqrt0104 * (tsh13[1] * tsh13[1] + tsh11[1] * tsh11[1]);\n        tsh23[3] = kSqrt0403 * tsh12[1] * tsh12[2] + -kSqrt0103 * (tsh13[1] * tsh13[2] + tsh11[1] * tsh11[2]);\n        tsh23[4] = kSqrt0103 * (tsh12[2] * tsh12[2] - tsh12[0] * tsh12[0]) + -kSqrt0112 *\n                   ((tsh13[2] * tsh13[2] - tsh13[0] * tsh13[0]) + (tsh11[2] * tsh11[2] - tsh11[0] * tsh11[0]));\n        SplatBuffer.dot5(in1, in2, in3, in4, in5, tsh23, out3);\n\n        tsh24[0] = kSqrt0104 * ((tsh12[2] * tsh13[0] + tsh12[0] * tsh13[2]) + (tsh13[2] * tsh12[0] + tsh13[0] * tsh12[2]));\n        tsh24[1] = tsh12[1] * tsh13[0] + tsh13[1] * tsh12[0];\n        tsh24[2] = kSqrt0304 * (tsh12[1] * tsh13[1] + tsh13[1] * tsh12[1]);\n        tsh24[3] = tsh12[1] * tsh13[2] + tsh13[1] * tsh12[2];\n        tsh24[4] = kSqrt0104 * ((tsh12[2] * tsh13[2] - tsh12[0] * tsh13[0]) + (tsh13[2] * tsh12[2] - tsh13[0] * tsh12[0]));\n        SplatBuffer.dot5(in1, in2, in3, in4, in5, tsh24, out4);\n\n        tsh25[0] = kSqrt0104 * ((tsh13[2] * tsh13[0] + tsh13[0] * tsh13[2]) - (tsh11[2] * tsh11[0] + tsh11[0] * tsh11[2]));\n        tsh25[1] = (tsh13[1] * tsh13[0] - tsh11[1] * tsh11[0]);\n        tsh25[2] = kSqrt0304 * (tsh13[1] * tsh13[1] - tsh11[1] * tsh11[1]);\n        tsh25[3] = (tsh13[1] * tsh13[2] - tsh11[1] * tsh11[2]);\n        tsh25[4] = kSqrt0104 * ((tsh13[2] * tsh13[2] - tsh13[0] * tsh13[0]) - (tsh11[2] * tsh11[2] - tsh11[0] * tsh11[0]));\n        SplatBuffer.dot5(in1, in2, in3, in4, in5, tsh25, out5);\n    };\n\n    static parseHeader(buffer) {\n        const headerArrayUint8 = new Uint8Array(buffer, 0, SplatBuffer.HeaderSizeBytes);\n        const headerArrayUint16 = new Uint16Array(buffer, 0, SplatBuffer.HeaderSizeBytes / 2);\n        const headerArrayUint32 = new Uint32Array(buffer, 0, SplatBuffer.HeaderSizeBytes / 4);\n        const headerArrayFloat32 = new Float32Array(buffer, 0, SplatBuffer.HeaderSizeBytes / 4);\n        const versionMajor = headerArrayUint8[0];\n        const versionMinor = headerArrayUint8[1];\n        const maxSectionCount = headerArrayUint32[1];\n        const sectionCount = headerArrayUint32[2];\n        const maxSplatCount = headerArrayUint32[3];\n        const splatCount = headerArrayUint32[4];\n        const compressionLevel = headerArrayUint16[10];\n        const sceneCenter = new THREE.Vector3(headerArrayFloat32[6], headerArrayFloat32[7], headerArrayFloat32[8]);\n\n        const minSphericalHarmonicsCoeff = headerArrayFloat32[9] || -DefaultSphericalHarmonics8BitCompressionHalfRange;\n        const maxSphericalHarmonicsCoeff = headerArrayFloat32[10] || DefaultSphericalHarmonics8BitCompressionHalfRange;\n\n        return {\n            versionMajor,\n            versionMinor,\n            maxSectionCount,\n            sectionCount,\n            maxSplatCount,\n            splatCount,\n            compressionLevel,\n            sceneCenter,\n            minSphericalHarmonicsCoeff,\n            maxSphericalHarmonicsCoeff\n        };\n    }\n\n    static writeHeaderCountsToBuffer(sectionCount, splatCount, buffer) {\n        const headerArrayUint32 = new Uint32Array(buffer, 0, SplatBuffer.HeaderSizeBytes / 4);\n        headerArrayUint32[2] = sectionCount;\n        headerArrayUint32[4] = splatCount;\n    }\n\n    static writeHeaderToBuffer(header, buffer) {\n        const headerArrayUint8 = new Uint8Array(buffer, 0, SplatBuffer.HeaderSizeBytes);\n        const headerArrayUint16 = new Uint16Array(buffer, 0, SplatBuffer.HeaderSizeBytes / 2);\n        const headerArrayUint32 = new Uint32Array(buffer, 0, SplatBuffer.HeaderSizeBytes / 4);\n        const headerArrayFloat32 = new Float32Array(buffer, 0, SplatBuffer.HeaderSizeBytes / 4);\n        headerArrayUint8[0] = header.versionMajor;\n        headerArrayUint8[1] = header.versionMinor;\n        headerArrayUint8[2] = 0; // unused for now\n        headerArrayUint8[3] = 0; // unused for now\n        headerArrayUint32[1] = header.maxSectionCount;\n        headerArrayUint32[2] = header.sectionCount;\n        headerArrayUint32[3] = header.maxSplatCount;\n        headerArrayUint32[4] = header.splatCount;\n        headerArrayUint16[10] = header.compressionLevel;\n        headerArrayFloat32[6] = header.sceneCenter.x;\n        headerArrayFloat32[7] = header.sceneCenter.y;\n        headerArrayFloat32[8] = header.sceneCenter.z;\n        headerArrayFloat32[9] = header.minSphericalHarmonicsCoeff || -DefaultSphericalHarmonics8BitCompressionHalfRange;\n        headerArrayFloat32[10] = header.maxSphericalHarmonicsCoeff || DefaultSphericalHarmonics8BitCompressionHalfRange;\n    }\n\n    static parseSectionHeaders(header, buffer, offset = 0, secLoadedCountsToMax) {\n        const compressionLevel = header.compressionLevel;\n\n        const maxSectionCount = header.maxSectionCount;\n        const sectionHeaderArrayUint16 = new Uint16Array(buffer, offset, maxSectionCount * SplatBuffer.SectionHeaderSizeBytes / 2);\n        const sectionHeaderArrayUint32 = new Uint32Array(buffer, offset, maxSectionCount * SplatBuffer.SectionHeaderSizeBytes / 4);\n        const sectionHeaderArrayFloat32 = new Float32Array(buffer, offset, maxSectionCount * SplatBuffer.SectionHeaderSizeBytes / 4);\n\n        const sectionHeaders = [];\n        let sectionHeaderBase = 0;\n        let sectionHeaderBaseUint16 = sectionHeaderBase / 2;\n        let sectionHeaderBaseUint32 = sectionHeaderBase / 4;\n        let sectionBase = SplatBuffer.HeaderSizeBytes + header.maxSectionCount * SplatBuffer.SectionHeaderSizeBytes;\n        let splatCountOffset = 0;\n        for (let i = 0; i < maxSectionCount; i++) {\n            const maxSplatCount = sectionHeaderArrayUint32[sectionHeaderBaseUint32 + 1];\n            const bucketSize = sectionHeaderArrayUint32[sectionHeaderBaseUint32 + 2];\n            const bucketCount = sectionHeaderArrayUint32[sectionHeaderBaseUint32 + 3];\n            const bucketBlockSize = sectionHeaderArrayFloat32[sectionHeaderBaseUint32 + 4];\n            const halfBucketBlockSize = bucketBlockSize / 2.0;\n            const bucketStorageSizeBytes = sectionHeaderArrayUint16[sectionHeaderBaseUint16 + 10];\n            const compressionScaleRange = sectionHeaderArrayUint32[sectionHeaderBaseUint32 + 6] ||\n                                          SplatBuffer.CompressionLevels[compressionLevel].ScaleRange;\n            const fullBucketCount = sectionHeaderArrayUint32[sectionHeaderBaseUint32 + 8];\n            const partiallyFilledBucketCount = sectionHeaderArrayUint32[sectionHeaderBaseUint32 + 9];\n            const bucketsMetaDataSizeBytes = partiallyFilledBucketCount * 4;\n            const bucketsStorageSizeBytes = bucketStorageSizeBytes * bucketCount + bucketsMetaDataSizeBytes;\n\n            const sphericalHarmonicsDegree = sectionHeaderArrayUint16[sectionHeaderBaseUint16 + 20];\n            const { bytesPerSplat } = SplatBuffer.calculateComponentStorage(compressionLevel, sphericalHarmonicsDegree);\n\n            const splatDataStorageSizeBytes = bytesPerSplat * maxSplatCount;\n            const storageSizeBytes = splatDataStorageSizeBytes + bucketsStorageSizeBytes;\n            const sectionHeader = {\n                bytesPerSplat: bytesPerSplat,\n                splatCountOffset: splatCountOffset,\n                splatCount: secLoadedCountsToMax ? maxSplatCount : 0,\n                maxSplatCount: maxSplatCount,\n                bucketSize: bucketSize,\n                bucketCount: bucketCount,\n                bucketBlockSize: bucketBlockSize,\n                halfBucketBlockSize: halfBucketBlockSize,\n                bucketStorageSizeBytes: bucketStorageSizeBytes,\n                bucketsStorageSizeBytes: bucketsStorageSizeBytes,\n                splatDataStorageSizeBytes: splatDataStorageSizeBytes,\n                storageSizeBytes: storageSizeBytes,\n                compressionScaleRange: compressionScaleRange,\n                compressionScaleFactor: halfBucketBlockSize / compressionScaleRange,\n                base: sectionBase,\n                bucketsBase: sectionBase + bucketsMetaDataSizeBytes,\n                dataBase: sectionBase + bucketsStorageSizeBytes,\n                fullBucketCount: fullBucketCount,\n                partiallyFilledBucketCount: partiallyFilledBucketCount,\n                sphericalHarmonicsDegree: sphericalHarmonicsDegree\n            };\n            sectionHeaders[i] = sectionHeader;\n            sectionBase += storageSizeBytes;\n            sectionHeaderBase += SplatBuffer.SectionHeaderSizeBytes;\n            sectionHeaderBaseUint16 = sectionHeaderBase / 2;\n            sectionHeaderBaseUint32 = sectionHeaderBase / 4;\n            splatCountOffset += maxSplatCount;\n        }\n\n        return sectionHeaders;\n    }\n\n\n    static writeSectionHeaderToBuffer(sectionHeader, compressionLevel, buffer, offset = 0) {\n        const sectionHeadeArrayUint16 = new Uint16Array(buffer, offset, SplatBuffer.SectionHeaderSizeBytes / 2);\n        const sectionHeadeArrayUint32 = new Uint32Array(buffer, offset, SplatBuffer.SectionHeaderSizeBytes / 4);\n        const sectionHeadeArrayFloat32 = new Float32Array(buffer, offset, SplatBuffer.SectionHeaderSizeBytes / 4);\n\n        sectionHeadeArrayUint32[0] = sectionHeader.splatCount;\n        sectionHeadeArrayUint32[1] = sectionHeader.maxSplatCount;\n        sectionHeadeArrayUint32[2] = compressionLevel >= 1 ? sectionHeader.bucketSize : 0;\n        sectionHeadeArrayUint32[3] = compressionLevel >= 1 ? sectionHeader.bucketCount : 0;\n        sectionHeadeArrayFloat32[4] = compressionLevel >= 1 ? sectionHeader.bucketBlockSize : 0.0;\n        sectionHeadeArrayUint16[10] = compressionLevel >= 1 ? SplatBuffer.BucketStorageSizeBytes : 0;\n        sectionHeadeArrayUint32[6] = compressionLevel >= 1 ? sectionHeader.compressionScaleRange : 0;\n        sectionHeadeArrayUint32[7] = sectionHeader.storageSizeBytes;\n        sectionHeadeArrayUint32[8] = compressionLevel >= 1 ? sectionHeader.fullBucketCount : 0;\n        sectionHeadeArrayUint32[9] = compressionLevel >= 1 ? sectionHeader.partiallyFilledBucketCount : 0;\n        sectionHeadeArrayUint16[20] = sectionHeader.sphericalHarmonicsDegree;\n\n    }\n\n    static writeSectionHeaderSplatCountToBuffer(splatCount, buffer, offset = 0) {\n        const sectionHeadeArrayUint32 = new Uint32Array(buffer, offset, SplatBuffer.SectionHeaderSizeBytes / 4);\n        sectionHeadeArrayUint32[0] = splatCount;\n    }\n\n    constructFromBuffer(bufferData, secLoadedCountsToMax) {\n        this.bufferData = bufferData;\n\n        this.globalSplatIndexToLocalSplatIndexMap = [];\n        this.globalSplatIndexToSectionMap = [];\n\n        const header = SplatBuffer.parseHeader(this.bufferData);\n        this.versionMajor = header.versionMajor;\n        this.versionMinor = header.versionMinor;\n        this.maxSectionCount = header.maxSectionCount;\n        this.sectionCount = secLoadedCountsToMax ? header.maxSectionCount : 0;\n        this.maxSplatCount = header.maxSplatCount;\n        this.splatCount = secLoadedCountsToMax ? header.maxSplatCount : 0;\n        this.compressionLevel = header.compressionLevel;\n        this.sceneCenter = new THREE.Vector3().copy(header.sceneCenter);\n        this.minSphericalHarmonicsCoeff = header.minSphericalHarmonicsCoeff;\n        this.maxSphericalHarmonicsCoeff = header.maxSphericalHarmonicsCoeff;\n\n        this.sections = SplatBuffer.parseSectionHeaders(header, this.bufferData, SplatBuffer.HeaderSizeBytes, secLoadedCountsToMax);\n\n        this.linkBufferArrays();\n        this.buildMaps();\n    }\n\n    static calculateComponentStorage(compressionLevel, sphericalHarmonicsDegree) {\n        const bytesPerCenter = SplatBuffer.CompressionLevels[compressionLevel].BytesPerCenter;\n        const bytesPerScale = SplatBuffer.CompressionLevels[compressionLevel].BytesPerScale;\n        const bytesPerRotation = SplatBuffer.CompressionLevels[compressionLevel].BytesPerRotation;\n        const bytesPerColor = SplatBuffer.CompressionLevels[compressionLevel].BytesPerColor;\n        const sphericalHarmonicsComponentsPerSplat = getSphericalHarmonicsComponentCountForDegree(sphericalHarmonicsDegree);\n        const sphericalHarmonicsBytesPerSplat = SplatBuffer.CompressionLevels[compressionLevel].BytesPerSphericalHarmonicsComponent *\n                                                sphericalHarmonicsComponentsPerSplat;\n        const bytesPerSplat = bytesPerCenter + bytesPerScale + bytesPerRotation +\n                              bytesPerColor + sphericalHarmonicsBytesPerSplat;\n        return {\n            bytesPerCenter,\n            bytesPerScale,\n            bytesPerRotation,\n            bytesPerColor,\n            sphericalHarmonicsComponentsPerSplat,\n            sphericalHarmonicsBytesPerSplat,\n            bytesPerSplat\n        };\n    }\n\n    linkBufferArrays() {\n        for (let i = 0; i < this.maxSectionCount; i++) {\n            const section = this.sections[i];\n            section.bucketArray = new Float32Array(this.bufferData, section.bucketsBase,\n                                                   section.bucketCount * SplatBuffer.BucketStorageSizeFloats);\n            if (section.partiallyFilledBucketCount > 0) {\n                section.partiallyFilledBucketLengths = new Uint32Array(this.bufferData, section.base,\n                                                                       section.partiallyFilledBucketCount);\n            }\n        }\n    }\n\n    buildMaps() {\n        let cumulativeSplatCount = 0;\n        for (let i = 0; i < this.maxSectionCount; i++) {\n            const section = this.sections[i];\n            for (let j = 0; j < section.maxSplatCount; j++) {\n                const globalSplatIndex = cumulativeSplatCount + j;\n                this.globalSplatIndexToLocalSplatIndexMap[globalSplatIndex] = j;\n                this.globalSplatIndexToSectionMap[globalSplatIndex] = i;\n            }\n            cumulativeSplatCount += section.maxSplatCount;\n        }\n    }\n\n    updateLoadedCounts(newSectionCount, newSplatCount) {\n        SplatBuffer.writeHeaderCountsToBuffer(newSectionCount, newSplatCount, this.bufferData);\n        this.sectionCount = newSectionCount;\n        this.splatCount = newSplatCount;\n    }\n\n    updateSectionLoadedCounts(sectionIndex, newSplatCount) {\n        const sectionHeaderOffset = SplatBuffer.HeaderSizeBytes + SplatBuffer.SectionHeaderSizeBytes * sectionIndex;\n        SplatBuffer.writeSectionHeaderSplatCountToBuffer(newSplatCount, this.bufferData, sectionHeaderOffset);\n        this.sections[sectionIndex].splatCount = newSplatCount;\n    }\n\n    static writeSplatDataToSectionBuffer = function() {\n\n        const tempCenterBuffer = new ArrayBuffer(12);\n        const tempScaleBuffer = new ArrayBuffer(12);\n        const tempRotationBuffer = new ArrayBuffer(16);\n        const tempColorBuffer = new ArrayBuffer(4);\n        const tempSHBuffer = new ArrayBuffer(256);\n        const tempRot = new THREE.Quaternion();\n        const tempScale = new THREE.Vector3();\n        const bucketCenterDelta = new THREE.Vector3();\n\n        const {\n            X: OFFSET_X, Y: OFFSET_Y, Z: OFFSET_Z,\n            SCALE0: OFFSET_SCALE0, SCALE1: OFFSET_SCALE1, SCALE2: OFFSET_SCALE2,\n            ROTATION0: OFFSET_ROT0, ROTATION1: OFFSET_ROT1, ROTATION2: OFFSET_ROT2, ROTATION3: OFFSET_ROT3,\n            FDC0: OFFSET_FDC0, FDC1: OFFSET_FDC1, FDC2: OFFSET_FDC2, OPACITY: OFFSET_OPACITY,\n            FRC0: OFFSET_FRC0, FRC9: OFFSET_FRC9,\n        } = UncompressedSplatArray.OFFSET;\n\n        const compressPositionOffset = (v, compressionScaleFactor, compressionScaleRange) => {\n            const doubleCompressionScaleRange = compressionScaleRange * 2 + 1;\n            v = Math.round(v * compressionScaleFactor) + compressionScaleRange;\n            return clamp(v, 0, doubleCompressionScaleRange);\n        };\n\n        return function(targetSplat, sectionBuffer, bufferOffset, compressionLevel, sphericalHarmonicsDegree,\n                        bucketCenter, compressionScaleFactor, compressionScaleRange,\n                        minSphericalHarmonicsCoeff = -DefaultSphericalHarmonics8BitCompressionHalfRange,\n                        maxSphericalHarmonicsCoeff = DefaultSphericalHarmonics8BitCompressionHalfRange) {\n\n            const sphericalHarmonicsComponentsPerSplat = getSphericalHarmonicsComponentCountForDegree(sphericalHarmonicsDegree);\n            const bytesPerCenter = SplatBuffer.CompressionLevels[compressionLevel].BytesPerCenter;\n            const bytesPerScale = SplatBuffer.CompressionLevels[compressionLevel].BytesPerScale;\n            const bytesPerRotation = SplatBuffer.CompressionLevels[compressionLevel].BytesPerRotation;\n            const bytesPerColor = SplatBuffer.CompressionLevels[compressionLevel].BytesPerColor;\n\n            const centerBase = bufferOffset;\n            const scaleBase = centerBase + bytesPerCenter;\n            const rotationBase = scaleBase + bytesPerScale;\n            const colorBase = rotationBase + bytesPerRotation;\n            const sphericalHarmonicsBase = colorBase + bytesPerColor;\n\n            if (targetSplat[OFFSET_ROT0] !== undefined) {\n                tempRot.set(targetSplat[OFFSET_ROT0], targetSplat[OFFSET_ROT1], targetSplat[OFFSET_ROT2], targetSplat[OFFSET_ROT3]);\n                tempRot.normalize();\n            } else {\n                tempRot.set(1.0, 0.0, 0.0, 0.0);\n            }\n\n            if (targetSplat[OFFSET_SCALE0] !== undefined) {\n                tempScale.set(targetSplat[OFFSET_SCALE0] || 0,\n                              targetSplat[OFFSET_SCALE1] || 0,\n                              targetSplat[OFFSET_SCALE2] || 0);\n            } else {\n                tempScale.set(0, 0, 0);\n            }\n\n            if (compressionLevel === 0) {\n                const center = new Float32Array(sectionBuffer, centerBase, SplatBuffer.CenterComponentCount);\n                const rot = new Float32Array(sectionBuffer, rotationBase, SplatBuffer.RotationComponentCount);\n                const scale = new Float32Array(sectionBuffer, scaleBase, SplatBuffer.ScaleComponentCount);\n\n                rot.set([tempRot.x, tempRot.y, tempRot.z, tempRot.w]);\n                scale.set([tempScale.x, tempScale.y, tempScale.z]);\n                center.set([targetSplat[OFFSET_X], targetSplat[OFFSET_Y], targetSplat[OFFSET_Z]]);\n\n                if (sphericalHarmonicsDegree > 0) {\n                    const shOut = new Float32Array(sectionBuffer, sphericalHarmonicsBase, sphericalHarmonicsComponentsPerSplat);\n                    if (sphericalHarmonicsDegree >= 1) {\n                            for (let s = 0; s < 9; s++) shOut[s] = targetSplat[OFFSET_FRC0 + s] || 0;\n                            if (sphericalHarmonicsDegree >= 2) {\n                                for (let s = 0; s < 15; s++) shOut[s + 9] = targetSplat[OFFSET_FRC9 + s] || 0;\n                            }\n                    }\n                }\n            } else {\n                const center = new Uint16Array(tempCenterBuffer, 0, SplatBuffer.CenterComponentCount);\n                const rot = new Uint16Array(tempRotationBuffer, 0, SplatBuffer.RotationComponentCount);\n                const scale = new Uint16Array(tempScaleBuffer, 0, SplatBuffer.ScaleComponentCount);\n\n                rot.set([toHalfFloat(tempRot.x), toHalfFloat(tempRot.y), toHalfFloat(tempRot.z), toHalfFloat(tempRot.w)]);\n                scale.set([toHalfFloat(tempScale.x), toHalfFloat(tempScale.y), toHalfFloat(tempScale.z)]);\n\n                bucketCenterDelta.set(targetSplat[OFFSET_X], targetSplat[OFFSET_Y], targetSplat[OFFSET_Z]).sub(bucketCenter);\n                bucketCenterDelta.x = compressPositionOffset(bucketCenterDelta.x, compressionScaleFactor, compressionScaleRange);\n                bucketCenterDelta.y = compressPositionOffset(bucketCenterDelta.y, compressionScaleFactor, compressionScaleRange);\n                bucketCenterDelta.z = compressPositionOffset(bucketCenterDelta.z, compressionScaleFactor, compressionScaleRange);\n                center.set([bucketCenterDelta.x, bucketCenterDelta.y, bucketCenterDelta.z]);\n\n                if (sphericalHarmonicsDegree > 0) {\n                    const SHArrayType = compressionLevel === 1 ? Uint16Array : Uint8Array;\n                    const bytesPerSHComponent = compressionLevel === 1 ? 2 : 1;\n                    const shOut = new SHArrayType(tempSHBuffer, 0, sphericalHarmonicsComponentsPerSplat);\n                    if (sphericalHarmonicsDegree >= 1) {\n                        for (let s = 0; s < 9; s++) {\n                            const srcVal = targetSplat[OFFSET_FRC0 + s] || 0;\n                            shOut[s] = compressionLevel === 1 ? toHalfFloat(srcVal) :\n                                       toUint8(srcVal, minSphericalHarmonicsCoeff, maxSphericalHarmonicsCoeff);\n                        }\n                        const degree1ByteCount = 9 * bytesPerSHComponent;\n                        copyBetweenBuffers(shOut.buffer, 0, sectionBuffer, sphericalHarmonicsBase, degree1ByteCount);\n                        if (sphericalHarmonicsDegree >= 2) {\n                            for (let s = 0; s < 15; s++) {\n                                const srcVal = targetSplat[OFFSET_FRC9 + s] || 0;\n                                shOut[s + 9] = compressionLevel === 1 ? toHalfFloat(srcVal) :\n                                               toUint8(srcVal, minSphericalHarmonicsCoeff, maxSphericalHarmonicsCoeff);\n                            }\n                            copyBetweenBuffers(shOut.buffer, degree1ByteCount, sectionBuffer,\n                                               sphericalHarmonicsBase + degree1ByteCount, 15 * bytesPerSHComponent);\n                        }\n                    }\n                }\n\n                copyBetweenBuffers(center.buffer, 0, sectionBuffer, centerBase, 6);\n                copyBetweenBuffers(scale.buffer, 0, sectionBuffer, scaleBase, 6);\n                copyBetweenBuffers(rot.buffer, 0, sectionBuffer, rotationBase, 8);\n            }\n\n            const rgba = new Uint8ClampedArray(tempColorBuffer, 0, 4);\n            rgba.set([targetSplat[OFFSET_FDC0] || 0, targetSplat[OFFSET_FDC1] || 0, targetSplat[OFFSET_FDC2] || 0]);\n            rgba[3] = targetSplat[OFFSET_OPACITY] || 0;\n\n            copyBetweenBuffers(rgba.buffer, 0, sectionBuffer, colorBase, 4);\n        };\n\n    }();\n\n    static generateFromUncompressedSplatArrays(splatArrays, minimumAlpha, compressionLevel,\n                                               sceneCenter, blockSize, bucketSize, options = []) {\n\n        let shDegree = 0;\n        for (let sa = 0; sa < splatArrays.length; sa ++) {\n            const splatArray = splatArrays[sa];\n            shDegree = Math.max(splatArray.sphericalHarmonicsDegree, shDegree);\n        }\n\n        let minSphericalHarmonicsCoeff;\n        let maxSphericalHarmonicsCoeff;\n\n        for (let sa = 0; sa < splatArrays.length; sa ++) {\n            const splatArray = splatArrays[sa];\n            for (let i = 0; i < splatArray.splats.length; i++) {\n                const splat = splatArray.splats[i];\n                for (let sc = UncompressedSplatArray.OFFSET.FRC0; sc < UncompressedSplatArray.OFFSET.FRC23 && sc < splat.length; sc++) {\n                    if (!minSphericalHarmonicsCoeff || splat[sc] < minSphericalHarmonicsCoeff) {\n                        minSphericalHarmonicsCoeff = splat[sc];\n                    }\n                    if (!maxSphericalHarmonicsCoeff || splat[sc] > maxSphericalHarmonicsCoeff) {\n                        maxSphericalHarmonicsCoeff = splat[sc];\n                    }\n                }\n            }\n        }\n\n        minSphericalHarmonicsCoeff = minSphericalHarmonicsCoeff || -DefaultSphericalHarmonics8BitCompressionHalfRange;\n        maxSphericalHarmonicsCoeff = maxSphericalHarmonicsCoeff || DefaultSphericalHarmonics8BitCompressionHalfRange;\n\n        const { bytesPerSplat } = SplatBuffer.calculateComponentStorage(compressionLevel, shDegree);\n        const compressionScaleRange = SplatBuffer.CompressionLevels[compressionLevel].ScaleRange;\n\n        const sectionBuffers = [];\n        const sectionHeaderBuffers = [];\n        let totalSplatCount = 0;\n\n        for (let sa = 0; sa < splatArrays.length; sa ++) {\n            const splatArray = splatArrays[sa];\n            const validSplats = new UncompressedSplatArray(shDegree);\n            for (let i = 0; i < splatArray.splatCount; i++) {\n                const targetSplat = splatArray.splats[i];\n                if ((targetSplat[UncompressedSplatArray.OFFSET.OPACITY] || 0) >= minimumAlpha) {\n                    validSplats.addSplat(targetSplat);\n                }\n            }\n\n            const sectionOptions = options[sa] || {};\n            const sectionBlockSize = (sectionOptions.blockSizeFactor || 1) * (blockSize || SplatBuffer.BucketBlockSize);\n            const sectionBucketSize = Math.ceil((sectionOptions.bucketSizeFactor || 1) * (bucketSize || SplatBuffer.BucketSize));\n\n            const bucketInfo = SplatBuffer.computeBucketsForUncompressedSplatArray(validSplats, sectionBlockSize, sectionBucketSize);\n            const fullBucketCount = bucketInfo.fullBuckets.length;\n            const partiallyFullBucketLengths = bucketInfo.partiallyFullBuckets.map((bucket) => bucket.splats.length);\n            const partiallyFilledBucketCount = partiallyFullBucketLengths.length;\n            const buckets = [...bucketInfo.fullBuckets, ...bucketInfo.partiallyFullBuckets];\n\n            const sectionDataSizeBytes = validSplats.splats.length * bytesPerSplat;\n            const bucketMetaDataSizeBytes = partiallyFilledBucketCount * 4;\n            const bucketDataBytes = compressionLevel >= 1 ? buckets.length *\n                                                            SplatBuffer.BucketStorageSizeBytes + bucketMetaDataSizeBytes : 0;\n            const sectionSizeBytes = sectionDataSizeBytes + bucketDataBytes;\n            const sectionBuffer = new ArrayBuffer(sectionSizeBytes);\n\n            const compressionScaleFactor = compressionScaleRange / (sectionBlockSize * 0.5);\n            const bucketCenter = new THREE.Vector3();\n\n            let outSplatCount = 0;\n            for (let b = 0; b < buckets.length; b++) {\n                const bucket = buckets[b];\n                bucketCenter.fromArray(bucket.center);\n                for (let i = 0; i < bucket.splats.length; i++) {\n                    let row = bucket.splats[i];\n                    const targetSplat = validSplats.splats[row];\n                    const bufferOffset = bucketDataBytes + outSplatCount * bytesPerSplat;\n                    SplatBuffer.writeSplatDataToSectionBuffer(targetSplat, sectionBuffer, bufferOffset, compressionLevel, shDegree,\n                                                              bucketCenter, compressionScaleFactor, compressionScaleRange,\n                                                              minSphericalHarmonicsCoeff, maxSphericalHarmonicsCoeff);\n                    outSplatCount++;\n                }\n            }\n            totalSplatCount += outSplatCount;\n\n            if (compressionLevel >= 1) {\n                const bucketMetaDataArray = new Uint32Array(sectionBuffer, 0, partiallyFullBucketLengths.length * 4);\n                for (let pfb = 0; pfb < partiallyFullBucketLengths.length; pfb ++) {\n                    bucketMetaDataArray[pfb] = partiallyFullBucketLengths[pfb];\n                }\n                const bucketArray = new Float32Array(sectionBuffer, bucketMetaDataSizeBytes,\n                                                     buckets.length * SplatBuffer.BucketStorageSizeFloats);\n                for (let b = 0; b < buckets.length; b++) {\n                    const bucket = buckets[b];\n                    const base = b * 3;\n                    bucketArray[base] = bucket.center[0];\n                    bucketArray[base + 1] = bucket.center[1];\n                    bucketArray[base + 2] = bucket.center[2];\n                }\n            }\n            sectionBuffers.push(sectionBuffer);\n\n            const sectionHeaderBuffer = new ArrayBuffer(SplatBuffer.SectionHeaderSizeBytes);\n            SplatBuffer.writeSectionHeaderToBuffer({\n                maxSplatCount: outSplatCount,\n                splatCount: outSplatCount,\n                bucketSize: sectionBucketSize,\n                bucketCount: buckets.length,\n                bucketBlockSize: sectionBlockSize,\n                compressionScaleRange: compressionScaleRange,\n                storageSizeBytes: sectionSizeBytes,\n                fullBucketCount: fullBucketCount,\n                partiallyFilledBucketCount: partiallyFilledBucketCount,\n                sphericalHarmonicsDegree: shDegree\n            }, compressionLevel, sectionHeaderBuffer, 0);\n            sectionHeaderBuffers.push(sectionHeaderBuffer);\n\n        }\n\n        let sectionsCumulativeSizeBytes = 0;\n        for (let sectionBuffer of sectionBuffers) sectionsCumulativeSizeBytes += sectionBuffer.byteLength;\n        const unifiedBufferSize = SplatBuffer.HeaderSizeBytes +\n                                  SplatBuffer.SectionHeaderSizeBytes * sectionBuffers.length + sectionsCumulativeSizeBytes;\n        const unifiedBuffer = new ArrayBuffer(unifiedBufferSize);\n\n        SplatBuffer.writeHeaderToBuffer({\n            versionMajor: 0,\n            versionMinor: 1,\n            maxSectionCount: sectionBuffers.length,\n            sectionCount: sectionBuffers.length,\n            maxSplatCount: totalSplatCount,\n            splatCount: totalSplatCount,\n            compressionLevel: compressionLevel,\n            sceneCenter: sceneCenter,\n            minSphericalHarmonicsCoeff: minSphericalHarmonicsCoeff,\n            maxSphericalHarmonicsCoeff: maxSphericalHarmonicsCoeff\n        }, unifiedBuffer);\n\n        let currentUnifiedBase = SplatBuffer.HeaderSizeBytes;\n        for (let sectionHeaderBuffer of sectionHeaderBuffers) {\n            new Uint8Array(unifiedBuffer, currentUnifiedBase, SplatBuffer.SectionHeaderSizeBytes).set(new Uint8Array(sectionHeaderBuffer));\n            currentUnifiedBase += SplatBuffer.SectionHeaderSizeBytes;\n        }\n\n        for (let sectionBuffer of sectionBuffers) {\n            new Uint8Array(unifiedBuffer, currentUnifiedBase, sectionBuffer.byteLength).set(new Uint8Array(sectionBuffer));\n            currentUnifiedBase += sectionBuffer.byteLength;\n        }\n\n        const splatBuffer = new SplatBuffer(unifiedBuffer);\n        return splatBuffer;\n    }\n\n    static computeBucketsForUncompressedSplatArray(splatArray, blockSize, bucketSize) {\n        let splatCount = splatArray.splatCount;\n        const halfBlockSize = blockSize / 2.0;\n\n        const min = new THREE.Vector3();\n        const max = new THREE.Vector3();\n\n        for (let i = 0; i < splatCount; i++) {\n            const targetSplat = splatArray.splats[i];\n            const center = [targetSplat[UncompressedSplatArray.OFFSET.X],\n                            targetSplat[UncompressedSplatArray.OFFSET.Y],\n                            targetSplat[UncompressedSplatArray.OFFSET.Z]];\n            if (i === 0 || center[0] < min.x) min.x = center[0];\n            if (i === 0 || center[0] > max.x) max.x = center[0];\n            if (i === 0 || center[1] < min.y) min.y = center[1];\n            if (i === 0 || center[1] > max.y) max.y = center[1];\n            if (i === 0 || center[2] < min.z) min.z = center[2];\n            if (i === 0 || center[2] > max.z) max.z = center[2];\n        }\n\n        const dimensions = new THREE.Vector3().copy(max).sub(min);\n        const yBlocks = Math.ceil(dimensions.y / blockSize);\n        const zBlocks = Math.ceil(dimensions.z / blockSize);\n\n        const blockCenter = new THREE.Vector3();\n        const fullBuckets = [];\n        const partiallyFullBuckets = {};\n\n        for (let i = 0; i < splatCount; i++) {\n            const targetSplat = splatArray.splats[i];\n            const center = [targetSplat[UncompressedSplatArray.OFFSET.X],\n                            targetSplat[UncompressedSplatArray.OFFSET.Y],\n                            targetSplat[UncompressedSplatArray.OFFSET.Z]];\n            const xBlock = Math.floor((center[0] - min.x) / blockSize);\n            const yBlock = Math.floor((center[1] - min.y) / blockSize);\n            const zBlock = Math.floor((center[2] - min.z) / blockSize);\n\n            blockCenter.x = xBlock * blockSize + min.x + halfBlockSize;\n            blockCenter.y = yBlock * blockSize + min.y + halfBlockSize;\n            blockCenter.z = zBlock * blockSize + min.z + halfBlockSize;\n\n            const bucketId = xBlock * (yBlocks * zBlocks) + yBlock * zBlocks + zBlock;\n            let bucket = partiallyFullBuckets[bucketId];\n            if (!bucket) {\n                partiallyFullBuckets[bucketId] = bucket = {\n                    'splats': [],\n                    'center': blockCenter.toArray()\n                };\n            }\n\n            bucket.splats.push(i);\n            if (bucket.splats.length >= bucketSize) {\n                fullBuckets.push(bucket);\n                partiallyFullBuckets[bucketId] = null;\n            }\n        }\n\n        const partiallyFullBucketArray = [];\n        for (let bucketId in partiallyFullBuckets) {\n            if (partiallyFullBuckets.hasOwnProperty(bucketId)) {\n                const bucket = partiallyFullBuckets[bucketId];\n                if (bucket) {\n                    partiallyFullBucketArray.push(bucket);\n                }\n            }\n        }\n\n        return {\n            'fullBuckets': fullBuckets,\n            'partiallyFullBuckets': partiallyFullBucketArray,\n        };\n    }\n\n    static preallocateUncompressed(splatCount, sphericalHarmonicsDegrees) {\n        const shDescriptor = SplatBuffer.CompressionLevels[0].SphericalHarmonicsDegrees[sphericalHarmonicsDegrees];\n        const splatBufferDataOffsetBytes = SplatBuffer.HeaderSizeBytes + SplatBuffer.SectionHeaderSizeBytes;\n        const splatBufferSizeBytes = splatBufferDataOffsetBytes + shDescriptor.BytesPerSplat * splatCount;\n        const outBuffer = new ArrayBuffer(splatBufferSizeBytes);\n        SplatBuffer.writeHeaderToBuffer({\n            versionMajor: SplatBuffer.CurrentMajorVersion,\n            versionMinor: SplatBuffer.CurrentMinorVersion,\n            maxSectionCount: 1,\n            sectionCount: 1,\n            maxSplatCount: splatCount,\n            splatCount: splatCount,\n            compressionLevel: 0,\n            sceneCenter: new THREE.Vector3()\n        }, outBuffer);\n\n        SplatBuffer.writeSectionHeaderToBuffer({\n            maxSplatCount: splatCount,\n            splatCount: splatCount,\n            bucketSize: 0,\n            bucketCount: 0,\n            bucketBlockSize: 0,\n            compressionScaleRange: 0,\n            storageSizeBytes: 0,\n            fullBucketCount: 0,\n            partiallyFilledBucketCount: 0,\n            sphericalHarmonicsDegree: sphericalHarmonicsDegrees\n        }, 0, outBuffer, SplatBuffer.HeaderSizeBytes);\n\n        return {\n            splatBuffer: new SplatBuffer(outBuffer, true),\n            splatBufferDataOffsetBytes\n        };\n    }\n}\n","import { UncompressedSplatArray } from '../UncompressedSplatArray.js';\nimport { SplatBuffer } from '../SplatBuffer.js';\nimport { clamp } from '../../Util.js';\nimport * as THREE from 'three';\n\nconst HeaderMagicBytes = new Uint8Array([112, 108, 121, 10]);\nconst HeaderEndTokenBytes = new Uint8Array([10, 101, 110, 100, 95, 104, 101, 97, 100, 101, 114, 10]);\nconst HeaderEndToken = 'end_header';\n\nconst DataTypeMap = new Map([\n  ['char', Int8Array],\n  ['uchar', Uint8Array],\n  ['short', Int16Array],\n  ['ushort', Uint16Array],\n  ['int', Int32Array],\n  ['uint', Uint32Array],\n  ['float', Float32Array],\n  ['double', Float64Array],\n]);\n\nconst unpackUnorm = (value, bits) => {\n  const t = (1 << bits) - 1;\n  return (value & t) / t;\n};\n\nconst unpack111011 = (result, value) => {\n  result.x = unpackUnorm(value >>> 21, 11);\n  result.y = unpackUnorm(value >>> 11, 10);\n  result.z = unpackUnorm(value, 11);\n};\n\nconst unpack8888 = (result, value) => {\n  result.x = unpackUnorm(value >>> 24, 8);\n  result.y = unpackUnorm(value >>> 16, 8);\n  result.z = unpackUnorm(value >>> 8, 8);\n  result.w = unpackUnorm(value, 8);\n};\n\n// unpack quaternion with 2,10,10,10 format (largest element, 3x10bit element)\nconst unpackRot = (result, value) => {\n  const norm = 1.0 / (Math.sqrt(2) * 0.5);\n  const a = (unpackUnorm(value >>> 20, 10) - 0.5) * norm;\n  const b = (unpackUnorm(value >>> 10, 10) - 0.5) * norm;\n  const c = (unpackUnorm(value, 10) - 0.5) * norm;\n  const m = Math.sqrt(1.0 - (a * a + b * b + c * c));\n\n  switch (value >>> 30) {\n    case 0:\n      result.set(m, a, b, c);\n      break;\n    case 1:\n      result.set(a, m, b, c);\n      break;\n    case 2:\n      result.set(a, b, m, c);\n      break;\n    case 3:\n      result.set(a, b, c, m);\n      break;\n  }\n};\n\nconst lerp = (a, b, t) => {\n  return a * (1 - t) + b * t;\n};\n\nconst getElementPropStorage = (element, name) => {\n  return element.properties.find((p) => p.name === name && p.storage)\n    ?.storage;\n};\n\nexport class PlayCanvasCompressedPlyParser {\n\n  static decodeHeaderText(headerText) {\n\n    let element;\n    let chunkElement;\n    let vertexElement;\n    let shElement;\n\n    const headerLines = headerText.split('\\n').filter((line) => !line.startsWith('comment '));\n\n    let bytesPerSplat = 0;\n    let done = false;\n    for (let i = 1; i < headerLines.length; ++i) {\n      const words = headerLines[i].split(' ');\n\n      switch (words[0]) {\n        case 'format':\n          if (words[1] !== 'binary_little_endian') {\n            throw new Error('Unsupported ply format');\n          }\n          break;\n        case 'element':\n          element = {\n            name: words[1],\n            count: parseInt(words[2], 10),\n            properties: [],\n            storageSizeBytes: 0\n          };\n          if (element.name === 'chunk') chunkElement = element;\n          else if (element.name === 'vertex') vertexElement = element;\n          else if (element.name === 'sh') shElement = element;\n          break;\n        case 'property': {\n          if (!DataTypeMap.has(words[1])) {\n            throw new Error(\n              `Unrecognized property data type '${words[1]}' in ply header`\n            );\n          }\n          const StorageType = DataTypeMap.get(words[1]);\n          const storageSizeByes = StorageType.BYTES_PER_ELEMENT * element.count;\n          if (element.name === 'vertex') bytesPerSplat += StorageType.BYTES_PER_ELEMENT;\n          element.properties.push({\n            type: words[1],\n            name: words[2],\n            storage: null,\n            byteSize: StorageType.BYTES_PER_ELEMENT,\n            storageSizeByes: storageSizeByes\n          });\n          element.storageSizeBytes += storageSizeByes;\n          break;\n        }\n        case HeaderEndToken:\n          done = true;\n        break;\n        default:\n          throw new Error(\n            `Unrecognized header value '${words[0]}' in ply header`\n          );\n      }\n      if (done) break;\n    }\n\n    let sphericalHarmonicsDegree = 0;\n    let sphericalHarmonicsPerSplat = 0;\n    if (shElement) {\n      sphericalHarmonicsPerSplat = shElement.properties.length;\n      if (shElement.properties.length >= 45) {\n        sphericalHarmonicsDegree = 3;\n      } else if (shElement.properties.length >= 24) {\n        sphericalHarmonicsDegree = 2;\n      } else if (shElement.properties.length >= 9) {\n        sphericalHarmonicsDegree = 1;\n      }\n    }\n\n    return {\n      'chunkElement': chunkElement,\n      'vertexElement': vertexElement,\n      'shElement': shElement,\n      'bytesPerSplat': bytesPerSplat,\n      'headerSizeBytes': headerText.indexOf(HeaderEndToken) + HeaderEndToken.length + 1,\n      'sphericalHarmonicsDegree': sphericalHarmonicsDegree,\n      'sphericalHarmonicsPerSplat': sphericalHarmonicsPerSplat\n    };\n  }\n\n  static decodeHeader(plyBuffer) {\n\n    /**\n     * Searches for the first occurrence of a sequence within a buffer.\n     * @example\n     * find(new Uint8Array([1, 2, 3, 4]), new Uint8Array([3, 4])); // 2\n     * @param {Uint8Array} buf - The buffer in which to search.\n     * @param {Uint8Array} search - The sequence to search for.\n     * @return {number} The index of the first occurrence of the search sequence in the buffer, or -1 if not found.\n     */\n    const find = (buf, search) => {\n      const endIndex = buf.length - search.length;\n      let i;\n      let j;\n      for (i = 0; i <= endIndex; ++i) {\n        for (j = 0; j < search.length; ++j) {\n          if (buf[i + j] !== search[j]) {\n            break;\n          }\n        }\n        if (j === search.length) {\n          return i;\n        }\n      }\n      return -1;\n    };\n\n    /**\n     * Checks if array 'a' starts with the same elements as array 'b'.\n     * @example\n     * startsWith(new Uint8Array([1, 2, 3, 4]), new Uint8Array([1, 2])); // true\n     * @param {Uint8Array} a - The array to check against.\n     * @param {Uint8Array} b - The array of elements to look for at the start of 'a'.\n     * @return {boolean} - True if 'a' starts with all elements of 'b', otherwise false.\n     */\n    const startsWith = (a, b) => {\n      if (a.length < b.length) {\n        return false;\n      }\n\n      for (let i = 0; i < b.length; ++i) {\n        if (a[i] !== b[i]) {\n          return false;\n        }\n      }\n\n      return true;\n    };\n\n    let buf = new Uint8Array(plyBuffer);\n    let endHeaderTokenOffset;\n\n    if (buf.length >= HeaderMagicBytes.length && !startsWith(buf, HeaderMagicBytes)) {\n      throw new Error('Invalid PLY header');\n    }\n\n    endHeaderTokenOffset = find(buf, HeaderEndTokenBytes);\n    if (endHeaderTokenOffset === -1) {\n      throw new Error('End of PLY header not found');\n    }\n\n    const headerText = new TextDecoder('ascii').decode(\n      buf.slice(0, endHeaderTokenOffset)\n    );\n\n    const {\n      chunkElement,\n      vertexElement,\n      shElement,\n      sphericalHarmonicsDegree,\n      sphericalHarmonicsPerSplat,\n      bytesPerSplat\n    } = PlayCanvasCompressedPlyParser.decodeHeaderText(headerText);\n\n    return {\n      'headerSizeBytes': endHeaderTokenOffset + HeaderEndTokenBytes.length,\n      'bytesPerSplat': bytesPerSplat,\n      'chunkElement': chunkElement,\n      'vertexElement': vertexElement,\n      'shElement': shElement,\n      'sphericalHarmonicsDegree': sphericalHarmonicsDegree,\n      'sphericalHarmonicsPerSplat': sphericalHarmonicsPerSplat\n    };\n  }\n\n  static readElementData(element, readBuffer, readOffset, fromIndex, toIndex, propertyFilter = null) {\n\n    let dataView = readBuffer instanceof DataView ? readBuffer : new DataView(readBuffer);\n\n    fromIndex = fromIndex || 0;\n    toIndex = toIndex || element.count - 1;\n    for (let e = fromIndex; e <= toIndex; ++e) {\n      for (let j = 0; j < element.properties.length; ++j) {\n        const property = element.properties[j];\n\n        const StorageType = DataTypeMap.get(property.type);\n        const requiredStorageSizeBytes = StorageType.BYTES_PER_ELEMENT * element.count;\n        if ((!property.storage || property.storage.byteLength < requiredStorageSizeBytes) &&\n            (!propertyFilter || propertyFilter(property.name))) {\n          property.storage = new StorageType(element.count);\n        }\n\n        if (property.storage) {\n          switch (property.type) {\n            case 'char':\n              property.storage[e] = dataView.getInt8(readOffset);\n              break;\n            case 'uchar':\n              property.storage[e] = dataView.getUint8(readOffset);\n              break;\n            case 'short':\n              property.storage[e] = dataView.getInt16(readOffset, true);\n              break;\n            case 'ushort':\n              property.storage[e] = dataView.getUint16(readOffset, true);\n              break;\n            case 'int':\n              property.storage[e] = dataView.getInt32(readOffset, true);\n              break;\n            case 'uint':\n              property.storage[e] = dataView.getUint32(readOffset, true);\n              break;\n            case 'float':\n              property.storage[e] = dataView.getFloat32(readOffset, true);\n              break;\n            case 'double':\n              property.storage[e] = dataView.getFloat64(readOffset, true);\n              break;\n          }\n        }\n\n        readOffset += property.byteSize;\n      }\n    }\n\n    return readOffset;\n  }\n\n  static readPly(plyBuffer, propertyFilter = null) {\n\n    const header = PlayCanvasCompressedPlyParser.decodeHeader(plyBuffer);\n\n    let readIndex = PlayCanvasCompressedPlyParser.readElementData(header.chunkElement, plyBuffer,\n                                                                  header.headerSizeBytes, null, null, propertyFilter);\n    readIndex = PlayCanvasCompressedPlyParser.readElementData(header.vertexElement, plyBuffer, readIndex, null, null, propertyFilter);\n    PlayCanvasCompressedPlyParser.readElementData(header.shElement, plyBuffer, readIndex, null, null, propertyFilter);\n\n    return {\n      'chunkElement': header.chunkElement,\n      'vertexElement': header.vertexElement,\n      'shElement': header.shElement,\n      'sphericalHarmonicsDegree': header.sphericalHarmonicsDegree,\n      'sphericalHarmonicsPerSplat': header.sphericalHarmonicsPerSplat\n    };\n  }\n\n  static getElementStorageArrays(chunkElement, vertexElement, shElement) {\n    const storageArrays = {};\n\n    if (vertexElement) {\n      const minR = getElementPropStorage(chunkElement, 'min_r');\n      const minG = getElementPropStorage(chunkElement, 'min_g');\n      const minB = getElementPropStorage(chunkElement, 'min_b');\n      const maxR = getElementPropStorage(chunkElement, 'max_r');\n      const maxG = getElementPropStorage(chunkElement, 'max_g');\n      const maxB = getElementPropStorage(chunkElement, 'max_b');\n      const minX = getElementPropStorage(chunkElement, 'min_x');\n      const minY = getElementPropStorage(chunkElement, 'min_y');\n      const minZ = getElementPropStorage(chunkElement, 'min_z');\n      const maxX = getElementPropStorage(chunkElement, 'max_x');\n      const maxY = getElementPropStorage(chunkElement, 'max_y');\n      const maxZ = getElementPropStorage(chunkElement, 'max_z');\n      const minScaleX = getElementPropStorage(chunkElement, 'min_scale_x');\n      const minScaleY = getElementPropStorage(chunkElement, 'min_scale_y');\n      const minScaleZ = getElementPropStorage(chunkElement, 'min_scale_z');\n      const maxScaleX = getElementPropStorage(chunkElement, 'max_scale_x');\n      const maxScaleY = getElementPropStorage(chunkElement, 'max_scale_y');\n      const maxScaleZ = getElementPropStorage(chunkElement, 'max_scale_z');\n      const position = getElementPropStorage(vertexElement, 'packed_position');\n      const rotation = getElementPropStorage(vertexElement, 'packed_rotation');\n      const scale = getElementPropStorage(vertexElement, 'packed_scale');\n      const color = getElementPropStorage(vertexElement, 'packed_color');\n\n      storageArrays['colorExtremes'] = {\n        minR, maxR,\n        minG, maxG,\n        minB, maxB\n      };\n      storageArrays['positionExtremes'] = {\n        minX, maxX,\n        minY, maxY,\n        minZ, maxZ\n      };\n      storageArrays['scaleExtremes'] = {\n        minScaleX, maxScaleX, minScaleY,\n        maxScaleY, minScaleZ, maxScaleZ\n      };\n      storageArrays['position'] = position;\n      storageArrays['rotation'] = rotation;\n      storageArrays['scale'] = scale;\n      storageArrays['color'] = color;\n    }\n\n    if (shElement) {\n      const shStorageArrays = {};\n      for (let i = 0; i < 45; i++) {\n        const fRestKey = `f_rest_${i}`;\n        const fRest = getElementPropStorage(shElement, fRestKey);\n        if (fRest) {\n          shStorageArrays[fRestKey] = fRest;\n        } else {\n          break;\n        }\n      }\n      storageArrays['sh'] = shStorageArrays;\n    }\n\n    return storageArrays;\n  }\n\n  static decompressBaseSplat = function() {\n\n    const p = new THREE.Vector3();\n    const r = new THREE.Quaternion();\n    const s = new THREE.Vector3();\n    const c = new THREE.Vector4();\n\n    const OFFSET = UncompressedSplatArray.OFFSET;\n\n    return function(index, chunkSplatIndexOffset, positionArray, positionExtremes, scaleArray, scaleExtremes,\n                    rotationArray, colorExtremes, colorArray, outSplat) {\n      outSplat = outSplat || UncompressedSplatArray.createSplat();\n\n      const chunkIndex = Math.floor((chunkSplatIndexOffset + index) / 256);\n\n      unpack111011(p, positionArray[index]);\n      unpackRot(r, rotationArray[index]);\n      unpack111011(s, scaleArray[index]);\n      unpack8888(c, colorArray[index]);\n\n      outSplat[OFFSET.X] = lerp(positionExtremes.minX[chunkIndex], positionExtremes.maxX[chunkIndex], p.x);\n      outSplat[OFFSET.Y] = lerp(positionExtremes.minY[chunkIndex], positionExtremes.maxY[chunkIndex], p.y);\n      outSplat[OFFSET.Z] = lerp(positionExtremes.minZ[chunkIndex], positionExtremes.maxZ[chunkIndex], p.z);\n\n      outSplat[OFFSET.ROTATION0] = r.x;\n      outSplat[OFFSET.ROTATION1] = r.y;\n      outSplat[OFFSET.ROTATION2] = r.z;\n      outSplat[OFFSET.ROTATION3] = r.w;\n\n      outSplat[OFFSET.SCALE0] = Math.exp(lerp(scaleExtremes.minScaleX[chunkIndex], scaleExtremes.maxScaleX[chunkIndex], s.x));\n      outSplat[OFFSET.SCALE1] = Math.exp(lerp(scaleExtremes.minScaleY[chunkIndex], scaleExtremes.maxScaleY[chunkIndex], s.y));\n      outSplat[OFFSET.SCALE2] = Math.exp(lerp(scaleExtremes.minScaleZ[chunkIndex], scaleExtremes.maxScaleZ[chunkIndex], s.z));\n\n      if (colorExtremes.minR && colorExtremes.maxR) {\n        outSplat[OFFSET.FDC0] = clamp(Math.round(lerp(colorExtremes.minR[chunkIndex], colorExtremes.maxR[chunkIndex], c.x) * 255), 0, 255);\n      } else {\n        outSplat[OFFSET.FDC0] = clamp(Math.floor(c.x * 255), 0, 255);\n      }\n      if (colorExtremes.minG && colorExtremes.maxG) {\n        outSplat[OFFSET.FDC1] = clamp(Math.round(lerp(colorExtremes.minG[chunkIndex], colorExtremes.maxG[chunkIndex], c.y) * 255), 0, 255);\n      } else {\n        outSplat[OFFSET.FDC1] = clamp(Math.floor(c.y * 255), 0, 255);\n      }\n      if (colorExtremes.minB && colorExtremes.maxB) {\n        outSplat[OFFSET.FDC2] = clamp(Math.round(lerp(colorExtremes.minB[chunkIndex], colorExtremes.maxB[chunkIndex], c.z) * 255), 0, 255);\n      } else {\n        outSplat[OFFSET.FDC2] = clamp(Math.floor(c.z * 255), 0, 255);\n      }\n      outSplat[OFFSET.OPACITY] = clamp(Math.floor(c.w * 255), 0, 255);\n\n      return outSplat;\n    };\n\n  }();\n\n  static decompressSphericalHarmonics = function() {\n\n    const shCoeffMap = [0, 3, 8, 15];\n\n    const shIndexMap = [\n      0, 1, 2, 9, 10, 11, 12, 13, 24, 25, 26, 27, 28, 29, 30,\n      3, 4, 5, 14, 15, 16, 17, 18, 31, 32, 33, 34, 35, 36, 37,\n      6, 7, 8, 19, 20, 21, 22, 23, 38, 39, 40, 41, 42, 43, 44\n    ];\n\n    return function(index, shArray, outSphericalHarmonicsDegree, readSphericalHarmonicsDegree, outSplat) {\n      outSplat = outSplat || UncompressedSplatArray.createSplat();\n      let outSHCoeff = shCoeffMap[outSphericalHarmonicsDegree];\n      let readSHCoeff = shCoeffMap[readSphericalHarmonicsDegree];\n      for (let j = 0; j < 3; ++j) {\n        for (let k = 0; k < 15; ++k) {\n          const outIndex = shIndexMap[j * 15 + k];\n          if (k < outSHCoeff && k < readSHCoeff) {\n            outSplat[UncompressedSplatArray.OFFSET.FRC0 + outIndex] = (shArray[j * readSHCoeff + k][index] * (8 / 255) - 4);\n          }\n        }\n      }\n\n      return outSplat;\n    };\n\n  }();\n\n  static parseToUncompressedSplatBufferSection(chunkElement, vertexElement, fromIndex, toIndex, chunkSplatIndexOffset,\n                                               vertexDataBuffer, outBuffer, outOffset, propertyFilter = null) {\n\n    PlayCanvasCompressedPlyParser.readElementData(vertexElement, vertexDataBuffer, 0, fromIndex, toIndex, propertyFilter);\n\n    const outBytesPerSplat = SplatBuffer.CompressionLevels[0].SphericalHarmonicsDegrees[0].BytesPerSplat;\n\n    const { positionExtremes, scaleExtremes, colorExtremes, position, rotation, scale, color } =\n      PlayCanvasCompressedPlyParser.getElementStorageArrays(chunkElement, vertexElement);\n\n    const tempSplat = UncompressedSplatArray.createSplat();\n\n    for (let i = fromIndex; i <= toIndex; ++i) {\n      PlayCanvasCompressedPlyParser.decompressBaseSplat(i, chunkSplatIndexOffset, position, positionExtremes,\n                                                        scale, scaleExtremes, rotation, colorExtremes, color, tempSplat);\n      const outBase = i * outBytesPerSplat + outOffset;\n      SplatBuffer.writeSplatDataToSectionBuffer(tempSplat, outBuffer, outBase, 0, 0);\n    }\n  }\n\n  static parseToUncompressedSplatArraySection(chunkElement, vertexElement, fromIndex, toIndex, chunkSplatIndexOffset,\n                                              vertexDataBuffer, splatArray, propertyFilter = null) {\n\n    PlayCanvasCompressedPlyParser.readElementData(vertexElement, vertexDataBuffer, 0, fromIndex, toIndex, propertyFilter);\n\n    const { positionExtremes, scaleExtremes, colorExtremes, position, rotation, scale, color } =\n      PlayCanvasCompressedPlyParser.getElementStorageArrays(chunkElement, vertexElement);\n\n    for (let i = fromIndex; i <= toIndex; ++i) {\n      const tempSplat = UncompressedSplatArray.createSplat();\n      PlayCanvasCompressedPlyParser.decompressBaseSplat(i, chunkSplatIndexOffset, position, positionExtremes,\n                                                        scale, scaleExtremes, rotation, colorExtremes, color, tempSplat);\n      splatArray.addSplat(tempSplat);\n    }\n  }\n\n  static parseSphericalHarmonicsToUncompressedSplatArraySection(chunkElement, shElement, fromIndex, toIndex,\n    vertexDataBuffer, vertexReadOffset, outSphericalHarmonicsDegree, readSphericalHarmonicsDegree, splatArray, propertyFilter = null) {\n\n    PlayCanvasCompressedPlyParser.readElementData(shElement, vertexDataBuffer, vertexReadOffset, fromIndex, toIndex, propertyFilter);\n\n    const { sh } = PlayCanvasCompressedPlyParser.getElementStorageArrays(chunkElement, undefined, shElement);\n    const shArrays = Object.values(sh);\n\n    for (let i = fromIndex; i <= toIndex; ++i) {\n      PlayCanvasCompressedPlyParser.decompressSphericalHarmonics(\n        i, shArrays, outSphericalHarmonicsDegree, readSphericalHarmonicsDegree, splatArray.splats[i]\n      );\n    }\n  }\n\n  static parseToUncompressedSplatArray(plyBuffer, outSphericalHarmonicsDegree) {\n    const { chunkElement, vertexElement, shElement, sphericalHarmonicsDegree } = PlayCanvasCompressedPlyParser.readPly(plyBuffer);\n\n    outSphericalHarmonicsDegree = Math.min(outSphericalHarmonicsDegree, sphericalHarmonicsDegree);\n\n    const splatArray = new UncompressedSplatArray(outSphericalHarmonicsDegree);\n\n    const { positionExtremes, scaleExtremes, colorExtremes, position, rotation, scale, color } =\n      PlayCanvasCompressedPlyParser.getElementStorageArrays(chunkElement, vertexElement);\n\n    let shArrays;\n    if (outSphericalHarmonicsDegree > 0) {\n      const { sh } = PlayCanvasCompressedPlyParser.getElementStorageArrays(chunkElement, undefined, shElement);\n      shArrays = Object.values(sh);\n    }\n\n    for (let i = 0; i < vertexElement.count; ++i) {\n\n      splatArray.addDefaultSplat();\n      const newSplat = splatArray.getSplat(splatArray.splatCount - 1);\n\n      PlayCanvasCompressedPlyParser.decompressBaseSplat(i, 0, position, positionExtremes, scale,\n                                                        scaleExtremes, rotation, colorExtremes, color, newSplat);\n\n      if (outSphericalHarmonicsDegree > 0) {\n        PlayCanvasCompressedPlyParser.decompressSphericalHarmonics(\n          i, shArrays, outSphericalHarmonicsDegree, sphericalHarmonicsDegree, newSplat\n        );\n      }\n    }\n\n    return splatArray;\n  }\n\n  static parseToUncompressedSplatBuffer(plyBuffer, outSphericalHarmonicsDegree) {\n    const { chunkElement, vertexElement, shElement, sphericalHarmonicsDegree } = PlayCanvasCompressedPlyParser.readPly(plyBuffer);\n\n    outSphericalHarmonicsDegree = Math.min(outSphericalHarmonicsDegree, sphericalHarmonicsDegree);\n\n    const {\n      splatBuffer,\n      splatBufferDataOffsetBytes\n    } = SplatBuffer.preallocateUncompressed(vertexElement.count, outSphericalHarmonicsDegree);\n\n    const { positionExtremes, scaleExtremes, colorExtremes, position, rotation, scale, color } =\n    PlayCanvasCompressedPlyParser.getElementStorageArrays(chunkElement, vertexElement);\n\n    let shArrays;\n    if (outSphericalHarmonicsDegree > 0) {\n      const { sh } = PlayCanvasCompressedPlyParser.getElementStorageArrays(chunkElement, undefined, shElement);\n      shArrays = Object.values(sh);\n    }\n\n    const outBytesPerSplat = SplatBuffer.CompressionLevels[0].SphericalHarmonicsDegrees[outSphericalHarmonicsDegree].BytesPerSplat;\n\n    const newSplat = UncompressedSplatArray.createSplat(outSphericalHarmonicsDegree);\n\n    for (let i = 0; i < vertexElement.count; ++i) {\n      PlayCanvasCompressedPlyParser.decompressBaseSplat(\n        i, 0, position, positionExtremes, scale, scaleExtremes, rotation, colorExtremes, color, newSplat\n      );\n      if (outSphericalHarmonicsDegree > 0) {\n        PlayCanvasCompressedPlyParser.decompressSphericalHarmonics(\n          i, shArrays, outSphericalHarmonicsDegree, sphericalHarmonicsDegree, newSplat\n        );\n      }\n\n      const outBase = i * outBytesPerSplat + splatBufferDataOffsetBytes;\n      SplatBuffer.writeSplatDataToSectionBuffer(newSplat, splatBuffer.bufferData, outBase, 0, outSphericalHarmonicsDegree);\n    }\n\n    return splatBuffer;\n  }\n\n}\n","export const PlyFormat = {\n    'INRIAV1': 0,\n    'INRIAV2': 1,\n    'PlayCanvasCompressed': 2\n};\n","import { PlyFormat } from './PlyFormat.js';\n\nconst [\n        FieldSizeIdDouble, FieldSizeIdInt, FieldSizeIdUInt, FieldSizeIdFloat, FieldSizeIdShort, FieldSizeIdUShort, FieldSizeIdUChar\n      ] = [0, 1, 2, 3, 4, 5, 6];\n\nconst FieldSizeStringMap = {\n    'double': FieldSizeIdDouble,\n    'int': FieldSizeIdInt,\n    'uint': FieldSizeIdUInt,\n    'float': FieldSizeIdFloat,\n    'short': FieldSizeIdShort,\n    'ushort': FieldSizeIdUShort,\n    'uchar': FieldSizeIdUChar,\n};\n\nconst FieldSize = {\n    [FieldSizeIdDouble]: 8,\n    [FieldSizeIdInt]: 4,\n    [FieldSizeIdUInt]: 4,\n    [FieldSizeIdFloat]: 4,\n    [FieldSizeIdShort]: 2,\n    [FieldSizeIdUShort]: 2,\n    [FieldSizeIdUChar]: 1,\n};\n\nexport class PlyParserUtils {\n\n    static HeaderEndToken = 'end_header';\n\n    static decodeSectionHeader(headerLines, fieldNameIdMap, headerStartLine = 0) {\n\n        const extractedLines = [];\n\n        let processingSection = false;\n        let headerEndLine = -1;\n        let vertexCount = 0;\n        let endOfHeader = false;\n        let sectionName = null;\n\n        const fieldIds = [];\n        const fieldTypes = [];\n        const allFieldNames = [];\n        const usedFieldNames = [];\n        const fieldTypesByName = {};\n\n        for (let i = headerStartLine; i < headerLines.length; i++) {\n            const line = headerLines[i].trim();\n            if (line.startsWith('element')) {\n                if (processingSection) {\n                    headerEndLine--;\n                    break;\n                } else {\n                    processingSection = true;\n                    headerStartLine = i;\n                    headerEndLine = i;\n                    const lineComponents = line.split(' ');\n                    let validComponents = 0;\n                    for (let lineComponent of lineComponents) {\n                        const trimmedComponent = lineComponent.trim();\n                        if (trimmedComponent.length > 0) {\n                            validComponents++;\n                            if (validComponents === 2) {\n                                sectionName = trimmedComponent;\n                            } else if (validComponents === 3) {\n                                vertexCount = parseInt(trimmedComponent);\n                            }\n                        }\n                    }\n                }\n            } else if (line.startsWith('property')) {\n                const fieldMatch = line.match(/(\\w+)\\s+(\\w+)\\s+(\\w+)/);\n                if (fieldMatch) {\n                    const fieldTypeStr = fieldMatch[2];\n                    const fieldName = fieldMatch[3];\n                    allFieldNames.push(fieldName);\n                    const fieldId = fieldNameIdMap[fieldName];\n                    fieldTypesByName[fieldName] = fieldTypeStr;\n                    const fieldType = FieldSizeStringMap[fieldTypeStr];\n                    if (fieldId !== undefined) {\n                        usedFieldNames.push(fieldName);\n                        fieldIds.push(fieldId);\n                        fieldTypes[fieldId] = fieldType;\n                    }\n                }\n            }\n            if (line === PlyParserUtils.HeaderEndToken) {\n                endOfHeader = true;\n                break;\n            }\n            if (processingSection) {\n                extractedLines.push(line);\n                headerEndLine++;\n            }\n        }\n\n        const fieldOffsets = [];\n        let bytesPerVertex = 0;\n        for (let fieldName of allFieldNames) {\n            const fieldType = fieldTypesByName[fieldName];\n            if (fieldTypesByName.hasOwnProperty(fieldName)) {\n                const fieldId = fieldNameIdMap[fieldName];\n                if (fieldId !== undefined) {\n                    fieldOffsets[fieldId] = bytesPerVertex;\n                }\n            }\n            bytesPerVertex += FieldSize[FieldSizeStringMap[fieldType]];\n        }\n\n        const sphericalHarmonics = PlyParserUtils.decodeSphericalHarmonicsFromSectionHeader(allFieldNames, fieldNameIdMap);\n\n        return {\n            'headerLines': extractedLines,\n            'headerStartLine': headerStartLine,\n            'headerEndLine': headerEndLine,\n            'fieldTypes': fieldTypes,\n            'fieldIds': fieldIds,\n            'fieldOffsets': fieldOffsets,\n            'bytesPerVertex': bytesPerVertex,\n            'vertexCount': vertexCount,\n            'dataSizeBytes': bytesPerVertex * vertexCount,\n            'endOfHeader': endOfHeader,\n            'sectionName': sectionName,\n            'sphericalHarmonicsDegree': sphericalHarmonics.degree,\n            'sphericalHarmonicsCoefficientsPerChannel': sphericalHarmonics.coefficientsPerChannel,\n            'sphericalHarmonicsDegree1Fields': sphericalHarmonics.degree1Fields,\n            'sphericalHarmonicsDegree2Fields': sphericalHarmonics.degree2Fields\n        };\n\n    }\n\n    static decodeSphericalHarmonicsFromSectionHeader(fieldNames, fieldNameIdMap) {\n        let sphericalHarmonicsFieldCount = 0;\n        let coefficientsPerChannel = 0;\n        for (let fieldName of fieldNames) {\n            if (fieldName.startsWith('f_rest')) sphericalHarmonicsFieldCount++;\n        }\n        coefficientsPerChannel = sphericalHarmonicsFieldCount / 3;\n        let degree = 0;\n        if (coefficientsPerChannel >= 3) degree = 1;\n        if (coefficientsPerChannel >= 8) degree = 2;\n\n        let degree1Fields = [];\n        let degree2Fields = [];\n\n        for (let rgb = 0; rgb < 3; rgb++) {\n            if (degree >= 1) {\n                for (let i = 0; i < 3; i++) {\n                    degree1Fields.push(fieldNameIdMap['f_rest_' + (i + coefficientsPerChannel * rgb)]);\n                }\n            }\n            if (degree >= 2) {\n                for (let i = 0; i < 5; i++) {\n                    degree2Fields.push(fieldNameIdMap['f_rest_' + (i + coefficientsPerChannel * rgb + 3)]);\n                }\n            }\n        }\n\n        return {\n            'degree': degree,\n            'coefficientsPerChannel': coefficientsPerChannel,\n            'degree1Fields': degree1Fields,\n            'degree2Fields': degree2Fields\n        };\n    }\n\n    static getHeaderSectionNames(headerLines) {\n        const sectionNames = [];\n        for (let headerLine of headerLines) {\n            if (headerLine.startsWith('element')) {\n                const lineComponents = headerLine.split(' ');\n                let validComponents = 0;\n                for (let lineComponent of lineComponents) {\n                    const trimmedComponent = lineComponent.trim();\n                    if (trimmedComponent.length > 0) {\n                        validComponents++;\n                        if (validComponents === 2) {\n                            sectionNames.push(trimmedComponent);\n                        }\n                    }\n                }\n            }\n        }\n        return sectionNames;\n    }\n\n    static checkTextForEndHeader(endHeaderTestText) {\n        if (endHeaderTestText.includes(PlyParserUtils.HeaderEndToken)) {\n            return true;\n        }\n        return false;\n    }\n\n    static checkBufferForEndHeader(buffer, searchOfset, chunkSize, decoder) {\n        const endHeaderTestChunk = new Uint8Array(buffer, Math.max(0, searchOfset - chunkSize), chunkSize);\n        const endHeaderTestText = decoder.decode(endHeaderTestChunk);\n        return PlyParserUtils.checkTextForEndHeader(endHeaderTestText);\n    }\n\n    static extractHeaderFromBufferToText(plyBuffer) {\n        const decoder = new TextDecoder();\n        let headerOffset = 0;\n        let headerText = '';\n        const readChunkSize = 100;\n\n        while (true) {\n            if (headerOffset + readChunkSize >= plyBuffer.byteLength) {\n                throw new Error('End of file reached while searching for end of header');\n            }\n            const headerChunk = new Uint8Array(plyBuffer, headerOffset, readChunkSize);\n            headerText += decoder.decode(headerChunk);\n            headerOffset += readChunkSize;\n\n            if (PlyParserUtils.checkBufferForEndHeader(plyBuffer, headerOffset, readChunkSize * 2, decoder)) {\n                break;\n            }\n        }\n\n        return headerText;\n    }\n\n    static readHeaderFromBuffer(plyBuffer) {\n        const decoder = new TextDecoder();\n        let headerOffset = 0;\n        let headerText = '';\n        const readChunkSize = 100;\n\n        while (true) {\n            if (headerOffset + readChunkSize >= plyBuffer.byteLength) {\n                throw new Error('End of file reached while searching for end of header');\n            }\n            const headerChunk = new Uint8Array(plyBuffer, headerOffset, readChunkSize);\n            headerText += decoder.decode(headerChunk);\n            headerOffset += readChunkSize;\n\n            if (PlyParserUtils.checkBufferForEndHeader(plyBuffer, headerOffset, readChunkSize * 2, decoder)) {\n                break;\n            }\n        }\n\n        return headerText;\n    }\n\n    static convertHeaderTextToLines(headerText) {\n        const headerLines = headerText.split('\\n');\n        const prunedLines = [];\n        for (let i = 0; i < headerLines.length; i++) {\n            const line = headerLines[i].trim();\n            prunedLines.push(line);\n            if (line === PlyParserUtils.HeaderEndToken) {\n                break;\n            }\n        }\n        return prunedLines;\n    }\n\n    static determineHeaderFormatFromHeaderText(headertText) {\n        const headerLines = PlyParserUtils.convertHeaderTextToLines(headertText);\n        let format = PlyFormat.INRIAV1;\n        for (let i = 0; i < headerLines.length; i++) {\n            const line = headerLines[i].trim();\n            if (line.startsWith('element chunk') || line.match(/[A-Za-z]*packed_[A-Za-z]*/)) {\n                format = PlyFormat.PlayCanvasCompressed;\n            } else if (line.startsWith('element codebook_centers')) {\n                format = PlyFormat.INRIAV2;\n            } else if (line === PlyParserUtils.HeaderEndToken) {\n                break;\n            }\n        }\n        return format;\n    }\n\n    static determineHeaderFormatFromPlyBuffer(plyBuffer) {\n        const headertText = PlyParserUtils.extractHeaderFromBufferToText(plyBuffer);\n        return PlyParserUtils.determineHeaderFormatFromHeaderText(headertText);\n    }\n\n    static readVertex(vertexData, header, row, dataOffset, fieldsToRead, rawVertex, normalize = true) {\n        const offset = row * header.bytesPerVertex + dataOffset;\n        const fieldOffsets = header.fieldOffsets;\n        const fieldTypes = header.fieldTypes;\n        for (let fieldId of fieldsToRead) {\n            const fieldType = fieldTypes[fieldId];\n            if (fieldType === FieldSizeIdFloat) {\n                rawVertex[fieldId] = vertexData.getFloat32(offset + fieldOffsets[fieldId], true);\n            } else if (fieldType === FieldSizeIdShort) {\n                rawVertex[fieldId] = vertexData.getInt16(offset + fieldOffsets[fieldId], true);\n            } else if (fieldType === FieldSizeIdUShort) {\n                rawVertex[fieldId] = vertexData.getUint16(offset + fieldOffsets[fieldId], true);\n            } else if (fieldType === FieldSizeIdInt) {\n                rawVertex[fieldId] = vertexData.getInt32(offset + fieldOffsets[fieldId], true);\n            } else if (fieldType === FieldSizeIdUInt) {\n                rawVertex[fieldId] = vertexData.getUint32(offset + fieldOffsets[fieldId], true);\n            } else if (fieldType === FieldSizeIdUChar) {\n                if (normalize) {\n                    rawVertex[fieldId] = vertexData.getUint8(offset + fieldOffsets[fieldId]) / 255.0;\n                } else {\n                    rawVertex[fieldId] = vertexData.getUint8(offset + fieldOffsets[fieldId]);\n                }\n            }\n        }\n    }\n}\n","import * as THREE from 'three';\nimport { clamp } from '../../Util.js';\nimport { UncompressedSplatArray } from '../UncompressedSplatArray.js';\nimport { SplatBuffer } from '../SplatBuffer.js';\nimport { PlyParserUtils } from './PlyParserUtils.js';\n\nconst BaseFieldNamesToRead = ['scale_0', 'scale_1', 'scale_2', 'rot_0', 'rot_1', 'rot_2', 'rot_3', 'x', 'y', 'z',\n                              'f_dc_0', 'f_dc_1', 'f_dc_2', 'opacity', 'red', 'green', 'blue', 'f_rest_0'];\n\nconst BaseFieldsToReadIndexes = BaseFieldNamesToRead.map((e, i) => i);\n\nconst [\n        SCALE_0, SCALE_1, SCALE_2, ROT_0, ROT_1, ROT_2, ROT_3, X, Y, Z, F_DC_0, F_DC_1, F_DC_2, OPACITY, RED, GREEN, BLUE, F_REST_0\n      ] = BaseFieldsToReadIndexes;\n\nexport class INRIAV1PlyParser {\n\n    static decodeHeaderLines(headerLines) {\n\n        let shLineCount = 0;\n        headerLines.forEach((line) => {\n            if (line.includes('f_rest_')) shLineCount++;\n        });\n\n        let shFieldsToReadCount = 0;\n        if (shLineCount >= 45) {\n            shFieldsToReadCount = 45;\n        } else if (shLineCount >= 24) {\n            shFieldsToReadCount = 24;\n        } else if (shLineCount >= 9) {\n            shFieldsToReadCount = 9;\n        }\n\n        const shFieldIndexesToMap = Array.from(Array(Math.max(shFieldsToReadCount - 1, 0)));\n        let shRemainingFieldNamesToRead = shFieldIndexesToMap.map((element, index) => `f_rest_${index + 1}`);\n\n        const fieldNamesToRead = [...BaseFieldNamesToRead, ...shRemainingFieldNamesToRead];\n        const fieldsToReadIndexes = fieldNamesToRead.map((e, i) => i);\n\n        const fieldNameIdMap = fieldsToReadIndexes.reduce((acc, element) => {\n            acc[fieldNamesToRead[element]] = element;\n            return acc;\n        }, {});\n        const header = PlyParserUtils.decodeSectionHeader(headerLines, fieldNameIdMap, 0);\n        header.splatCount = header.vertexCount;\n        header.bytesPerSplat = header.bytesPerVertex;\n        header.fieldsToReadIndexes = fieldsToReadIndexes;\n        return header;\n    }\n\n    static decodeHeaderText(headerText) {\n        const headerLines = PlyParserUtils.convertHeaderTextToLines(headerText);\n        const header = INRIAV1PlyParser.decodeHeaderLines(headerLines);\n        header.headerText = headerText;\n        header.headerSizeBytes = headerText.indexOf(PlyParserUtils.HeaderEndToken) + PlyParserUtils.HeaderEndToken.length + 1;\n        return header;\n    }\n\n    static decodeHeaderFromBuffer(plyBuffer) {\n        const headerText = PlyParserUtils.readHeaderFromBuffer(plyBuffer);\n        return INRIAV1PlyParser.decodeHeaderText(headerText);\n    }\n\n    static findSplatData(plyBuffer, header) {\n        return new DataView(plyBuffer, header.headerSizeBytes);\n    }\n\n    static parseToUncompressedSplatBufferSection(header, fromSplat, toSplat, splatData, splatDataOffset,\n                                                 toBuffer, toOffset, outSphericalHarmonicsDegree = 0) {\n        outSphericalHarmonicsDegree = Math.min(outSphericalHarmonicsDegree, header.sphericalHarmonicsDegree);\n        const outBytesPerSplat = SplatBuffer.CompressionLevels[0].SphericalHarmonicsDegrees[outSphericalHarmonicsDegree].BytesPerSplat;\n\n        for (let i = fromSplat; i <= toSplat; i++) {\n            const parsedSplat = INRIAV1PlyParser.parseToUncompressedSplat(splatData, i, header,\n                                                                          splatDataOffset, outSphericalHarmonicsDegree);\n            const outBase = i * outBytesPerSplat + toOffset;\n            SplatBuffer.writeSplatDataToSectionBuffer(parsedSplat, toBuffer, outBase, 0, outSphericalHarmonicsDegree);\n        }\n    }\n\n    static parseToUncompressedSplatArraySection(header, fromSplat, toSplat, splatData, splatDataOffset,\n                                         splatArray, outSphericalHarmonicsDegree = 0) {\n        outSphericalHarmonicsDegree = Math.min(outSphericalHarmonicsDegree, header.sphericalHarmonicsDegree);\n        for (let i = fromSplat; i <= toSplat; i++) {\n            const parsedSplat = INRIAV1PlyParser.parseToUncompressedSplat(splatData, i, header,\n                                                                          splatDataOffset, outSphericalHarmonicsDegree);\n            splatArray.addSplat(parsedSplat);\n        }\n    }\n\n    static decodeSectionSplatData(sectionSplatData, splatCount, sectionHeader, outSphericalHarmonicsDegree, toSplatArray = true) {\n        outSphericalHarmonicsDegree = Math.min(outSphericalHarmonicsDegree, sectionHeader.sphericalHarmonicsDegree);\n        if (toSplatArray) {\n            const splatArray = new UncompressedSplatArray(outSphericalHarmonicsDegree);\n            for (let row = 0; row < splatCount; row++) {\n                const newSplat = INRIAV1PlyParser.parseToUncompressedSplat(sectionSplatData, row, sectionHeader,\n                                                                           0, outSphericalHarmonicsDegree);\n                splatArray.addSplat(newSplat);\n            }\n            return splatArray;\n        } else {\n            const {\n                splatBuffer,\n                splatBufferDataOffsetBytes\n              } = SplatBuffer.preallocateUncompressed(splatCount, outSphericalHarmonicsDegree);\n            INRIAV1PlyParser.parseToUncompressedSplatBufferSection(\n                sectionHeader, 0, splatCount - 1, sectionSplatData, 0,\n                splatBuffer.bufferData, splatBufferDataOffsetBytes, outSphericalHarmonicsDegree\n            );\n            return splatBuffer;\n        }\n    }\n\n    static parseToUncompressedSplat = function() {\n\n        let rawSplat = [];\n        const tempRotation = new THREE.Quaternion();\n\n        const OFFSET_X = UncompressedSplatArray.OFFSET.X;\n        const OFFSET_Y = UncompressedSplatArray.OFFSET.Y;\n        const OFFSET_Z = UncompressedSplatArray.OFFSET.Z;\n\n        const OFFSET_SCALE0 = UncompressedSplatArray.OFFSET.SCALE0;\n        const OFFSET_SCALE1 = UncompressedSplatArray.OFFSET.SCALE1;\n        const OFFSET_SCALE2 = UncompressedSplatArray.OFFSET.SCALE2;\n\n        const OFFSET_ROTATION0 = UncompressedSplatArray.OFFSET.ROTATION0;\n        const OFFSET_ROTATION1 = UncompressedSplatArray.OFFSET.ROTATION1;\n        const OFFSET_ROTATION2 = UncompressedSplatArray.OFFSET.ROTATION2;\n        const OFFSET_ROTATION3 = UncompressedSplatArray.OFFSET.ROTATION3;\n\n        const OFFSET_FDC0 = UncompressedSplatArray.OFFSET.FDC0;\n        const OFFSET_FDC1 = UncompressedSplatArray.OFFSET.FDC1;\n        const OFFSET_FDC2 = UncompressedSplatArray.OFFSET.FDC2;\n        const OFFSET_OPACITY = UncompressedSplatArray.OFFSET.OPACITY;\n\n        const OFFSET_FRC = [];\n\n        for (let i = 0; i < 45; i++) {\n            OFFSET_FRC[i] = UncompressedSplatArray.OFFSET.FRC0 + i;\n        }\n\n        return function(splatData, row, header, splatDataOffset = 0, outSphericalHarmonicsDegree = 0) {\n            outSphericalHarmonicsDegree = Math.min(outSphericalHarmonicsDegree, header.sphericalHarmonicsDegree);\n            INRIAV1PlyParser.readSplat(splatData, header, row, splatDataOffset, rawSplat);\n            const newSplat = UncompressedSplatArray.createSplat(outSphericalHarmonicsDegree);\n            if (rawSplat[SCALE_0] !== undefined) {\n                newSplat[OFFSET_SCALE0] = Math.exp(rawSplat[SCALE_0]);\n                newSplat[OFFSET_SCALE1] = Math.exp(rawSplat[SCALE_1]);\n                newSplat[OFFSET_SCALE2] = Math.exp(rawSplat[SCALE_2]);\n            } else {\n                newSplat[OFFSET_SCALE0] = 0.01;\n                newSplat[OFFSET_SCALE1] = 0.01;\n                newSplat[OFFSET_SCALE2] = 0.01;\n            }\n\n            if (rawSplat[F_DC_0] !== undefined) {\n                const SH_C0 = 0.28209479177387814;\n                newSplat[OFFSET_FDC0] = (0.5 + SH_C0 * rawSplat[F_DC_0]) * 255;\n                newSplat[OFFSET_FDC1] = (0.5 + SH_C0 * rawSplat[F_DC_1]) * 255;\n                newSplat[OFFSET_FDC2] = (0.5 + SH_C0 * rawSplat[F_DC_2]) * 255;\n            } else if (rawSplat[RED] !== undefined) {\n                newSplat[OFFSET_FDC0] = rawSplat[RED] * 255;\n                newSplat[OFFSET_FDC1] = rawSplat[GREEN] * 255;\n                newSplat[OFFSET_FDC2] = rawSplat[BLUE] * 255;\n            } else {\n                newSplat[OFFSET_FDC0] = 0;\n                newSplat[OFFSET_FDC1] = 0;\n                newSplat[OFFSET_FDC2] = 0;\n            }\n\n            if (rawSplat[OPACITY] !== undefined) {\n                newSplat[OFFSET_OPACITY] = (1 / (1 + Math.exp(-rawSplat[OPACITY]))) * 255;\n            }\n\n            newSplat[OFFSET_FDC0] = clamp(Math.floor(newSplat[OFFSET_FDC0]), 0, 255);\n            newSplat[OFFSET_FDC1] = clamp(Math.floor(newSplat[OFFSET_FDC1]), 0, 255);\n            newSplat[OFFSET_FDC2] = clamp(Math.floor(newSplat[OFFSET_FDC2]), 0, 255);\n            newSplat[OFFSET_OPACITY] = clamp(Math.floor(newSplat[OFFSET_OPACITY]), 0, 255);\n\n            if (outSphericalHarmonicsDegree >= 1) {\n                if (rawSplat[F_REST_0] !== undefined) {\n                    for (let i = 0; i < 9; i++) {\n                        newSplat[OFFSET_FRC[i]] = rawSplat[header.sphericalHarmonicsDegree1Fields[i]];\n                    }\n                    if (outSphericalHarmonicsDegree >= 2) {\n                        for (let i = 0; i < 15; i++) {\n                            newSplat[OFFSET_FRC[9 + i]] = rawSplat[header.sphericalHarmonicsDegree2Fields[i]];\n                        }\n                    }\n                }\n            }\n\n            tempRotation.set(rawSplat[ROT_0], rawSplat[ROT_1], rawSplat[ROT_2], rawSplat[ROT_3]);\n            tempRotation.normalize();\n\n            newSplat[OFFSET_ROTATION0] = tempRotation.x;\n            newSplat[OFFSET_ROTATION1] = tempRotation.y;\n            newSplat[OFFSET_ROTATION2] = tempRotation.z;\n            newSplat[OFFSET_ROTATION3] = tempRotation.w;\n\n            newSplat[OFFSET_X] = rawSplat[X];\n            newSplat[OFFSET_Y] = rawSplat[Y];\n            newSplat[OFFSET_Z] = rawSplat[Z];\n\n            return newSplat;\n        };\n\n    }();\n\n    static readSplat(splatData, header, row, dataOffset, rawSplat) {\n        return PlyParserUtils.readVertex(splatData, header, row, dataOffset, header.fieldsToReadIndexes, rawSplat, true);\n    }\n\n    static parseToUncompressedSplatArray(plyBuffer, outSphericalHarmonicsDegree = 0) {\n        const { header, splatCount, splatData } = separatePlyHeaderAndData(plyBuffer);\n        return INRIAV1PlyParser.decodeSectionSplatData(splatData, splatCount, header, outSphericalHarmonicsDegree, true);\n    }\n\n    static parseToUncompressedSplatBuffer(plyBuffer, outSphericalHarmonicsDegree = 0) {\n        const { header, splatCount, splatData } = separatePlyHeaderAndData(plyBuffer);\n        return INRIAV1PlyParser.decodeSectionSplatData(splatData, splatCount, header, outSphericalHarmonicsDegree, false);\n    }\n}\n\nfunction separatePlyHeaderAndData(plyBuffer) {\n    const header = INRIAV1PlyParser.decodeHeaderFromBuffer(plyBuffer);\n    const splatCount = header.splatCount;\n    const splatData = INRIAV1PlyParser.findSplatData(plyBuffer, header);\n    return {\n        header,\n        splatCount,\n        splatData\n    };\n}\n","import * as THREE from 'three';\nimport { PlyParserUtils } from './PlyParserUtils.js';\nimport { UncompressedSplatArray } from '../UncompressedSplatArray.js';\nimport { clamp } from '../../Util.js';\n\nconst CodeBookEntryNamesToRead = [\n    'features_dc', 'features_rest_0', 'features_rest_1', 'features_rest_2', 'features_rest_3', 'features_rest_4', 'features_rest_5',\n    'features_rest_6', 'features_rest_7', 'features_rest_8', 'features_rest_9', 'features_rest_10', 'features_rest_11', 'features_rest_12',\n    'features_rest_13', 'features_rest_14', 'opacity', 'scaling', 'rotation_re', 'rotation_im'\n];\nconst CodeBookEntriesToReadIndexes = CodeBookEntryNamesToRead.map((e, i) => i);\n\nconst [\n        CB_FEATURES_DC, CB_FEATURES_REST_0, CB_FEATURES_REST_3, CB_OPACITY, CB_SCALING, CB_ROTATION_RE, CB_ROTATION_IM\n      ] = [0, 1, 4, 16, 17, 18, 19];\n\nconst FieldNamesToRead = ['scale_0', 'scale_1', 'scale_2', 'rot_0', 'rot_1', 'rot_2', 'rot_3',\n                          'x', 'y', 'z', 'f_dc_0', 'f_dc_1', 'f_dc_2', 'opacity', 'red', 'green', 'blue',\n                          'f_rest_0', 'f_rest_1', 'f_rest_2', 'f_rest_3', 'f_rest_4', 'f_rest_5', 'f_rest_6', 'f_rest_7', 'f_rest_8',\n                          'f_rest_9', 'f_rest_10', 'f_rest_11', 'f_rest_12', 'f_rest_13', 'f_rest_14', 'f_rest_15', 'f_rest_16',\n                          'f_rest_17', 'f_rest_18', 'f_rest_19', 'f_rest_20', 'f_rest_21', 'f_rest_22', 'f_rest_23', 'f_rest_24',\n                          'f_rest_25', 'f_rest_26', 'f_rest_27', 'f_rest_28', 'f_rest_29', 'f_rest_30', 'f_rest_31', 'f_rest_32',\n                          'f_rest_33', 'f_rest_34', 'f_rest_35', 'f_rest_36', 'f_rest_37', 'f_rest_38', 'f_rest_39', 'f_rest_40',\n                          'f_rest_41', 'f_rest_42', 'f_rest_43', 'f_rest_44', 'f_rest_45'\n                         ];\nconst FieldsToReadIndexes = FieldNamesToRead.map((e, i) => i);\n\nconst [\n        PLY_SCALE_0, PLY_SCALE_1, PLY_SCALE_2, PLY_ROT_0, PLY_ROT_1, PLY_ROT_2, PLY_ROT_3, PLY_X, PLY_Y, PLY_Z,\n        PLY_F_DC_0, PLY_F_DC_1, PLY_F_DC_2, PLY_OPACITY,\n      ] = FieldsToReadIndexes;\n\nconst PLY_RED = PLY_F_DC_0;\nconst PLY_GREEN = PLY_F_DC_1;\nconst PLY_BLUE = PLY_F_DC_2;\n\nconst fromHalfFloat = (hf) =>{\n    const t = (31744 & hf) >> 10;\n    const a = 1023 & hf;\n    return (hf >> 15 ? -1 : 1)*(t ? t === 31 ? a ? NaN : 1/0 : Math.pow(2, t - 15) *( 1 + a / 1024) : a / 1024*6103515625e-14);\n};\n\nexport class INRIAV2PlyParser {\n\n    static decodeSectionHeadersFromHeaderLines(headerLines) {\n        const fieldNameIdMap = FieldsToReadIndexes.reduce((acc, element) => {\n            acc[FieldNamesToRead[element]] = element;\n            return acc;\n        }, {});\n\n        const codeBookEntriesToReadIdMap = CodeBookEntriesToReadIndexes.reduce((acc, element) => {\n            acc[CodeBookEntryNamesToRead[element]] = element;\n            return acc;\n        }, {});\n\n        const sectionNames = PlyParserUtils.getHeaderSectionNames(headerLines);\n        let codeBookSectionIndex;\n        for (let s = 0; s < sectionNames.length; s++) {\n            const sectionName = sectionNames[s];\n            if (sectionName === 'codebook_centers') {\n                codeBookSectionIndex = s;\n            }\n        }\n\n        let currentStartLine = 0;\n        let lastSectionFound = false;\n        const sectionHeaders = [];\n        let sectionIndex = 0;\n        while (!lastSectionFound) {\n            let sectionHeader;\n            if (sectionIndex === codeBookSectionIndex) {\n                sectionHeader = PlyParserUtils.decodeSectionHeader(headerLines, codeBookEntriesToReadIdMap, currentStartLine);\n            } else {\n                sectionHeader = PlyParserUtils.decodeSectionHeader(headerLines, fieldNameIdMap, currentStartLine);\n            }\n            lastSectionFound = sectionHeader.endOfHeader;\n            currentStartLine = sectionHeader.headerEndLine + 1;\n            if (!lastSectionFound) {\n                sectionHeader.splatCount = sectionHeader.vertexCount;\n                sectionHeader.bytesPerSplat = sectionHeader.bytesPerVertex;\n            }\n            sectionHeaders.push(sectionHeader);\n            sectionIndex++;\n        }\n        return sectionHeaders;\n    }\n\n    static decodeSectionHeadersFromHeaderText(headerText) {\n        const headerLines = PlyParserUtils.convertHeaderTextToLines(headerText);\n        return INRIAV2PlyParser.decodeSectionHeadersFromHeaderLines(headerLines);\n    }\n\n    static getSplatCountFromSectionHeaders(sectionHeaders) {\n        let splatCount = 0;\n        for (let sectionHeader of sectionHeaders) {\n            if (sectionHeader.sectionName !== 'codebook_centers') {\n                splatCount += sectionHeader.vertexCount;\n            }\n        }\n        return splatCount;\n    }\n\n    static decodeHeaderFromHeaderText(headerText) {\n        const headerSizeBytes = headerText.indexOf(PlyParserUtils.HeaderEndToken) + PlyParserUtils.HeaderEndToken.length + 1;\n        const sectionHeaders = INRIAV2PlyParser.decodeSectionHeadersFromHeaderText(headerText);\n        const splatCount = INRIAV2PlyParser.getSplatCountFromSectionHeaders(sectionHeaders);\n        return {\n            'headerSizeBytes': headerSizeBytes,\n            'sectionHeaders': sectionHeaders,\n            'splatCount': splatCount\n        };\n    }\n\n    static decodeHeaderFromBuffer(plyBuffer) {\n        const headerText = PlyParserUtils.readHeaderFromBuffer(plyBuffer);\n        return INRIAV2PlyParser.decodeHeaderFromHeaderText(headerText);\n    }\n\n    static findVertexData(plyBuffer, header, targetSection) {\n        let byteOffset = header.headerSizeBytes;\n        for (let s = 0; s < targetSection && s < header.sectionHeaders.length; s++) {\n            const sectionHeader = header.sectionHeaders[s];\n            byteOffset += sectionHeader.dataSizeBytes;\n        }\n        return new DataView(plyBuffer, byteOffset, header.sectionHeaders[targetSection].dataSizeBytes);\n    }\n\n    static decodeCodeBook(codeBookData, sectionHeader) {\n\n        const rawVertex = [];\n        const codeBook = [];\n        for (let row = 0; row < sectionHeader.vertexCount; row++) {\n            PlyParserUtils.readVertex(codeBookData, sectionHeader, row, 0, CodeBookEntriesToReadIndexes, rawVertex);\n            for (let index of CodeBookEntriesToReadIndexes) {\n                const codeBookElementOffset = CodeBookEntriesToReadIndexes[index];\n                let codeBookPage = codeBook[codeBookElementOffset];\n                if (!codeBookPage) {\n                    codeBook[codeBookElementOffset] = codeBookPage = [];\n                }\n                codeBookPage.push(rawVertex[index]);\n            }\n        }\n        for (let page = 0; page < codeBook.length; page++) {\n            const codeBookPage = codeBook[page];\n            const SH_C0 = 0.28209479177387814;\n            for (let i = 0; i < codeBookPage.length; i++) {\n               const baseValue = fromHalfFloat(codeBookPage[i]);\n                if (page === CB_OPACITY) {\n                    codeBookPage[i] = Math.round((1 / (1 + Math.exp(-baseValue))) * 255);\n                } else if (page === CB_FEATURES_DC) {\n                    codeBookPage[i] = Math.round((0.5 + SH_C0 * baseValue) * 255);\n                } else if (page === CB_SCALING) {\n                    codeBookPage[i] = Math.exp(baseValue);\n                } else {\n                    codeBookPage[i] = baseValue;\n                }\n            }\n        }\n        return codeBook;\n    }\n\n    static decodeSectionSplatData(sectionSplatData, splatCount, sectionHeader, codeBook, outSphericalHarmonicsDegree) {\n        outSphericalHarmonicsDegree = Math.min(outSphericalHarmonicsDegree, sectionHeader.sphericalHarmonicsDegree);\n        const splatArray = new UncompressedSplatArray(outSphericalHarmonicsDegree);\n        for (let row = 0; row < splatCount; row++) {\n            const newSplat = INRIAV2PlyParser.parseToUncompressedSplat(sectionSplatData, row, sectionHeader, codeBook,\n                                                                       0, outSphericalHarmonicsDegree);\n            splatArray.addSplat(newSplat);\n        }\n        return splatArray;\n    }\n\n    static parseToUncompressedSplat = function() {\n\n        let rawSplat = [];\n        const tempRotation = new THREE.Quaternion();\n\n        const OFFSET_X = UncompressedSplatArray.OFFSET.X;\n        const OFFSET_Y = UncompressedSplatArray.OFFSET.Y;\n        const OFFSET_Z = UncompressedSplatArray.OFFSET.Z;\n\n        const OFFSET_SCALE0 = UncompressedSplatArray.OFFSET.SCALE0;\n        const OFFSET_SCALE1 = UncompressedSplatArray.OFFSET.SCALE1;\n        const OFFSET_SCALE2 = UncompressedSplatArray.OFFSET.SCALE2;\n\n        const OFFSET_ROTATION0 = UncompressedSplatArray.OFFSET.ROTATION0;\n        const OFFSET_ROTATION1 = UncompressedSplatArray.OFFSET.ROTATION1;\n        const OFFSET_ROTATION2 = UncompressedSplatArray.OFFSET.ROTATION2;\n        const OFFSET_ROTATION3 = UncompressedSplatArray.OFFSET.ROTATION3;\n\n        const OFFSET_FDC0 = UncompressedSplatArray.OFFSET.FDC0;\n        const OFFSET_FDC1 = UncompressedSplatArray.OFFSET.FDC1;\n        const OFFSET_FDC2 = UncompressedSplatArray.OFFSET.FDC2;\n        const OFFSET_OPACITY = UncompressedSplatArray.OFFSET.OPACITY;\n\n        const OFFSET_FRC = [];\n\n        for (let i = 0; i < 45; i++) {\n            OFFSET_FRC[i] = UncompressedSplatArray.OFFSET.FRC0 + i;\n        }\n\n        return function(splatData, row, header, codeBook, splatDataOffset = 0, outSphericalHarmonicsDegree = 0) {\n            outSphericalHarmonicsDegree = Math.min(outSphericalHarmonicsDegree, header.sphericalHarmonicsDegree);\n            INRIAV2PlyParser.readSplat(splatData, header, row, splatDataOffset, rawSplat);\n            const newSplat = UncompressedSplatArray.createSplat(outSphericalHarmonicsDegree);\n            if (rawSplat[PLY_SCALE_0] !== undefined) {\n                newSplat[OFFSET_SCALE0] = codeBook[CB_SCALING][rawSplat[PLY_SCALE_0]];\n                newSplat[OFFSET_SCALE1] = codeBook[CB_SCALING][rawSplat[PLY_SCALE_1]];\n                newSplat[OFFSET_SCALE2] = codeBook[CB_SCALING][rawSplat[PLY_SCALE_2]];\n            } else {\n                newSplat[OFFSET_SCALE0] = 0.01;\n                newSplat[OFFSET_SCALE1] = 0.01;\n                newSplat[OFFSET_SCALE2] = 0.01;\n            }\n\n            if (rawSplat[PLY_F_DC_0] !== undefined) {\n                newSplat[OFFSET_FDC0] = codeBook[CB_FEATURES_DC][rawSplat[PLY_F_DC_0]];\n                newSplat[OFFSET_FDC1] = codeBook[CB_FEATURES_DC][rawSplat[PLY_F_DC_1]];\n                newSplat[OFFSET_FDC2] = codeBook[CB_FEATURES_DC][rawSplat[PLY_F_DC_2]];\n            } else if (rawSplat[PLY_RED] !== undefined) {\n                newSplat[OFFSET_FDC0] = rawSplat[PLY_RED] * 255;\n                newSplat[OFFSET_FDC1] = rawSplat[PLY_GREEN] * 255;\n                newSplat[OFFSET_FDC2] = rawSplat[PLY_BLUE] * 255;\n            } else {\n                newSplat[OFFSET_FDC0] = 0;\n                newSplat[OFFSET_FDC1] = 0;\n                newSplat[OFFSET_FDC2] = 0;\n            }\n\n            if (rawSplat[PLY_OPACITY] !== undefined) {\n                newSplat[OFFSET_OPACITY] = codeBook[CB_OPACITY][rawSplat[PLY_OPACITY]];\n            }\n\n            newSplat[OFFSET_FDC0] = clamp(Math.floor(newSplat[OFFSET_FDC0]), 0, 255);\n            newSplat[OFFSET_FDC1] = clamp(Math.floor(newSplat[OFFSET_FDC1]), 0, 255);\n            newSplat[OFFSET_FDC2] = clamp(Math.floor(newSplat[OFFSET_FDC2]), 0, 255);\n            newSplat[OFFSET_OPACITY] = clamp(Math.floor(newSplat[OFFSET_OPACITY]), 0, 255);\n\n            if (outSphericalHarmonicsDegree >= 1 && header.sphericalHarmonicsDegree >= 1) {\n                for (let i = 0; i < 9; i++) {\n                    const codeBookPage = codeBook[CB_FEATURES_REST_0 + i % 3];\n                    newSplat[OFFSET_FRC[i]] = codeBookPage[rawSplat[header.sphericalHarmonicsDegree1Fields[i]]];\n                }\n                if (outSphericalHarmonicsDegree >= 2 && header.sphericalHarmonicsDegree >= 2) {\n                    for (let i = 0; i < 15; i++) {\n                        const codeBookPage = codeBook[CB_FEATURES_REST_3 + i % 5];\n                        newSplat[OFFSET_FRC[9 + i]] = codeBookPage[rawSplat[header.sphericalHarmonicsDegree2Fields[i]]];\n                    }\n                }\n            }\n\n            const rot0 = codeBook[CB_ROTATION_RE][rawSplat[PLY_ROT_0]];\n            const rot1 = codeBook[CB_ROTATION_IM][rawSplat[PLY_ROT_1]];\n            const rot2 = codeBook[CB_ROTATION_IM][rawSplat[PLY_ROT_2]];\n            const rot3 = codeBook[CB_ROTATION_IM][rawSplat[PLY_ROT_3]];\n            tempRotation.set(rot0, rot1, rot2, rot3);\n            tempRotation.normalize();\n\n            newSplat[OFFSET_ROTATION0] = tempRotation.x;\n            newSplat[OFFSET_ROTATION1] = tempRotation.y;\n            newSplat[OFFSET_ROTATION2] = tempRotation.z;\n            newSplat[OFFSET_ROTATION3] = tempRotation.w;\n\n            newSplat[OFFSET_X] = fromHalfFloat(rawSplat[PLY_X]);\n            newSplat[OFFSET_Y] = fromHalfFloat(rawSplat[PLY_Y]);\n            newSplat[OFFSET_Z] = fromHalfFloat(rawSplat[PLY_Z]);\n\n            return newSplat;\n        };\n\n    }();\n\n    static readSplat(splatData, header, row, dataOffset, rawSplat) {\n        return PlyParserUtils.readVertex(splatData, header, row, dataOffset, FieldsToReadIndexes, rawSplat, false);\n    }\n\n    static parseToUncompressedSplatArray(plyBuffer, outSphericalHarmonicsDegree = 0) {\n        const splatArrays = [];\n        const header = INRIAV2PlyParser.decodeHeaderFromBuffer(plyBuffer, outSphericalHarmonicsDegree);\n        let codeBook;\n\n        for (let s = 0; s < header.sectionHeaders.length; s++) {\n            const sectionHeader = header.sectionHeaders[s];\n            if (sectionHeader.sectionName === 'codebook_centers') {\n                const codeBookData = INRIAV2PlyParser.findVertexData(plyBuffer, header, s);\n                codeBook = INRIAV2PlyParser.decodeCodeBook(codeBookData, sectionHeader);\n            }\n        }\n        for (let s = 0; s < header.sectionHeaders.length; s++) {\n            const sectionHeader = header.sectionHeaders[s];\n            if (sectionHeader.sectionName !== 'codebook_centers') {\n                const splatCount = sectionHeader.vertexCount;\n                const vertexData = INRIAV2PlyParser.findVertexData(plyBuffer, header, s);\n                const splatArray = INRIAV2PlyParser.decodeSectionSplatData(vertexData, splatCount, sectionHeader,\n                                                               codeBook, outSphericalHarmonicsDegree);\n                splatArrays.push(splatArray);\n            }\n        }\n\n        const unified = new UncompressedSplatArray(outSphericalHarmonicsDegree);\n        for (let splatArray of splatArrays) {\n            for (let splat of splatArray.splats) {\n                unified.addSplat(splat);\n            }\n        }\n\n        return unified;\n    }\n}\n","import { PlayCanvasCompressedPlyParser } from './PlayCanvasCompressedPlyParser.js';\nimport { INRIAV1PlyParser } from './INRIAV1PlyParser.js';\nimport { INRIAV2PlyParser } from './INRIAV2PlyParser.js';\nimport { PlyParserUtils } from './PlyParserUtils.js';\nimport { PlyFormat } from './PlyFormat.js';\n\nexport class PlyParser {\n\n    static parseToUncompressedSplatArray(plyBuffer, outSphericalHarmonicsDegree = 0) {\n        const plyFormat = PlyParserUtils.determineHeaderFormatFromPlyBuffer(plyBuffer);\n        if (plyFormat === PlyFormat.PlayCanvasCompressed) {\n            return PlayCanvasCompressedPlyParser.parseToUncompressedSplatArray(plyBuffer, outSphericalHarmonicsDegree);\n        } else if (plyFormat === PlyFormat.INRIAV1) {\n            return INRIAV1PlyParser.parseToUncompressedSplatArray(plyBuffer, outSphericalHarmonicsDegree);\n        } else if (plyFormat === PlyFormat.INRIAV2) {\n            return INRIAV2PlyParser.parseToUncompressedSplatArray(plyBuffer, outSphericalHarmonicsDegree);\n        }\n    }\n\n    static parseToUncompressedSplatBuffer(plyBuffer, outSphericalHarmonicsDegree = 0) {\n        const plyFormat = PlyParserUtils.determineHeaderFormatFromPlyBuffer(plyBuffer);\n        if (plyFormat === PlyFormat.PlayCanvasCompressed) {\n            return PlayCanvasCompressedPlyParser.parseToUncompressedSplatBuffer(plyBuffer, outSphericalHarmonicsDegree);\n        } else if (plyFormat === PlyFormat.INRIAV1) {\n            return INRIAV1PlyParser.parseToUncompressedSplatBuffer(plyBuffer, outSphericalHarmonicsDegree);\n        } else if (plyFormat === PlyFormat.INRIAV2) {\n             // TODO: Implement!\n            throw new Error('parseToUncompressedSplatBuffer() is not implemented for INRIA V2 PLY files');\n        }\n    }\n\n}\n","import * as THREE from 'three';\nimport { UncompressedSplatArray } from './UncompressedSplatArray.js';\nimport { SplatBuffer } from './SplatBuffer.js';\n\nexport class SplatPartitioner {\n\n    constructor(sectionCount, sectionFilters, groupingParameters, partitionGenerator) {\n        this.sectionCount = sectionCount;\n        this.sectionFilters = sectionFilters;\n        this.groupingParameters = groupingParameters;\n        this.partitionGenerator = partitionGenerator;\n    }\n\n    partitionUncompressedSplatArray(splatArray) {\n        let groupingParameters;\n        let sectionCount;\n        let sectionFilters;\n        if (this.partitionGenerator) {\n            const results = this.partitionGenerator(splatArray);\n            groupingParameters = results.groupingParameters;\n            sectionCount = results.sectionCount;\n            sectionFilters = results.sectionFilters;\n        } else {\n            groupingParameters = this.groupingParameters;\n            sectionCount = this.sectionCount;\n            sectionFilters = this.sectionFilters;\n        }\n\n        const newArrays = [];\n        for (let s = 0; s < sectionCount; s++) {\n            const sectionSplats = new UncompressedSplatArray(splatArray.sphericalHarmonicsDegree);\n            const sectionFilter = sectionFilters[s];\n            for (let i = 0; i < splatArray.splatCount; i++) {\n                if (sectionFilter(i)) {\n                    sectionSplats.addSplat(splatArray.splats[i]);\n                }\n            }\n            newArrays.push(sectionSplats);\n        }\n        return {\n            splatArrays: newArrays,\n            parameters: groupingParameters\n        };\n    }\n\n    static getStandardPartitioner(partitionSize = 0, sceneCenter = new THREE.Vector3(),\n                                  blockSize = SplatBuffer.BucketBlockSize, bucketSize = SplatBuffer.BucketSize) {\n\n        const partitionGenerator = (splatArray) => {\n\n            const OFFSET_X = UncompressedSplatArray.OFFSET.X;\n            const OFFSET_Y = UncompressedSplatArray.OFFSET.Y;\n            const OFFSET_Z = UncompressedSplatArray.OFFSET.Z;\n\n            if (partitionSize <= 0) partitionSize = splatArray.splatCount;\n\n            const center = new THREE.Vector3();\n            const clampDistance = 0.5;\n            const clampPoint = (point) => {\n                point.x = Math.floor(point.x / clampDistance) * clampDistance;\n                point.y = Math.floor(point.y / clampDistance) * clampDistance;\n                point.z = Math.floor(point.z / clampDistance) * clampDistance;\n            };\n            splatArray.splats.forEach((splat) => {\n                center.set(splat[OFFSET_X], splat[OFFSET_Y], splat[OFFSET_Z]).sub(sceneCenter);\n                clampPoint(center);\n                splat.centerDist = center.lengthSq();\n            });\n            splatArray.splats.sort((a, b) => {\n                let centerADist = a.centerDist;\n                let centerBDist = b.centerDist;\n                if (centerADist > centerBDist) return 1;\n                else return -1;\n            });\n\n            const sectionFilters = [];\n            const groupingParameters = [];\n            partitionSize = Math.min(splatArray.splatCount, partitionSize);\n            const patitionCount = Math.ceil(splatArray.splatCount / partitionSize);\n            let currentStartSplat = 0;\n            for (let i = 0; i < patitionCount; i ++) {\n                let startSplat = currentStartSplat;\n                sectionFilters.push((splatIndex) => {\n                    return splatIndex >= startSplat && splatIndex < startSplat + partitionSize;\n                });\n                groupingParameters.push({\n                    'blocksSize': blockSize,\n                    'bucketSize': bucketSize,\n                });\n                currentStartSplat += partitionSize;\n            }\n            return {\n                'sectionCount': sectionFilters.length,\n                sectionFilters,\n                groupingParameters\n            };\n        };\n        return new SplatPartitioner(undefined, undefined, undefined, partitionGenerator);\n    }\n}\n","import * as THREE from 'three';\nimport { SplatPartitioner } from './SplatPartitioner.js';\nimport { SplatBuffer } from './SplatBuffer.js';\n\nexport class SplatBufferGenerator {\n\n    constructor(splatPartitioner, alphaRemovalThreshold, compressionLevel, sectionSize, sceneCenter, blockSize, bucketSize) {\n        this.splatPartitioner = splatPartitioner;\n        this.alphaRemovalThreshold = alphaRemovalThreshold;\n        this.compressionLevel = compressionLevel;\n        this.sectionSize = sectionSize;\n        this.sceneCenter = sceneCenter ? new THREE.Vector3().copy(sceneCenter) : undefined;\n        this.blockSize = blockSize;\n        this.bucketSize = bucketSize;\n    }\n\n    generateFromUncompressedSplatArray(splatArray) {\n        const partitionResults = this.splatPartitioner.partitionUncompressedSplatArray(splatArray);\n        return SplatBuffer.generateFromUncompressedSplatArrays(partitionResults.splatArrays,\n                                                               this.alphaRemovalThreshold, this.compressionLevel,\n                                                               this.sceneCenter, this.blockSize, this.bucketSize,\n                                                               partitionResults.parameters);\n    }\n\n    static getStandardGenerator(alphaRemovalThreshold = 1, compressionLevel = 1, sectionSize = 0, sceneCenter = new THREE.Vector3(),\n                                blockSize = SplatBuffer.BucketBlockSize, bucketSize = SplatBuffer.BucketSize) {\n        const splatPartitioner = SplatPartitioner.getStandardPartitioner(sectionSize, sceneCenter, blockSize, bucketSize);\n        return new SplatBufferGenerator(splatPartitioner, alphaRemovalThreshold, compressionLevel,\n                                        sectionSize, sceneCenter, blockSize, bucketSize);\n    }\n}\n","export const LoaderStatus = {\n    'Downloading': 0,\n    'Processing': 1,\n    'Done': 2\n};\n","export class DirectLoadError extends Error {\n\n    constructor(msg) {\n        super(msg);\n    }\n\n}\n","export const InternalLoadType = {\n    ProgressiveToSplatBuffer: 0,\n    ProgressiveToSplatArray: 1,\n    DownloadBeforeProcessing: 2\n};\n","import * as THREE from 'three';\nimport { PlyParser } from './PlyParser.js';\nimport { PlyParserUtils } from './PlyParserUtils.js';\nimport { INRIAV1PlyParser } from './INRIAV1PlyParser.js';\nimport { PlayCanvasCompressedPlyParser } from './PlayCanvasCompressedPlyParser.js';\nimport { PlyFormat } from './PlyFormat.js';\nimport { fetchWithProgress, delayedExecute, nativePromiseWithExtractedComponents } from '../../Util.js';\nimport { SplatBuffer } from '../SplatBuffer.js';\nimport { SplatBufferGenerator } from '../SplatBufferGenerator.js';\nimport { LoaderStatus } from '../LoaderStatus.js';\nimport { DirectLoadError } from '../DirectLoadError.js';\nimport { Constants } from '../../Constants.js';\nimport { UncompressedSplatArray } from '../UncompressedSplatArray.js';\nimport { InternalLoadType } from '../InternalLoadType.js';\n\nfunction storeChunksInBuffer(chunks, buffer) {\n    let inBytes = 0;\n    for (let chunk of chunks) inBytes += chunk.sizeBytes;\n\n    if (!buffer || buffer.byteLength < inBytes) {\n        buffer = new ArrayBuffer(inBytes);\n    }\n\n    let offset = 0;\n    for (let chunk of chunks) {\n        new Uint8Array(buffer, offset, chunk.sizeBytes).set(chunk.data);\n        offset += chunk.sizeBytes;\n    }\n\n    return buffer;\n}\n\nfunction finalize(splatData, optimizeSplatData, minimumAlpha, compressionLevel, sectionSize, sceneCenter, blockSize, bucketSize) {\n    if (optimizeSplatData) {\n        const splatBufferGenerator = SplatBufferGenerator.getStandardGenerator(minimumAlpha, compressionLevel,\n                                                                               sectionSize, sceneCenter,\n                                                                               blockSize, bucketSize);\n        return splatBufferGenerator.generateFromUncompressedSplatArray(splatData);\n    } else {\n        return SplatBuffer.generateFromUncompressedSplatArrays([splatData], minimumAlpha, 0, new THREE.Vector3());\n    }\n}\n\nexport class PlyLoader {\n\n    static loadFromURL(fileName, onProgress, progressiveLoadToSplatBuffer, onProgressiveLoadSectionProgress,\n                       minimumAlpha, compressionLevel, optimizeSplatData = true, outSphericalHarmonicsDegree = 0,\n                       headers, sectionSize, sceneCenter, blockSize, bucketSize) {\n\n        let internalLoadType;\n        if (!progressiveLoadToSplatBuffer && !optimizeSplatData) {\n            internalLoadType = InternalLoadType.DownloadBeforeProcessing;\n        } else {\n            if (optimizeSplatData) internalLoadType = InternalLoadType.ProgressiveToSplatArray;\n            else internalLoadType = InternalLoadType.ProgressiveToSplatBuffer;\n        }\n\n        const directLoadSectionSizeBytes = Constants.ProgressiveLoadSectionSize;\n        const splatBufferDataOffsetBytes = SplatBuffer.HeaderSizeBytes + SplatBuffer.SectionHeaderSizeBytes;\n        const sectionCount = 1;\n\n        let plyFormat;\n        let directLoadBufferIn;\n        let directLoadBufferOut;\n        let directLoadSplatBuffer;\n        let compressedPlyHeaderChunksBuffer;\n        let maxSplatCount = 0;\n        let processedBaseSplatCount = 0;\n        let processedSphericalHarmonicsSplatCount = 0;\n\n        let headerLoaded = false;\n        let readyToLoadSplatData = false;\n        let baseSplatDataLoaded = false;\n\n        const loadPromise = nativePromiseWithExtractedComponents();\n\n        let numBytesStreamed = 0;\n        let numBytesParsed = 0;\n        let numBytesDownloaded = 0;\n        let endOfBaseSplatDataBytes = 0;\n        let headerText = '';\n        let header = null;\n        let chunks = [];\n\n        let standardLoadUncompressedSplatArray;\n\n        const textDecoder = new TextDecoder();\n\n        const localOnProgress = (percent, percentLabel, chunkData) => {\n            const loadComplete = percent >= 100;\n\n            if (chunkData) {\n                chunks.push({\n                    'data': chunkData,\n                    'sizeBytes': chunkData.byteLength,\n                    'startBytes': numBytesDownloaded,\n                    'endBytes': numBytesDownloaded + chunkData.byteLength\n                });\n                numBytesDownloaded += chunkData.byteLength;\n            }\n\n            if (internalLoadType === InternalLoadType.DownloadBeforeProcessing) {\n                if (loadComplete) {\n                    loadPromise.resolve(chunks);\n                }\n            } else {\n                if (!headerLoaded) {\n                    headerText += textDecoder.decode(chunkData);\n                    if (PlyParserUtils.checkTextForEndHeader(headerText)) {\n                        plyFormat = PlyParserUtils.determineHeaderFormatFromHeaderText(headerText);\n                        if (plyFormat === PlyFormat.INRIAV1) {\n                            header = INRIAV1PlyParser.decodeHeaderText(headerText);\n                            outSphericalHarmonicsDegree = Math.min(outSphericalHarmonicsDegree, header.sphericalHarmonicsDegree);\n                            maxSplatCount = header.splatCount;\n                            readyToLoadSplatData = true;\n                            endOfBaseSplatDataBytes = header.headerSizeBytes + header.bytesPerSplat * maxSplatCount;\n                        } else if (plyFormat === PlyFormat.PlayCanvasCompressed) {\n                            header = PlayCanvasCompressedPlyParser.decodeHeaderText(headerText);\n                            outSphericalHarmonicsDegree = Math.min(outSphericalHarmonicsDegree, header.sphericalHarmonicsDegree);\n                            if (internalLoadType === InternalLoadType.ProgressiveToSplatBuffer && outSphericalHarmonicsDegree > 0) {\n                                throw new DirectLoadError(\n                                    'PlyLoader.loadFromURL() -> Selected PLY format has spherical ' +\n                                    'harmonics data that cannot be progressively loaded.'\n                                );\n                            }\n                            maxSplatCount = header.vertexElement.count;\n                            endOfBaseSplatDataBytes = header.headerSizeBytes + header.bytesPerSplat * maxSplatCount +\n                                                      header.chunkElement.storageSizeBytes;\n                        } else {\n                            if (internalLoadType === InternalLoadType.ProgressiveToSplatBuffer) {\n                                throw new DirectLoadError(\n                                    'PlyLoader.loadFromURL() -> Selected PLY format cannot be progressively loaded.'\n                                );\n                            } else {\n                                internalLoadType = InternalLoadType.DownloadBeforeProcessing;\n                                return;\n                            }\n                        }\n\n                        if (internalLoadType === InternalLoadType.ProgressiveToSplatBuffer) {\n                            const shDescriptor = SplatBuffer.CompressionLevels[0].SphericalHarmonicsDegrees[outSphericalHarmonicsDegree];\n                            const splatBufferSizeBytes = splatBufferDataOffsetBytes + shDescriptor.BytesPerSplat * maxSplatCount;\n                            directLoadBufferOut = new ArrayBuffer(splatBufferSizeBytes);\n                            SplatBuffer.writeHeaderToBuffer({\n                                versionMajor: SplatBuffer.CurrentMajorVersion,\n                                versionMinor: SplatBuffer.CurrentMinorVersion,\n                                maxSectionCount: sectionCount,\n                                sectionCount: sectionCount,\n                                maxSplatCount: maxSplatCount,\n                                splatCount: 0,\n                                compressionLevel: 0,\n                                sceneCenter: new THREE.Vector3()\n                            }, directLoadBufferOut);\n                        } else {\n                            standardLoadUncompressedSplatArray = new UncompressedSplatArray(outSphericalHarmonicsDegree);\n                        }\n\n                        numBytesStreamed = header.headerSizeBytes;\n                        numBytesParsed = header.headerSizeBytes;\n                        headerLoaded = true;\n                    }\n                } else if (plyFormat === PlyFormat.PlayCanvasCompressed && !readyToLoadSplatData) {\n                    const sizeRequiredForHeaderAndChunks = header.headerSizeBytes + header.chunkElement.storageSizeBytes;\n                    compressedPlyHeaderChunksBuffer = storeChunksInBuffer(chunks, compressedPlyHeaderChunksBuffer);\n                    if (compressedPlyHeaderChunksBuffer.byteLength >= sizeRequiredForHeaderAndChunks) {\n                        PlayCanvasCompressedPlyParser.readElementData(header.chunkElement, compressedPlyHeaderChunksBuffer,\n                                                                      header.headerSizeBytes);\n                        numBytesStreamed = sizeRequiredForHeaderAndChunks;\n                        numBytesParsed = sizeRequiredForHeaderAndChunks;\n                        readyToLoadSplatData = true;\n                    }\n                }\n\n                if (headerLoaded && readyToLoadSplatData && chunks.length > 0) {\n\n                    directLoadBufferIn = storeChunksInBuffer(chunks, directLoadBufferIn);\n\n                    const bytesLoadedSinceLastStreamedSection = numBytesDownloaded - numBytesStreamed;\n                    if (bytesLoadedSinceLastStreamedSection > directLoadSectionSizeBytes ||\n                        (numBytesDownloaded >= endOfBaseSplatDataBytes && !baseSplatDataLoaded) ||\n                        loadComplete) {\n                        const bytesPerSplat = baseSplatDataLoaded ? header.sphericalHarmonicsPerSplat : header.bytesPerSplat;\n                        const endOfBytesToProcess = baseSplatDataLoaded ? numBytesDownloaded :\n                                                    Math.min(endOfBaseSplatDataBytes, numBytesDownloaded);\n                        const numBytesToProcess = endOfBytesToProcess - numBytesParsed;\n                        const addedSplatCount = Math.floor(numBytesToProcess / bytesPerSplat);\n                        const numBytesToParse = addedSplatCount * bytesPerSplat;\n                        const numBytesLeftOver = numBytesDownloaded - numBytesParsed - numBytesToParse;\n                        const parsedDataViewOffset = numBytesParsed - chunks[0].startBytes;\n                        const dataToParse = new DataView(directLoadBufferIn, parsedDataViewOffset, numBytesToParse);\n\n                        if (!baseSplatDataLoaded) {\n                            if (internalLoadType === InternalLoadType.ProgressiveToSplatBuffer) {\n                                const shDesc = SplatBuffer.CompressionLevels[0].SphericalHarmonicsDegrees[outSphericalHarmonicsDegree];\n                                const outOffset = processedBaseSplatCount * shDesc.BytesPerSplat + splatBufferDataOffsetBytes;\n                                if (plyFormat === PlyFormat.PlayCanvasCompressed) {\n                                    PlayCanvasCompressedPlyParser.parseToUncompressedSplatBufferSection(\n                                        header.chunkElement, header.vertexElement, 0, addedSplatCount - 1,\n                                        processedBaseSplatCount, dataToParse, directLoadBufferOut, outOffset\n                                    );\n                                } else {\n                                    INRIAV1PlyParser.parseToUncompressedSplatBufferSection(\n                                        header, 0, addedSplatCount - 1, dataToParse, 0,\n                                        directLoadBufferOut, outOffset, outSphericalHarmonicsDegree\n                                    );\n                                }\n                            } else {\n                                if (plyFormat === PlyFormat.PlayCanvasCompressed) {\n                                    PlayCanvasCompressedPlyParser.parseToUncompressedSplatArraySection(\n                                        header.chunkElement, header.vertexElement, 0, addedSplatCount - 1,\n                                        processedBaseSplatCount, dataToParse, standardLoadUncompressedSplatArray\n                                    );\n                                } else {\n                                    INRIAV1PlyParser.parseToUncompressedSplatArraySection(\n                                        header, 0, addedSplatCount - 1, dataToParse, 0,\n                                        standardLoadUncompressedSplatArray, outSphericalHarmonicsDegree\n                                    );\n                                }\n                            }\n\n                            processedBaseSplatCount += addedSplatCount;\n\n                            if (internalLoadType === InternalLoadType.ProgressiveToSplatBuffer) {\n                                if (!directLoadSplatBuffer) {\n                                    SplatBuffer.writeSectionHeaderToBuffer({\n                                        maxSplatCount: maxSplatCount,\n                                        splatCount: processedBaseSplatCount,\n                                        bucketSize: 0,\n                                        bucketCount: 0,\n                                        bucketBlockSize: 0,\n                                        compressionScaleRange: 0,\n                                        storageSizeBytes: 0,\n                                        fullBucketCount: 0,\n                                        partiallyFilledBucketCount: 0,\n                                        sphericalHarmonicsDegree: outSphericalHarmonicsDegree\n                                    }, 0, directLoadBufferOut, SplatBuffer.HeaderSizeBytes);\n                                    directLoadSplatBuffer = new SplatBuffer(directLoadBufferOut, false);\n                                }\n                                directLoadSplatBuffer.updateLoadedCounts(1, processedBaseSplatCount);\n                            }\n                            if (numBytesDownloaded >= endOfBaseSplatDataBytes) {\n                                baseSplatDataLoaded = true;\n                            }\n                        } else {\n                            if (plyFormat === PlyFormat.PlayCanvasCompressed) {\n                                if (internalLoadType === InternalLoadType.ProgressiveToSplatArray) {\n                                    PlayCanvasCompressedPlyParser.parseSphericalHarmonicsToUncompressedSplatArraySection(\n                                        header.chunkElement, header.shElement, processedSphericalHarmonicsSplatCount,\n                                        processedSphericalHarmonicsSplatCount + addedSplatCount - 1,\n                                        dataToParse, 0, outSphericalHarmonicsDegree, header.sphericalHarmonicsDegree,\n                                        standardLoadUncompressedSplatArray\n                                    );\n                                    processedSphericalHarmonicsSplatCount += addedSplatCount;\n                                }\n                            }\n                        }\n\n                        if (numBytesLeftOver === 0) {\n                            chunks = [];\n                        } else {\n                            let keepChunks = [];\n                            let keepSize = 0;\n                            for (let i = chunks.length - 1; i >= 0; i--) {\n                                const chunk = chunks[i];\n                                keepSize += chunk.sizeBytes;\n                                keepChunks.unshift(chunk);\n                                if (keepSize >= numBytesLeftOver) break;\n                            }\n                            chunks = keepChunks;\n                        }\n\n                        numBytesStreamed += directLoadSectionSizeBytes;\n                        numBytesParsed += numBytesToParse;\n                    }\n                }\n\n                if (onProgressiveLoadSectionProgress && directLoadSplatBuffer) {\n                    onProgressiveLoadSectionProgress(directLoadSplatBuffer, loadComplete);\n                }\n\n                if (loadComplete) {\n                    if (internalLoadType === InternalLoadType.ProgressiveToSplatBuffer) {\n                        loadPromise.resolve(directLoadSplatBuffer);\n                    } else {\n                        loadPromise.resolve(standardLoadUncompressedSplatArray);\n                    }\n                }\n            }\n\n            if (onProgress) onProgress(percent, percentLabel, LoaderStatus.Downloading);\n        };\n\n        if (onProgress) onProgress(0, '0%', LoaderStatus.Downloading);\n        return fetchWithProgress(fileName, localOnProgress, false, headers).then(() => {\n            if (onProgress) onProgress(0, '0%', LoaderStatus.Processing);\n            return loadPromise.promise.then((splatData) => {\n                if (onProgress) onProgress(100, '100%', LoaderStatus.Done);\n                if (internalLoadType === InternalLoadType.DownloadBeforeProcessing) {\n                    const chunkDatas = chunks.map((chunk) => chunk.data);\n                    return new Blob(chunkDatas).arrayBuffer().then((plyFileData) => {\n                        return PlyLoader.loadFromFileData(plyFileData, minimumAlpha, compressionLevel, optimizeSplatData,\n                                                          outSphericalHarmonicsDegree, sectionSize, sceneCenter, blockSize, bucketSize);\n                    });\n                } else if (internalLoadType === InternalLoadType.ProgressiveToSplatBuffer) {\n                    return splatData;\n                } else {\n                    return delayedExecute(() => {\n                        return finalize(splatData, optimizeSplatData, minimumAlpha, compressionLevel,\n                                        sectionSize, sceneCenter, blockSize, bucketSize);\n                    });\n                }\n            });\n        });\n    }\n\n    static loadFromFileData(plyFileData, minimumAlpha, compressionLevel, optimizeSplatData, outSphericalHarmonicsDegree = 0,\n                            sectionSize, sceneCenter, blockSize, bucketSize) {\n        if (optimizeSplatData) {\n            return delayedExecute(() => {\n                return PlyParser.parseToUncompressedSplatArray(plyFileData, outSphericalHarmonicsDegree);\n            })\n            .then((splatArray) => {\n                return finalize(splatArray, optimizeSplatData, minimumAlpha, compressionLevel,\n                                sectionSize, sceneCenter, blockSize, bucketSize);\n            });\n        } else {\n            return delayedExecute(() => {\n                return PlyParser.parseToUncompressedSplatBuffer(plyFileData, outSphericalHarmonicsDegree);\n            });\n        }\n    }\n}\n","const createStream = (data)=> {\n    return new ReadableStream({\n        async start(controller) {\n            controller.enqueue(data);\n            controller.close();\n        },\n    });\n};\n\nexport async function decompressGzipped(data) {\n    try {\n        const stream = createStream(data);\n        if (!stream) throw new Error('Failed to create stream from data');\n\n        return await decompressGzipStream(stream);\n    } catch (error) {\n        console.error('Error decompressing gzipped data:', error);\n        throw error;\n    }\n}\n\nexport async function decompressGzipStream(stream) {\n    const decompressedStream = stream.pipeThrough(new DecompressionStream('gzip'));\n    const response = new Response(decompressedStream);\n    const buffer = await response.arrayBuffer();\n\n    return new Uint8Array(buffer);\n}\n\nexport async function compressGzipped(data) {\n    try {\n        const stream = createStream(data);\n        const compressedStream = stream.pipeThrough(new CompressionStream('gzip'));\n        const response = new Response(compressedStream);\n        const buffer = await response.arrayBuffer();\n\n        return new Uint8Array(buffer);\n    } catch (error) {\n        console.error('Error compressing gzipped data:', error);\n        throw error;\n    }\n}\n","import * as THREE from 'three';\nimport { fetchWithProgress, delayedExecute } from '../../Util.js';\nimport { SplatBuffer } from '../SplatBuffer.js';\nimport { SplatBufferGenerator } from '../SplatBufferGenerator.js';\nimport { LoaderStatus } from '../LoaderStatus.js';\nimport { UncompressedSplatArray } from '../UncompressedSplatArray.js';\nimport { decompressGzipped } from '../Compression.js';\nimport { clamp } from '../../Util.js';\n\nconst SPZ_MAGIC = 1347635022;\nconst FLAG_ANTIALIASED = 1;\nconst COLOR_SCALE = 0.15;\n\nfunction halfToFloat(h) {\n    const sgn = (h >> 15) & 0x1;\n    const exponent = (h >> 10) & 0x1f;\n    const mantissa = h & 0x3ff;\n\n    const signMul = sgn === 1 ? -1.0 : 1.0;\n    if (exponent === 0) {\n        return signMul * Math.pow(2, -14) * mantissa / 1024;\n    }\n\n    if (exponent === 31) {\n        return mantissa !== 0 ? NaN : signMul * Infinity;\n    }\n\n    return signMul * Math.pow(2, exponent - 15) * (1 + mantissa / 1024);\n}\n\nfunction unquantizeSH(x) {\n    return (x - 128.0) / 128.0;\n}\n\nfunction dimForDegree(degree) {\n    switch (degree) {\n        case 0: return 0;\n        case 1: return 3;\n        case 2: return 8;\n        case 3: return 15;\n        default:\n            console.error(`[SPZ: ERROR] Unsupported SH degree: ${degree}`);\n            return 0;\n    }\n}\n\nconst unpackedSplatToUncompressedSplat = function() {\n\n    let rawSplat = [];\n    const tempRotation = new THREE.Quaternion();\n\n    const OFFSET_X = UncompressedSplatArray.OFFSET.X;\n    const OFFSET_Y = UncompressedSplatArray.OFFSET.Y;\n    const OFFSET_Z = UncompressedSplatArray.OFFSET.Z;\n\n    const OFFSET_SCALE0 = UncompressedSplatArray.OFFSET.SCALE0;\n    const OFFSET_SCALE1 = UncompressedSplatArray.OFFSET.SCALE1;\n    const OFFSET_SCALE2 = UncompressedSplatArray.OFFSET.SCALE2;\n\n    const OFFSET_ROTATION0 = UncompressedSplatArray.OFFSET.ROTATION0;\n    const OFFSET_ROTATION1 = UncompressedSplatArray.OFFSET.ROTATION1;\n    const OFFSET_ROTATION2 = UncompressedSplatArray.OFFSET.ROTATION2;\n    const OFFSET_ROTATION3 = UncompressedSplatArray.OFFSET.ROTATION3;\n\n    const OFFSET_FDC0 = UncompressedSplatArray.OFFSET.FDC0;\n    const OFFSET_FDC1 = UncompressedSplatArray.OFFSET.FDC1;\n    const OFFSET_FDC2 = UncompressedSplatArray.OFFSET.FDC2;\n    const OFFSET_OPACITY = UncompressedSplatArray.OFFSET.OPACITY;\n\n    const OFFSET_FRC = [];\n\n    for (let i = 0; i < 45; i++) {\n        OFFSET_FRC[i] = UncompressedSplatArray.OFFSET.FRC0 + i;\n    }\n\n    const shCoeffMap = [dimForDegree(0), dimForDegree(1), dimForDegree(2), dimForDegree(3)];\n\n    const shIndexMap = [\n        0, 1, 2, 9, 10, 11, 12, 13, 24, 25, 26, 27, 28, 29, 30,\n        3, 4, 5, 14, 15, 16, 17, 18, 31, 32, 33, 34, 35, 36, 37,\n        6, 7, 8, 19, 20, 21, 22, 23, 38, 39, 40, 41, 42, 43, 44\n    ];\n\n    return function(unpackedSplat, unpackedSphericalHarmonicsDegree, outSphericalHarmonicsDegree) {\n                    outSphericalHarmonicsDegree = Math.min(unpackedSphericalHarmonicsDegree, outSphericalHarmonicsDegree);\n\n        const newSplat = UncompressedSplatArray.createSplat(outSphericalHarmonicsDegree);\n        if (unpackedSplat.scale[0] !== undefined) {\n            newSplat[OFFSET_SCALE0] = unpackedSplat.scale[0];\n            newSplat[OFFSET_SCALE1] = unpackedSplat.scale[1];\n            newSplat[OFFSET_SCALE2] = unpackedSplat.scale[2];\n        } else {\n            newSplat[OFFSET_SCALE0] = 0.01;\n            newSplat[OFFSET_SCALE1] = 0.01;\n            newSplat[OFFSET_SCALE2] = 0.01;\n        }\n\n        if (unpackedSplat.color[0] !== undefined) {\n            newSplat[OFFSET_FDC0] = unpackedSplat.color[0];\n            newSplat[OFFSET_FDC1] = unpackedSplat.color[1];\n            newSplat[OFFSET_FDC2] = unpackedSplat.color[2];\n        } else if (rawSplat[RED] !== undefined) {\n            newSplat[OFFSET_FDC0] = rawSplat[RED] * 255;\n            newSplat[OFFSET_FDC1] = rawSplat[GREEN] * 255;\n            newSplat[OFFSET_FDC2] = rawSplat[BLUE] * 255;\n        } else {\n            newSplat[OFFSET_FDC0] = 0;\n            newSplat[OFFSET_FDC1] = 0;\n            newSplat[OFFSET_FDC2] = 0;\n        }\n\n        if (unpackedSplat.alpha !== undefined) {\n            newSplat[OFFSET_OPACITY] = unpackedSplat.alpha;\n        }\n\n        newSplat[OFFSET_FDC0] = clamp(Math.floor(newSplat[OFFSET_FDC0]), 0, 255);\n        newSplat[OFFSET_FDC1] = clamp(Math.floor(newSplat[OFFSET_FDC1]), 0, 255);\n        newSplat[OFFSET_FDC2] = clamp(Math.floor(newSplat[OFFSET_FDC2]), 0, 255);\n        newSplat[OFFSET_OPACITY] = clamp(Math.floor(newSplat[OFFSET_OPACITY]), 0, 255);\n\n        let outSHCoeff = shCoeffMap[outSphericalHarmonicsDegree];\n        let readSHCoeff = shCoeffMap[unpackedSphericalHarmonicsDegree];\n        for (let j = 0; j < 3; ++j) {\n            for (let k = 0; k < 15; ++k) {\n                const outIndex = shIndexMap[j * 15 + k];\n                if (k < outSHCoeff && k < readSHCoeff) {\n                    newSplat[UncompressedSplatArray.OFFSET.FRC0 + outIndex] = unpackedSplat.sh[j * readSHCoeff + k];\n                }\n            }\n        }\n\n        tempRotation.set(unpackedSplat.rotation[3], unpackedSplat.rotation[0], unpackedSplat.rotation[1], unpackedSplat.rotation[2]);\n        tempRotation.normalize();\n\n        newSplat[OFFSET_ROTATION0] = tempRotation.x;\n        newSplat[OFFSET_ROTATION1] = tempRotation.y;\n        newSplat[OFFSET_ROTATION2] = tempRotation.z;\n        newSplat[OFFSET_ROTATION3] = tempRotation.w;\n\n        newSplat[OFFSET_X] = unpackedSplat.position[0];\n        newSplat[OFFSET_Y] = unpackedSplat.position[1];\n        newSplat[OFFSET_Z] = unpackedSplat.position[2];\n\n        return newSplat;\n    };\n\n}();\n\n// Helper function to check sizes (matching C++ checkSizes function)\nfunction checkSizes2(packed, numPoints, shDim, usesFloat16) {\n    if (packed.positions.length !== numPoints * 3 * (usesFloat16 ? 2 : 3)) return false;\n    if (packed.scales.length !== numPoints * 3) return false;\n    if (packed.rotations.length !== numPoints * 3) return false;\n    if (packed.alphas.length !== numPoints) return false;\n    if (packed.colors.length !== numPoints * 3) return false;\n    if (packed.sh.length !== numPoints * shDim * 3) return false;\n    return true;\n}\n\nfunction unpackGaussians(packed, outSphericalHarmonicsDegree, directToSplatBuffer, outTarget, outTargetOffset) {\n    outSphericalHarmonicsDegree = Math.min(outSphericalHarmonicsDegree, packed.shDegree);\n    const numPoints = packed.numPoints;\n    const shDim = dimForDegree(packed.shDegree);\n    const usesFloat16 = packed.positions.length === numPoints * 3 * 2;\n\n    // Validate sizes\n    if (!checkSizes2(packed, numPoints, shDim, usesFloat16)) {\n        return null;\n    }\n\n    const splat = {\n        position: [],\n        scale: [],\n        rotation: [],\n        alpha: undefined,\n        color: [],\n        sh: []\n    };\n\n    let halfData;\n    if (usesFloat16) {\n       halfData = new Uint16Array(packed.positions.buffer, packed.positions.byteOffset, numPoints * 3);\n    }\n    const fullPrecisionPositionScale = 1.0 / (1 << packed.fractionalBits);\n    const shCoeffPerChannelPerSplat = dimForDegree(packed.shDegree);\n    const SH_C0 = 0.28209479177387814;\n\n    for (let i = 0; i < numPoints; i++) {\n        // Splat position\n        if (usesFloat16) {\n            // Decode legacy float16 format\n            for (let j = 0; j < 3; j++) {\n                splat.position[j] = halfToFloat(halfData[i * 3 + j]);\n            }\n        } else {\n            // Decode 24-bit fixed point coordinates\n            for (let j = 0; j < 3; j++) {\n                const base = i * 9 + j * 3;\n                let fixed32 = packed.positions[base];\n                fixed32 |= packed.positions[base + 1] << 8;\n                fixed32 |= packed.positions[base + 2] << 16;\n                fixed32 |= (fixed32 & 0x800000) ? 0xff000000 : 0;\n                splat.position[j] = fixed32 * fullPrecisionPositionScale;\n            }\n        }\n\n        // Splat scale\n        for (let j = 0; j < 3; j++) {\n            splat.scale[j] = Math.exp(packed.scales[i * 3 + j] / 16.0 - 10.0);\n        }\n\n        // Splat rotation\n        const r = packed.rotations.subarray(i * 3, i * 3 + 3);\n        const xyz = [\n            r[0] / 127.5 - 1.0,\n            r[1] / 127.5 - 1.0,\n            r[2] / 127.5 - 1.0\n        ];\n        splat.rotation[0] = xyz[0];\n        splat.rotation[1] = xyz[1];\n        splat.rotation[2] = xyz[2];\n        const squaredNorm = xyz[0] * xyz[0] + xyz[1] * xyz[1] + xyz[2] * xyz[2];\n        splat.rotation[3] = Math.sqrt(Math.max(0.0, 1.0 - squaredNorm));\n\n        // Splat alpha\n        // splat.alpha = invSigmoid(packed.alphas[i] / 255.0);\n        splat.alpha = Math.floor(packed.alphas[i]);\n\n        // Splat color\n        for (let j = 0; j < 3; j++) {\n            splat.color[j] = Math.floor(((((packed.colors[i * 3 + j] / 255.0) - 0.5) / COLOR_SCALE) * SH_C0 + 0.5) * 255);\n        }\n\n        // Splat spherical harmonics\n        for (let j = 0; j < 3; j++) {\n            for (let k = 0; k < shCoeffPerChannelPerSplat; k++) {\n                splat.sh[j * shCoeffPerChannelPerSplat + k] = unquantizeSH(packed.sh[shCoeffPerChannelPerSplat * 3 * i + k * 3 + j]);\n            }\n        }\n\n        const uncompressedSplat = unpackedSplatToUncompressedSplat(splat, packed.shDegree, outSphericalHarmonicsDegree);\n        if (directToSplatBuffer) {\n            const outBytesPerSplat = SplatBuffer.CompressionLevels[0].SphericalHarmonicsDegrees[outSphericalHarmonicsDegree].BytesPerSplat;\n            const outBase = i * outBytesPerSplat + outTargetOffset;\n            SplatBuffer.writeSplatDataToSectionBuffer(uncompressedSplat, outTarget, outBase, 0, outSphericalHarmonicsDegree);\n        } else {\n            outTarget.addSplat(uncompressedSplat);\n        }\n    }\n}\n\nconst HEADER_SIZE = 16; // 4 + 4 + 4 + 1 + 1 + 1 + 1 bytes\nconst MAX_POINTS_TO_READ = 10000000;\n\nfunction deserializePackedGaussians(buffer) {\n    const view = new DataView(buffer);\n    let offset = 0;\n\n    // Read and validate header\n    const header = {\n        magic: view.getUint32(offset, true),\n        version: view.getUint32(offset + 4, true),\n        numPoints: view.getUint32(offset + 8, true),\n        shDegree: view.getUint8(offset + 12),\n        fractionalBits: view.getUint8(offset + 13),\n        flags: view.getUint8(offset + 14),\n        reserved: view.getUint8(offset + 15)\n    };\n\n    offset += HEADER_SIZE;\n\n    // Validate header\n    if (header.magic !== SPZ_MAGIC) {\n        console.error('[SPZ ERROR] deserializePackedGaussians: header not found');\n        return null;\n    }\n    if (header.version < 1 || header.version > 2) {\n        console.error(`[SPZ ERROR] deserializePackedGaussians: version not supported: ${header.version}`);\n        return null;\n    }\n    if (header.numPoints > MAX_POINTS_TO_READ) {\n        console.error(`[SPZ ERROR] deserializePackedGaussians: Too many points: ${header.numPoints}`);\n        return null;\n    }\n    if (header.shDegree > 3) {\n        console.error(`[SPZ ERROR] deserializePackedGaussians: Unsupported SH degree: ${header.shDegree}`);\n        return null;\n    }\n\n    const numPoints = header.numPoints;\n    const shDim = dimForDegree(header.shDegree);\n    const usesFloat16 = header.version === 1;\n\n    // Initialize result object\n    const result = {\n        numPoints,\n        shDegree: header.shDegree,\n        fractionalBits: header.fractionalBits,\n        antialiased: (header.flags & FLAG_ANTIALIASED) !== 0,\n        positions: new Uint8Array(numPoints * 3 * (usesFloat16 ? 2 : 3)),\n        scales: new Uint8Array(numPoints * 3),\n        rotations: new Uint8Array(numPoints * 3),\n        alphas: new Uint8Array(numPoints),\n        colors: new Uint8Array(numPoints * 3),\n        sh: new Uint8Array(numPoints * shDim * 3)\n    };\n\n    // Read data sections\n    try {\n        const uint8View = new Uint8Array(buffer);\n        let positionsSize = result.positions.length;\n        let currentOffset = offset;\n\n        result.positions.set(uint8View.slice(currentOffset, currentOffset + positionsSize));\n        currentOffset += positionsSize;\n\n        result.alphas.set(uint8View.slice(currentOffset, currentOffset + result.alphas.length));\n        currentOffset += result.alphas.length;\n\n        result.colors.set(uint8View.slice(currentOffset, currentOffset + result.colors.length));\n        currentOffset += result.colors.length;\n\n        result.scales.set(uint8View.slice(currentOffset, currentOffset + result.scales.length));\n        currentOffset += result.scales.length;\n\n        result.rotations.set(uint8View.slice(currentOffset, currentOffset + result.rotations.length));\n        currentOffset += result.rotations.length;\n\n        result.sh.set(uint8View.slice(currentOffset, currentOffset + result.sh.length));\n\n        // Verify we read the expected amount of data\n        if (currentOffset + result.sh.length !== buffer.byteLength) {\n            console.error('[SPZ ERROR] deserializePackedGaussians: incorrect buffer size');\n            return null;\n        }\n    } catch (error) {\n        console.error('[SPZ ERROR] deserializePackedGaussians: read error', error);\n        return null;\n    }\n\n    return result;\n}\n\nasync function loadSpzPacked(compressedData) {\n    try {\n        const decompressed = await decompressGzipped(compressedData);\n        return deserializePackedGaussians(decompressed.buffer);\n    } catch (error) {\n        console.error('[SPZ ERROR] loadSpzPacked: decompression error', error);\n        return null;\n    }\n}\n\nexport class SpzLoader {\n\n    static loadFromURL(fileName, onProgress, minimumAlpha, compressionLevel, optimizeSplatData = true,\n                       outSphericalHarmonicsDegree = 0, headers, sectionSize, sceneCenter, blockSize, bucketSize) {\n        if (onProgress) onProgress(0, '0%', LoaderStatus.Downloading);\n        return fetchWithProgress(fileName, onProgress, true, headers).then((fileData) => {\n            if (onProgress) onProgress(0, '0%', LoaderStatus.Processing);\n            return SpzLoader.loadFromFileData(fileData, minimumAlpha, compressionLevel, optimizeSplatData,\n                                              outSphericalHarmonicsDegree, sectionSize, sceneCenter, blockSize, bucketSize);\n        });\n    }\n\n    static async loadFromFileData(spzFileData, minimumAlpha, compressionLevel, optimizeSplatData,\n                                  outSphericalHarmonicsDegree = 0, sectionSize, sceneCenter, blockSize, bucketSize) {\n        await delayedExecute();\n        const packed = await loadSpzPacked(spzFileData);\n        outSphericalHarmonicsDegree = Math.min(packed.shDegree, outSphericalHarmonicsDegree);\n\n        const splatArray = new UncompressedSplatArray(outSphericalHarmonicsDegree);\n\n        if (optimizeSplatData) {\n            unpackGaussians(packed, outSphericalHarmonicsDegree, false, splatArray, 0);\n            const splatBufferGenerator = SplatBufferGenerator.getStandardGenerator(minimumAlpha, compressionLevel,\n                                                                                   sectionSize, sceneCenter,\n                                                                                   blockSize, bucketSize);\n            return splatBufferGenerator.generateFromUncompressedSplatArray(splatArray);\n        } else {\n            const {\n                splatBuffer,\n                splatBufferDataOffsetBytes\n              } = SplatBuffer.preallocateUncompressed(packed.numPoints, outSphericalHarmonicsDegree);\n            unpackGaussians(packed, outSphericalHarmonicsDegree, true, splatBuffer.bufferData, splatBufferDataOffsetBytes);\n            return splatBuffer;\n        }\n    }\n\n}\n","import * as THREE from 'three';\nimport { SplatBuffer } from '../SplatBuffer.js';\nimport { UncompressedSplatArray } from '../UncompressedSplatArray.js';\n\nexport class SplatParser {\n\n    static RowSizeBytes = 32;\n    static CenterSizeBytes = 12;\n    static ScaleSizeBytes = 12;\n    static RotationSizeBytes = 4;\n    static ColorSizeBytes = 4;\n\n    static parseToUncompressedSplatBufferSection(fromSplat, toSplat, fromBuffer, fromOffset, toBuffer, toOffset) {\n\n        const outBytesPerCenter = SplatBuffer.CompressionLevels[0].BytesPerCenter;\n        const outBytesPerScale = SplatBuffer.CompressionLevels[0].BytesPerScale;\n        const outBytesPerRotation = SplatBuffer.CompressionLevels[0].BytesPerRotation;\n        const outBytesPerSplat = SplatBuffer.CompressionLevels[0].SphericalHarmonicsDegrees[0].BytesPerSplat;\n\n        for (let i = fromSplat; i <= toSplat; i++) {\n            const inBase = i * SplatParser.RowSizeBytes + fromOffset;\n            const inCenter = new Float32Array(fromBuffer, inBase, 3);\n            const inScale = new Float32Array(fromBuffer, inBase + SplatParser.CenterSizeBytes, 3);\n            const inColor = new Uint8Array(fromBuffer, inBase + SplatParser.CenterSizeBytes + SplatParser.ScaleSizeBytes, 4);\n            const inRotation = new Uint8Array(fromBuffer, inBase + SplatParser.CenterSizeBytes + SplatParser.ScaleSizeBytes +\n                                              SplatParser.RotationSizeBytes, 4);\n\n            const quat = new THREE.Quaternion((inRotation[1] - 128) / 128, (inRotation[2] - 128) / 128,\n                                              (inRotation[3] - 128) / 128, (inRotation[0] - 128) / 128);\n            quat.normalize();\n\n            const outBase = i * outBytesPerSplat + toOffset;\n            const outCenter = new Float32Array(toBuffer, outBase, 3);\n            const outScale = new Float32Array(toBuffer, outBase + outBytesPerCenter, 3);\n            const outRotation = new Float32Array(toBuffer, outBase + outBytesPerCenter + outBytesPerScale, 4);\n            const outColor = new Uint8Array(toBuffer, outBase + outBytesPerCenter + outBytesPerScale + outBytesPerRotation, 4);\n\n            outCenter[0] = inCenter[0];\n            outCenter[1] = inCenter[1];\n            outCenter[2] = inCenter[2];\n\n            outScale[0] = inScale[0];\n            outScale[1] = inScale[1];\n            outScale[2] = inScale[2];\n\n            outRotation[0] = quat.w;\n            outRotation[1] = quat.x;\n            outRotation[2] = quat.y;\n            outRotation[3] = quat.z;\n\n            outColor[0] = inColor[0];\n            outColor[1] = inColor[1];\n            outColor[2] = inColor[2];\n            outColor[3] = inColor[3];\n        }\n    }\n\n    static parseToUncompressedSplatArraySection(fromSplat, toSplat, fromBuffer, fromOffset, splatArray) {\n\n        for (let i = fromSplat; i <= toSplat; i++) {\n            const inBase = i * SplatParser.RowSizeBytes + fromOffset;\n            const inCenter = new Float32Array(fromBuffer, inBase, 3);\n            const inScale = new Float32Array(fromBuffer, inBase + SplatParser.CenterSizeBytes, 3);\n            const inColor = new Uint8Array(fromBuffer, inBase + SplatParser.CenterSizeBytes + SplatParser.ScaleSizeBytes, 4);\n            const inRotation = new Uint8Array(fromBuffer, inBase + SplatParser.CenterSizeBytes + SplatParser.ScaleSizeBytes +\n                                              SplatParser.RotationSizeBytes, 4);\n\n            const quat = new THREE.Quaternion((inRotation[1] - 128) / 128, (inRotation[2] - 128) / 128,\n                                              (inRotation[3] - 128) / 128, (inRotation[0] - 128) / 128);\n            quat.normalize();\n\n            splatArray.addSplatFromComonents(inCenter[0], inCenter[1], inCenter[2], inScale[0], inScale[1], inScale[2],\n                                             quat.w, quat.x, quat.y, quat.z, inColor[0], inColor[1], inColor[2], inColor[3]);\n        }\n    }\n\n    static parseStandardSplatToUncompressedSplatArray(inBuffer) {\n        // Standard .splat row layout:\n        // XYZ - Position (Float32)\n        // XYZ - Scale (Float32)\n        // RGBA - colors (uint8)\n        // IJKL - quaternion/rot (uint8)\n\n        const splatCount = inBuffer.byteLength / SplatParser.RowSizeBytes;\n\n        const splatArray = new UncompressedSplatArray();\n\n        for (let i = 0; i < splatCount; i++) {\n            const inBase = i * SplatParser.RowSizeBytes;\n            const inCenter = new Float32Array(inBuffer, inBase, 3);\n            const inScale = new Float32Array(inBuffer, inBase + SplatParser.CenterSizeBytes, 3);\n            const inColor = new Uint8Array(inBuffer, inBase + SplatParser.CenterSizeBytes + SplatParser.ScaleSizeBytes, 4);\n            const inRotation = new Uint8Array(inBuffer, inBase + SplatParser.CenterSizeBytes +\n                                              SplatParser.ScaleSizeBytes + SplatParser.ColorSizeBytes, 4);\n\n            const quat = new THREE.Quaternion((inRotation[1] - 128) / 128, (inRotation[2] - 128) / 128,\n                                              (inRotation[3] - 128) / 128, (inRotation[0] - 128) / 128);\n            quat.normalize();\n\n            splatArray.addSplatFromComonents(inCenter[0], inCenter[1], inCenter[2], inScale[0], inScale[1], inScale[2],\n                                             quat.w, quat.x, quat.y, quat.z, inColor[0], inColor[1], inColor[2], inColor[3]);\n        }\n\n        return splatArray;\n    }\n\n}\n","import * as THREE from 'three';\nimport { SplatBuffer } from '../SplatBuffer.js';\nimport { SplatBufferGenerator } from '../SplatBufferGenerator.js';\nimport { SplatParser } from './SplatParser.js';\nimport { fetchWithProgress, delayedExecute, nativePromiseWithExtractedComponents } from '../../Util.js';\nimport { UncompressedSplatArray } from '../UncompressedSplatArray.js';\nimport { LoaderStatus } from '../LoaderStatus.js';\nimport { DirectLoadError } from '../DirectLoadError.js';\nimport { Constants } from '../../Constants.js';\nimport { InternalLoadType } from '../InternalLoadType.js';\n\nfunction finalize(splatData, optimizeSplatData, minimumAlpha, compressionLevel, sectionSize, sceneCenter, blockSize, bucketSize) {\n    if (optimizeSplatData) {\n        const splatBufferGenerator = SplatBufferGenerator.getStandardGenerator(minimumAlpha, compressionLevel,\n                                                                               sectionSize, sceneCenter,\n                                                                               blockSize, bucketSize);\n        return splatBufferGenerator.generateFromUncompressedSplatArray(splatData);\n    } else {\n        // TODO: Implement direct-to-SplatBuffer when not optimizing splat data\n        return SplatBuffer.generateFromUncompressedSplatArrays([splatData], minimumAlpha, 0, new THREE.Vector3());\n    }\n}\n\nexport class SplatLoader {\n\n    static loadFromURL(fileName, onProgress, progressiveLoadToSplatBuffer, onProgressiveLoadSectionProgress, minimumAlpha, compressionLevel,\n                       optimizeSplatData = true, headers, sectionSize, sceneCenter, blockSize, bucketSize) {\n\n        let internalLoadType = progressiveLoadToSplatBuffer ? InternalLoadType.ProgressiveToSplatBuffer :\n                                                          InternalLoadType.ProgressiveToSplatArray;\n        if (optimizeSplatData) internalLoadType = InternalLoadType.ProgressiveToSplatArray;\n\n        const splatDataOffsetBytes = SplatBuffer.HeaderSizeBytes + SplatBuffer.SectionHeaderSizeBytes;\n        const directLoadSectionSizeBytes = Constants.ProgressiveLoadSectionSize;\n        const sectionCount = 1;\n\n        let directLoadBufferIn;\n        let directLoadBufferOut;\n        let directLoadSplatBuffer;\n        let maxSplatCount = 0;\n        let splatCount = 0;\n\n        let standardLoadUncompressedSplatArray;\n\n        const loadPromise = nativePromiseWithExtractedComponents();\n\n        let numBytesStreamed = 0;\n        let numBytesLoaded = 0;\n        let chunks = [];\n\n        const localOnProgress = (percent, percentStr, chunk, fileSize) => {\n            const loadComplete = percent >= 100;\n\n            if (chunk) {\n                chunks.push(chunk);\n            }\n\n            if (internalLoadType === InternalLoadType.DownloadBeforeProcessing) {\n                if (loadComplete) {\n                    loadPromise.resolve(chunks);\n                }\n                return;\n            }\n\n            if (!fileSize) {\n                if (progressiveLoadToSplatBuffer) {\n                    throw new DirectLoadError('Cannon directly load .splat because no file size info is available.');\n                } else {\n                    internalLoadType = InternalLoadType.DownloadBeforeProcessing;\n                    return;\n                }\n            }\n\n            if (!directLoadBufferIn) {\n                maxSplatCount = fileSize / SplatParser.RowSizeBytes;\n                directLoadBufferIn = new ArrayBuffer(fileSize);\n                const bytesPerSplat = SplatBuffer.CompressionLevels[0].SphericalHarmonicsDegrees[0].BytesPerSplat;\n                const splatBufferSizeBytes = splatDataOffsetBytes + bytesPerSplat * maxSplatCount;\n\n                if (internalLoadType === InternalLoadType.ProgressiveToSplatBuffer) {\n                    directLoadBufferOut = new ArrayBuffer(splatBufferSizeBytes);\n                    SplatBuffer.writeHeaderToBuffer({\n                        versionMajor: SplatBuffer.CurrentMajorVersion,\n                        versionMinor: SplatBuffer.CurrentMinorVersion,\n                        maxSectionCount: sectionCount,\n                        sectionCount: sectionCount,\n                        maxSplatCount: maxSplatCount,\n                        splatCount: splatCount,\n                        compressionLevel: 0,\n                        sceneCenter: new THREE.Vector3()\n                    }, directLoadBufferOut);\n                } else {\n                    standardLoadUncompressedSplatArray = new UncompressedSplatArray(0);\n                }\n            }\n\n            if (chunk) {\n                new Uint8Array(directLoadBufferIn, numBytesLoaded, chunk.byteLength).set(new Uint8Array(chunk));\n                numBytesLoaded += chunk.byteLength;\n\n                const bytesLoadedSinceLastSection = numBytesLoaded - numBytesStreamed;\n                if (bytesLoadedSinceLastSection > directLoadSectionSizeBytes || loadComplete) {\n                    const bytesToUpdate = loadComplete ? bytesLoadedSinceLastSection : directLoadSectionSizeBytes;\n                    const addedSplatCount = bytesToUpdate / SplatParser.RowSizeBytes;\n                    const newSplatCount = splatCount + addedSplatCount;\n\n                    if (internalLoadType === InternalLoadType.ProgressiveToSplatBuffer) {\n                        SplatParser.parseToUncompressedSplatBufferSection(splatCount, newSplatCount - 1, directLoadBufferIn, 0,\n                                                                            directLoadBufferOut, splatDataOffsetBytes);\n                    } else {\n                        SplatParser.parseToUncompressedSplatArraySection(splatCount, newSplatCount - 1, directLoadBufferIn, 0,\n                                                                            standardLoadUncompressedSplatArray);\n                    }\n\n                    splatCount = newSplatCount;\n\n                    if (internalLoadType === InternalLoadType.ProgressiveToSplatBuffer) {\n                        if (!directLoadSplatBuffer) {\n                            SplatBuffer.writeSectionHeaderToBuffer({\n                                maxSplatCount: maxSplatCount,\n                                splatCount: splatCount,\n                                bucketSize: 0,\n                                bucketCount: 0,\n                                bucketBlockSize: 0,\n                                compressionScaleRange: 0,\n                                storageSizeBytes: 0,\n                                fullBucketCount: 0,\n                                partiallyFilledBucketCount: 0\n                            }, 0, directLoadBufferOut, SplatBuffer.HeaderSizeBytes);\n                            directLoadSplatBuffer = new SplatBuffer(directLoadBufferOut, false);\n                        }\n                        directLoadSplatBuffer.updateLoadedCounts(1, splatCount);\n                        if (onProgressiveLoadSectionProgress) {\n                            onProgressiveLoadSectionProgress(directLoadSplatBuffer, loadComplete);\n                        }\n                    }\n\n                    numBytesStreamed += directLoadSectionSizeBytes;\n                }\n            }\n\n            if (loadComplete) {\n                if (internalLoadType === InternalLoadType.ProgressiveToSplatBuffer) {\n                    loadPromise.resolve(directLoadSplatBuffer);\n                } else {\n                    loadPromise.resolve(standardLoadUncompressedSplatArray);\n                }\n            }\n\n            if (onProgress) onProgress(percent, percentStr, LoaderStatus.Downloading);\n        };\n\n        if (onProgress) onProgress(0, '0%', LoaderStatus.Downloading);\n        return fetchWithProgress(fileName, localOnProgress, false, headers).then(() => {\n            if (onProgress) onProgress(0, '0%', LoaderStatus.Processing);\n            return loadPromise.promise.then((splatData) => {\n                if (onProgress) onProgress(100, '100%', LoaderStatus.Done);\n                if (internalLoadType === InternalLoadType.DownloadBeforeProcessing) {\n                    return new Blob(chunks).arrayBuffer().then((splatData) => {\n                        return SplatLoader.loadFromFileData(splatData, minimumAlpha, compressionLevel, optimizeSplatData,\n                                                            sectionSize, sceneCenter, blockSize, bucketSize);\n                    });\n                } else if (internalLoadType === InternalLoadType.ProgressiveToSplatBuffer) {\n                    return splatData;\n                } else {\n                    return delayedExecute(() => {\n                        return finalize(splatData, optimizeSplatData, minimumAlpha, compressionLevel,\n                                        sectionSize, sceneCenter, blockSize, bucketSize);\n                    });\n                }\n            });\n        });\n    }\n\n    static loadFromFileData(splatFileData, minimumAlpha, compressionLevel, optimizeSplatData,\n                            sectionSize, sceneCenter, blockSize, bucketSize) {\n        return delayedExecute(() => {\n            const splatArray = SplatParser.parseStandardSplatToUncompressedSplatArray(splatFileData);\n            return finalize(splatArray, optimizeSplatData, minimumAlpha, compressionLevel,\n                            sectionSize, sceneCenter, blockSize, bucketSize);\n        });\n    }\n\n}\n","import { SplatBuffer } from '../SplatBuffer.js';\nimport { fetchWithProgress, delayedExecute, nativePromiseWithExtractedComponents } from '../../Util.js';\nimport { LoaderStatus } from '../LoaderStatus.js';\nimport { Constants } from '../../Constants.js';\n\nexport class KSplatLoader {\n\n   static checkVersion(buffer) {\n        const minVersionMajor = SplatBuffer.CurrentMajorVersion;\n        const minVersionMinor = SplatBuffer.CurrentMinorVersion;\n        const header = SplatBuffer.parseHeader(buffer);\n        if (header.versionMajor === minVersionMajor &&\n            header.versionMinor >= minVersionMinor ||\n            header.versionMajor > minVersionMajor) {\n           return true;\n        } else {\n            throw new Error(`KSplat version not supported: v${header.versionMajor}.${header.versionMinor}. ` +\n                            `Minimum required: v${minVersionMajor}.${minVersionMinor}`);\n        }\n    };\n\n    static loadFromURL(fileName, externalOnProgress, progressiveLoadToSplatBuffer, onSectionBuilt, headers) {\n        let directLoadBuffer;\n        let directLoadSplatBuffer;\n\n        let headerBuffer;\n        let header;\n        let headerLoaded = false;\n        let headerLoading = false;\n\n        let sectionHeadersBuffer;\n        let sectionHeaders = [];\n        let sectionHeadersLoaded = false;\n        let sectionHeadersLoading = false;\n\n        let numBytesLoaded = 0;\n        let numBytesProgressivelyLoaded = 0;\n        let totalBytesToDownload = 0;\n\n        let downloadComplete = false;\n        let loadComplete = false;\n        let loadSectionQueued = false;\n\n        let chunks = [];\n\n        const directLoadPromise = nativePromiseWithExtractedComponents();\n\n        const checkAndLoadHeader = () => {\n            if (!headerLoaded && !headerLoading && numBytesLoaded >= SplatBuffer.HeaderSizeBytes) {\n                headerLoading = true;\n                const headerAssemblyPromise = new Blob(chunks).arrayBuffer();\n                headerAssemblyPromise.then((bufferData) => {\n                    headerBuffer = new ArrayBuffer(SplatBuffer.HeaderSizeBytes);\n                    new Uint8Array(headerBuffer).set(new Uint8Array(bufferData, 0, SplatBuffer.HeaderSizeBytes));\n                    KSplatLoader.checkVersion(headerBuffer);\n                    headerLoading = false;\n                    headerLoaded = true;\n                    header = SplatBuffer.parseHeader(headerBuffer);\n                    window.setTimeout(() => {\n                        checkAndLoadSectionHeaders();\n                    }, 1);\n                });\n            }\n        };\n\n        let queuedCheckAndLoadSectionsCount = 0;\n        const queueCheckAndLoadSections = () => {\n            if (queuedCheckAndLoadSectionsCount === 0) {\n                queuedCheckAndLoadSectionsCount++;\n                window.setTimeout(() => {\n                    queuedCheckAndLoadSectionsCount--;\n                    checkAndLoadSections();\n                }, 1);\n            }\n        };\n\n        const checkAndLoadSectionHeaders = () => {\n            const performLoad = () => {\n                sectionHeadersLoading = true;\n                const sectionHeadersAssemblyPromise = new Blob(chunks).arrayBuffer();\n                sectionHeadersAssemblyPromise.then((bufferData) => {\n                    sectionHeadersLoading = false;\n                    sectionHeadersLoaded = true;\n                    sectionHeadersBuffer = new ArrayBuffer(header.maxSectionCount * SplatBuffer.SectionHeaderSizeBytes);\n                    new Uint8Array(sectionHeadersBuffer).set(new Uint8Array(bufferData, SplatBuffer.HeaderSizeBytes,\n                                                                            header.maxSectionCount * SplatBuffer.SectionHeaderSizeBytes));\n                    sectionHeaders = SplatBuffer.parseSectionHeaders(header, sectionHeadersBuffer, 0, false);\n                    let totalSectionStorageStorageByes = 0;\n                    for (let i = 0; i < header.maxSectionCount; i++) {\n                        totalSectionStorageStorageByes += sectionHeaders[i].storageSizeBytes;\n                    }\n                    const totalStorageSizeBytes = SplatBuffer.HeaderSizeBytes + header.maxSectionCount *\n                                                  SplatBuffer.SectionHeaderSizeBytes + totalSectionStorageStorageByes;\n                    if (!directLoadBuffer) {\n                        directLoadBuffer = new ArrayBuffer(totalStorageSizeBytes);\n                        let offset = 0;\n                        for (let i = 0; i < chunks.length; i++) {\n                            const chunk = chunks[i];\n                            new Uint8Array(directLoadBuffer, offset, chunk.byteLength).set(new Uint8Array(chunk));\n                            offset += chunk.byteLength;\n                        }\n                    }\n\n                    totalBytesToDownload = SplatBuffer.HeaderSizeBytes + SplatBuffer.SectionHeaderSizeBytes * header.maxSectionCount;\n                    for (let i = 0; i <= sectionHeaders.length && i < header.maxSectionCount; i++) {\n                        totalBytesToDownload += sectionHeaders[i].storageSizeBytes;\n                    }\n\n                    queueCheckAndLoadSections();\n                });\n            };\n\n            if (!sectionHeadersLoading && !sectionHeadersLoaded && headerLoaded &&\n                numBytesLoaded >= SplatBuffer.HeaderSizeBytes + SplatBuffer.SectionHeaderSizeBytes * header.maxSectionCount) {\n                performLoad();\n            }\n        };\n\n        const checkAndLoadSections = () => {\n            if (loadSectionQueued) return;\n            loadSectionQueued = true;\n            const checkAndLoadFunc = () => {\n                loadSectionQueued = false;\n                if (sectionHeadersLoaded) {\n\n                    if (loadComplete) return;\n\n                    downloadComplete = numBytesLoaded >= totalBytesToDownload;\n\n                    let bytesLoadedSinceLastSection = numBytesLoaded - numBytesProgressivelyLoaded;\n                    if (bytesLoadedSinceLastSection > Constants.ProgressiveLoadSectionSize || downloadComplete) {\n\n                        numBytesProgressivelyLoaded += Constants.ProgressiveLoadSectionSize;\n                        loadComplete = numBytesProgressivelyLoaded >= totalBytesToDownload;\n\n                        if (!directLoadSplatBuffer) directLoadSplatBuffer = new SplatBuffer(directLoadBuffer, false);\n\n                        const baseDataOffset = SplatBuffer.HeaderSizeBytes + SplatBuffer.SectionHeaderSizeBytes * header.maxSectionCount;\n                        let sectionBase = 0;\n                        let reachedSections = 0;\n                        let loadedSplatCount = 0;\n                        for (let i = 0; i < header.maxSectionCount; i++) {\n                            const sectionHeader = sectionHeaders[i];\n                            const bucketsDataOffset = sectionBase + sectionHeader.partiallyFilledBucketCount * 4 +\n                                                    sectionHeader.bucketStorageSizeBytes * sectionHeader.bucketCount;\n                            const bytesRequiredToReachSectionSplatData = baseDataOffset + bucketsDataOffset;\n                            if (numBytesProgressivelyLoaded >= bytesRequiredToReachSectionSplatData) {\n                                reachedSections++;\n                                const bytesPastSSectionSplatDataStart = numBytesProgressivelyLoaded - bytesRequiredToReachSectionSplatData;\n                                const baseDescriptor = SplatBuffer.CompressionLevels[header.compressionLevel];\n                                const shDesc = baseDescriptor.SphericalHarmonicsDegrees[sectionHeader.sphericalHarmonicsDegree];\n                                const bytesPerSplat = shDesc.BytesPerSplat;\n                                let loadedSplatsForSection = Math.floor(bytesPastSSectionSplatDataStart / bytesPerSplat);\n                                loadedSplatsForSection = Math.min(loadedSplatsForSection, sectionHeader.maxSplatCount);\n                                loadedSplatCount += loadedSplatsForSection;\n                                directLoadSplatBuffer.updateLoadedCounts(reachedSections, loadedSplatCount);\n                                directLoadSplatBuffer.updateSectionLoadedCounts(i, loadedSplatsForSection);\n                            } else {\n                                break;\n                            }\n                            sectionBase += sectionHeader.storageSizeBytes;\n                        }\n\n                        onSectionBuilt(directLoadSplatBuffer, loadComplete);\n\n                        const percentComplete = numBytesProgressivelyLoaded / totalBytesToDownload * 100;\n                        const percentLabel = (percentComplete).toFixed(2) + '%';\n\n                        if (externalOnProgress) externalOnProgress(percentComplete, percentLabel, LoaderStatus.Downloading);\n\n                        if (loadComplete) {\n                            directLoadPromise.resolve(directLoadSplatBuffer);\n                        } else {\n                            checkAndLoadSections();\n                        }\n                    }\n                }\n            };\n            window.setTimeout(checkAndLoadFunc, Constants.ProgressiveLoadSectionDelayDuration);\n        };\n\n        const localOnProgress = (percent, percentStr, chunk) => {\n            if (chunk) {\n                chunks.push(chunk);\n                if (directLoadBuffer) {\n                    new Uint8Array(directLoadBuffer, numBytesLoaded, chunk.byteLength).set(new Uint8Array(chunk));\n                }\n                numBytesLoaded += chunk.byteLength;\n            }\n            if (progressiveLoadToSplatBuffer) {\n                checkAndLoadHeader();\n                checkAndLoadSectionHeaders();\n                checkAndLoadSections();\n            } else {\n                if (externalOnProgress) externalOnProgress(percent, percentStr, LoaderStatus.Downloading);\n            }\n        };\n\n        return fetchWithProgress(fileName, localOnProgress, !progressiveLoadToSplatBuffer, headers).then((fullBuffer) => {\n            if (externalOnProgress) externalOnProgress(0, '0%', LoaderStatus.Processing);\n            const loadPromise = progressiveLoadToSplatBuffer ? directLoadPromise.promise : KSplatLoader.loadFromFileData(fullBuffer);\n            return loadPromise.then((splatBuffer) => {\n                if (externalOnProgress) externalOnProgress(100, '100%', LoaderStatus.Done);\n                return splatBuffer;\n            });\n        });\n    }\n\n    static loadFromFileData(fileData) {\n        return delayedExecute(() => {\n            KSplatLoader.checkVersion(fileData);\n            return new SplatBuffer(fileData);\n        });\n    }\n\n    static downloadFile = function() {\n\n        let downLoadLink;\n\n        return function(splatBuffer, fileName) {\n            const blob = new Blob([splatBuffer.bufferData], {\n                type: 'application/octet-stream',\n            });\n\n            if (!downLoadLink) {\n                downLoadLink = document.createElement('a');\n                document.body.appendChild(downLoadLink);\n            }\n            downLoadLink.download = fileName;\n            downLoadLink.href = URL.createObjectURL(blob);\n            downLoadLink.click();\n        };\n\n    }();\n\n}\n","export const SceneFormat = {\n    'Splat': 0,\n    'KSplat': 1,\n    'Ply': 2,\n    'Spz': 3\n};\n","import { SceneFormat } from './SceneFormat.js';\n\nexport const sceneFormatFromPath = (path) => {\n    if (path.endsWith('.ply')) return SceneFormat.Ply;\n    else if (path.endsWith('.splat')) return SceneFormat.Splat;\n    else if (path.endsWith('.ksplat')) return SceneFormat.KSplat;\n    else if (path.endsWith('.spz')) return SceneFormat.Spz;\n    return null;\n};\n","/*\nCopyright © 2010-2024 three.js authors & Mark Kellogg\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n*/\n\nimport {\n    EventDispatcher,\n    MOUSE,\n    Quaternion,\n    Spherical,\n    TOUCH,\n    Vector2,\n    Vector3,\n    Plane,\n    Ray,\n    MathUtils\n} from 'three';\n\n// OrbitControls performs orbiting, dollying (zooming), and panning.\n// Unlike TrackballControls, it maintains the \"up\" direction object.up (+Y by default).\n//\n//    Orbit - left mouse / touch: one-finger move\n//    Zoom - middle mouse, or mousewheel / touch: two-finger spread or squish\n//    Pan - right mouse, or left mouse + ctrl/meta/shiftKey, or arrow keys / touch: two-finger move\n\nconst _changeEvent = { type: 'change' };\nconst _startEvent = { type: 'start' };\nconst _endEvent = { type: 'end' };\nconst _ray = new Ray();\nconst _plane = new Plane();\nconst TILT_LIMIT = Math.cos( 70 * MathUtils.DEG2RAD );\n\nclass OrbitControls extends EventDispatcher {\n\n    constructor( object, domElement ) {\n\n        super();\n\n        this.object = object;\n        this.domElement = domElement;\n        this.domElement.style.touchAction = 'none'; // disable touch scroll\n\n        // Set to false to disable this control\n        this.enabled = true;\n\n        // \"target\" sets the location of focus, where the object orbits around\n        this.target = new Vector3();\n\n        // How far you can dolly in and out ( PerspectiveCamera only )\n        this.minDistance = 0;\n        this.maxDistance = Infinity;\n\n        // How far you can zoom in and out ( OrthographicCamera only )\n        this.minZoom = 0;\n        this.maxZoom = Infinity;\n\n        // How far you can orbit vertically, upper and lower limits.\n        // Range is 0 to Math.PI radians.\n        this.minPolarAngle = 0; // radians\n        this.maxPolarAngle = Math.PI; // radians\n\n        // How far you can orbit horizontally, upper and lower limits.\n        // If set, the interval [min, max] must be a sub-interval of [- 2 PI, 2 PI], with ( max - min < 2 PI )\n        this.minAzimuthAngle = - Infinity; // radians\n        this.maxAzimuthAngle = Infinity; // radians\n\n        // Set to true to enable damping (inertia)\n        // If damping is enabled, you must call controls.update() in your animation loop\n        this.enableDamping = false;\n        this.dampingFactor = 0.05;\n\n        // This option actually enables dollying in and out; left as \"zoom\" for backwards compatibility.\n        // Set to false to disable zooming\n        this.enableZoom = true;\n        this.zoomSpeed = 1.0;\n\n        // Set to false to disable rotating\n        this.enableRotate = true;\n        this.rotateSpeed = 1.0;\n\n        // Set to false to disable panning\n        this.enablePan = true;\n        this.panSpeed = 1.0;\n        this.screenSpacePanning = true; // if false, pan orthogonal to world-space direction camera.up\n        this.keyPanSpeed = 7.0; // pixels moved per arrow key push\n        this.zoomToCursor = false;\n\n        // Set to true to automatically rotate around the target\n        // If auto-rotate is enabled, you must call controls.update() in your animation loop\n        this.autoRotate = false;\n        this.autoRotateSpeed = 2.0; // 30 seconds per orbit when fps is 60\n\n        // The four arrow keys\n        this.keys = { LEFT: 'KeyA', UP: 'KeyW', RIGHT: 'KeyD', BOTTOM: 'KeyS' };\n\n        // Mouse buttons\n        this.mouseButtons = { LEFT: MOUSE.ROTATE, MIDDLE: MOUSE.DOLLY, RIGHT: MOUSE.PAN };\n\n        // Touch fingers\n        this.touches = { ONE: TOUCH.ROTATE, TWO: TOUCH.DOLLY_PAN };\n\n        // for reset\n        this.target0 = this.target.clone();\n        this.position0 = this.object.position.clone();\n        this.zoom0 = this.object.zoom;\n\n        // the target DOM element for key events\n        this._domElementKeyEvents = null;\n\n        //\n        // public methods\n        //\n\n        this.getPolarAngle = function() {\n\n            return spherical.phi;\n\n        };\n\n        this.getAzimuthalAngle = function() {\n\n            return spherical.theta;\n\n        };\n\n        this.getDistance = function() {\n\n            return this.object.position.distanceTo( this.target );\n\n        };\n\n        this.listenToKeyEvents = function( domElement ) {\n\n            domElement.addEventListener( 'keydown', onKeyDown );\n            this._domElementKeyEvents = domElement;\n\n        };\n\n        this.stopListenToKeyEvents = function() {\n\n            this._domElementKeyEvents.removeEventListener( 'keydown', onKeyDown );\n            this._domElementKeyEvents = null;\n\n        };\n\n        this.saveState = function() {\n\n            scope.target0.copy( scope.target );\n            scope.position0.copy( scope.object.position );\n            scope.zoom0 = scope.object.zoom;\n\n        };\n\n        this.reset = function() {\n\n            scope.target.copy( scope.target0 );\n            scope.object.position.copy( scope.position0 );\n            scope.object.zoom = scope.zoom0;\n            this.clearDampedRotation();\n            this.clearDampedPan();\n\n            scope.object.updateProjectionMatrix();\n            scope.dispatchEvent( _changeEvent );\n\n            scope.update();\n\n            state = STATE.NONE;\n\n        };\n\n        this.clearDampedRotation = function() {\n            sphericalDelta.theta = 0.0;\n            sphericalDelta.phi = 0.0;\n        };\n\n        this.clearDampedPan = function() {\n            panOffset.set(0, 0, 0);\n        };\n\n        // this method is exposed, but perhaps it would be better if we can make it private...\n        this.update = function() {\n\n            const offset = new Vector3();\n\n            // so camera.up is the orbit axis\n            const quat = new Quaternion().setFromUnitVectors( object.up, new Vector3( 0, 1, 0 ) );\n            const quatInverse = quat.clone().invert();\n\n            const lastPosition = new Vector3();\n            const lastQuaternion = new Quaternion();\n            const lastTargetPosition = new Vector3();\n\n            const twoPI = 2 * Math.PI;\n\n            return function update() {\n\n                quat.setFromUnitVectors( object.up, new Vector3( 0, 1, 0 ) );\n                quatInverse.copy(quat).invert();\n\n                const position = scope.object.position;\n\n                offset.copy( position ).sub( scope.target );\n\n                // rotate offset to \"y-axis-is-up\" space\n                offset.applyQuaternion( quat );\n\n                // angle from z-axis around y-axis\n                spherical.setFromVector3( offset );\n\n                if ( scope.autoRotate && state === STATE.NONE ) {\n\n                    rotateLeft( getAutoRotationAngle() );\n\n                }\n\n                if ( scope.enableDamping ) {\n\n                    spherical.theta += sphericalDelta.theta * scope.dampingFactor;\n                    spherical.phi += sphericalDelta.phi * scope.dampingFactor;\n\n                } else {\n\n                    spherical.theta += sphericalDelta.theta;\n                    spherical.phi += sphericalDelta.phi;\n\n                }\n\n                // restrict theta to be between desired limits\n\n                let min = scope.minAzimuthAngle;\n                let max = scope.maxAzimuthAngle;\n\n                if ( isFinite( min ) && isFinite( max ) ) {\n\n                    if ( min < - Math.PI ) min += twoPI; else if ( min > Math.PI ) min -= twoPI;\n\n                    if ( max < - Math.PI ) max += twoPI; else if ( max > Math.PI ) max -= twoPI;\n\n                    if ( min <= max ) {\n\n                        spherical.theta = Math.max( min, Math.min( max, spherical.theta ) );\n\n                    } else {\n\n                        spherical.theta = ( spherical.theta > ( min + max ) / 2 ) ?\n                            Math.max( min, spherical.theta ) :\n                            Math.min( max, spherical.theta );\n\n                    }\n\n                }\n\n                // restrict phi to be between desired limits\n                spherical.phi = Math.max( scope.minPolarAngle, Math.min( scope.maxPolarAngle, spherical.phi ) );\n\n                spherical.makeSafe();\n\n\n                // move target to panned location\n\n                if ( scope.enableDamping === true ) {\n\n                    scope.target.addScaledVector( panOffset, scope.dampingFactor );\n\n                } else {\n\n                    scope.target.add( panOffset );\n\n                }\n\n                // adjust the camera position based on zoom only if we're not zooming to the cursor or if it's an ortho camera\n                // we adjust zoom later in these cases\n                if ( scope.zoomToCursor && performCursorZoom || scope.object.isOrthographicCamera ) {\n\n                    spherical.radius = clampDistance( spherical.radius );\n\n                } else {\n\n                    spherical.radius = clampDistance( spherical.radius * scale );\n\n                }\n\n\n                offset.setFromSpherical( spherical );\n\n                // rotate offset back to \"camera-up-vector-is-up\" space\n                offset.applyQuaternion( quatInverse );\n\n                position.copy( scope.target ).add( offset );\n\n                scope.object.lookAt( scope.target );\n\n                if ( scope.enableDamping === true ) {\n\n                    sphericalDelta.theta *= ( 1 - scope.dampingFactor );\n                    sphericalDelta.phi *= ( 1 - scope.dampingFactor );\n\n                    panOffset.multiplyScalar( 1 - scope.dampingFactor );\n\n                } else {\n\n                    sphericalDelta.set( 0, 0, 0 );\n\n                    panOffset.set( 0, 0, 0 );\n\n                }\n\n                // adjust camera position\n                let zoomChanged = false;\n                if ( scope.zoomToCursor && performCursorZoom ) {\n\n                    let newRadius = null;\n                    if ( scope.object.isPerspectiveCamera ) {\n\n                        // move the camera down the pointer ray\n                        // this method avoids floating point error\n                        const prevRadius = offset.length();\n                        newRadius = clampDistance( prevRadius * scale );\n\n                        const radiusDelta = prevRadius - newRadius;\n                        scope.object.position.addScaledVector( dollyDirection, radiusDelta );\n                        scope.object.updateMatrixWorld();\n\n                    } else if ( scope.object.isOrthographicCamera ) {\n\n                        // adjust the ortho camera position based on zoom changes\n                        const mouseBefore = new Vector3( mouse.x, mouse.y, 0 );\n                        mouseBefore.unproject( scope.object );\n\n                        scope.object.zoom = Math.max( scope.minZoom, Math.min( scope.maxZoom, scope.object.zoom / scale ) );\n                        scope.object.updateProjectionMatrix();\n                        zoomChanged = true;\n\n                        const mouseAfter = new Vector3( mouse.x, mouse.y, 0 );\n                        mouseAfter.unproject( scope.object );\n\n                        scope.object.position.sub( mouseAfter ).add( mouseBefore );\n                        scope.object.updateMatrixWorld();\n\n                        newRadius = offset.length();\n\n                    } else {\n\n                        console.warn( 'WARNING: OrbitControls.js encountered an unknown camera type - zoom to cursor disabled.' );\n                        scope.zoomToCursor = false;\n\n                    }\n\n                    // handle the placement of the target\n                    if ( newRadius !== null ) {\n\n                        if ( this.screenSpacePanning ) {\n\n                            // position the orbit target in front of the new camera position\n                            scope.target.set( 0, 0, - 1 )\n                                .transformDirection( scope.object.matrix )\n                                .multiplyScalar( newRadius )\n                                .add( scope.object.position );\n\n                        } else {\n\n                            // get the ray and translation plane to compute target\n                            _ray.origin.copy( scope.object.position );\n                            _ray.direction.set( 0, 0, - 1 ).transformDirection( scope.object.matrix );\n\n                            // if the camera is 20 degrees above the horizon then don't adjust the focus target to avoid\n                            // extremely large values\n                            if ( Math.abs( scope.object.up.dot( _ray.direction ) ) < TILT_LIMIT ) {\n\n                                object.lookAt( scope.target );\n\n                            } else {\n\n                                _plane.setFromNormalAndCoplanarPoint( scope.object.up, scope.target );\n                                _ray.intersectPlane( _plane, scope.target );\n\n                            }\n\n                        }\n\n                    }\n\n                } else if ( scope.object.isOrthographicCamera ) {\n\n                    scope.object.zoom = Math.max( scope.minZoom, Math.min( scope.maxZoom, scope.object.zoom / scale ) );\n                    scope.object.updateProjectionMatrix();\n                    zoomChanged = true;\n\n                }\n\n                scale = 1;\n                performCursorZoom = false;\n\n                // update condition is:\n                // min(camera displacement, camera rotation in radians)^2 > EPS\n                // using small-angle approximation cos(x/2) = 1 - x^2 / 8\n\n                if ( zoomChanged ||\n                    lastPosition.distanceToSquared( scope.object.position ) > EPS ||\n                    8 * ( 1 - lastQuaternion.dot( scope.object.quaternion ) ) > EPS ||\n                    lastTargetPosition.distanceToSquared( scope.target ) > 0 ) {\n\n                    scope.dispatchEvent( _changeEvent );\n\n                    lastPosition.copy( scope.object.position );\n                    lastQuaternion.copy( scope.object.quaternion );\n                    lastTargetPosition.copy( scope.target );\n\n                    zoomChanged = false;\n\n                    return true;\n\n                }\n\n                return false;\n\n            };\n\n        }();\n\n        this.dispose = function() {\n\n            scope.domElement.removeEventListener( 'contextmenu', onContextMenu );\n\n            scope.domElement.removeEventListener( 'pointerdown', onPointerDown );\n            scope.domElement.removeEventListener( 'pointercancel', onPointerUp );\n            scope.domElement.removeEventListener( 'wheel', onMouseWheel );\n\n            scope.domElement.removeEventListener( 'pointermove', onPointerMove );\n            scope.domElement.removeEventListener( 'pointerup', onPointerUp );\n\n\n            if ( scope._domElementKeyEvents !== null ) {\n\n                scope._domElementKeyEvents.removeEventListener( 'keydown', onKeyDown );\n                scope._domElementKeyEvents = null;\n\n            }\n\n        };\n\n        //\n        // internals\n        //\n\n        const scope = this;\n\n        const STATE = {\n            NONE: - 1,\n            ROTATE: 0,\n            DOLLY: 1,\n            PAN: 2,\n            TOUCH_ROTATE: 3,\n            TOUCH_PAN: 4,\n            TOUCH_DOLLY_PAN: 5,\n            TOUCH_DOLLY_ROTATE: 6\n        };\n\n        let state = STATE.NONE;\n\n        const EPS = 0.000001;\n\n        // current position in spherical coordinates\n        const spherical = new Spherical();\n        const sphericalDelta = new Spherical();\n\n        let scale = 1;\n        const panOffset = new Vector3();\n\n        const rotateStart = new Vector2();\n        const rotateEnd = new Vector2();\n        const rotateDelta = new Vector2();\n\n        const panStart = new Vector2();\n        const panEnd = new Vector2();\n        const panDelta = new Vector2();\n\n        const dollyStart = new Vector2();\n        const dollyEnd = new Vector2();\n        const dollyDelta = new Vector2();\n\n        const dollyDirection = new Vector3();\n        const mouse = new Vector2();\n        let performCursorZoom = false;\n\n        const pointers = [];\n        const pointerPositions = {};\n\n        function getAutoRotationAngle() {\n\n            return 2 * Math.PI / 60 / 60 * scope.autoRotateSpeed;\n\n        }\n\n        function getZoomScale() {\n\n            return Math.pow( 0.95, scope.zoomSpeed );\n\n        }\n\n        function rotateLeft( angle ) {\n\n            sphericalDelta.theta -= angle;\n\n        }\n\n        function rotateUp( angle ) {\n\n            sphericalDelta.phi -= angle;\n\n        }\n\n        const panLeft = function() {\n\n            const v = new Vector3();\n\n            return function panLeft( distance, objectMatrix ) {\n\n                v.setFromMatrixColumn( objectMatrix, 0 ); // get X column of objectMatrix\n                v.multiplyScalar( - distance );\n\n                panOffset.add( v );\n\n            };\n\n        }();\n\n        const panUp = function() {\n\n            const v = new Vector3();\n\n            return function panUp( distance, objectMatrix ) {\n\n                if ( scope.screenSpacePanning === true ) {\n\n                    v.setFromMatrixColumn( objectMatrix, 1 );\n\n                } else {\n\n                    v.setFromMatrixColumn( objectMatrix, 0 );\n                    v.crossVectors( scope.object.up, v );\n\n                }\n\n                v.multiplyScalar( distance );\n\n                panOffset.add( v );\n\n            };\n\n        }();\n\n        // deltaX and deltaY are in pixels; right and down are positive\n        const pan = function() {\n\n            const offset = new Vector3();\n\n            return function pan( deltaX, deltaY ) {\n\n                const element = scope.domElement;\n\n                if ( scope.object.isPerspectiveCamera ) {\n\n                    // perspective\n                    const position = scope.object.position;\n                    offset.copy( position ).sub( scope.target );\n                    let targetDistance = offset.length();\n\n                    // half of the fov is center to top of screen\n                    targetDistance *= Math.tan( ( scope.object.fov / 2 ) * Math.PI / 180.0 );\n\n                    // we use only clientHeight here so aspect ratio does not distort speed\n                    panLeft( 2 * deltaX * targetDistance / element.clientHeight, scope.object.matrix );\n                    panUp( 2 * deltaY * targetDistance / element.clientHeight, scope.object.matrix );\n\n                } else if ( scope.object.isOrthographicCamera ) {\n\n                    // orthographic\n                    panLeft( deltaX * ( scope.object.right - scope.object.left ) /\n                                        scope.object.zoom / element.clientWidth, scope.object.matrix );\n                    panUp( deltaY * ( scope.object.top - scope.object.bottom ) / scope.object.zoom /\n                                      element.clientHeight, scope.object.matrix );\n\n                } else {\n\n                    // camera neither orthographic nor perspective\n                    console.warn( 'WARNING: OrbitControls.js encountered an unknown camera type - pan disabled.' );\n                    scope.enablePan = false;\n\n                }\n\n            };\n\n        }();\n\n        function dollyOut( dollyScale ) {\n\n            if ( scope.object.isPerspectiveCamera || scope.object.isOrthographicCamera ) {\n\n                scale /= dollyScale;\n\n            } else {\n\n                console.warn( 'WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.' );\n                scope.enableZoom = false;\n\n            }\n\n        }\n\n        function dollyIn( dollyScale ) {\n\n            if ( scope.object.isPerspectiveCamera || scope.object.isOrthographicCamera ) {\n\n                scale *= dollyScale;\n\n            } else {\n\n                console.warn( 'WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.' );\n                scope.enableZoom = false;\n\n            }\n\n        }\n\n        function updateMouseParameters( event ) {\n\n            if ( ! scope.zoomToCursor ) {\n\n                return;\n\n            }\n\n            performCursorZoom = true;\n\n            const rect = scope.domElement.getBoundingClientRect();\n            const x = event.clientX - rect.left;\n            const y = event.clientY - rect.top;\n            const w = rect.width;\n            const h = rect.height;\n\n            mouse.x = ( x / w ) * 2 - 1;\n            mouse.y = - ( y / h ) * 2 + 1;\n\n            dollyDirection.set( mouse.x, mouse.y, 1 ).unproject( object ).sub( object.position ).normalize();\n\n        }\n\n        function clampDistance( dist ) {\n\n            return Math.max( scope.minDistance, Math.min( scope.maxDistance, dist ) );\n\n        }\n\n        //\n        // event callbacks - update the object state\n        //\n\n        function handleMouseDownRotate( event ) {\n\n            rotateStart.set( event.clientX, event.clientY );\n\n        }\n\n        function handleMouseDownDolly( event ) {\n\n            updateMouseParameters( event );\n            dollyStart.set( event.clientX, event.clientY );\n\n        }\n\n        function handleMouseDownPan( event ) {\n\n            panStart.set( event.clientX, event.clientY );\n\n        }\n\n        function handleMouseMoveRotate( event ) {\n\n            rotateEnd.set( event.clientX, event.clientY );\n\n            rotateDelta.subVectors( rotateEnd, rotateStart ).multiplyScalar( scope.rotateSpeed );\n\n            const element = scope.domElement;\n\n            rotateLeft( 2 * Math.PI * rotateDelta.x / element.clientHeight ); // yes, height\n\n            rotateUp( 2 * Math.PI * rotateDelta.y / element.clientHeight );\n\n            rotateStart.copy( rotateEnd );\n\n            scope.update();\n\n        }\n\n        function handleMouseMoveDolly( event ) {\n\n            dollyEnd.set( event.clientX, event.clientY );\n\n            dollyDelta.subVectors( dollyEnd, dollyStart );\n\n            if ( dollyDelta.y > 0 ) {\n\n                dollyOut( getZoomScale() );\n\n            } else if ( dollyDelta.y < 0 ) {\n\n                dollyIn( getZoomScale() );\n\n            }\n\n            dollyStart.copy( dollyEnd );\n\n            scope.update();\n\n        }\n\n        function handleMouseMovePan( event ) {\n\n            panEnd.set( event.clientX, event.clientY );\n\n            panDelta.subVectors( panEnd, panStart ).multiplyScalar( scope.panSpeed );\n\n            pan( panDelta.x, panDelta.y );\n\n            panStart.copy( panEnd );\n\n            scope.update();\n\n        }\n\n        function handleMouseWheel( event ) {\n\n            updateMouseParameters( event );\n\n            if ( event.deltaY < 0 ) {\n\n                dollyIn( getZoomScale() );\n\n            } else if ( event.deltaY > 0 ) {\n\n                dollyOut( getZoomScale() );\n\n            }\n\n            scope.update();\n\n        }\n\n        function handleKeyDown( event ) {\n\n            let needsUpdate = false;\n\n            switch ( event.code ) {\n\n                case scope.keys.UP:\n\n                    if ( event.ctrlKey || event.metaKey || event.shiftKey ) {\n\n                        rotateUp( 2 * Math.PI * scope.rotateSpeed / scope.domElement.clientHeight );\n\n                    } else {\n\n                        pan( 0, scope.keyPanSpeed );\n\n                    }\n\n                    needsUpdate = true;\n                    break;\n\n                case scope.keys.BOTTOM:\n\n                    if ( event.ctrlKey || event.metaKey || event.shiftKey ) {\n\n                        rotateUp( - 2 * Math.PI * scope.rotateSpeed / scope.domElement.clientHeight );\n\n                    } else {\n\n                        pan( 0, - scope.keyPanSpeed );\n\n                    }\n\n                    needsUpdate = true;\n                    break;\n\n                case scope.keys.LEFT:\n\n                    if ( event.ctrlKey || event.metaKey || event.shiftKey ) {\n\n                        rotateLeft( 2 * Math.PI * scope.rotateSpeed / scope.domElement.clientHeight );\n\n                    } else {\n\n                        pan( scope.keyPanSpeed, 0 );\n\n                    }\n\n                    needsUpdate = true;\n                    break;\n\n                case scope.keys.RIGHT:\n\n                    if ( event.ctrlKey || event.metaKey || event.shiftKey ) {\n\n                        rotateLeft( - 2 * Math.PI * scope.rotateSpeed / scope.domElement.clientHeight );\n\n                    } else {\n\n                        pan( - scope.keyPanSpeed, 0 );\n\n                    }\n\n                    needsUpdate = true;\n                    break;\n\n            }\n\n            if ( needsUpdate ) {\n\n                // prevent the browser from scrolling on cursor keys\n                event.preventDefault();\n\n                scope.update();\n\n            }\n\n\n        }\n\n        function handleTouchStartRotate() {\n\n            if ( pointers.length === 1 ) {\n\n                rotateStart.set( pointers[0].pageX, pointers[0].pageY );\n\n            } else {\n\n                const x = 0.5 * ( pointers[0].pageX + pointers[1].pageX );\n                const y = 0.5 * ( pointers[0].pageY + pointers[1].pageY );\n\n                rotateStart.set( x, y );\n\n            }\n\n        }\n\n        function handleTouchStartPan() {\n\n            if ( pointers.length === 1 ) {\n\n                panStart.set( pointers[0].pageX, pointers[0].pageY );\n\n            } else {\n\n                const x = 0.5 * ( pointers[0].pageX + pointers[1].pageX );\n                const y = 0.5 * ( pointers[0].pageY + pointers[1].pageY );\n\n                panStart.set( x, y );\n\n            }\n\n        }\n\n        function handleTouchStartDolly() {\n\n            const dx = pointers[0].pageX - pointers[1].pageX;\n            const dy = pointers[0].pageY - pointers[1].pageY;\n\n            const distance = Math.sqrt( dx * dx + dy * dy );\n\n            dollyStart.set( 0, distance );\n\n        }\n\n        function handleTouchStartDollyPan() {\n\n            if ( scope.enableZoom ) handleTouchStartDolly();\n\n            if ( scope.enablePan ) handleTouchStartPan();\n\n        }\n\n        function handleTouchStartDollyRotate() {\n\n            if ( scope.enableZoom ) handleTouchStartDolly();\n\n            if ( scope.enableRotate ) handleTouchStartRotate();\n\n        }\n\n        function handleTouchMoveRotate( event ) {\n\n            if ( pointers.length == 1 ) {\n\n                rotateEnd.set( event.pageX, event.pageY );\n\n            } else {\n\n                const position = getSecondPointerPosition( event );\n\n                const x = 0.5 * ( event.pageX + position.x );\n                const y = 0.5 * ( event.pageY + position.y );\n\n                rotateEnd.set( x, y );\n\n            }\n\n            rotateDelta.subVectors( rotateEnd, rotateStart ).multiplyScalar( scope.rotateSpeed );\n\n            const element = scope.domElement;\n\n            rotateLeft( 2 * Math.PI * rotateDelta.x / element.clientHeight ); // yes, height\n\n            rotateUp( 2 * Math.PI * rotateDelta.y / element.clientHeight );\n\n            rotateStart.copy( rotateEnd );\n\n        }\n\n        function handleTouchMovePan( event ) {\n\n            if ( pointers.length === 1 ) {\n\n                panEnd.set( event.pageX, event.pageY );\n\n            } else {\n\n                const position = getSecondPointerPosition( event );\n\n                const x = 0.5 * ( event.pageX + position.x );\n                const y = 0.5 * ( event.pageY + position.y );\n\n                panEnd.set( x, y );\n\n            }\n\n            panDelta.subVectors( panEnd, panStart ).multiplyScalar( scope.panSpeed );\n\n            pan( panDelta.x, panDelta.y );\n\n            panStart.copy( panEnd );\n\n        }\n\n        function handleTouchMoveDolly( event ) {\n\n            const position = getSecondPointerPosition( event );\n\n            const dx = event.pageX - position.x;\n            const dy = event.pageY - position.y;\n\n            const distance = Math.sqrt( dx * dx + dy * dy );\n\n            dollyEnd.set( 0, distance );\n\n            dollyDelta.set( 0, Math.pow( dollyEnd.y / dollyStart.y, scope.zoomSpeed ) );\n\n            dollyOut( dollyDelta.y );\n\n            dollyStart.copy( dollyEnd );\n\n        }\n\n        function handleTouchMoveDollyPan( event ) {\n\n            if ( scope.enableZoom ) handleTouchMoveDolly( event );\n\n            if ( scope.enablePan ) handleTouchMovePan( event );\n\n        }\n\n        function handleTouchMoveDollyRotate( event ) {\n\n            if ( scope.enableZoom ) handleTouchMoveDolly( event );\n\n            if ( scope.enableRotate ) handleTouchMoveRotate( event );\n\n        }\n\n        //\n        // event handlers - FSM: listen for events and reset state\n        //\n\n        function onPointerDown( event ) {\n\n            if ( scope.enabled === false ) return;\n\n            if ( pointers.length === 0 ) {\n\n                scope.domElement.setPointerCapture( event.pointerId );\n\n                scope.domElement.addEventListener( 'pointermove', onPointerMove );\n                scope.domElement.addEventListener( 'pointerup', onPointerUp );\n\n            }\n\n            //\n\n            addPointer( event );\n\n            if ( event.pointerType === 'touch' ) {\n\n                onTouchStart( event );\n\n            } else {\n\n                onMouseDown( event );\n\n            }\n\n        }\n\n        function onPointerMove( event ) {\n\n            if ( scope.enabled === false ) return;\n\n            if ( event.pointerType === 'touch' ) {\n\n                onTouchMove( event );\n\n            } else {\n\n                onMouseMove( event );\n\n            }\n\n        }\n\n        function onPointerUp( event ) {\n\n            removePointer( event );\n\n            if ( pointers.length === 0 ) {\n\n                scope.domElement.releasePointerCapture( event.pointerId );\n\n                scope.domElement.removeEventListener( 'pointermove', onPointerMove );\n                scope.domElement.removeEventListener( 'pointerup', onPointerUp );\n\n            }\n\n            scope.dispatchEvent( _endEvent );\n\n            state = STATE.NONE;\n\n        }\n\n        function onMouseDown( event ) {\n\n            let mouseAction;\n\n            switch ( event.button ) {\n\n                case 0:\n\n                    mouseAction = scope.mouseButtons.LEFT;\n                    break;\n\n                case 1:\n\n                    mouseAction = scope.mouseButtons.MIDDLE;\n                    break;\n\n                case 2:\n\n                    mouseAction = scope.mouseButtons.RIGHT;\n                    break;\n\n                default:\n\n                    mouseAction = - 1;\n\n            }\n\n            switch ( mouseAction ) {\n\n                case MOUSE.DOLLY:\n\n                    if ( scope.enableZoom === false ) return;\n\n                    handleMouseDownDolly( event );\n\n                    state = STATE.DOLLY;\n\n                    break;\n\n                case MOUSE.ROTATE:\n\n                    if ( event.ctrlKey || event.metaKey || event.shiftKey ) {\n\n                        if ( scope.enablePan === false ) return;\n\n                        handleMouseDownPan( event );\n\n                        state = STATE.PAN;\n\n                    } else {\n\n                        if ( scope.enableRotate === false ) return;\n\n                        handleMouseDownRotate( event );\n\n                        state = STATE.ROTATE;\n\n                    }\n\n                    break;\n\n                case MOUSE.PAN:\n\n                    if ( event.ctrlKey || event.metaKey || event.shiftKey ) {\n\n                        if ( scope.enableRotate === false ) return;\n\n                        handleMouseDownRotate( event );\n\n                        state = STATE.ROTATE;\n\n                    } else {\n\n                        if ( scope.enablePan === false ) return;\n\n                        handleMouseDownPan( event );\n\n                        state = STATE.PAN;\n\n                    }\n\n                    break;\n\n                default:\n\n                    state = STATE.NONE;\n\n            }\n\n            if ( state !== STATE.NONE ) {\n\n                scope.dispatchEvent( _startEvent );\n\n            }\n\n        }\n\n        function onMouseMove( event ) {\n\n            switch ( state ) {\n\n                case STATE.ROTATE:\n\n                    if ( scope.enableRotate === false ) return;\n\n                    handleMouseMoveRotate( event );\n\n                    break;\n\n                case STATE.DOLLY:\n\n                    if ( scope.enableZoom === false ) return;\n\n                    handleMouseMoveDolly( event );\n\n                    break;\n\n                case STATE.PAN:\n\n                    if ( scope.enablePan === false ) return;\n\n                    handleMouseMovePan( event );\n\n                    break;\n\n            }\n\n        }\n\n        function onMouseWheel( event ) {\n\n            if ( scope.enabled === false || scope.enableZoom === false || state !== STATE.NONE ) return;\n\n            event.preventDefault();\n\n            scope.dispatchEvent( _startEvent );\n\n            handleMouseWheel( event );\n\n            scope.dispatchEvent( _endEvent );\n\n        }\n\n        function onKeyDown( event ) {\n\n            if ( scope.enabled === false || scope.enablePan === false ) return;\n\n            handleKeyDown( event );\n\n        }\n\n        function onTouchStart( event ) {\n\n            trackPointer( event );\n\n            switch ( pointers.length ) {\n\n                case 1:\n\n                    switch ( scope.touches.ONE ) {\n\n                        case TOUCH.ROTATE:\n\n                            if ( scope.enableRotate === false ) return;\n\n                            handleTouchStartRotate();\n\n                            state = STATE.TOUCH_ROTATE;\n\n                            break;\n\n                        case TOUCH.PAN:\n\n                            if ( scope.enablePan === false ) return;\n\n                            handleTouchStartPan();\n\n                            state = STATE.TOUCH_PAN;\n\n                            break;\n\n                        default:\n\n                            state = STATE.NONE;\n\n                    }\n\n                    break;\n\n                case 2:\n\n                    switch ( scope.touches.TWO ) {\n\n                        case TOUCH.DOLLY_PAN:\n\n                            if ( scope.enableZoom === false && scope.enablePan === false ) return;\n\n                            handleTouchStartDollyPan();\n\n                            state = STATE.TOUCH_DOLLY_PAN;\n\n                            break;\n\n                        case TOUCH.DOLLY_ROTATE:\n\n                            if ( scope.enableZoom === false && scope.enableRotate === false ) return;\n\n                            handleTouchStartDollyRotate();\n\n                            state = STATE.TOUCH_DOLLY_ROTATE;\n\n                            break;\n\n                        default:\n\n                            state = STATE.NONE;\n\n                    }\n\n                    break;\n\n                default:\n\n                    state = STATE.NONE;\n\n            }\n\n            if ( state !== STATE.NONE ) {\n\n                scope.dispatchEvent( _startEvent );\n\n            }\n\n        }\n\n        function onTouchMove( event ) {\n\n            trackPointer( event );\n\n            switch ( state ) {\n\n                case STATE.TOUCH_ROTATE:\n\n                    if ( scope.enableRotate === false ) return;\n\n                    handleTouchMoveRotate( event );\n\n                    scope.update();\n\n                    break;\n\n                case STATE.TOUCH_PAN:\n\n                    if ( scope.enablePan === false ) return;\n\n                    handleTouchMovePan( event );\n\n                    scope.update();\n\n                    break;\n\n                case STATE.TOUCH_DOLLY_PAN:\n\n                    if ( scope.enableZoom === false && scope.enablePan === false ) return;\n\n                    handleTouchMoveDollyPan( event );\n\n                    scope.update();\n\n                    break;\n\n                case STATE.TOUCH_DOLLY_ROTATE:\n\n                    if ( scope.enableZoom === false && scope.enableRotate === false ) return;\n\n                    handleTouchMoveDollyRotate( event );\n\n                    scope.update();\n\n                    break;\n\n                default:\n\n                    state = STATE.NONE;\n\n            }\n\n        }\n\n        function onContextMenu( event ) {\n\n            if ( scope.enabled === false ) return;\n\n            event.preventDefault();\n\n        }\n\n        function addPointer( event ) {\n\n            pointers.push( event );\n\n        }\n\n        function removePointer( event ) {\n\n            delete pointerPositions[event.pointerId];\n\n            for ( let i = 0; i < pointers.length; i ++ ) {\n\n                if ( pointers[i].pointerId == event.pointerId ) {\n\n                    pointers.splice( i, 1 );\n                    return;\n\n                }\n\n            }\n\n        }\n\n        function trackPointer( event ) {\n\n            let position = pointerPositions[event.pointerId];\n\n            if ( position === undefined ) {\n\n                position = new Vector2();\n                pointerPositions[event.pointerId] = position;\n\n            }\n\n            position.set( event.pageX, event.pageY );\n\n        }\n\n        function getSecondPointerPosition( event ) {\n\n            const pointer = ( event.pointerId === pointers[0].pointerId ) ? pointers[1] : pointers[0];\n\n            return pointerPositions[pointer.pointerId];\n\n        }\n\n        //\n\n        scope.domElement.addEventListener( 'contextmenu', onContextMenu );\n\n        scope.domElement.addEventListener( 'pointerdown', onPointerDown );\n        scope.domElement.addEventListener( 'pointercancel', onPointerUp );\n        scope.domElement.addEventListener( 'wheel', onMouseWheel, { passive: false } );\n\n        // force an update at start\n\n        this.update();\n\n    }\n\n}\n\nexport { OrbitControls };\n","export const fadeElement = (element, out, displayStyle, duration, onComplete) => {\n    const startTime = performance.now();\n\n    let startOpacity = element.style.display === 'none' ? 0 : parseFloat(element.style.opacity);\n    if (isNaN(startOpacity)) startOpacity = 1;\n\n    const interval = window.setInterval(() => {\n        const currentTime = performance.now();\n        const elapsed = currentTime - startTime;\n\n        let t = Math.min(elapsed / duration, 1.0);\n        if (t > 0.999) t = 1;\n\n        let opacity;\n        if (out) {\n            opacity = (1.0 - t) * startOpacity;\n            if (opacity < 0.0001) opacity = 0;\n        } else {\n            opacity = (1.0 - startOpacity) * t + startOpacity;\n        }\n\n        if (opacity > 0) {\n            element.style.display = displayStyle;\n            element.style.opacity = opacity;\n        } else {\n            element.style.display = 'none';\n        }\n\n        if (t >= 1) {\n            if (onComplete) onComplete();\n            window.clearInterval(interval);\n        }\n    }, 16);\n    return interval;\n};\n\nexport const cancelFade = (interval) => {\n    window.clearInterval(interval);\n};\n","import { fadeElement } from './Util.js';\n\nconst STANDARD_FADE_DURATION = 500;\n\nexport class LoadingSpinner {\n\n    static elementIDGen = 0;\n\n    constructor(message, container) {\n\n        this.taskIDGen = 0;\n        this.elementID = LoadingSpinner.elementIDGen++;\n\n        this.tasks = [];\n\n        this.message = message || 'Loading...';\n        this.container = container || document.body;\n\n        this.spinnerContainerOuter = document.createElement('div');\n        this.spinnerContainerOuter.className = `spinnerOuterContainer${this.elementID}`;\n        this.spinnerContainerOuter.style.display = 'none';\n\n        this.spinnerContainerPrimary = document.createElement('div');\n        this.spinnerContainerPrimary.className = `spinnerContainerPrimary${this.elementID}`;\n        this.spinnerPrimary = document.createElement('div');\n        this.spinnerPrimary.classList.add(`spinner${this.elementID}`, `spinnerPrimary${this.elementID}`);\n        this.messageContainerPrimary = document.createElement('div');\n        this.messageContainerPrimary.classList.add(`messageContainer${this.elementID}`, `messageContainerPrimary${this.elementID}`);\n        this.messageContainerPrimary.innerHTML = this.message;\n\n        this.spinnerContainerMin = document.createElement('div');\n        this.spinnerContainerMin.className = `spinnerContainerMin${this.elementID}`;\n        this.spinnerMin = document.createElement('div');\n        this.spinnerMin.classList.add(`spinner${this.elementID}`, `spinnerMin${this.elementID}`);\n        this.messageContainerMin = document.createElement('div');\n        this.messageContainerMin.classList.add(`messageContainer${this.elementID}`, `messageContainerMin${this.elementID}`);\n        this.messageContainerMin.innerHTML = this.message;\n\n        this.spinnerContainerPrimary.appendChild(this.spinnerPrimary);\n        this.spinnerContainerPrimary.appendChild(this.messageContainerPrimary);\n        this.spinnerContainerOuter.appendChild(this.spinnerContainerPrimary);\n\n        this.spinnerContainerMin.appendChild(this.spinnerMin);\n        this.spinnerContainerMin.appendChild(this.messageContainerMin);\n        this.spinnerContainerOuter.appendChild(this.spinnerContainerMin);\n\n        const style = document.createElement('style');\n        style.innerHTML = `\n\n            .spinnerOuterContainer${this.elementID} {\n                width: 100%;\n                height: 100%;\n                margin: 0;\n                top: 0;\n                left: 0;\n                position: absolute;\n                pointer-events: none;\n            }\n\n            .messageContainer${this.elementID} {\n                height: 20px;\n                font-family: arial;\n                font-size: 12pt;\n                color: #ffffff;\n                text-align: center;\n                vertical-align: middle;\n            }\n\n            .spinner${this.elementID} {\n                padding: 15px;\n                background: #07e8d6;\n                z-index:99999;\n            \n                aspect-ratio: 1;\n                border-radius: 50%;\n                --_m: \n                    conic-gradient(#0000,#000),\n                    linear-gradient(#000 0 0) content-box;\n                -webkit-mask: var(--_m);\n                    mask: var(--_m);\n                -webkit-mask-composite: source-out;\n                    mask-composite: subtract;\n                box-sizing: border-box;\n                animation: load 1s linear infinite;\n            }\n\n            .spinnerContainerPrimary${this.elementID} {\n                z-index:99999;\n                background-color: rgba(128, 128, 128, 0.75);\n                border: #666666 1px solid;\n                border-radius: 5px;\n                padding-top: 20px;\n                padding-bottom: 10px;\n                margin: 0;\n                position: absolute;\n                top: 50%;\n                left: 50%;\n                transform: translate(-80px, -80px);\n                width: 180px;\n                pointer-events: auto;\n            }\n\n            .spinnerPrimary${this.elementID} {\n                width: 120px;\n                margin-left: 30px;\n            }\n\n            .messageContainerPrimary${this.elementID} {\n                padding-top: 15px;\n            }\n\n            .spinnerContainerMin${this.elementID} {\n                z-index:99999;\n                background-color: rgba(128, 128, 128, 0.75);\n                border: #666666 1px solid;\n                border-radius: 5px;\n                padding-top: 20px;\n                padding-bottom: 15px;\n                margin: 0;\n                position: absolute;\n                bottom: 50px;\n                left: 50%;\n                transform: translate(-50%, 0);\n                display: flex;\n                flex-direction: left;\n                pointer-events: auto;\n                min-width: 250px;\n            }\n\n            .messageContainerMin${this.elementID} {\n                margin-right: 15px;\n            }\n\n            .spinnerMin${this.elementID} {\n                width: 50px;\n                height: 50px;\n                margin-left: 15px;\n                margin-right: 25px;\n            }\n\n            .messageContainerMin${this.elementID} {\n                padding-top: 15px;\n            }\n            \n            @keyframes load {\n                to{transform: rotate(1turn)}\n            }\n\n        `;\n        this.spinnerContainerOuter.appendChild(style);\n        this.container.appendChild(this.spinnerContainerOuter);\n\n        this.setMinimized(false, true);\n\n        this.fadeTransitions = [];\n    }\n\n    addTask(message) {\n        const newTask = {\n            'message': message,\n            'id': this.taskIDGen++\n        };\n        this.tasks.push(newTask);\n        this.update();\n        return newTask.id;\n    }\n\n    removeTask(id) {\n        let index = 0;\n        for (let task of this.tasks) {\n            if (task.id === id) {\n                this.tasks.splice(index, 1);\n                break;\n            }\n            index++;\n        }\n        this.update();\n    }\n\n    removeAllTasks() {\n        this.tasks = [];\n        this.update();\n    }\n\n    setMessageForTask(id, message) {\n        for (let task of this.tasks) {\n            if (task.id === id) {\n                task.message = message;\n                break;\n            }\n        }\n        this.update();\n    }\n\n    update() {\n        if (this.tasks.length > 0) {\n            this.show();\n            this.setMessage(this.tasks[this.tasks.length - 1].message);\n        } else {\n            this.hide();\n        }\n    }\n\n    show() {\n        this.spinnerContainerOuter.style.display = 'block';\n        this.visible = true;\n    }\n\n    hide() {\n        this.spinnerContainerOuter.style.display = 'none';\n        this.visible = false;\n    }\n\n    setContainer(container) {\n        if (this.container && this.spinnerContainerOuter.parentElement === this.container) {\n            this.container.removeChild(this.spinnerContainerOuter);\n        }\n        if (container) {\n            this.container = container;\n            this.container.appendChild(this.spinnerContainerOuter);\n            this.spinnerContainerOuter.style.zIndex = this.container.style.zIndex + 1;\n        }\n    }\n\n    setMinimized(minimized, instant) {\n        const showHideSpinner = (element, show, instant, displayStyle, fadeTransitionsIndex) => {\n            if (instant) {\n                element.style.display = show ? displayStyle : 'none';\n            } else {\n                this.fadeTransitions[fadeTransitionsIndex] = fadeElement(element, !show, displayStyle, STANDARD_FADE_DURATION, () => {\n                    this.fadeTransitions[fadeTransitionsIndex] = null;\n                });\n            }\n        };\n        showHideSpinner(this.spinnerContainerPrimary, !minimized, instant, 'block', 0);\n        showHideSpinner(this.spinnerContainerMin, minimized, instant, 'flex', 1);\n        this.minimized = minimized;\n    }\n\n    setMessage(msg) {\n        this.messageContainerPrimary.innerHTML = msg;\n        this.messageContainerMin.innerHTML = msg;\n    }\n}\n","export class LoadingProgressBar {\n\n    constructor(container) {\n\n        this.idGen = 0;\n\n        this.tasks = [];\n\n        this.container = container || document.body;\n\n        this.progressBarContainerOuter = document.createElement('div');\n        this.progressBarContainerOuter.className = 'progressBarOuterContainer';\n        this.progressBarContainerOuter.style.display = 'none';\n\n        this.progressBarBox = document.createElement('div');\n        this.progressBarBox.className = 'progressBarBox';\n\n        this.progressBarBackground = document.createElement('div');\n        this.progressBarBackground.className = 'progressBarBackground';\n\n        this.progressBar = document.createElement('div');\n        this.progressBar.className = 'progressBar';\n\n        this.progressBarBackground.appendChild(this.progressBar);\n        this.progressBarBox.appendChild(this.progressBarBackground);\n        this.progressBarContainerOuter.appendChild(this.progressBarBox);\n\n        const style = document.createElement('style');\n        style.innerHTML = `\n\n            .progressBarOuterContainer {\n                width: 100%;\n                height: 100%;\n                margin: 0;\n                top: 0;\n                left: 0;\n                position: absolute;\n                pointer-events: none;\n            }\n\n            .progressBarBox {\n                z-index:99999;\n                padding: 7px 9px 5px 7px;\n                background-color: rgba(190, 190, 190, 0.75);\n                border: #555555 1px solid;\n                border-radius: 15px;\n                margin: 0;\n                position: absolute;\n                bottom: 50px;\n                left: 50%;\n                transform: translate(-50%, 0);\n                width: 180px;\n                height: 30px;\n                pointer-events: auto;\n            }\n\n            .progressBarBackground {\n                width: 100%;\n                height: 25px;\n                border-radius:10px;\n                background-color: rgba(128, 128, 128, 0.75);\n                border: #444444 1px solid;\n                box-shadow: inset 0 0 10px #333333;\n            }\n\n            .progressBar {\n                height: 25px;\n                width: 0px;\n                border-radius:10px;\n                background-color: rgba(0, 200, 0, 0.75);\n                box-shadow: inset 0 0 10px #003300;\n            }\n\n        `;\n        this.progressBarContainerOuter.appendChild(style);\n        this.container.appendChild(this.progressBarContainerOuter);\n    }\n\n    show() {\n        this.progressBarContainerOuter.style.display = 'block';\n    }\n\n    hide() {\n        this.progressBarContainerOuter.style.display = 'none';\n    }\n\n    setProgress(progress) {\n        this.progressBar.style.width = progress + '%';\n    }\n\n    setContainer(container) {\n        if (this.container && this.progressBarContainerOuter.parentElement === this.container) {\n            this.container.removeChild(this.progressBarContainerOuter);\n        }\n        if (container) {\n            this.container = container;\n            this.container.appendChild(this.progressBarContainerOuter);\n            this.progressBarContainerOuter.style.zIndex = this.container.style.zIndex + 1;\n        }\n    }\n\n}\n","export class InfoPanel {\n\n    constructor(container) {\n\n        this.container = container || document.body;\n\n        this.infoCells = {};\n\n        const layout = [\n            ['Camera position', 'cameraPosition'],\n            ['Camera look-at', 'cameraLookAt'],\n            ['Camera up', 'cameraUp'],\n            ['Camera mode', 'orthographicCamera'],\n            ['Cursor position', 'cursorPosition'],\n            ['FPS', 'fps'],\n            ['Rendering:', 'renderSplatCount'],\n            ['Sort time', 'sortTime'],\n            ['Render window', 'renderWindow'],\n            ['Focal adjustment', 'focalAdjustment'],\n            ['Splat scale', 'splatScale'],\n            ['Point cloud mode', 'pointCloudMode']\n        ];\n\n        this.infoPanelContainer = document.createElement('div');\n        const style = document.createElement('style');\n        style.innerHTML = `\n\n            .infoPanel {\n                width: 430px;\n                padding: 10px;\n                background-color: rgba(50, 50, 50, 0.85);\n                border: #555555 2px solid;\n                color: #dddddd;\n                border-radius: 10px;\n                z-index: 9999;\n                font-family: arial;\n                font-size: 11pt;\n                text-align: left;\n                margin: 0;\n                top: 10px;\n                left:10px;\n                position: absolute;\n                pointer-events: auto;\n            }\n\n            .info-panel-cell {\n                margin-bottom: 5px;\n                padding-bottom: 2px;\n            }\n\n            .label-cell {\n                font-weight: bold;\n                font-size: 12pt;\n                width: 140px;\n            }\n\n        `;\n        this.infoPanelContainer.append(style);\n\n        this.infoPanel = document.createElement('div');\n        this.infoPanel.className = 'infoPanel';\n\n        const infoTable = document.createElement('div');\n        infoTable.style.display = 'table';\n\n        for (let layoutEntry of layout) {\n            const row = document.createElement('div');\n            row.style.display = 'table-row';\n            row.className = 'info-panel-row';\n\n            const labelCell = document.createElement('div');\n            labelCell.style.display = 'table-cell';\n            labelCell.innerHTML = `${layoutEntry[0]}: `;\n            labelCell.classList.add('info-panel-cell', 'label-cell');\n\n            const spacerCell = document.createElement('div');\n            spacerCell.style.display = 'table-cell';\n            spacerCell.style.width = '10px';\n            spacerCell.innerHTML = ' ';\n            spacerCell.className = 'info-panel-cell';\n\n            const infoCell = document.createElement('div');\n            infoCell.style.display = 'table-cell';\n            infoCell.innerHTML = '';\n            infoCell.className = 'info-panel-cell';\n\n            this.infoCells[layoutEntry[1]] = infoCell;\n\n            row.appendChild(labelCell);\n            row.appendChild(spacerCell);\n            row.appendChild(infoCell);\n\n            infoTable.appendChild(row);\n        }\n\n        this.infoPanel.appendChild(infoTable);\n        this.infoPanelContainer.append(this.infoPanel);\n        this.infoPanelContainer.style.display = 'none';\n        this.container.appendChild(this.infoPanelContainer);\n\n        this.visible = false;\n    }\n\n    update = function(renderDimensions, cameraPosition, cameraLookAtPosition, cameraUp, orthographicCamera,\n                      meshCursorPosition, currentFPS, splatCount, splatRenderCount,\n                      splatRenderCountPct, lastSortTime, focalAdjustment, splatScale, pointCloudMode) {\n\n        const cameraPosString = `${cameraPosition.x.toFixed(5)}, ${cameraPosition.y.toFixed(5)}, ${cameraPosition.z.toFixed(5)}`;\n        if (this.infoCells.cameraPosition.innerHTML !== cameraPosString) {\n            this.infoCells.cameraPosition.innerHTML = cameraPosString;\n        }\n\n        if (cameraLookAtPosition) {\n            const cla = cameraLookAtPosition;\n            const cameraLookAtString = `${cla.x.toFixed(5)}, ${cla.y.toFixed(5)}, ${cla.z.toFixed(5)}`;\n            if (this.infoCells.cameraLookAt.innerHTML !== cameraLookAtString) {\n                this.infoCells.cameraLookAt.innerHTML = cameraLookAtString;\n            }\n        }\n\n        const cameraUpString = `${cameraUp.x.toFixed(5)}, ${cameraUp.y.toFixed(5)}, ${cameraUp.z.toFixed(5)}`;\n        if (this.infoCells.cameraUp.innerHTML !== cameraUpString) {\n            this.infoCells.cameraUp.innerHTML = cameraUpString;\n        }\n\n        this.infoCells.orthographicCamera.innerHTML = orthographicCamera ? 'Orthographic' : 'Perspective';\n\n        if (meshCursorPosition) {\n            const cursPos = meshCursorPosition;\n            const cursorPosString = `${cursPos.x.toFixed(5)}, ${cursPos.y.toFixed(5)}, ${cursPos.z.toFixed(5)}`;\n            this.infoCells.cursorPosition.innerHTML = cursorPosString;\n        } else {\n            this.infoCells.cursorPosition.innerHTML = 'N/A';\n        }\n\n        this.infoCells.fps.innerHTML = currentFPS;\n        this.infoCells.renderWindow.innerHTML = `${renderDimensions.x} x ${renderDimensions.y}`;\n\n        this.infoCells.renderSplatCount.innerHTML =\n            `${splatRenderCount} splats out of ${splatCount} (${splatRenderCountPct.toFixed(2)}%)`;\n\n        this.infoCells.sortTime.innerHTML = `${lastSortTime.toFixed(3)} ms`;\n        this.infoCells.focalAdjustment.innerHTML = `${focalAdjustment.toFixed(3)}`;\n        this.infoCells.splatScale.innerHTML = `${splatScale.toFixed(3)}`;\n        this.infoCells.pointCloudMode.innerHTML = `${pointCloudMode}`;\n    };\n\n    setContainer(container) {\n        if (this.container && this.infoPanelContainer.parentElement === this.container) {\n            this.container.removeChild(this.infoPanelContainer);\n        }\n        if (container) {\n            this.container = container;\n            this.container.appendChild(this.infoPanelContainer);\n            this.infoPanelContainer.style.zIndex = this.container.style.zIndex + 1;\n        }\n    }\n\n    show() {\n        this.infoPanelContainer.style.display = 'block';\n        this.visible = true;\n    }\n\n    hide() {\n        this.infoPanelContainer.style.display = 'none';\n        this.visible = false;\n    }\n\n}\n","import * as THREE from 'three';\n\nconst _axis = new THREE.Vector3();\n\nexport class ArrowHelper extends THREE.Object3D {\n\n    constructor(dir = new THREE.Vector3(0, 0, 1), origin = new THREE.Vector3(0, 0, 0), length = 1,\n                radius = 0.1, color = 0xffff00, headLength = length * 0.2, headRadius = headLength * 0.2) {\n        super();\n\n        this.type = 'ArrowHelper';\n\n        const lineGeometry = new THREE.CylinderGeometry(radius, radius, length, 32);\n        lineGeometry.translate(0, length / 2.0, 0);\n        const coneGeometry = new THREE.CylinderGeometry( 0, headRadius, headLength, 32);\n        coneGeometry.translate(0, length, 0);\n\n        this.position.copy( origin );\n\n        this.line = new THREE.Mesh(lineGeometry, new THREE.MeshBasicMaterial({color: color, toneMapped: false}));\n        this.line.matrixAutoUpdate = false;\n        this.add(this.line);\n\n        this.cone = new THREE.Mesh(coneGeometry, new THREE.MeshBasicMaterial({color: color, toneMapped: false}));\n        this.cone.matrixAutoUpdate = false;\n        this.add(this.cone);\n\n        this.setDirection(dir);\n    }\n\n    setDirection( dir ) {\n        if (dir.y > 0.99999) {\n            this.quaternion.set(0, 0, 0, 1);\n        } else if (dir.y < - 0.99999) {\n            this.quaternion.set(1, 0, 0, 0);\n        } else {\n            _axis.set(dir.z, 0, -dir.x).normalize();\n            const radians = Math.acos(dir.y);\n            this.quaternion.setFromAxisAngle(_axis, radians);\n        }\n    }\n\n    setColor( color ) {\n        this.line.material.color.set(color);\n        this.cone.material.color.set(color);\n    }\n\n    copy(source) {\n        super.copy(source, false);\n        this.line.copy(source.line);\n        this.cone.copy(source.cone);\n        return this;\n    }\n\n    dispose() {\n        this.line.geometry.dispose();\n        this.line.material.dispose();\n        this.cone.geometry.dispose();\n        this.cone.material.dispose();\n    }\n\n}\n","import * as THREE from 'three';\nimport { ArrowHelper } from './ArrowHelper.js';\nimport { disposeAllMeshes } from './Util.js';\n\nexport class SceneHelper {\n\n    constructor(threeScene) {\n        this.threeScene = threeScene;\n        this.splatRenderTarget = null;\n        this.renderTargetCopyQuad = null;\n        this.renderTargetCopyCamera = null;\n        this.meshCursor = null;\n        this.focusMarker = null;\n        this.controlPlane = null;\n        this.debugRoot = null;\n        this.secondaryDebugRoot = null;\n    }\n\n    updateSplatRenderTargetForRenderDimensions(width, height) {\n        this.destroySplatRendertarget();\n        this.splatRenderTarget = new THREE.WebGLRenderTarget(width, height, {\n            format: THREE.RGBAFormat,\n            stencilBuffer: false,\n            depthBuffer: true,\n\n        });\n        this.splatRenderTarget.depthTexture = new THREE.DepthTexture(width, height);\n        this.splatRenderTarget.depthTexture.format = THREE.DepthFormat;\n        this.splatRenderTarget.depthTexture.type = THREE.UnsignedIntType;\n    }\n\n    destroySplatRendertarget() {\n        if (this.splatRenderTarget) {\n            this.splatRenderTarget = null;\n        }\n    }\n\n    setupRenderTargetCopyObjects() {\n        const uniforms = {\n            'sourceColorTexture': {\n                'type': 't',\n                'value': null\n            },\n            'sourceDepthTexture': {\n                'type': 't',\n                'value': null\n            },\n        };\n        const renderTargetCopyMaterial = new THREE.ShaderMaterial({\n            vertexShader: `\n                varying vec2 vUv;\n                void main() {\n                    vUv = uv;\n                    gl_Position = vec4( position.xy, 0.0, 1.0 );    \n                }\n            `,\n            fragmentShader: `\n                #include <common>\n                #include <packing>\n                varying vec2 vUv;\n                uniform sampler2D sourceColorTexture;\n                uniform sampler2D sourceDepthTexture;\n                void main() {\n                    vec4 color = texture2D(sourceColorTexture, vUv);\n                    float fragDepth = texture2D(sourceDepthTexture, vUv).x;\n                    gl_FragDepth = fragDepth;\n                    gl_FragColor = vec4(color.rgb, color.a * 2.0);\n              }\n            `,\n            uniforms: uniforms,\n            depthWrite: false,\n            depthTest: false,\n            transparent: true,\n            blending: THREE.CustomBlending,\n            blendSrc: THREE.SrcAlphaFactor,\n            blendSrcAlpha: THREE.SrcAlphaFactor,\n            blendDst: THREE.OneMinusSrcAlphaFactor,\n            blendDstAlpha: THREE.OneMinusSrcAlphaFactor\n        });\n        renderTargetCopyMaterial.extensions.fragDepth = true;\n        this.renderTargetCopyQuad = new THREE.Mesh(new THREE.PlaneGeometry(2, 2), renderTargetCopyMaterial);\n        this.renderTargetCopyCamera = new THREE.OrthographicCamera(-1, 1, 1, -1, 0, 1);\n    }\n\n    destroyRenderTargetCopyObjects() {\n        if (this.renderTargetCopyQuad) {\n            disposeAllMeshes(this.renderTargetCopyQuad);\n            this.renderTargetCopyQuad = null;\n        }\n    }\n\n    setupMeshCursor() {\n        if (!this.meshCursor) {\n            const coneGeometry = new THREE.ConeGeometry(0.5, 1.5, 32);\n            const coneMaterial = new THREE.MeshBasicMaterial({color: 0xFFFFFF});\n\n            const downArrow = new THREE.Mesh(coneGeometry, coneMaterial);\n            downArrow.rotation.set(0, 0, Math.PI);\n            downArrow.position.set(0, 1, 0);\n            const upArrow = new THREE.Mesh(coneGeometry, coneMaterial);\n            upArrow.position.set(0, -1, 0);\n            const leftArrow = new THREE.Mesh(coneGeometry, coneMaterial);\n            leftArrow.rotation.set(0, 0, Math.PI / 2.0);\n            leftArrow.position.set(1, 0, 0);\n            const rightArrow = new THREE.Mesh(coneGeometry, coneMaterial);\n            rightArrow.rotation.set(0, 0, -Math.PI / 2.0);\n            rightArrow.position.set(-1, 0, 0);\n\n            this.meshCursor = new THREE.Object3D();\n            this.meshCursor.add(downArrow);\n            this.meshCursor.add(upArrow);\n            this.meshCursor.add(leftArrow);\n            this.meshCursor.add(rightArrow);\n            this.meshCursor.scale.set(0.1, 0.1, 0.1);\n            this.threeScene.add(this.meshCursor);\n            this.meshCursor.visible = false;\n        }\n    }\n\n    destroyMeshCursor() {\n        if (this.meshCursor) {\n            disposeAllMeshes(this.meshCursor);\n            this.threeScene.remove(this.meshCursor);\n            this.meshCursor = null;\n        }\n    }\n\n    setMeshCursorVisibility(visible) {\n        this.meshCursor.visible = visible;\n    }\n\n    getMeschCursorVisibility() {\n        return this.meshCursor.visible;\n    }\n\n    setMeshCursorPosition(position) {\n        this.meshCursor.position.copy(position);\n    }\n\n    positionAndOrientMeshCursor(position, camera) {\n        this.meshCursor.position.copy(position);\n        this.meshCursor.up.copy(camera.up);\n        this.meshCursor.lookAt(camera.position);\n    }\n\n    setupFocusMarker() {\n        if (!this.focusMarker) {\n            const sphereGeometry = new THREE.SphereGeometry(.5, 32, 32);\n            const focusMarkerMaterial = SceneHelper.buildFocusMarkerMaterial();\n            focusMarkerMaterial.depthTest = false;\n            focusMarkerMaterial.depthWrite = false;\n            focusMarkerMaterial.transparent = true;\n            this.focusMarker = new THREE.Mesh(sphereGeometry, focusMarkerMaterial);\n        }\n    }\n\n    destroyFocusMarker() {\n        if (this.focusMarker) {\n            disposeAllMeshes(this.focusMarker);\n            this.focusMarker = null;\n        }\n    }\n\n    updateFocusMarker = function() {\n\n        const tempPosition = new THREE.Vector3();\n        const tempMatrix = new THREE.Matrix4();\n        const toCamera = new THREE.Vector3();\n\n        return function(position, camera, viewport) {\n            tempMatrix.copy(camera.matrixWorld).invert();\n            tempPosition.copy(position).applyMatrix4(tempMatrix);\n            tempPosition.normalize().multiplyScalar(10);\n            tempPosition.applyMatrix4(camera.matrixWorld);\n            toCamera.copy(camera.position).sub(position);\n            const toCameraDistance = toCamera.length();\n            this.focusMarker.position.copy(position);\n            this.focusMarker.scale.set(toCameraDistance, toCameraDistance, toCameraDistance);\n            this.focusMarker.material.uniforms.realFocusPosition.value.copy(position);\n            this.focusMarker.material.uniforms.viewport.value.copy(viewport);\n            this.focusMarker.material.uniformsNeedUpdate = true;\n        };\n\n    }();\n\n    setFocusMarkerVisibility(visible) {\n        this.focusMarker.visible = visible;\n    }\n\n    setFocusMarkerOpacity(opacity) {\n        this.focusMarker.material.uniforms.opacity.value = opacity;\n        this.focusMarker.material.uniformsNeedUpdate = true;\n    }\n\n    getFocusMarkerOpacity() {\n        return this.focusMarker.material.uniforms.opacity.value;\n    }\n\n    setupControlPlane() {\n        if (!this.controlPlane) {\n            const planeGeometry = new THREE.PlaneGeometry(1, 1);\n            planeGeometry.rotateX(-Math.PI / 2);\n            const planeMaterial = new THREE.MeshBasicMaterial({color: 0xffffff});\n            planeMaterial.transparent = true;\n            planeMaterial.opacity = 0.6;\n            planeMaterial.depthTest = false;\n            planeMaterial.depthWrite = false;\n            planeMaterial.side = THREE.DoubleSide;\n            const planeMesh = new THREE.Mesh(planeGeometry, planeMaterial);\n\n            const arrowDir = new THREE.Vector3(0, 1, 0);\n            arrowDir.normalize();\n            const arrowOrigin = new THREE.Vector3(0, 0, 0);\n            const arrowLength = 0.5;\n            const arrowRadius = 0.01;\n            const arrowColor = 0x00dd00;\n            const arrowHelper = new ArrowHelper(arrowDir, arrowOrigin, arrowLength, arrowRadius, arrowColor, 0.1, 0.03);\n\n            this.controlPlane = new THREE.Object3D();\n            this.controlPlane.add(planeMesh);\n            this.controlPlane.add(arrowHelper);\n        }\n    }\n\n    destroyControlPlane() {\n        if (this.controlPlane) {\n            disposeAllMeshes(this.controlPlane);\n            this.controlPlane = null;\n        }\n    }\n\n    setControlPlaneVisibility(visible) {\n        this.controlPlane.visible = visible;\n    }\n\n    positionAndOrientControlPlane = function() {\n\n        const tempQuaternion = new THREE.Quaternion();\n        const defaultUp = new THREE.Vector3(0, 1, 0);\n\n        return function(position, up) {\n            tempQuaternion.setFromUnitVectors(defaultUp, up);\n            this.controlPlane.position.copy(position);\n            this.controlPlane.quaternion.copy(tempQuaternion);\n        };\n\n    }();\n\n    addDebugMeshes() {\n        this.debugRoot = this.createDebugMeshes();\n        this.secondaryDebugRoot = this.createSecondaryDebugMeshes();\n        this.threeScene.add(this.debugRoot);\n        this.threeScene.add(this.secondaryDebugRoot);\n    }\n\n    destroyDebugMeshes() {\n        for (let debugRoot of [this.debugRoot, this.secondaryDebugRoot]) {\n            if (debugRoot) {\n                disposeAllMeshes(debugRoot);\n                this.threeScene.remove(debugRoot);\n            }\n        }\n        this.debugRoot = null;\n        this.secondaryDebugRoot = null;\n    }\n\n    createDebugMeshes(renderOrder) {\n        const sphereGeometry = new THREE.SphereGeometry(1, 32, 32);\n        const debugMeshRoot = new THREE.Object3D();\n\n        const createMesh = (color, position) => {\n            let sphereMesh = new THREE.Mesh(sphereGeometry, SceneHelper.buildDebugMaterial(color));\n            sphereMesh.renderOrder = renderOrder;\n            debugMeshRoot.add(sphereMesh);\n            sphereMesh.position.fromArray(position);\n        };\n\n        createMesh(0xff0000, [-50, 0, 0]);\n        createMesh(0xff0000, [50, 0, 0]);\n        createMesh(0x00ff00, [0, 0, -50]);\n        createMesh(0x00ff00, [0, 0, 50]);\n        createMesh(0xffaa00, [5, 0, 5]);\n\n        return debugMeshRoot;\n    }\n\n    createSecondaryDebugMeshes(renderOrder) {\n        const boxGeometry = new THREE.BoxGeometry(3, 3, 3);\n        const debugMeshRoot = new THREE.Object3D();\n\n        let boxColor = 0xBBBBBB;\n        const createMesh = (position) => {\n            let boxMesh = new THREE.Mesh(boxGeometry, SceneHelper.buildDebugMaterial(boxColor));\n            boxMesh.renderOrder = renderOrder;\n            debugMeshRoot.add(boxMesh);\n            boxMesh.position.fromArray(position);\n        };\n\n        let separation = 10;\n        createMesh([-separation, 0, -separation]);\n        createMesh([-separation, 0, separation]);\n        createMesh([separation, 0, -separation]);\n        createMesh([separation, 0, separation]);\n\n        return debugMeshRoot;\n    }\n\n    static buildDebugMaterial(color) {\n        const vertexShaderSource = `\n            #include <common>\n            varying float ndcDepth;\n\n            void main() {\n                gl_Position = projectionMatrix * viewMatrix * modelMatrix * vec4(position.xyz, 1.0);\n                ndcDepth = gl_Position.z / gl_Position.w;\n                gl_Position.x = gl_Position.x / gl_Position.w;\n                gl_Position.y = gl_Position.y / gl_Position.w;\n                gl_Position.z = 0.0;\n                gl_Position.w = 1.0;\n    \n            }\n        `;\n\n        const fragmentShaderSource = `\n            #include <common>\n            uniform vec3 color;\n            varying float ndcDepth;\n            void main() {\n                gl_FragDepth = (ndcDepth + 1.0) / 2.0;\n                gl_FragColor = vec4(color.rgb, 0.0);\n            }\n        `;\n\n        const uniforms = {\n            'color': {\n                'type': 'v3',\n                'value': new THREE.Color(color)\n            },\n        };\n\n        const material = new THREE.ShaderMaterial({\n            uniforms: uniforms,\n            vertexShader: vertexShaderSource,\n            fragmentShader: fragmentShaderSource,\n            transparent: false,\n            depthTest: true,\n            depthWrite: true,\n            side: THREE.FrontSide\n        });\n        material.extensions.fragDepth = true;\n\n        return material;\n    }\n\n    static buildFocusMarkerMaterial(color) {\n        const vertexShaderSource = `\n            #include <common>\n\n            uniform vec2 viewport;\n            uniform vec3 realFocusPosition;\n\n            varying vec4 ndcPosition;\n            varying vec4 ndcCenter;\n            varying vec4 ndcFocusPosition;\n\n            void main() {\n                float radius = 0.01;\n\n                vec4 viewPosition = modelViewMatrix * vec4(position.xyz, 1.0);\n                vec4 viewCenter = modelViewMatrix * vec4(0.0, 0.0, 0.0, 1.0);\n\n                vec4 viewFocusPosition = modelViewMatrix * vec4(realFocusPosition, 1.0);\n\n                ndcPosition = projectionMatrix * viewPosition;\n                ndcPosition = ndcPosition * vec4(1.0 / ndcPosition.w);\n                ndcCenter = projectionMatrix * viewCenter;\n                ndcCenter = ndcCenter * vec4(1.0 / ndcCenter.w);\n\n                ndcFocusPosition = projectionMatrix * viewFocusPosition;\n                ndcFocusPosition = ndcFocusPosition * vec4(1.0 / ndcFocusPosition.w);\n\n                gl_Position = projectionMatrix * viewPosition;\n\n            }\n        `;\n\n        const fragmentShaderSource = `\n            #include <common>\n            uniform vec3 color;\n            uniform vec2 viewport;\n            uniform float opacity;\n\n            varying vec4 ndcPosition;\n            varying vec4 ndcCenter;\n            varying vec4 ndcFocusPosition;\n\n            void main() {\n                vec2 screenPosition = vec2(ndcPosition) * viewport;\n                vec2 screenCenter = vec2(ndcCenter) * viewport;\n\n                vec2 screenVec = screenPosition - screenCenter;\n\n                float projectedRadius = length(screenVec);\n\n                float lineWidth = 0.0005 * viewport.y;\n                float aaRange = 0.0025 * viewport.y;\n                float radius = 0.06 * viewport.y;\n                float radDiff = abs(projectedRadius - radius) - lineWidth;\n                float alpha = 1.0 - clamp(radDiff / 5.0, 0.0, 1.0); \n\n                gl_FragColor = vec4(color.rgb, alpha * opacity);\n            }\n        `;\n\n        const uniforms = {\n            'color': {\n                'type': 'v3',\n                'value': new THREE.Color(color)\n            },\n            'realFocusPosition': {\n                'type': 'v3',\n                'value': new THREE.Vector3()\n            },\n            'viewport': {\n                'type': 'v2',\n                'value': new THREE.Vector2()\n            },\n            'opacity': {\n                'value': 0.0\n            }\n        };\n\n        const material = new THREE.ShaderMaterial({\n            uniforms: uniforms,\n            vertexShader: vertexShaderSource,\n            fragmentShader: fragmentShaderSource,\n            transparent: true,\n            depthTest: false,\n            depthWrite: false,\n            side: THREE.FrontSide\n        });\n\n        return material;\n    }\n\n    dispose() {\n        this.destroyMeshCursor();\n        this.destroyFocusMarker();\n        this.destroyDebugMeshes();\n        this.destroyControlPlane();\n        this.destroyRenderTargetCopyObjects();\n        this.destroySplatRendertarget();\n    }\n}\n","import * as THREE from 'three';\n\nconst VectorRight = new THREE.Vector3(1, 0, 0);\nconst VectorUp = new THREE.Vector3(0, 1, 0);\nconst VectorBackward = new THREE.Vector3(0, 0, 1);\n\nexport class Ray {\n\n    constructor(origin = new THREE.Vector3(), direction = new THREE.Vector3()) {\n        this.origin = new THREE.Vector3();\n        this.direction = new THREE.Vector3();\n        this.setParameters(origin, direction);\n    }\n\n    setParameters(origin, direction) {\n        this.origin.copy(origin);\n        this.direction.copy(direction).normalize();\n    }\n\n    boxContainsPoint(box, point, epsilon) {\n        return point.x < box.min.x - epsilon || point.x > box.max.x + epsilon ||\n               point.y < box.min.y - epsilon || point.y > box.max.y + epsilon ||\n               point.z < box.min.z - epsilon || point.z > box.max.z + epsilon ? false : true;\n    }\n\n    intersectBox = function() {\n\n        const planeIntersectionPoint = new THREE.Vector3();\n        const planeIntersectionPointArray = [];\n        const originArray = [];\n        const directionArray = [];\n\n        return function(box, outHit) {\n\n            originArray[0] = this.origin.x;\n            originArray[1] = this.origin.y;\n            originArray[2] = this.origin.z;\n            directionArray[0] = this.direction.x;\n            directionArray[1] = this.direction.y;\n            directionArray[2] = this.direction.z;\n\n            if (this.boxContainsPoint(box, this.origin, 0.0001)) {\n                if (outHit) {\n                    outHit.origin.copy(this.origin);\n                    outHit.normal.set(0, 0, 0);\n                    outHit.distance = -1;\n                }\n                return true;\n            }\n\n            for (let i = 0; i < 3; i++) {\n                if (directionArray[i] == 0.0) continue;\n\n                const hitNormal = i == 0 ? VectorRight : i == 1 ? VectorUp : VectorBackward;\n                const extremeVec = directionArray[i] < 0 ? box.max : box.min;\n                let multiplier = -Math.sign(directionArray[i]);\n                planeIntersectionPointArray[0] = i == 0 ? extremeVec.x : i == 1 ? extremeVec.y : extremeVec.z;\n                let toSide = planeIntersectionPointArray[0] - originArray[i];\n\n                if (toSide * multiplier < 0) {\n                    const idx1 = (i + 1) % 3;\n                    const idx2 = (i + 2) % 3;\n                    planeIntersectionPointArray[2] = directionArray[idx1] / directionArray[i] * toSide + originArray[idx1];\n                    planeIntersectionPointArray[1] = directionArray[idx2] / directionArray[i] * toSide + originArray[idx2];\n                    planeIntersectionPoint.set(planeIntersectionPointArray[i],\n                                               planeIntersectionPointArray[idx2],\n                                               planeIntersectionPointArray[idx1]);\n                    if (this.boxContainsPoint(box, planeIntersectionPoint, 0.0001)) {\n                        if (outHit) {\n                            outHit.origin.copy(planeIntersectionPoint);\n                            outHit.normal.copy(hitNormal).multiplyScalar(multiplier);\n                            outHit.distance = planeIntersectionPoint.sub(this.origin).length();\n                        }\n                        return true;\n                    }\n                }\n            }\n\n            return false;\n        };\n\n    }();\n\n    intersectSphere = function() {\n\n        const toSphereCenterVec = new THREE.Vector3();\n\n        return function(center, radius, outHit) {\n            toSphereCenterVec.copy(center).sub(this.origin);\n            const toClosestApproach = toSphereCenterVec.dot(this.direction);\n            const toClosestApproachSq = toClosestApproach * toClosestApproach;\n            const toSphereCenterSq = toSphereCenterVec.dot(toSphereCenterVec);\n            const diffSq = toSphereCenterSq - toClosestApproachSq;\n            const radiusSq = radius * radius;\n\n            if (diffSq > radiusSq) return false;\n\n            const thc = Math.sqrt(radiusSq - diffSq);\n            const t0 = toClosestApproach - thc;\n            const t1 = toClosestApproach + thc;\n\n            if (t1 < 0) return false;\n            let t = t0 < 0 ? t1 : t0;\n\n            if (outHit) {\n                outHit.origin.copy(this.origin).addScaledVector(this.direction, t);\n                outHit.normal.copy(outHit.origin).sub(center).normalize();\n                outHit.distance = t;\n            }\n            return true;\n        };\n\n    }();\n}\n","import * as THREE from 'three';\n\nexport class Hit {\n\n    constructor() {\n        this.origin = new THREE.Vector3();\n        this.normal = new THREE.Vector3();\n        this.distance = 0;\n        this.splatIndex = 0;\n    }\n\n    set(origin, normal, distance, splatIndex) {\n        this.origin.copy(origin);\n        this.normal.copy(normal);\n        this.distance = distance;\n        this.splatIndex = splatIndex;\n    }\n\n    clone() {\n        const hitClone = new Hit();\n        hitClone.origin.copy(this.origin);\n        hitClone.normal.copy(this.normal);\n        hitClone.distance = this.distance;\n        hitClone.splatIndex = this.splatIndex;\n        return hitClone;\n    }\n\n}\n","export const SplatRenderMode = {\n    ThreeD: 0,\n    TwoD: 1\n};\n","import * as THREE from 'three';\nimport { Ray } from './Ray.js';\nimport { Hit } from './Hit.js';\nimport { SplatRenderMode } from '../SplatRenderMode.js';\n\nexport class Raycaster {\n\n    constructor(origin, direction, raycastAgainstTrueSplatEllipsoid = false) {\n        this.ray = new Ray(origin, direction);\n        this.raycastAgainstTrueSplatEllipsoid = raycastAgainstTrueSplatEllipsoid;\n    }\n\n    setFromCameraAndScreenPosition = function() {\n\n        const ndcCoords = new THREE.Vector2();\n\n        return function(camera, screenPosition, screenDimensions) {\n            ndcCoords.x = screenPosition.x / screenDimensions.x * 2.0 - 1.0;\n            ndcCoords.y = (screenDimensions.y - screenPosition.y) / screenDimensions.y * 2.0 - 1.0;\n            if (camera.isPerspectiveCamera) {\n                this.ray.origin.setFromMatrixPosition(camera.matrixWorld);\n                this.ray.direction.set(ndcCoords.x, ndcCoords.y, 0.5 ).unproject(camera).sub(this.ray.origin).normalize();\n                this.camera = camera;\n            } else if (camera.isOrthographicCamera) {\n                this.ray.origin.set(ndcCoords.x, ndcCoords.y,\n                                   (camera.near + camera.far) / (camera.near - camera.far)).unproject(camera);\n                this.ray.direction.set(0, 0, -1).transformDirection(camera.matrixWorld);\n                this.camera = camera;\n            } else {\n                throw new Error('Raycaster::setFromCameraAndScreenPosition() -> Unsupported camera type');\n            }\n        };\n\n    }();\n\n    intersectSplatMesh = function() {\n\n        const toLocal = new THREE.Matrix4();\n        const fromLocal = new THREE.Matrix4();\n        const sceneTransform = new THREE.Matrix4();\n        const localRay = new Ray();\n        const tempPoint = new THREE.Vector3();\n\n        return function(splatMesh, outHits = []) {\n            const splatTree = splatMesh.getSplatTree();\n\n            if (!splatTree) return;\n\n            for (let s = 0; s < splatTree.subTrees.length; s++) {\n                const subTree = splatTree.subTrees[s];\n\n                fromLocal.copy(splatMesh.matrixWorld);\n                if (splatMesh.dynamicMode) {\n                    splatMesh.getSceneTransform(s, sceneTransform);\n                    fromLocal.multiply(sceneTransform);\n                }\n                toLocal.copy(fromLocal).invert();\n\n                localRay.origin.copy(this.ray.origin).applyMatrix4(toLocal);\n                localRay.direction.copy(this.ray.origin).add(this.ray.direction);\n                localRay.direction.applyMatrix4(toLocal).sub(localRay.origin).normalize();\n\n                const outHitsForSubTree = [];\n                if (subTree.rootNode) {\n                    this.castRayAtSplatTreeNode(localRay, splatTree, subTree.rootNode, outHitsForSubTree);\n                }\n\n                outHitsForSubTree.forEach((hit) => {\n                    hit.origin.applyMatrix4(fromLocal);\n                    hit.normal.applyMatrix4(fromLocal).normalize();\n                    hit.distance = tempPoint.copy(hit.origin).sub(this.ray.origin).length();\n                });\n\n                outHits.push(...outHitsForSubTree);\n            }\n\n            outHits.sort((a, b) => {\n                if (a.distance > b.distance) return 1;\n                else return -1;\n            });\n\n            return outHits;\n        };\n\n    }();\n\n    castRayAtSplatTreeNode = function() {\n\n        const tempColor = new THREE.Vector4();\n        const tempCenter = new THREE.Vector3();\n        const tempScale = new THREE.Vector3();\n        const tempRotation = new THREE.Quaternion();\n        const tempHit = new Hit();\n        const scaleEpsilon = 0.0000001;\n\n        const origin = new THREE.Vector3(0, 0, 0);\n        const uniformScaleMatrix = new THREE.Matrix4();\n        const scaleMatrix = new THREE.Matrix4();\n        const rotationMatrix = new THREE.Matrix4();\n        const toSphereSpace = new THREE.Matrix4();\n        const fromSphereSpace = new THREE.Matrix4();\n        const tempRay = new Ray();\n\n        return function(ray, splatTree, node, outHits = []) {\n            if (!ray.intersectBox(node.boundingBox)) {\n                return;\n            }\n            if (node.data && node.data.indexes && node.data.indexes.length > 0) {\n                for (let i = 0; i < node.data.indexes.length; i++) {\n\n                    const splatGlobalIndex = node.data.indexes[i];\n                    const splatSceneIndex = splatTree.splatMesh.getSceneIndexForSplat(splatGlobalIndex);\n                    const splatScene = splatTree.splatMesh.getScene(splatSceneIndex);\n                    if (!splatScene.visible) continue;\n\n                    splatTree.splatMesh.getSplatColor(splatGlobalIndex, tempColor);\n                    splatTree.splatMesh.getSplatCenter(splatGlobalIndex, tempCenter);\n                    splatTree.splatMesh.getSplatScaleAndRotation(splatGlobalIndex, tempScale, tempRotation);\n\n                    if (tempScale.x <= scaleEpsilon || tempScale.y <= scaleEpsilon ||\n                        splatTree.splatMesh.splatRenderMode === SplatRenderMode.ThreeD && tempScale.z <= scaleEpsilon) {\n                        continue;\n                    }\n\n                    if (!this.raycastAgainstTrueSplatEllipsoid) {\n                        let radius = (tempScale.x + tempScale.y);\n                        let componentCount = 2;\n                        if (splatTree.splatMesh.splatRenderMode === SplatRenderMode.ThreeD) {\n                            radius += tempScale.z;\n                            componentCount = 3;\n                        }\n                        radius = radius / componentCount;\n                        if (ray.intersectSphere(tempCenter, radius, tempHit)) {\n                            const hitClone = tempHit.clone();\n                            hitClone.splatIndex = splatGlobalIndex;\n                            outHits.push(hitClone);\n                        }\n                    } else {\n                        scaleMatrix.makeScale(tempScale.x, tempScale.y, tempScale.z);\n                        rotationMatrix.makeRotationFromQuaternion(tempRotation);\n                        const uniformScale = Math.log10(tempColor.w) * 2.0;\n                        uniformScaleMatrix.makeScale(uniformScale, uniformScale, uniformScale);\n                        fromSphereSpace.copy(uniformScaleMatrix).multiply(rotationMatrix).multiply(scaleMatrix);\n                        toSphereSpace.copy(fromSphereSpace).invert();\n                        tempRay.origin.copy(ray.origin).sub(tempCenter).applyMatrix4(toSphereSpace);\n                        tempRay.direction.copy(ray.origin).add(ray.direction).sub(tempCenter);\n                        tempRay.direction.applyMatrix4(toSphereSpace).sub(tempRay.origin).normalize();\n                        if (tempRay.intersectSphere(origin, 1.0, tempHit)) {\n                            const hitClone = tempHit.clone();\n                            hitClone.splatIndex = splatGlobalIndex;\n                            hitClone.origin.applyMatrix4(fromSphereSpace).add(tempCenter);\n                            outHits.push(hitClone);\n                        }\n                    }\n                }\n             }\n            if (node.children && node.children.length > 0) {\n                for (let child of node.children) {\n                    this.castRayAtSplatTreeNode(ray, splatTree, child, outHits);\n                }\n            }\n            return outHits;\n        };\n\n    }();\n}\n","import * as THREE from 'three';\nimport { Constants } from '../Constants.js';\n\nexport class SplatMaterial {\n\n    static buildVertexShaderBase(dynamicMode = false, enableOptionalEffects = false, maxSphericalHarmonicsDegree = 0, customVars = '') {\n        let vertexShaderSource = `\n        precision highp float;\n        #include <common>\n\n        attribute uint splatIndex;\n        uniform highp usampler2D centersColorsTexture;\n        uniform highp sampler2D sphericalHarmonicsTexture;\n        uniform highp sampler2D sphericalHarmonicsTextureR;\n        uniform highp sampler2D sphericalHarmonicsTextureG;\n        uniform highp sampler2D sphericalHarmonicsTextureB;\n\n        uniform highp usampler2D sceneIndexesTexture;\n        uniform vec2 sceneIndexesTextureSize;\n        uniform int sceneCount;\n    `;\n\n    if (enableOptionalEffects) {\n        vertexShaderSource += `\n            uniform float sceneOpacity[${Constants.MaxScenes}];\n            uniform int sceneVisibility[${Constants.MaxScenes}];\n        `;\n    }\n\n    if (dynamicMode) {\n        vertexShaderSource += `\n            uniform highp mat4 transforms[${Constants.MaxScenes}];\n        `;\n    }\n\n    vertexShaderSource += `\n        ${customVars}\n        uniform vec2 focal;\n        uniform float orthoZoom;\n        uniform int orthographicMode;\n        uniform int pointCloudModeEnabled;\n        uniform float inverseFocalAdjustment;\n        uniform vec2 viewport;\n        uniform vec2 basisViewport;\n        uniform vec2 centersColorsTextureSize;\n        uniform int sphericalHarmonicsDegree;\n        uniform vec2 sphericalHarmonicsTextureSize;\n        uniform int sphericalHarmonics8BitMode;\n        uniform int sphericalHarmonicsMultiTextureMode;\n        uniform float visibleRegionRadius;\n        uniform float visibleRegionFadeStartRadius;\n        uniform float firstRenderTime;\n        uniform float currentTime;\n        uniform int fadeInComplete;\n        uniform vec3 sceneCenter;\n        uniform float splatScale;\n        uniform float sphericalHarmonics8BitCompressionRangeMin[${Constants.MaxScenes}];\n        uniform float sphericalHarmonics8BitCompressionRangeMax[${Constants.MaxScenes}];\n\n        varying vec4 vColor;\n        varying vec2 vUv;\n        varying vec2 vPosition;\n\n        mat3 quaternionToRotationMatrix(float x, float y, float z, float w) {\n            float s = 1.0 / sqrt(w * w + x * x + y * y + z * z);\n        \n            return mat3(\n                1. - 2. * (y * y + z * z),\n                2. * (x * y + w * z),\n                2. * (x * z - w * y),\n                2. * (x * y - w * z),\n                1. - 2. * (x * x + z * z),\n                2. * (y * z + w * x),\n                2. * (x * z + w * y),\n                2. * (y * z - w * x),\n                1. - 2. * (x * x + y * y)\n            );\n        }\n\n        const float sqrt8 = sqrt(8.0);\n        const float minAlpha = 1.0 / 255.0;\n\n        const vec4 encodeNorm4 = vec4(1.0 / 255.0, 1.0 / 255.0, 1.0 / 255.0, 1.0 / 255.0);\n        const uvec4 mask4 = uvec4(uint(0x000000FF), uint(0x0000FF00), uint(0x00FF0000), uint(0xFF000000));\n        const uvec4 shift4 = uvec4(0, 8, 16, 24);\n        vec4 uintToRGBAVec (uint u) {\n           uvec4 urgba = mask4 & u;\n           urgba = urgba >> shift4;\n           vec4 rgba = vec4(urgba) * encodeNorm4;\n           return rgba;\n        }\n\n        vec2 getDataUV(in int stride, in int offset, in vec2 dimensions) {\n            vec2 samplerUV = vec2(0.0, 0.0);\n            float d = float(splatIndex * uint(stride) + uint(offset)) / dimensions.x;\n            samplerUV.y = float(floor(d)) / dimensions.y;\n            samplerUV.x = fract(d);\n            return samplerUV;\n        }\n\n        vec2 getDataUVF(in uint sIndex, in float stride, in uint offset, in vec2 dimensions) {\n            vec2 samplerUV = vec2(0.0, 0.0);\n            float d = float(uint(float(sIndex) * stride) + offset) / dimensions.x;\n            samplerUV.y = float(floor(d)) / dimensions.y;\n            samplerUV.x = fract(d);\n            return samplerUV;\n        }\n\n        const float SH_C1 = 0.4886025119029199f;\n        const float[5] SH_C2 = float[](1.0925484, -1.0925484, 0.3153916, -1.0925484, 0.5462742);\n\n        void main () {\n\n            uint oddOffset = splatIndex & uint(0x00000001);\n            uint doubleOddOffset = oddOffset * uint(2);\n            bool isEven = oddOffset == uint(0);\n            uint nearestEvenIndex = splatIndex - oddOffset;\n            float fOddOffset = float(oddOffset);\n\n            uvec4 sampledCenterColor = texture(centersColorsTexture, getDataUV(1, 0, centersColorsTextureSize));\n            vec3 splatCenter = uintBitsToFloat(uvec3(sampledCenterColor.gba));\n\n            uint sceneIndex = uint(0);\n            if (sceneCount > 1) {\n                sceneIndex = texture(sceneIndexesTexture, getDataUV(1, 0, sceneIndexesTextureSize)).r;\n            }\n            `;\n\n        if (enableOptionalEffects) {\n            vertexShaderSource += `\n                float splatOpacityFromScene = sceneOpacity[sceneIndex];\n                int sceneVisible = sceneVisibility[sceneIndex];\n                if (splatOpacityFromScene <= 0.01 || sceneVisible == 0) {\n                    gl_Position = vec4(0.0, 0.0, 2.0, 1.0);\n                    return;\n                }\n            `;\n        }\n\n        if (dynamicMode) {\n            vertexShaderSource += `\n                mat4 transform = transforms[sceneIndex];\n                mat4 transformModelViewMatrix = viewMatrix * transform;\n            `;\n        } else {\n            vertexShaderSource += `mat4 transformModelViewMatrix = modelViewMatrix;`;\n        }\n\n        vertexShaderSource += `\n            float sh8BitCompressionRangeMinForScene = sphericalHarmonics8BitCompressionRangeMin[sceneIndex];\n            float sh8BitCompressionRangeMaxForScene = sphericalHarmonics8BitCompressionRangeMax[sceneIndex];\n            float sh8BitCompressionRangeForScene = sh8BitCompressionRangeMaxForScene - sh8BitCompressionRangeMinForScene;\n            float sh8BitCompressionHalfRangeForScene = sh8BitCompressionRangeForScene / 2.0;\n            vec3 vec8BitSHShift = vec3(sh8BitCompressionRangeMinForScene);\n\n            vec4 viewCenter = transformModelViewMatrix * vec4(splatCenter, 1.0);\n\n            vec4 clipCenter = projectionMatrix * viewCenter;\n\n            float clip = 1.2 * clipCenter.w;\n            if (clipCenter.z < -clip || clipCenter.x < -clip || clipCenter.x > clip || clipCenter.y < -clip || clipCenter.y > clip) {\n                gl_Position = vec4(0.0, 0.0, 2.0, 1.0);\n                return;\n            }\n\n            vec3 ndcCenter = clipCenter.xyz / clipCenter.w;\n\n            vPosition = position.xy;\n            vColor = uintToRGBAVec(sampledCenterColor.r);\n        `;\n\n        // Proceed to sampling and rendering 1st degree spherical harmonics\n        if (maxSphericalHarmonicsDegree >= 1) {\n\n            vertexShaderSource += `   \n            if (sphericalHarmonicsDegree >= 1) {\n            `;\n\n            if (dynamicMode) {\n                vertexShaderSource += `\n                    vec3 worldViewDir = normalize(splatCenter - vec3(inverse(transform) * vec4(cameraPosition, 1.0)));\n                `;\n            } else {\n                vertexShaderSource += `\n                    vec3 worldViewDir = normalize(splatCenter - cameraPosition);\n                `;\n            }\n\n            vertexShaderSource += `\n                vec3 sh1;\n                vec3 sh2;\n                vec3 sh3;\n            `;\n\n            if (maxSphericalHarmonicsDegree >= 2) {\n                vertexShaderSource += `\n                    vec3 sh4;\n                    vec3 sh5;\n                    vec3 sh6;\n                    vec3 sh7;\n                    vec3 sh8;\n                `;\n            }\n\n            // Determining how to sample spherical harmonics textures to get the coefficients for calculations for a given degree\n            // depends on how many total degrees (maxSphericalHarmonicsDegree) are present in the textures. This is because that\n            // number affects how they are packed in the textures, and therefore the offset & stride required to access them.\n\n            // Sample spherical harmonics textures with 1 degree worth of data for 1st degree calculations, and store in sh1, sh2, and sh3\n            if (maxSphericalHarmonicsDegree === 1) {\n                vertexShaderSource += `\n                    if (sphericalHarmonicsMultiTextureMode == 0) {\n                        vec2 shUV = getDataUVF(nearestEvenIndex, 2.5, doubleOddOffset, sphericalHarmonicsTextureSize);\n                        vec4 sampledSH0123 = texture(sphericalHarmonicsTexture, shUV);\n                        shUV = getDataUVF(nearestEvenIndex, 2.5, doubleOddOffset + uint(1), sphericalHarmonicsTextureSize);\n                        vec4 sampledSH4567 = texture(sphericalHarmonicsTexture, shUV);\n                        shUV = getDataUVF(nearestEvenIndex, 2.5, doubleOddOffset + uint(2), sphericalHarmonicsTextureSize);\n                        vec4 sampledSH891011 = texture(sphericalHarmonicsTexture, shUV);\n                        sh1 = vec3(sampledSH0123.rgb) * (1.0 - fOddOffset) + vec3(sampledSH0123.ba, sampledSH4567.r) * fOddOffset;\n                        sh2 = vec3(sampledSH0123.a, sampledSH4567.rg) * (1.0 - fOddOffset) + vec3(sampledSH4567.gba) * fOddOffset;\n                        sh3 = vec3(sampledSH4567.ba, sampledSH891011.r) * (1.0 - fOddOffset) + vec3(sampledSH891011.rgb) * fOddOffset;\n                    } else {\n                        vec2 sampledSH01R = texture(sphericalHarmonicsTextureR, getDataUV(2, 0, sphericalHarmonicsTextureSize)).rg;\n                        vec2 sampledSH23R = texture(sphericalHarmonicsTextureR, getDataUV(2, 1, sphericalHarmonicsTextureSize)).rg;\n                        vec2 sampledSH01G = texture(sphericalHarmonicsTextureG, getDataUV(2, 0, sphericalHarmonicsTextureSize)).rg;\n                        vec2 sampledSH23G = texture(sphericalHarmonicsTextureG, getDataUV(2, 1, sphericalHarmonicsTextureSize)).rg;\n                        vec2 sampledSH01B = texture(sphericalHarmonicsTextureB, getDataUV(2, 0, sphericalHarmonicsTextureSize)).rg;\n                        vec2 sampledSH23B = texture(sphericalHarmonicsTextureB, getDataUV(2, 1, sphericalHarmonicsTextureSize)).rg;\n                        sh1 = vec3(sampledSH01R.rg, sampledSH23R.r);\n                        sh2 = vec3(sampledSH01G.rg, sampledSH23G.r);\n                        sh3 = vec3(sampledSH01B.rg, sampledSH23B.r);\n                    }\n                `;\n            // Sample spherical harmonics textures with 2 degrees worth of data for 1st degree calculations, and store in sh1, sh2, and sh3\n            } else if (maxSphericalHarmonicsDegree === 2) {\n                vertexShaderSource += `\n                    vec4 sampledSH0123;\n                    vec4 sampledSH4567;\n                    vec4 sampledSH891011;\n\n                    vec4 sampledSH0123R;\n                    vec4 sampledSH0123G;\n                    vec4 sampledSH0123B;\n\n                    if (sphericalHarmonicsMultiTextureMode == 0) {\n                        sampledSH0123 = texture(sphericalHarmonicsTexture, getDataUV(6, 0, sphericalHarmonicsTextureSize));\n                        sampledSH4567 = texture(sphericalHarmonicsTexture, getDataUV(6, 1, sphericalHarmonicsTextureSize));\n                        sampledSH891011 = texture(sphericalHarmonicsTexture, getDataUV(6, 2, sphericalHarmonicsTextureSize));\n                        sh1 = sampledSH0123.rgb;\n                        sh2 = vec3(sampledSH0123.a, sampledSH4567.rg);\n                        sh3 = vec3(sampledSH4567.ba, sampledSH891011.r);\n                    } else {\n                        sampledSH0123R = texture(sphericalHarmonicsTextureR, getDataUV(2, 0, sphericalHarmonicsTextureSize));\n                        sampledSH0123G = texture(sphericalHarmonicsTextureG, getDataUV(2, 0, sphericalHarmonicsTextureSize));\n                        sampledSH0123B = texture(sphericalHarmonicsTextureB, getDataUV(2, 0, sphericalHarmonicsTextureSize));\n                        sh1 = vec3(sampledSH0123R.rgb);\n                        sh2 = vec3(sampledSH0123G.rgb);\n                        sh3 = vec3(sampledSH0123B.rgb);\n                    }\n                `;\n            }\n\n            // Perform 1st degree spherical harmonics calculations\n            vertexShaderSource += `\n                    if (sphericalHarmonics8BitMode == 1) {\n                        sh1 = sh1 * sh8BitCompressionRangeForScene + vec8BitSHShift;\n                        sh2 = sh2 * sh8BitCompressionRangeForScene + vec8BitSHShift;\n                        sh3 = sh3 * sh8BitCompressionRangeForScene + vec8BitSHShift;\n                    }\n                    float x = worldViewDir.x;\n                    float y = worldViewDir.y;\n                    float z = worldViewDir.z;\n                    vColor.rgb += SH_C1 * (-sh1 * y + sh2 * z - sh3 * x);\n            `;\n\n            // Proceed to sampling and rendering 2nd degree spherical harmonics\n            if (maxSphericalHarmonicsDegree >= 2) {\n\n                vertexShaderSource += `\n                    if (sphericalHarmonicsDegree >= 2) {\n                        float xx = x * x;\n                        float yy = y * y;\n                        float zz = z * z;\n                        float xy = x * y;\n                        float yz = y * z;\n                        float xz = x * z;\n                `;\n\n                // Sample spherical harmonics textures with 2 degrees worth of data for 2nd degree calculations,\n                // and store in sh4, sh5, sh6, sh7, and sh8\n                if (maxSphericalHarmonicsDegree === 2) {\n                    vertexShaderSource += `\n                        if (sphericalHarmonicsMultiTextureMode == 0) {\n                            vec4 sampledSH12131415 = texture(sphericalHarmonicsTexture, getDataUV(6, 3, sphericalHarmonicsTextureSize));\n                            vec4 sampledSH16171819 = texture(sphericalHarmonicsTexture, getDataUV(6, 4, sphericalHarmonicsTextureSize));\n                            vec4 sampledSH20212223 = texture(sphericalHarmonicsTexture, getDataUV(6, 5, sphericalHarmonicsTextureSize));\n                            sh4 = sampledSH891011.gba;\n                            sh5 = sampledSH12131415.rgb;\n                            sh6 = vec3(sampledSH12131415.a, sampledSH16171819.rg);\n                            sh7 = vec3(sampledSH16171819.ba, sampledSH20212223.r);\n                            sh8 = sampledSH20212223.gba;\n                        } else {\n                            vec4 sampledSH4567R = texture(sphericalHarmonicsTextureR, getDataUV(2, 1, sphericalHarmonicsTextureSize));\n                            vec4 sampledSH4567G = texture(sphericalHarmonicsTextureG, getDataUV(2, 1, sphericalHarmonicsTextureSize));\n                            vec4 sampledSH4567B = texture(sphericalHarmonicsTextureB, getDataUV(2, 1, sphericalHarmonicsTextureSize));\n                            sh4 = vec3(sampledSH0123R.a, sampledSH4567R.rg);\n                            sh5 = vec3(sampledSH4567R.ba, sampledSH0123G.a);\n                            sh6 = vec3(sampledSH4567G.rgb);\n                            sh7 = vec3(sampledSH4567G.a, sampledSH0123B.a, sampledSH4567B.r);\n                            sh8 = vec3(sampledSH4567B.gba);\n                        }\n                    `;\n                }\n\n                // Perform 2nd degree spherical harmonics calculations\n                vertexShaderSource += `\n                        if (sphericalHarmonics8BitMode == 1) {\n                            sh4 = sh4 * sh8BitCompressionRangeForScene + vec8BitSHShift;\n                            sh5 = sh5 * sh8BitCompressionRangeForScene + vec8BitSHShift;\n                            sh6 = sh6 * sh8BitCompressionRangeForScene + vec8BitSHShift;\n                            sh7 = sh7 * sh8BitCompressionRangeForScene + vec8BitSHShift;\n                            sh8 = sh8 * sh8BitCompressionRangeForScene + vec8BitSHShift;\n                        }\n\n                        vColor.rgb +=\n                            (SH_C2[0] * xy) * sh4 +\n                            (SH_C2[1] * yz) * sh5 +\n                            (SH_C2[2] * (2.0 * zz - xx - yy)) * sh6 +\n                            (SH_C2[3] * xz) * sh7 +\n                            (SH_C2[4] * (xx - yy)) * sh8;\n                    }\n                `;\n            }\n\n            vertexShaderSource += `\n\n                vColor.rgb = clamp(vColor.rgb, vec3(0.), vec3(1.));\n\n            }\n\n            `;\n        }\n\n        return vertexShaderSource;\n    }\n\n    static getVertexShaderFadeIn() {\n        return `\n            if (fadeInComplete == 0) {\n                float opacityAdjust = 1.0;\n                float centerDist = length(splatCenter - sceneCenter);\n                float renderTime = max(currentTime - firstRenderTime, 0.0);\n\n                float fadeDistance = 0.75;\n                float distanceLoadFadeInFactor = step(visibleRegionFadeStartRadius, centerDist);\n                distanceLoadFadeInFactor = (1.0 - distanceLoadFadeInFactor) +\n                                        (1.0 - clamp((centerDist - visibleRegionFadeStartRadius) / fadeDistance, 0.0, 1.0)) *\n                                        distanceLoadFadeInFactor;\n                opacityAdjust *= distanceLoadFadeInFactor;\n                vColor.a *= opacityAdjust;\n            }\n        `;\n    }\n\n    static getUniforms(dynamicMode = false, enableOptionalEffects = false, maxSphericalHarmonicsDegree = 0,\n                       splatScale = 1.0, pointCloudModeEnabled = false) {\n\n        const uniforms = {\n            'sceneCenter': {\n                'type': 'v3',\n                'value': new THREE.Vector3()\n            },\n            'fadeInComplete': {\n                'type': 'i',\n                'value': 0\n            },\n            'orthographicMode': {\n                'type': 'i',\n                'value': 0\n            },\n            'visibleRegionFadeStartRadius': {\n                'type': 'f',\n                'value': 0.0\n            },\n            'visibleRegionRadius': {\n                'type': 'f',\n                'value': 0.0\n            },\n            'currentTime': {\n                'type': 'f',\n                'value': 0.0\n            },\n            'firstRenderTime': {\n                'type': 'f',\n                'value': 0.0\n            },\n            'centersColorsTexture': {\n                'type': 't',\n                'value': null\n            },\n            'sphericalHarmonicsTexture': {\n                'type': 't',\n                'value': null\n            },\n            'sphericalHarmonicsTextureR': {\n                'type': 't',\n                'value': null\n            },\n            'sphericalHarmonicsTextureG': {\n                'type': 't',\n                'value': null\n            },\n            'sphericalHarmonicsTextureB': {\n                'type': 't',\n                'value': null\n            },\n            'sphericalHarmonics8BitCompressionRangeMin': {\n                'type': 'f',\n                'value': []\n            },\n            'sphericalHarmonics8BitCompressionRangeMax': {\n                'type': 'f',\n                'value': []\n            },\n            'focal': {\n                'type': 'v2',\n                'value': new THREE.Vector2()\n            },\n            'orthoZoom': {\n                'type': 'f',\n                'value': 1.0\n            },\n            'inverseFocalAdjustment': {\n                'type': 'f',\n                'value': 1.0\n            },\n            'viewport': {\n                'type': 'v2',\n                'value': new THREE.Vector2()\n            },\n            'basisViewport': {\n                'type': 'v2',\n                'value': new THREE.Vector2()\n            },\n            'debugColor': {\n                'type': 'v3',\n                'value': new THREE.Color()\n            },\n            'centersColorsTextureSize': {\n                'type': 'v2',\n                'value': new THREE.Vector2(1024, 1024)\n            },\n            'sphericalHarmonicsDegree': {\n                'type': 'i',\n                'value': maxSphericalHarmonicsDegree\n            },\n            'sphericalHarmonicsTextureSize': {\n                'type': 'v2',\n                'value': new THREE.Vector2(1024, 1024)\n            },\n            'sphericalHarmonics8BitMode': {\n                'type': 'i',\n                'value': 0\n            },\n            'sphericalHarmonicsMultiTextureMode': {\n                'type': 'i',\n                'value': 0\n            },\n            'splatScale': {\n                'type': 'f',\n                'value': splatScale\n            },\n            'pointCloudModeEnabled': {\n                'type': 'i',\n                'value': pointCloudModeEnabled ? 1 : 0\n            },\n            'sceneIndexesTexture': {\n                'type': 't',\n                'value': null\n            },\n            'sceneIndexesTextureSize': {\n                'type': 'v2',\n                'value': new THREE.Vector2(1024, 1024)\n            },\n            'sceneCount': {\n                'type': 'i',\n                'value': 1\n            }\n        };\n        for (let i = 0; i < Constants.MaxScenes; i++) {\n            uniforms.sphericalHarmonics8BitCompressionRangeMin.value.push(-Constants.SphericalHarmonics8BitCompressionRange / 2.0);\n            uniforms.sphericalHarmonics8BitCompressionRangeMax.value.push(Constants.SphericalHarmonics8BitCompressionRange / 2.0);\n        }\n\n        if (enableOptionalEffects) {\n            const sceneOpacity = [];\n            for (let i = 0; i < Constants.MaxScenes; i++) {\n                sceneOpacity.push(1.0);\n            }\n            uniforms['sceneOpacity'] ={\n                'type': 'f',\n                'value': sceneOpacity\n            };\n\n            const sceneVisibility = [];\n            for (let i = 0; i < Constants.MaxScenes; i++) {\n                sceneVisibility.push(1);\n            }\n            uniforms['sceneVisibility'] ={\n                'type': 'i',\n                'value': sceneVisibility\n            };\n        }\n\n        if (dynamicMode) {\n            const transformMatrices = [];\n            for (let i = 0; i < Constants.MaxScenes; i++) {\n                transformMatrices.push(new THREE.Matrix4());\n            }\n            uniforms['transforms'] = {\n                'type': 'mat4',\n                'value': transformMatrices\n            };\n        }\n\n        return uniforms;\n    }\n\n}\n","import * as THREE from 'three';\nimport { SplatMaterial } from './SplatMaterial.js';\n\nexport class SplatMaterial3D {\n\n    /**\n     * Build the Three.js material that is used to render the splats.\n     * @param {number} dynamicMode If true, it means the scene geometry represented by this splat mesh is not stationary or\n     *                             that the splat count might change\n     * @param {boolean} enableOptionalEffects When true, allows for usage of extra properties and attributes in the shader for effects\n     *                                        such as opacity adjustment. Default is false for performance reasons.\n     * @param {boolean} antialiased If true, calculate compensation factor to deal with gaussians being rendered at a significantly\n     *                              different resolution than that of their training\n     * @param {number} maxScreenSpaceSplatSize The maximum clip space splat size\n     * @param {number} splatScale Value by which all splats are scaled in screen-space (default is 1.0)\n     * @param {number} pointCloudModeEnabled Render all splats as screen-space circles\n     * @param {number} maxSphericalHarmonicsDegree Degree of spherical harmonics to utilize in rendering splats\n     * @return {THREE.ShaderMaterial}\n     */\n    static build(dynamicMode = false, enableOptionalEffects = false, antialiased = false, maxScreenSpaceSplatSize = 2048,\n                 splatScale = 1.0, pointCloudModeEnabled = false, maxSphericalHarmonicsDegree = 0, kernel2DSize = 0.3) {\n\n        const customVertexVars = `\n            uniform vec2 covariancesTextureSize;\n            uniform highp sampler2D covariancesTexture;\n            uniform highp usampler2D covariancesTextureHalfFloat;\n            uniform int covariancesAreHalfFloat;\n\n            void fromCovarianceHalfFloatV4(uvec4 val, out vec4 first, out vec4 second) {\n                vec2 r = unpackHalf2x16(val.r);\n                vec2 g = unpackHalf2x16(val.g);\n                vec2 b = unpackHalf2x16(val.b);\n\n                first = vec4(r.x, r.y, g.x, g.y);\n                second = vec4(b.x, b.y, 0.0, 0.0);\n            }\n        `;\n\n        let vertexShaderSource = SplatMaterial.buildVertexShaderBase(dynamicMode, enableOptionalEffects,\n                                                                     maxSphericalHarmonicsDegree, customVertexVars);\n        vertexShaderSource += SplatMaterial3D.buildVertexShaderProjection(antialiased, enableOptionalEffects,\n                                                                          maxScreenSpaceSplatSize, kernel2DSize);\n        const fragmentShaderSource = SplatMaterial3D.buildFragmentShader();\n\n        const uniforms = SplatMaterial.getUniforms(dynamicMode, enableOptionalEffects,\n                                                   maxSphericalHarmonicsDegree, splatScale, pointCloudModeEnabled);\n\n        uniforms['covariancesTextureSize'] = {\n            'type': 'v2',\n            'value': new THREE.Vector2(1024, 1024)\n        };\n        uniforms['covariancesTexture'] = {\n            'type': 't',\n            'value': null\n        };\n        uniforms['covariancesTextureHalfFloat'] = {\n            'type': 't',\n            'value': null\n        };\n        uniforms['covariancesAreHalfFloat'] = {\n            'type': 'i',\n            'value': 0\n        };\n\n        const material = new THREE.ShaderMaterial({\n            uniforms: uniforms,\n            vertexShader: vertexShaderSource,\n            fragmentShader: fragmentShaderSource,\n            transparent: true,\n            alphaTest: 1.0,\n            blending: THREE.NormalBlending,\n            depthTest: true,\n            depthWrite: false,\n            side: THREE.DoubleSide\n        });\n\n        return material;\n    }\n\n    static buildVertexShaderProjection(antialiased, enableOptionalEffects, maxScreenSpaceSplatSize, kernel2DSize) {\n        let vertexShaderSource = `\n\n            vec4 sampledCovarianceA;\n            vec4 sampledCovarianceB;\n            vec3 cov3D_M11_M12_M13;\n            vec3 cov3D_M22_M23_M33;\n            if (covariancesAreHalfFloat == 0) {\n                sampledCovarianceA = texture(covariancesTexture, getDataUVF(nearestEvenIndex, 1.5, oddOffset,\n                                                                            covariancesTextureSize));\n                sampledCovarianceB = texture(covariancesTexture, getDataUVF(nearestEvenIndex, 1.5, oddOffset + uint(1),\n                                                                            covariancesTextureSize));\n\n                cov3D_M11_M12_M13 = vec3(sampledCovarianceA.rgb) * (1.0 - fOddOffset) +\n                                    vec3(sampledCovarianceA.ba, sampledCovarianceB.r) * fOddOffset;\n                cov3D_M22_M23_M33 = vec3(sampledCovarianceA.a, sampledCovarianceB.rg) * (1.0 - fOddOffset) +\n                                    vec3(sampledCovarianceB.gba) * fOddOffset;\n            } else {\n                uvec4 sampledCovarianceU = texture(covariancesTextureHalfFloat, getDataUV(1, 0, covariancesTextureSize));\n                fromCovarianceHalfFloatV4(sampledCovarianceU, sampledCovarianceA, sampledCovarianceB);\n                cov3D_M11_M12_M13 = sampledCovarianceA.rgb;\n                cov3D_M22_M23_M33 = vec3(sampledCovarianceA.a, sampledCovarianceB.rg);\n            }\n        \n            // Construct the 3D covariance matrix\n            mat3 Vrk = mat3(\n                cov3D_M11_M12_M13.x, cov3D_M11_M12_M13.y, cov3D_M11_M12_M13.z,\n                cov3D_M11_M12_M13.y, cov3D_M22_M23_M33.x, cov3D_M22_M23_M33.y,\n                cov3D_M11_M12_M13.z, cov3D_M22_M23_M33.y, cov3D_M22_M23_M33.z\n            );\n\n            mat3 J;\n            if (orthographicMode == 1) {\n                // Since the projection is linear, we don't need an approximation\n                J = transpose(mat3(orthoZoom, 0.0, 0.0,\n                                0.0, orthoZoom, 0.0,\n                                0.0, 0.0, 0.0));\n            } else {\n                // Construct the Jacobian of the affine approximation of the projection matrix. It will be used to transform the\n                // 3D covariance matrix instead of using the actual projection matrix because that transformation would\n                // require a non-linear component (perspective division) which would yield a non-gaussian result.\n                float s = 1.0 / (viewCenter.z * viewCenter.z);\n                J = mat3(\n                    focal.x / viewCenter.z, 0., -(focal.x * viewCenter.x) * s,\n                    0., focal.y / viewCenter.z, -(focal.y * viewCenter.y) * s,\n                    0., 0., 0.\n                );\n            }\n\n            // Concatenate the projection approximation with the model-view transformation\n            mat3 W = transpose(mat3(transformModelViewMatrix));\n            mat3 T = W * J;\n\n            // Transform the 3D covariance matrix (Vrk) to compute the 2D covariance matrix\n            mat3 cov2Dm = transpose(T) * Vrk * T;\n            `;\n\n        if (antialiased) {\n            vertexShaderSource += `\n                float detOrig = cov2Dm[0][0] * cov2Dm[1][1] - cov2Dm[0][1] * cov2Dm[0][1];\n                cov2Dm[0][0] += ${kernel2DSize};\n                cov2Dm[1][1] += ${kernel2DSize};\n                float detBlur = cov2Dm[0][0] * cov2Dm[1][1] - cov2Dm[0][1] * cov2Dm[0][1];\n                vColor.a *= sqrt(max(detOrig / detBlur, 0.0));\n                if (vColor.a < minAlpha) return;\n            `;\n        } else {\n            vertexShaderSource += `\n                cov2Dm[0][0] += ${kernel2DSize};\n                cov2Dm[1][1] += ${kernel2DSize};\n            `;\n        }\n\n        vertexShaderSource += `\n\n            // We are interested in the upper-left 2x2 portion of the projected 3D covariance matrix because\n            // we only care about the X and Y values. We want the X-diagonal, cov2Dm[0][0],\n            // the Y-diagonal, cov2Dm[1][1], and the correlation between the two cov2Dm[0][1]. We don't\n            // need cov2Dm[1][0] because it is a symetric matrix.\n            vec3 cov2Dv = vec3(cov2Dm[0][0], cov2Dm[0][1], cov2Dm[1][1]);\n\n            // We now need to solve for the eigen-values and eigen vectors of the 2D covariance matrix\n            // so that we can determine the 2D basis for the splat. This is done using the method described\n            // here: https://people.math.harvard.edu/~knill/teaching/math21b2004/exhibits/2dmatrices/index.html\n            // After calculating the eigen-values and eigen-vectors, we calculate the basis for rendering the splat\n            // by normalizing the eigen-vectors and then multiplying them by (sqrt(8) * sqrt(eigen-value)), which is\n            // equal to scaling them by sqrt(8) standard deviations.\n            //\n            // This is a different approach than in the original work at INRIA. In that work they compute the\n            // max extents of the projected splat in screen space to form a screen-space aligned bounding rectangle\n            // which forms the geometry that is actually rasterized. The dimensions of that bounding box are 3.0\n            // times the square root of the maximum eigen-value, or 3 standard deviations. They then use the inverse\n            // 2D covariance matrix (called 'conic') in the CUDA rendering thread to determine fragment opacity by\n            // calculating the full gaussian: exp(-0.5 * (X - mean) * conic * (X - mean)) * splat opacity\n            float a = cov2Dv.x;\n            float d = cov2Dv.z;\n            float b = cov2Dv.y;\n            float D = a * d - b * b;\n            float trace = a + d;\n            float traceOver2 = 0.5 * trace;\n            float term2 = sqrt(max(0.1f, traceOver2 * traceOver2 - D));\n            float eigenValue1 = traceOver2 + term2;\n            float eigenValue2 = traceOver2 - term2;\n\n            if (pointCloudModeEnabled == 1) {\n                eigenValue1 = eigenValue2 = 0.2;\n            }\n\n            if (eigenValue2 <= 0.0) return;\n\n            vec2 eigenVector1 = normalize(vec2(b, eigenValue1 - a));\n            // since the eigen vectors are orthogonal, we derive the second one from the first\n            vec2 eigenVector2 = vec2(eigenVector1.y, -eigenVector1.x);\n\n            // We use sqrt(8) standard deviations instead of 3 to eliminate more of the splat with a very low opacity.\n            vec2 basisVector1 = eigenVector1 * splatScale * min(sqrt8 * sqrt(eigenValue1), ${parseInt(maxScreenSpaceSplatSize)}.0);\n            vec2 basisVector2 = eigenVector2 * splatScale * min(sqrt8 * sqrt(eigenValue2), ${parseInt(maxScreenSpaceSplatSize)}.0);\n            `;\n\n        if (enableOptionalEffects) {\n            vertexShaderSource += `\n                vColor.a *= splatOpacityFromScene;\n            `;\n        }\n\n        vertexShaderSource += `\n            vec2 ndcOffset = vec2(vPosition.x * basisVector1 + vPosition.y * basisVector2) *\n                             basisViewport * 2.0 * inverseFocalAdjustment;\n\n            vec4 quadPos = vec4(ndcCenter.xy + ndcOffset, ndcCenter.z, 1.0);\n            gl_Position = quadPos;\n\n            // Scale the position data we send to the fragment shader\n            vPosition *= sqrt8;\n        `;\n\n        vertexShaderSource += SplatMaterial.getVertexShaderFadeIn();\n        vertexShaderSource += `}`;\n\n        return vertexShaderSource;\n    }\n\n    static buildFragmentShader() {\n        let fragmentShaderSource = `\n            precision highp float;\n            #include <common>\n \n            uniform vec3 debugColor;\n\n            varying vec4 vColor;\n            varying vec2 vUv;\n            varying vec2 vPosition;\n        `;\n\n        fragmentShaderSource += `\n            void main () {\n                // Compute the positional squared distance from the center of the splat to the current fragment.\n                float A = dot(vPosition, vPosition);\n                // Since the positional data in vPosition has been scaled by sqrt(8), the squared result will be\n                // scaled by a factor of 8. If the squared result is larger than 8, it means it is outside the ellipse\n                // defined by the rectangle formed by vPosition. It also means it's farther\n                // away than sqrt(8) standard deviations from the mean.\n                if (A > 8.0) discard;\n                vec3 color = vColor.rgb;\n\n                // Since the rendered splat is scaled by sqrt(8), the inverse covariance matrix that is part of\n                // the gaussian formula becomes the identity matrix. We're then left with (X - mean) * (X - mean),\n                // and since 'mean' is zero, we have X * X, which is the same as A:\n                float opacity = exp(-0.5 * A) * vColor.a;\n\n                gl_FragColor = vec4(color.rgb, opacity);\n            }\n        `;\n\n        return fragmentShaderSource;\n    }\n\n}\n","import * as THREE from 'three';\nimport { SplatMaterial } from './SplatMaterial.js';\n\nexport class SplatMaterial2D {\n\n    /**\n     * Build the Three.js material that is used to render the splats.\n     * @param {number} dynamicMode If true, it means the scene geometry represented by this splat mesh is not stationary or\n     *                             that the splat count might change\n     * @param {boolean} enableOptionalEffects When true, allows for usage of extra properties and attributes in the shader for effects\n     *                                        such as opacity adjustment. Default is false for performance reasons.\n     * @param {number} splatScale Value by which all splats are scaled in screen-space (default is 1.0)\n     * @param {number} pointCloudModeEnabled Render all splats as screen-space circles\n     * @param {number} maxSphericalHarmonicsDegree Degree of spherical harmonics to utilize in rendering splats\n     * @return {THREE.ShaderMaterial}\n     */\n    static build(dynamicMode = false, enableOptionalEffects = false, splatScale = 1.0,\n                 pointCloudModeEnabled = false, maxSphericalHarmonicsDegree = 0) {\n\n        const customVertexVars = `\n            uniform vec2 scaleRotationsTextureSize;\n            uniform highp sampler2D scaleRotationsTexture;\n            varying mat3 vT;\n            varying vec2 vQuadCenter;\n            varying vec2 vFragCoord;\n        `;\n\n        let vertexShaderSource = SplatMaterial.buildVertexShaderBase(dynamicMode, enableOptionalEffects,\n                                                                     maxSphericalHarmonicsDegree, customVertexVars);\n        vertexShaderSource += SplatMaterial2D.buildVertexShaderProjection();\n        const fragmentShaderSource = SplatMaterial2D.buildFragmentShader();\n\n        const uniforms = SplatMaterial.getUniforms(dynamicMode, enableOptionalEffects,\n                                                   maxSphericalHarmonicsDegree, splatScale, pointCloudModeEnabled);\n\n        uniforms['scaleRotationsTexture'] = {\n            'type': 't',\n            'value': null\n        };\n        uniforms['scaleRotationsTextureSize'] = {\n            'type': 'v2',\n            'value': new THREE.Vector2(1024, 1024)\n        };\n\n        const material = new THREE.ShaderMaterial({\n            uniforms: uniforms,\n            vertexShader: vertexShaderSource,\n            fragmentShader: fragmentShaderSource,\n            transparent: true,\n            alphaTest: 1.0,\n            blending: THREE.NormalBlending,\n            depthTest: true,\n            depthWrite: false,\n            side: THREE.DoubleSide\n        });\n\n        return material;\n    }\n\n    static buildVertexShaderProjection() {\n\n        // Original CUDA code for calculating splat-to-screen transformation, for reference\n        /*\n            glm::mat3 R = quat_to_rotmat(rot);\n            glm::mat3 S = scale_to_mat(scale, mod);\n            glm::mat3 L = R * S;\n\n            // center of Gaussians in the camera coordinate\n            glm::mat3x4 splat2world = glm::mat3x4(\n                glm::vec4(L[0], 0.0),\n                glm::vec4(L[1], 0.0),\n                glm::vec4(p_orig.x, p_orig.y, p_orig.z, 1)\n            );\n\n            glm::mat4 world2ndc = glm::mat4(\n                projmatrix[0], projmatrix[4], projmatrix[8], projmatrix[12],\n                projmatrix[1], projmatrix[5], projmatrix[9], projmatrix[13],\n                projmatrix[2], projmatrix[6], projmatrix[10], projmatrix[14],\n                projmatrix[3], projmatrix[7], projmatrix[11], projmatrix[15]\n            );\n\n            glm::mat3x4 ndc2pix = glm::mat3x4(\n                glm::vec4(float(W) / 2.0, 0.0, 0.0, float(W-1) / 2.0),\n                glm::vec4(0.0, float(H) / 2.0, 0.0, float(H-1) / 2.0),\n                glm::vec4(0.0, 0.0, 0.0, 1.0)\n            );\n\n            T = glm::transpose(splat2world) * world2ndc * ndc2pix;\n            normal = transformVec4x3({L[2].x, L[2].y, L[2].z}, viewmatrix);\n        */\n\n        // Compute a 2D-to-2D mapping matrix from a tangent plane into a image plane\n        // given a 2D gaussian parameters. T = WH (from the paper: https://arxiv.org/pdf/2403.17888)\n        let vertexShaderSource = `\n\n            vec4 scaleRotationA = texture(scaleRotationsTexture, getDataUVF(nearestEvenIndex, 1.5,\n                                                                            oddOffset, scaleRotationsTextureSize));\n            vec4 scaleRotationB = texture(scaleRotationsTexture, getDataUVF(nearestEvenIndex, 1.5,\n                                                                            oddOffset + uint(1), scaleRotationsTextureSize));\n\n            vec3 scaleRotation123 = vec3(scaleRotationA.rgb) * (1.0 - fOddOffset) +\n                                    vec3(scaleRotationA.ba, scaleRotationB.r) * fOddOffset;\n            vec3 scaleRotation456 = vec3(scaleRotationA.a, scaleRotationB.rg) * (1.0 - fOddOffset) +\n                                    vec3(scaleRotationB.gba) * fOddOffset;\n\n            float missingW = sqrt(1.0 - scaleRotation456.x * scaleRotation456.x - scaleRotation456.y *\n                                    scaleRotation456.y - scaleRotation456.z * scaleRotation456.z);\n            mat3 R = quaternionToRotationMatrix(scaleRotation456.r, scaleRotation456.g, scaleRotation456.b, missingW);\n            mat3 S = mat3(scaleRotation123.r, 0.0, 0.0,\n                            0.0, scaleRotation123.g, 0.0,\n                            0.0, 0.0, scaleRotation123.b);\n            \n            mat3 L = R * S;\n\n            mat3x4 splat2World = mat3x4(vec4(L[0], 0.0),\n                                        vec4(L[1], 0.0),\n                                        vec4(splatCenter.x, splatCenter.y, splatCenter.z, 1.0));\n\n            mat4 world2ndc = transpose(projectionMatrix * transformModelViewMatrix);\n\n            mat3x4 ndc2pix = mat3x4(vec4(viewport.x / 2.0, 0.0, 0.0, (viewport.x - 1.0) / 2.0),\n                                    vec4(0.0, viewport.y / 2.0, 0.0, (viewport.y - 1.0) / 2.0),\n                                    vec4(0.0, 0.0, 0.0, 1.0));\n\n            mat3 T = transpose(splat2World) * world2ndc * ndc2pix;\n            vec3 normal = vec3(viewMatrix * vec4(L[0][2], L[1][2], L[2][2], 0.0));\n        `;\n\n        // Original CUDA code for projection to 2D, for reference\n        /*\n            float3 T0 = {T[0][0], T[0][1], T[0][2]};\n            float3 T1 = {T[1][0], T[1][1], T[1][2]};\n            float3 T3 = {T[2][0], T[2][1], T[2][2]};\n\n            // Compute AABB\n            float3 temp_point = {1.0f, 1.0f, -1.0f};\n            float distance = sumf3(T3 * T3 * temp_point);\n            float3 f = (1 / distance) * temp_point;\n            if (distance == 0.0) return false;\n\n            point_image = {\n                sumf3(f * T0 * T3),\n                sumf3(f * T1 * T3)\n            };\n\n            float2 temp = {\n                sumf3(f * T0 * T0),\n                sumf3(f * T1 * T1)\n            };\n            float2 half_extend = point_image * point_image - temp;\n            extent = sqrtf2(maxf2(1e-4, half_extend));\n            return true;\n        */\n\n        // Computing the bounding box of the 2D Gaussian and its center\n        // The center of the bounding box is used to create a low pass filter.\n        // This code is based off the reference implementation and creates an AABB aligned\n        // with the screen for the quad to be rendered.\n        const referenceQuadGeneration = `\n            vec3 T0 = vec3(T[0][0], T[0][1], T[0][2]);\n            vec3 T1 = vec3(T[1][0], T[1][1], T[1][2]);\n            vec3 T3 = vec3(T[2][0], T[2][1], T[2][2]);\n\n            vec3 tempPoint = vec3(1.0, 1.0, -1.0);\n            float distance = (T3.x * T3.x * tempPoint.x) + (T3.y * T3.y * tempPoint.y) + (T3.z * T3.z * tempPoint.z);\n            vec3 f = (1.0 / distance) * tempPoint;\n            if (abs(distance) < 0.00001) return;\n\n            float pointImageX = (T0.x * T3.x * f.x) + (T0.y * T3.y * f.y) + (T0.z * T3.z * f.z);\n            float pointImageY = (T1.x * T3.x * f.x) + (T1.y * T3.y * f.y) + (T1.z * T3.z * f.z);\n            vec2 pointImage = vec2(pointImageX, pointImageY);\n\n            float tempX = (T0.x * T0.x * f.x) + (T0.y * T0.y * f.y) + (T0.z * T0.z * f.z);\n            float tempY = (T1.x * T1.x * f.x) + (T1.y * T1.y * f.y) + (T1.z * T1.z * f.z);\n            vec2 temp = vec2(tempX, tempY);\n\n            vec2 halfExtend = pointImage * pointImage - temp;\n            vec2 extent = sqrt(max(vec2(0.0001), halfExtend));\n            float radius = max(extent.x, extent.y);\n\n            vec2 ndcOffset = ((position.xy * radius * 3.0) * basisViewport * 2.0);\n\n            vec4 quadPos = vec4(ndcCenter.xy + ndcOffset, ndcCenter.z, 1.0);\n            gl_Position = quadPos;\n\n            vT = T;\n            vQuadCenter = pointImage;\n            vFragCoord = (quadPos.xy * 0.5 + 0.5) * viewport;\n        `;\n\n        const useRefImplementation = false;\n        if (useRefImplementation) {\n            vertexShaderSource += referenceQuadGeneration;\n        } else {\n            // Create a quad that is aligned with the eigen vectors of the projected gaussian for rendering.\n            // This is a different approach than the reference implementation, similar to how the rendering of\n            // 3D gaussians in this viewer differs from the reference implementation. If the quad is too small\n            // (smaller than a pixel), then revert to the reference implementation.\n            vertexShaderSource += `\n\n                mat4 splat2World4 = mat4(vec4(L[0], 0.0),\n                                        vec4(L[1], 0.0),\n                                        vec4(L[2], 0.0),\n                                        vec4(splatCenter.x, splatCenter.y, splatCenter.z, 1.0));\n\n                mat4 Tt = transpose(transpose(splat2World4) * world2ndc);\n\n                vec4 tempPoint1 = Tt * vec4(1.0, 0.0, 0.0, 1.0);\n                tempPoint1 /= tempPoint1.w;\n\n                vec4 tempPoint2 = Tt * vec4(0.0, 1.0, 0.0, 1.0);\n                tempPoint2 /= tempPoint2.w;\n\n                vec4 center = Tt * vec4(0.0, 0.0, 0.0, 1.0);\n                center /= center.w;\n\n                vec2 basisVector1 = tempPoint1.xy - center.xy;\n                vec2 basisVector2 = tempPoint2.xy - center.xy;\n\n                vec2 basisVector1Screen = basisVector1 * 0.5 * viewport;\n                vec2 basisVector2Screen = basisVector2 * 0.5 * viewport;\n\n                const float minPix = 1.;\n                if (length(basisVector1Screen) < minPix || length(basisVector2Screen) < minPix) {\n                    ${referenceQuadGeneration}\n                } else {\n                    vec2 ndcOffset = vec2(position.x * basisVector1 + position.y * basisVector2) * 3.0 * inverseFocalAdjustment;\n                    vec4 quadPos = vec4(ndcCenter.xy + ndcOffset, ndcCenter.z, 1.0);\n                    gl_Position = quadPos;\n\n                    vT = T;\n                    vQuadCenter = center.xy;\n                    vFragCoord = (quadPos.xy * 0.5 + 0.5) * viewport;\n                }\n            `;\n        }\n\n        vertexShaderSource += SplatMaterial.getVertexShaderFadeIn();\n        vertexShaderSource += `}`;\n\n        return vertexShaderSource;\n    }\n\n    static buildFragmentShader() {\n\n        // Original CUDA code for splat intersection, for reference\n        /*\n            const float2 xy = collected_xy[j];\n            const float3 Tu = collected_Tu[j];\n            const float3 Tv = collected_Tv[j];\n            const float3 Tw = collected_Tw[j];\n            float3 k = pix.x * Tw - Tu;\n            float3 l = pix.y * Tw - Tv;\n            float3 p = cross(k, l);\n            if (p.z == 0.0) continue;\n            float2 s = {p.x / p.z, p.y / p.z};\n            float rho3d = (s.x * s.x + s.y * s.y);\n            float2 d = {xy.x - pixf.x, xy.y - pixf.y};\n            float rho2d = FilterInvSquare * (d.x * d.x + d.y * d.y);\n\n            // compute intersection and depth\n            float rho = min(rho3d, rho2d);\n            float depth = (rho3d <= rho2d) ? (s.x * Tw.x + s.y * Tw.y) + Tw.z : Tw.z;\n            if (depth < near_n) continue;\n            float4 nor_o = collected_normal_opacity[j];\n            float normal[3] = {nor_o.x, nor_o.y, nor_o.z};\n            float opa = nor_o.w;\n\n            float power = -0.5f * rho;\n            if (power > 0.0f)\n                continue;\n\n            // Eq. (2) from 3D Gaussian splatting paper.\n            // Obtain alpha by multiplying with Gaussian opacity\n            // and its exponential falloff from mean.\n            // Avoid numerical instabilities (see paper appendix).\n            float alpha = min(0.99f, opa * exp(power));\n            if (alpha < 1.0f / 255.0f)\n                continue;\n            float test_T = T * (1 - alpha);\n            if (test_T < 0.0001f)\n            {\n                done = true;\n                continue;\n            }\n\n            float w = alpha * T;\n        */\n        let fragmentShaderSource = `\n            precision highp float;\n            #include <common>\n\n            uniform vec3 debugColor;\n\n            varying vec4 vColor;\n            varying vec2 vUv;\n            varying vec2 vPosition;\n            varying mat3 vT;\n            varying vec2 vQuadCenter;\n            varying vec2 vFragCoord;\n\n            void main () {\n\n                const float FilterInvSquare = 2.0;\n                const float near_n = 0.2;\n                const float T = 1.0;\n\n                vec2 xy = vQuadCenter;\n                vec3 Tu = vT[0];\n                vec3 Tv = vT[1];\n                vec3 Tw = vT[2];\n                vec3 k = vFragCoord.x * Tw - Tu;\n                vec3 l = vFragCoord.y * Tw - Tv;\n                vec3 p = cross(k, l);\n                if (p.z == 0.0) discard;\n                vec2 s = vec2(p.x / p.z, p.y / p.z);\n                float rho3d = (s.x * s.x + s.y * s.y); \n                vec2 d = vec2(xy.x - vFragCoord.x, xy.y - vFragCoord.y);\n                float rho2d = FilterInvSquare * (d.x * d.x + d.y * d.y); \n\n                // compute intersection and depth\n                float rho = min(rho3d, rho2d);\n                float depth = (rho3d <= rho2d) ? (s.x * Tw.x + s.y * Tw.y) + Tw.z : Tw.z; \n                if (depth < near_n) discard;\n                //  vec4 nor_o = collected_normal_opacity[j];\n                //  float normal[3] = {nor_o.x, nor_o.y, nor_o.z};\n                float opa = vColor.a;\n\n                float power = -0.5f * rho;\n                if (power > 0.0f) discard;\n\n                // Eq. (2) from 3D Gaussian splatting paper.\n                // Obtain alpha by multiplying with Gaussian opacity\n                // and its exponential falloff from mean.\n                // Avoid numerical instabilities (see paper appendix). \n                float alpha = min(0.99f, opa * exp(power));\n                if (alpha < 1.0f / 255.0f) discard;\n                float test_T = T * (1.0 - alpha);\n                if (test_T < 0.0001)discard;\n\n                float w = alpha * T;\n                gl_FragColor = vec4(vColor.rgb, w);\n            }\n        `;\n\n        return fragmentShaderSource;\n    }\n}\n","import * as THREE from 'three';\n\nexport class SplatGeometry {\n\n    /**\n     * Build the Three.js geometry that will be used to render the splats. The geometry is instanced and is made up of\n     * vertices for a single quad as well as an attribute buffer for the splat indexes.\n     * @param {number} maxSplatCount The maximum number of splats that the geometry will need to accomodate\n     * @return {THREE.InstancedBufferGeometry}\n     */\n    static build(maxSplatCount) {\n\n        const baseGeometry = new THREE.BufferGeometry();\n        baseGeometry.setIndex([0, 1, 2, 0, 2, 3]);\n\n        // Vertices for the instanced quad\n        const positionsArray = new Float32Array(4 * 3);\n        const positions = new THREE.BufferAttribute(positionsArray, 3);\n        baseGeometry.setAttribute('position', positions);\n        positions.setXYZ(0, -1.0, -1.0, 0.0);\n        positions.setXYZ(1, -1.0, 1.0, 0.0);\n        positions.setXYZ(2, 1.0, 1.0, 0.0);\n        positions.setXYZ(3, 1.0, -1.0, 0.0);\n        positions.needsUpdate = true;\n\n        const geometry = new THREE.InstancedBufferGeometry().copy(baseGeometry);\n\n        // Splat index buffer\n        const splatIndexArray = new Uint32Array(maxSplatCount);\n        const splatIndexes = new THREE.InstancedBufferAttribute(splatIndexArray, 1, false);\n        splatIndexes.setUsage(THREE.DynamicDrawUsage);\n        geometry.setAttribute('splatIndex', splatIndexes);\n\n        geometry.instanceCount = 0;\n\n        return geometry;\n    }\n}\n","import * as THREE from 'three';\n\n/**\n * SplatScene: Descriptor for a single splat scene managed by an instance of SplatMesh.\n */\nexport class SplatScene extends THREE.Object3D {\n\n    constructor(splatBuffer, position = new THREE.Vector3(), quaternion = new THREE.Quaternion(),\n                scale = new THREE.Vector3(1, 1, 1), minimumAlpha = 1, opacity = 1.0, visible = true) {\n        super();\n        this.splatBuffer = splatBuffer;\n        this.position.copy(position);\n        this.quaternion.copy(quaternion);\n        this.scale.copy(scale);\n        this.transform = new THREE.Matrix4();\n        this.minimumAlpha = minimumAlpha;\n        this.opacity = opacity;\n        this.visible = visible;\n    }\n\n    copyTransformData(otherScene) {\n        this.position.copy(otherScene.position);\n        this.quaternion.copy(otherScene.quaternion);\n        this.scale.copy(otherScene.scale);\n        this.transform.copy(otherScene.transform);\n    }\n\n    updateTransform(dynamicMode) {\n        if (dynamicMode) {\n            if (this.matrixWorldAutoUpdate) this.updateWorldMatrix(true, false);\n            this.transform.copy(this.matrixWorld);\n        } else {\n            if (this.matrixAutoUpdate) this.updateMatrix();\n            this.transform.copy(this.matrix);\n        }\n    }\n}\n","import * as THREE from 'three';\nimport { delayedExecute } from '../Util.js';\n\nclass SplatTreeNode {\n\n    static idGen = 0;\n\n    constructor(min, max, depth, id) {\n        this.min = new THREE.Vector3().copy(min);\n        this.max = new THREE.Vector3().copy(max);\n        this.boundingBox = new THREE.Box3(this.min, this.max);\n        this.center = new THREE.Vector3().copy(this.max).sub(this.min).multiplyScalar(0.5).add(this.min);\n        this.depth = depth;\n        this.children = [];\n        this.data = null;\n        this.id = id || SplatTreeNode.idGen++;\n    }\n\n}\n\nclass SplatSubTree {\n\n    constructor(maxDepth, maxCentersPerNode) {\n        this.maxDepth = maxDepth;\n        this.maxCentersPerNode = maxCentersPerNode;\n        this.sceneDimensions = new THREE.Vector3();\n        this.sceneMin = new THREE.Vector3();\n        this.sceneMax = new THREE.Vector3();\n        this.rootNode = null;\n        this.nodesWithIndexes = [];\n        this.splatMesh = null;\n    }\n\n    static convertWorkerSubTreeNode(workerSubTreeNode) {\n        const minVector = new THREE.Vector3().fromArray(workerSubTreeNode.min);\n        const maxVector = new THREE.Vector3().fromArray(workerSubTreeNode.max);\n        const convertedNode = new SplatTreeNode(minVector, maxVector, workerSubTreeNode.depth, workerSubTreeNode.id);\n        if (workerSubTreeNode.data.indexes) {\n            convertedNode.data = {\n                'indexes': []\n            };\n            for (let index of workerSubTreeNode.data.indexes) {\n                convertedNode.data.indexes.push(index);\n            }\n        }\n        if (workerSubTreeNode.children) {\n            for (let child of workerSubTreeNode.children) {\n                convertedNode.children.push(SplatSubTree.convertWorkerSubTreeNode(child));\n            }\n        }\n        return convertedNode;\n    }\n\n    static convertWorkerSubTree(workerSubTree, splatMesh) {\n        const convertedSubTree = new SplatSubTree(workerSubTree.maxDepth, workerSubTree.maxCentersPerNode);\n        convertedSubTree.sceneMin = new THREE.Vector3().fromArray(workerSubTree.sceneMin);\n        convertedSubTree.sceneMax = new THREE.Vector3().fromArray(workerSubTree.sceneMax);\n\n        convertedSubTree.splatMesh = splatMesh;\n        convertedSubTree.rootNode = SplatSubTree.convertWorkerSubTreeNode(workerSubTree.rootNode);\n\n\n        const visitLeavesFromNode = (node, visitFunc) => {\n            if (node.children.length === 0) visitFunc(node);\n            for (let child of node.children) {\n                visitLeavesFromNode(child, visitFunc);\n            }\n        };\n\n        convertedSubTree.nodesWithIndexes = [];\n        visitLeavesFromNode(convertedSubTree.rootNode, (node) => {\n            if (node.data && node.data.indexes && node.data.indexes.length > 0) {\n                convertedSubTree.nodesWithIndexes.push(node);\n            }\n        });\n\n        return convertedSubTree;\n    }\n}\n\nfunction createSplatTreeWorker(self) {\n\n    let WorkerSplatTreeNodeIDGen = 0;\n\n    class WorkerBox3 {\n\n        constructor(min, max) {\n            this.min = [min[0], min[1], min[2]];\n            this.max = [max[0], max[1], max[2]];\n        }\n\n        containsPoint(point) {\n            return point[0] >= this.min[0] && point[0] <= this.max[0] &&\n                   point[1] >= this.min[1] && point[1] <= this.max[1] &&\n                   point[2] >= this.min[2] && point[2] <= this.max[2];\n        }\n    }\n\n    class WorkerSplatSubTree {\n\n        constructor(maxDepth, maxCentersPerNode) {\n            this.maxDepth = maxDepth;\n            this.maxCentersPerNode = maxCentersPerNode;\n            this.sceneDimensions = [];\n            this.sceneMin = [];\n            this.sceneMax = [];\n            this.rootNode = null;\n            this.addedIndexes = {};\n            this.nodesWithIndexes = [];\n            this.splatMesh = null;\n            this.disposed = false;\n        }\n\n    }\n\n    class WorkerSplatTreeNode {\n\n        constructor(min, max, depth, id) {\n            this.min = [min[0], min[1], min[2]];\n            this.max = [max[0], max[1], max[2]];\n            this.center = [(max[0] - min[0]) * 0.5 + min[0],\n                           (max[1] - min[1]) * 0.5 + min[1],\n                           (max[2] - min[2]) * 0.5 + min[2]];\n            this.depth = depth;\n            this.children = [];\n            this.data = null;\n            this.id = id || WorkerSplatTreeNodeIDGen++;\n        }\n\n    }\n\n    processSplatTreeNode = function(tree, node, indexToCenter, sceneCenters) {\n        const splatCount = node.data.indexes.length;\n\n        if (splatCount < tree.maxCentersPerNode || node.depth > tree.maxDepth) {\n            const newIndexes = [];\n            for (let i = 0; i < node.data.indexes.length; i++) {\n                if (!tree.addedIndexes[node.data.indexes[i]]) {\n                    newIndexes.push(node.data.indexes[i]);\n                    tree.addedIndexes[node.data.indexes[i]] = true;\n                }\n            }\n            node.data.indexes = newIndexes;\n            node.data.indexes.sort((a, b) => {\n                if (a > b) return 1;\n                else return -1;\n            });\n            tree.nodesWithIndexes.push(node);\n            return;\n        }\n\n        const nodeDimensions = [node.max[0] - node.min[0],\n                                node.max[1] - node.min[1],\n                                node.max[2] - node.min[2]];\n        const halfDimensions = [nodeDimensions[0] * 0.5,\n                                nodeDimensions[1] * 0.5,\n                                nodeDimensions[2] * 0.5];\n        const nodeCenter = [node.min[0] + halfDimensions[0],\n                            node.min[1] + halfDimensions[1],\n                            node.min[2] + halfDimensions[2]];\n\n        const childrenBounds = [\n            // top section, clockwise from upper-left (looking from above, +Y)\n            new WorkerBox3([nodeCenter[0] - halfDimensions[0], nodeCenter[1], nodeCenter[2] - halfDimensions[2]],\n                           [nodeCenter[0], nodeCenter[1] + halfDimensions[1], nodeCenter[2]]),\n            new WorkerBox3([nodeCenter[0], nodeCenter[1], nodeCenter[2] - halfDimensions[2]],\n                           [nodeCenter[0] + halfDimensions[0], nodeCenter[1] + halfDimensions[1], nodeCenter[2]]),\n            new WorkerBox3([nodeCenter[0], nodeCenter[1], nodeCenter[2]],\n                           [nodeCenter[0] + halfDimensions[0], nodeCenter[1] + halfDimensions[1], nodeCenter[2] + halfDimensions[2]]),\n            new WorkerBox3([nodeCenter[0] - halfDimensions[0], nodeCenter[1], nodeCenter[2]],\n                           [nodeCenter[0], nodeCenter[1] + halfDimensions[1], nodeCenter[2] + halfDimensions[2]]),\n\n            // bottom section, clockwise from lower-left (looking from above, +Y)\n            new WorkerBox3([nodeCenter[0] - halfDimensions[0], nodeCenter[1] - halfDimensions[1], nodeCenter[2] - halfDimensions[2]],\n                           [nodeCenter[0], nodeCenter[1], nodeCenter[2]]),\n            new WorkerBox3([nodeCenter[0], nodeCenter[1] - halfDimensions[1], nodeCenter[2] - halfDimensions[2]],\n                           [nodeCenter[0] + halfDimensions[0], nodeCenter[1], nodeCenter[2]]),\n            new WorkerBox3([nodeCenter[0], nodeCenter[1] - halfDimensions[1], nodeCenter[2]],\n                           [nodeCenter[0] + halfDimensions[0], nodeCenter[1], nodeCenter[2] + halfDimensions[2]]),\n            new WorkerBox3([nodeCenter[0] - halfDimensions[0], nodeCenter[1] - halfDimensions[1], nodeCenter[2]],\n                           [nodeCenter[0], nodeCenter[1], nodeCenter[2] + halfDimensions[2]]),\n        ];\n\n        const splatCounts = [];\n        const baseIndexes = [];\n        for (let i = 0; i < childrenBounds.length; i++) {\n            splatCounts[i] = 0;\n            baseIndexes[i] = [];\n        }\n\n        const center = [0, 0, 0];\n        for (let i = 0; i < splatCount; i++) {\n            const splatGlobalIndex = node.data.indexes[i];\n            const centerBase = indexToCenter[splatGlobalIndex];\n            center[0] = sceneCenters[centerBase];\n            center[1] = sceneCenters[centerBase + 1];\n            center[2] = sceneCenters[centerBase + 2];\n            for (let j = 0; j < childrenBounds.length; j++) {\n                if (childrenBounds[j].containsPoint(center)) {\n                    splatCounts[j]++;\n                    baseIndexes[j].push(splatGlobalIndex);\n                }\n            }\n        }\n\n        for (let i = 0; i < childrenBounds.length; i++) {\n            const childNode = new WorkerSplatTreeNode(childrenBounds[i].min, childrenBounds[i].max, node.depth + 1);\n            childNode.data = {\n                'indexes': baseIndexes[i]\n            };\n            node.children.push(childNode);\n        }\n\n        node.data = {};\n        for (let child of node.children) {\n            processSplatTreeNode(tree, child, indexToCenter, sceneCenters);\n        }\n        return;\n    };\n\n    const buildSubTree = (sceneCenters, maxDepth, maxCentersPerNode) => {\n\n        const sceneMin = [0, 0, 0];\n        const sceneMax = [0, 0, 0];\n        const indexes = [];\n        const centerCount = Math.floor(sceneCenters.length / 4);\n        for ( let i = 0; i < centerCount; i ++) {\n            const base = i * 4;\n            const x = sceneCenters[base];\n            const y = sceneCenters[base + 1];\n            const z = sceneCenters[base + 2];\n            const index = Math.round(sceneCenters[base + 3]);\n            if (i === 0 || x < sceneMin[0]) sceneMin[0] = x;\n            if (i === 0 || x > sceneMax[0]) sceneMax[0] = x;\n            if (i === 0 || y < sceneMin[1]) sceneMin[1] = y;\n            if (i === 0 || y > sceneMax[1]) sceneMax[1] = y;\n            if (i === 0 || z < sceneMin[2]) sceneMin[2] = z;\n            if (i === 0 || z > sceneMax[2]) sceneMax[2] = z;\n            indexes.push(index);\n        }\n        const subTree = new WorkerSplatSubTree(maxDepth, maxCentersPerNode);\n        subTree.sceneMin = sceneMin;\n        subTree.sceneMax = sceneMax;\n        subTree.rootNode = new WorkerSplatTreeNode(subTree.sceneMin, subTree.sceneMax, 0);\n        subTree.rootNode.data = {\n            'indexes': indexes\n        };\n\n        return subTree;\n    };\n\n    function createSplatTree(allCenters, maxDepth, maxCentersPerNode) {\n        const indexToCenter = [];\n        for (let sceneCenters of allCenters) {\n            const centerCount = Math.floor(sceneCenters.length / 4);\n            for ( let i = 0; i < centerCount; i ++) {\n                const base = i * 4;\n                const index = Math.round(sceneCenters[base + 3]);\n                indexToCenter[index] = base;\n            }\n        }\n        const subTrees = [];\n        for (let sceneCenters of allCenters) {\n            const subTree = buildSubTree(sceneCenters, maxDepth, maxCentersPerNode);\n            subTrees.push(subTree);\n            processSplatTreeNode(subTree, subTree.rootNode, indexToCenter, sceneCenters);\n        }\n        self.postMessage({\n            'subTrees': subTrees\n        });\n    }\n\n    self.onmessage = (e) => {\n        if (e.data.process) {\n            createSplatTree(e.data.process.centers, e.data.process.maxDepth, e.data.process.maxCentersPerNode);\n        }\n    };\n}\n\nfunction workerProcessCenters(splatTreeWorker, centers, transferBuffers, maxDepth, maxCentersPerNode) {\n    splatTreeWorker.postMessage({\n        'process': {\n            'centers': centers,\n            'maxDepth': maxDepth,\n            'maxCentersPerNode': maxCentersPerNode\n        }\n    }, transferBuffers);\n}\n\nfunction checkAndCreateWorker() {\n    const splatTreeWorker = new Worker(\n        URL.createObjectURL(\n            new Blob(['(', createSplatTreeWorker.toString(), ')(self)'], {\n                type: 'application/javascript',\n            }),\n        ),\n    );\n    return splatTreeWorker;\n}\n\n/**\n * SplatTree: Octree tailored to splat data from a SplatMesh instance\n */\nexport class SplatTree {\n\n    constructor(maxDepth, maxCentersPerNode) {\n        this.maxDepth = maxDepth;\n        this.maxCentersPerNode = maxCentersPerNode;\n        this.subTrees = [];\n        this.splatMesh = null;\n    }\n\n\n    dispose() {\n        this.diposeSplatTreeWorker();\n        this.disposed = true;\n    }\n\n    diposeSplatTreeWorker() {\n        if (this.splatTreeWorker) this.splatTreeWorker.terminate();\n        this.splatTreeWorker = null;\n    };\n\n    /**\n     * Construct this instance of SplatTree from an instance of SplatMesh.\n     *\n     * @param {SplatMesh} splatMesh The instance of SplatMesh from which to construct this splat tree.\n     * @param {function} filterFunc Optional function to filter out unwanted splats.\n     * @param {function} onIndexesUpload Function to be called when the upload of splat centers to the splat tree\n     *                                   builder worker starts and finishes.\n     * @param {function} onSplatTreeConstruction Function to be called when the conversion of the local splat tree from\n     *                                           the format produced by the splat tree builder worker starts and ends.\n     * @return {undefined}\n     */\n    processSplatMesh = function(splatMesh, filterFunc = () => true, onIndexesUpload, onSplatTreeConstruction) {\n        if (!this.splatTreeWorker) this.splatTreeWorker = checkAndCreateWorker();\n\n        this.splatMesh = splatMesh;\n        this.subTrees = [];\n        const center = new THREE.Vector3();\n\n        const addCentersForScene = (splatOffset, splatCount) => {\n            const sceneCenters = new Float32Array(splatCount * 4);\n            let addedCount = 0;\n            for (let i = 0; i < splatCount; i++) {\n                const globalSplatIndex = i + splatOffset;\n                if (filterFunc(globalSplatIndex)) {\n                    splatMesh.getSplatCenter(globalSplatIndex, center);\n                    const addBase = addedCount * 4;\n                    sceneCenters[addBase] = center.x;\n                    sceneCenters[addBase + 1] = center.y;\n                    sceneCenters[addBase + 2] = center.z;\n                    sceneCenters[addBase + 3] = globalSplatIndex;\n                    addedCount++;\n                }\n            }\n            return sceneCenters;\n        };\n\n        return new Promise((resolve) => {\n\n            const checkForEarlyExit = () => {\n                if (this.disposed) {\n                    this.diposeSplatTreeWorker();\n                    resolve();\n                    return true;\n                }\n                return false;\n            };\n\n            if (onIndexesUpload) onIndexesUpload(false);\n\n            delayedExecute(() => {\n\n                if (checkForEarlyExit()) return;\n\n                const allCenters = [];\n                if (splatMesh.dynamicMode) {\n                    let splatOffset = 0;\n                    for (let s = 0; s < splatMesh.scenes.length; s++) {\n                        const scene = splatMesh.getScene(s);\n                        const splatCount = scene.splatBuffer.getSplatCount();\n                        const sceneCenters = addCentersForScene(splatOffset, splatCount);\n                        allCenters.push(sceneCenters);\n                        splatOffset += splatCount;\n                    }\n                } else {\n                    const sceneCenters = addCentersForScene(0, splatMesh.getSplatCount());\n                    allCenters.push(sceneCenters);\n                }\n\n                this.splatTreeWorker.onmessage = (e) => {\n\n                    if (checkForEarlyExit()) return;\n\n                    if (e.data.subTrees) {\n\n                        if (onSplatTreeConstruction) onSplatTreeConstruction(false);\n\n                        delayedExecute(() => {\n\n                            if (checkForEarlyExit()) return;\n\n                            for (let workerSubTree of e.data.subTrees) {\n                                const convertedSubTree = SplatSubTree.convertWorkerSubTree(workerSubTree, splatMesh);\n                                this.subTrees.push(convertedSubTree);\n                            }\n                            this.diposeSplatTreeWorker();\n\n                            if (onSplatTreeConstruction) onSplatTreeConstruction(true);\n\n                            delayedExecute(() => {\n                                resolve();\n                            });\n\n                        });\n                    }\n                };\n\n                delayedExecute(() => {\n                    if (checkForEarlyExit()) return;\n                    if (onIndexesUpload) onIndexesUpload(true);\n                    const transferBuffers = allCenters.map((array) => array.buffer);\n                    workerProcessCenters(this.splatTreeWorker, allCenters, transferBuffers, this.maxDepth, this.maxCentersPerNode);\n                });\n\n            });\n\n        });\n\n    };\n\n    countLeaves() {\n\n        let leafCount = 0;\n        this.visitLeaves(() => {\n            leafCount++;\n        });\n\n        return leafCount;\n    }\n\n    visitLeaves(visitFunc) {\n\n        const visitLeavesFromNode = (node, visitFunc) => {\n            if (node.children.length === 0) visitFunc(node);\n            for (let child of node.children) {\n                visitLeavesFromNode(child, visitFunc);\n            }\n        };\n\n        for (let subTree of this.subTrees) {\n            visitLeavesFromNode(subTree.rootNode, visitFunc);\n        }\n    }\n\n}\n","function WebGLExtensions( gl ) {\n\n    const extensions = {};\n\n    function getExtension( name ) {\n\n        if ( extensions[name] !== undefined ) {\n\n            return extensions[name];\n\n        }\n\n        let extension;\n\n        switch ( name ) {\n\n            case 'WEBGL_depth_texture':\n                extension = gl.getExtension( 'WEBGL_depth_texture' ) || gl.getExtension( 'MOZ_WEBGL_depth_texture' ) ||\n                            gl.getExtension( 'WEBKIT_WEBGL_depth_texture' );\n                break;\n\n            case 'EXT_texture_filter_anisotropic':\n                extension = gl.getExtension( 'EXT_texture_filter_anisotropic' ) ||\n                            gl.getExtension( 'MOZ_EXT_texture_filter_anisotropic' ) ||\n                            gl.getExtension( 'WEBKIT_EXT_texture_filter_anisotropic' );\n                break;\n\n            case 'WEBGL_compressed_texture_s3tc':\n                extension = gl.getExtension( 'WEBGL_compressed_texture_s3tc' ) ||\n                            gl.getExtension( 'MOZ_WEBGL_compressed_texture_s3tc' ) ||\n                            gl.getExtension( 'WEBKIT_WEBGL_compressed_texture_s3tc' );\n                break;\n\n            case 'WEBGL_compressed_texture_pvrtc':\n                extension = gl.getExtension( 'WEBGL_compressed_texture_pvrtc' ) ||\n                           gl.getExtension( 'WEBKIT_WEBGL_compressed_texture_pvrtc' );\n                break;\n\n            default:\n                extension = gl.getExtension( name );\n\n        }\n\n        extensions[name] = extension;\n\n        return extension;\n\n    }\n\n    return {\n\n        has: function( name ) {\n\n            return getExtension( name ) !== null;\n\n        },\n\n        init: function( capabilities ) {\n\n            if ( capabilities.isWebGL2 ) {\n\n                getExtension( 'EXT_color_buffer_float' );\n                getExtension( 'WEBGL_clip_cull_distance' );\n\n            } else {\n\n                getExtension( 'WEBGL_depth_texture' );\n                getExtension( 'OES_texture_float' );\n                getExtension( 'OES_texture_half_float' );\n                getExtension( 'OES_texture_half_float_linear' );\n                getExtension( 'OES_standard_derivatives' );\n                getExtension( 'OES_element_index_uint' );\n                getExtension( 'OES_vertex_array_object' );\n                getExtension( 'ANGLE_instanced_arrays' );\n\n            }\n\n            getExtension( 'OES_texture_float_linear' );\n            getExtension( 'EXT_color_buffer_half_float' );\n            getExtension( 'WEBGL_multisampled_render_to_texture' );\n\n        },\n\n        get: function( name ) {\n\n            const extension = getExtension( name );\n\n            if ( extension === null ) {\n\n                console.warn( 'THREE.WebGLRenderer: ' + name + ' extension not supported.' );\n\n            }\n\n            return extension;\n\n        }\n\n    };\n\n}\n\nexport { WebGLExtensions };\n","function WebGLCapabilities( gl, extensions, parameters ) {\n\n    let maxAnisotropy;\n\n    function getMaxAnisotropy() {\n\n        if ( maxAnisotropy !== undefined ) return maxAnisotropy;\n\n        if ( extensions.has( 'EXT_texture_filter_anisotropic' ) === true ) {\n\n            const extension = extensions.get( 'EXT_texture_filter_anisotropic' );\n\n            maxAnisotropy = gl.getParameter( extension.MAX_TEXTURE_MAX_ANISOTROPY_EXT );\n\n        } else {\n\n            maxAnisotropy = 0;\n\n        }\n\n        return maxAnisotropy;\n\n    }\n\n    function getMaxPrecision( precision ) {\n\n        if ( precision === 'highp' ) {\n\n            if ( gl.getShaderPrecisionFormat( gl.VERTEX_SHADER, gl.HIGH_FLOAT ).precision > 0 &&\n                gl.getShaderPrecisionFormat( gl.FRAGMENT_SHADER, gl.HIGH_FLOAT ).precision > 0 ) {\n\n                return 'highp';\n\n            }\n\n            precision = 'mediump';\n\n        }\n\n        if ( precision === 'mediump' ) {\n\n            if ( gl.getShaderPrecisionFormat( gl.VERTEX_SHADER, gl.MEDIUM_FLOAT ).precision > 0 &&\n                gl.getShaderPrecisionFormat( gl.FRAGMENT_SHADER, gl.MEDIUM_FLOAT ).precision > 0 ) {\n\n                return 'mediump';\n\n            }\n\n        }\n\n        return 'lowp';\n\n    }\n\n    const isWebGL2 = typeof WebGL2RenderingContext !== 'undefined' && gl.constructor.name === 'WebGL2RenderingContext';\n\n    let precision = parameters.precision !== undefined ? parameters.precision : 'highp';\n    const maxPrecision = getMaxPrecision( precision );\n\n    if ( maxPrecision !== precision ) {\n\n        console.warn( 'THREE.WebGLRenderer:', precision, 'not supported, using', maxPrecision, 'instead.' );\n        precision = maxPrecision;\n\n    }\n\n    const drawBuffers = isWebGL2 || extensions.has( 'WEBGL_draw_buffers' );\n\n    const logarithmicDepthBuffer = parameters.logarithmicDepthBuffer === true;\n\n    const maxTextures = gl.getParameter( gl.MAX_TEXTURE_IMAGE_UNITS );\n    const maxVertexTextures = gl.getParameter( gl.MAX_VERTEX_TEXTURE_IMAGE_UNITS );\n    const maxTextureSize = gl.getParameter( gl.MAX_TEXTURE_SIZE );\n    const maxCubemapSize = gl.getParameter( gl.MAX_CUBE_MAP_TEXTURE_SIZE );\n\n    const maxAttributes = gl.getParameter( gl.MAX_VERTEX_ATTRIBS );\n    const maxVertexUniforms = gl.getParameter( gl.MAX_VERTEX_UNIFORM_VECTORS );\n    const maxVaryings = gl.getParameter( gl.MAX_VARYING_VECTORS );\n    const maxFragmentUniforms = gl.getParameter( gl.MAX_FRAGMENT_UNIFORM_VECTORS );\n\n    const vertexTextures = maxVertexTextures > 0;\n    const floatFragmentTextures = isWebGL2 || extensions.has( 'OES_texture_float' );\n    const floatVertexTextures = vertexTextures && floatFragmentTextures;\n\n    const maxSamples = isWebGL2 ? gl.getParameter( gl.MAX_SAMPLES ) : 0;\n\n    return {\n\n        isWebGL2: isWebGL2,\n\n        drawBuffers: drawBuffers,\n\n        getMaxAnisotropy: getMaxAnisotropy,\n        getMaxPrecision: getMaxPrecision,\n\n        precision: precision,\n        logarithmicDepthBuffer: logarithmicDepthBuffer,\n\n        maxTextures: maxTextures,\n        maxVertexTextures: maxVertexTextures,\n        maxTextureSize: maxTextureSize,\n        maxCubemapSize: maxCubemapSize,\n\n        maxAttributes: maxAttributes,\n        maxVertexUniforms: maxVertexUniforms,\n        maxVaryings: maxVaryings,\n        maxFragmentUniforms: maxFragmentUniforms,\n\n        vertexTextures: vertexTextures,\n        floatFragmentTextures: floatFragmentTextures,\n        floatVertexTextures: floatVertexTextures,\n\n        maxSamples: maxSamples\n\n    };\n\n}\n\n\nexport { WebGLCapabilities };\n","export const SceneRevealMode = {\n    Default: 0,\n    Gradual: 1,\n    Instant: 2\n};\n","export const LogLevel = {\n    None: 0,\n    Error: 1,\n    Warning: 2,\n    Info: 3,\n    Debug: 4\n};\n","import * as THREE from 'three';\nimport { SplatMaterial3D } from './SplatMaterial3D.js';\nimport { SplatMaterial2D } from './SplatMaterial2D.js';\nimport { SplatGeometry } from './SplatGeometry.js';\nimport { SplatScene } from './SplatScene.js';\nimport { SplatTree } from '../splattree/SplatTree.js';\nimport { WebGLExtensions } from '../three-shim/WebGLExtensions.js';\nimport { WebGLCapabilities } from '../three-shim/WebGLCapabilities.js';\nimport { uintEncodedFloat, rgbaArrayToInteger } from '../Util.js';\nimport { Constants } from '../Constants.js';\nimport { SceneRevealMode } from '../SceneRevealMode.js';\nimport { SplatRenderMode } from '../SplatRenderMode.js';\nimport { LogLevel } from '../LogLevel.js';\nimport { clamp, getSphericalHarmonicsComponentCountForDegree } from '../Util.js';\n\nconst dummyGeometry = new THREE.BufferGeometry();\nconst dummyMaterial = new THREE.MeshBasicMaterial();\n\nconst COVARIANCES_ELEMENTS_PER_SPLAT = 6;\nconst CENTER_COLORS_ELEMENTS_PER_SPLAT = 4;\n\nconst COVARIANCES_ELEMENTS_PER_TEXEL_STORED = 4;\nconst COVARIANCES_ELEMENTS_PER_TEXEL_ALLOCATED = 4;\nconst COVARIANCES_ELEMENTS_PER_TEXEL_COMPRESSED_STORED = 6;\nconst COVARIANCES_ELEMENTS_PER_TEXEL_COMPRESSED_ALLOCATED = 8;\nconst SCALES_ROTATIONS_ELEMENTS_PER_TEXEL = 4;\nconst CENTER_COLORS_ELEMENTS_PER_TEXEL = 4;\nconst SCENE_INDEXES_ELEMENTS_PER_TEXEL = 1;\n\nconst SCENE_FADEIN_RATE_FAST = 0.012;\nconst SCENE_FADEIN_RATE_GRADUAL = 0.003;\n\nconst VISIBLE_REGION_EXPANSION_DELTA = 1;\n\n// Based on my own observations across multiple devices, OSes and browsers, using textures that have one dimension\n// greater than 4096 while the other is greater than or equal to 4096 causes issues (Essentially any texture larger\n// than 4096 x 4096 (16777216) texels). Specifically it seems all texture data beyond the 4096 x 4096 texel boundary\n// is corrupted, while data below that boundary is usable. In these cases the texture has been valid in the eyes of\n// both Three.js and WebGL, and the texel format (RG, RGBA, etc.) has not mattered. More investigation will be needed,\n// but for now the work-around is to split the spherical harmonics into three textures (one for each color channel).\nconst MAX_TEXTURE_TEXELS = 16777216;\n\n/**\n * SplatMesh: Container for one or more splat scenes, abstracting them into a single unified container for\n * splat data. Additionally contains data structures and code to make the splat data renderable as a Three.js mesh.\n */\nexport class SplatMesh extends THREE.Mesh {\n\n    constructor(splatRenderMode = SplatRenderMode.ThreeD, dynamicMode = false, enableOptionalEffects = false,\n                halfPrecisionCovariancesOnGPU = false, devicePixelRatio = 1, enableDistancesComputationOnGPU = true,\n                integerBasedDistancesComputation = false, antialiased = false, maxScreenSpaceSplatSize = 1024, logLevel = LogLevel.None,\n                sphericalHarmonicsDegree = 0, sceneFadeInRateMultiplier = 1.0, kernel2DSize = 0.3) {\n        super(dummyGeometry, dummyMaterial);\n\n        // Reference to a Three.js renderer\n        this.renderer = undefined;\n\n        // Determine how the splats are rendered\n        this.splatRenderMode = splatRenderMode;\n\n        // When 'dynamicMode' is true, scenes are assumed to be non-static. Dynamic scenes are handled differently\n        // and certain optimizations cannot be made for them. Additionally, by default, all splat data retrieved from\n        // this splat mesh will not have their scene transform applied to them if the splat mesh is dynamic. That\n        // can be overriden via parameters to the individual functions that are used to retrieve splat data.\n        this.dynamicMode = dynamicMode;\n\n        // When true, allows for usage of extra properties and attributes during rendering for effects such as opacity adjustment.\n        // Default is false for performance reasons. These properties are separate from transform properties (scale, rotation, position)\n        // that are enabled by the 'dynamicScene' parameter.\n        this.enableOptionalEffects = enableOptionalEffects;\n\n        // Use 16-bit floating point values when storing splat covariance data in textures, instead of 32-bit\n        this.halfPrecisionCovariancesOnGPU = halfPrecisionCovariancesOnGPU;\n\n        // Ratio of the resolution in physical pixels to the resolution in CSS pixels for the current display device\n        this.devicePixelRatio = devicePixelRatio;\n\n        // Use a transform feedback to calculate splat distances from the camera\n        this.enableDistancesComputationOnGPU = enableDistancesComputationOnGPU;\n\n        // Use a faster integer-based approach for calculating splat distances from the camera\n        this.integerBasedDistancesComputation = integerBasedDistancesComputation;\n\n        // When true, will perform additional steps during rendering to address artifacts caused by the rendering of gaussians at a\n        // substantially different resolution than that at which they were rendered during training. This will only work correctly\n        // for models that were trained using a process that utilizes this compensation calculation. For more details:\n        // https://github.com/nerfstudio-project/gsplat/pull/117\n        // https://github.com/graphdeco-inria/gaussian-splatting/issues/294#issuecomment-1772688093\n        this.antialiased = antialiased;\n\n        // The size of the 2D kernel used for splat rendering\n        // This will adjust the 2D kernel size after the projection\n        this.kernel2DSize = kernel2DSize;\n\n        // Specify the maximum clip space splat size, can help deal with large splats that get too unwieldy\n        this.maxScreenSpaceSplatSize = maxScreenSpaceSplatSize;\n\n        // The verbosity of console logging\n        this.logLevel = logLevel;\n\n        // Degree 0 means no spherical harmonics\n        this.sphericalHarmonicsDegree = sphericalHarmonicsDegree;\n        this.minSphericalHarmonicsDegree = 0;\n\n        this.sceneFadeInRateMultiplier = sceneFadeInRateMultiplier;\n\n        // The individual splat scenes stored in this splat mesh, each containing their own transform\n        this.scenes = [];\n\n        // Special octree tailored to SplatMesh instances\n        this.splatTree = null;\n        this.baseSplatTree = null;\n\n        // Cache textures and the intermediate data used to populate them\n        this.splatDataTextures = {};\n\n        this.distancesTransformFeedback = {\n            'id': null,\n            'vertexShader': null,\n            'fragmentShader': null,\n            'program': null,\n            'centersBuffer': null,\n            'sceneIndexesBuffer': null,\n            'outDistancesBuffer': null,\n            'centersLoc': -1,\n            'modelViewProjLoc': -1,\n            'sceneIndexesLoc': -1,\n            'transformsLocs': []\n        };\n\n        this.globalSplatIndexToLocalSplatIndexMap = [];\n        this.globalSplatIndexToSceneIndexMap = [];\n\n        this.lastBuildSplatCount = 0;\n        this.lastBuildScenes = [];\n        this.lastBuildMaxSplatCount = 0;\n        this.lastBuildSceneCount = 0;\n        this.firstRenderTime = -1;\n        this.finalBuild = false;\n\n        this.webGLUtils = null;\n\n        this.boundingBox = new THREE.Box3();\n        this.calculatedSceneCenter = new THREE.Vector3();\n        this.maxSplatDistanceFromSceneCenter = 0;\n        this.visibleRegionBufferRadius = 0;\n        this.visibleRegionRadius = 0;\n        this.visibleRegionFadeStartRadius = 0;\n        this.visibleRegionChanging = false;\n\n        this.splatScale = 1.0;\n        this.pointCloudModeEnabled = false;\n\n        this.disposed = false;\n        this.lastRenderer = null;\n        this.visible = false;\n    }\n\n    /**\n     * Build a container for each scene managed by this splat mesh based on an instance of SplatBuffer, along with optional\n     * transform data (position, scale, rotation) passed to the splat mesh during the build process.\n     * @param {Array<THREE.Matrix4>} splatBuffers SplatBuffer instances containing splats for each scene\n     * @param {Array<object>} sceneOptions Array of options objects: {\n     *\n     *         position (Array<number>):   Position of the scene, acts as an offset from its default position, defaults to [0, 0, 0]\n     *\n     *         rotation (Array<number>):   Rotation of the scene represented as a quaternion, defaults to [0, 0, 0, 1]\n     *\n     *         scale (Array<number>):      Scene's scale, defaults to [1, 1, 1]\n     * }\n     * @return {Array<THREE.Matrix4>}\n     */\n    static buildScenes(parentObject, splatBuffers, sceneOptions) {\n        const scenes = [];\n        scenes.length = splatBuffers.length;\n        for (let i = 0; i < splatBuffers.length; i++) {\n            const splatBuffer = splatBuffers[i];\n            const options = sceneOptions[i] || {};\n            let positionArray = options['position'] || [0, 0, 0];\n            let rotationArray = options['rotation'] || [0, 0, 0, 1];\n            let scaleArray = options['scale'] || [1, 1, 1];\n            const position = new THREE.Vector3().fromArray(positionArray);\n            const rotation = new THREE.Quaternion().fromArray(rotationArray);\n            const scale = new THREE.Vector3().fromArray(scaleArray);\n            const scene = SplatMesh.createScene(splatBuffer, position, rotation, scale,\n                                                options.splatAlphaRemovalThreshold || 1, options.opacity, options.visible);\n            parentObject.add(scene);\n            scenes[i] = scene;\n        }\n        return scenes;\n    }\n\n    static createScene(splatBuffer, position, rotation, scale, minimumAlpha, opacity = 1.0, visible = true) {\n        return new SplatScene(splatBuffer, position, rotation, scale, minimumAlpha, opacity, visible);\n    }\n\n    /**\n     * Build data structures that map global splat indexes (based on a unified index across all splat buffers) to\n     * local data within a single scene.\n     * @param {Array<SplatBuffer>} splatBuffers Instances of SplatBuffer off which to build the maps\n     * @return {object}\n     */\n    static buildSplatIndexMaps(splatBuffers) {\n        const localSplatIndexMap = [];\n        const sceneIndexMap = [];\n        let totalSplatCount = 0;\n        for (let s = 0; s < splatBuffers.length; s++) {\n            const splatBuffer = splatBuffers[s];\n            const maxSplatCount = splatBuffer.getMaxSplatCount();\n            for (let i = 0; i < maxSplatCount; i++) {\n                localSplatIndexMap[totalSplatCount] = i;\n                sceneIndexMap[totalSplatCount] = s;\n                totalSplatCount++;\n            }\n        }\n        return {\n            localSplatIndexMap,\n            sceneIndexMap\n        };\n    }\n\n    /**\n     * Build an instance of SplatTree (a specialized octree) for the given splat mesh.\n     * @param {Array<number>} minAlphas Array of minimum splat slphas for each scene\n     * @param {function} onSplatTreeIndexesUpload Function to be called when the upload of splat centers to the splat tree\n     *                                            builder worker starts and finishes.\n     * @param {function} onSplatTreeConstruction Function to be called when the conversion of the local splat tree from\n     *                                           the format produced by the splat tree builder worker starts and ends.\n     * @return {SplatTree}\n     */\n     buildSplatTree = function(minAlphas = [], onSplatTreeIndexesUpload, onSplatTreeConstruction) {\n        return new Promise((resolve) => {\n            this.disposeSplatTree();\n            // TODO: expose SplatTree constructor parameters (maximumDepth and maxCentersPerNode) so that they can\n            // be configured on a per-scene basis\n            this.baseSplatTree = new SplatTree(8, 1000);\n            const buildStartTime = performance.now();\n            const splatColor = new THREE.Vector4();\n            this.baseSplatTree.processSplatMesh(this, (splatIndex) => {\n                this.getSplatColor(splatIndex, splatColor);\n                const sceneIndex = this.getSceneIndexForSplat(splatIndex);\n                const minAlpha = minAlphas[sceneIndex] || 1;\n                return splatColor.w >= minAlpha;\n            }, onSplatTreeIndexesUpload, onSplatTreeConstruction)\n            .then(() => {\n                const buildTime = performance.now() - buildStartTime;\n                if (this.logLevel >= LogLevel.Info) console.log('SplatTree build: ' + buildTime + ' ms');\n                if (this.disposed) {\n                    resolve();\n                } else {\n\n                    this.splatTree = this.baseSplatTree;\n                    this.baseSplatTree = null;\n\n                    let leavesWithVertices = 0;\n                    let avgSplatCount = 0;\n                    let maxSplatCount = 0;\n                    let nodeCount = 0;\n\n                    this.splatTree.visitLeaves((node) => {\n                        const nodeSplatCount = node.data.indexes.length;\n                        if (nodeSplatCount > 0) {\n                            avgSplatCount += nodeSplatCount;\n                            maxSplatCount = Math.max(maxSplatCount, nodeSplatCount);\n                            nodeCount++;\n                            leavesWithVertices++;\n                        }\n                    });\n                    if (this.logLevel >= LogLevel.Info) {\n                        console.log(`SplatTree leaves: ${this.splatTree.countLeaves()}`);\n                        console.log(`SplatTree leaves with splats:${leavesWithVertices}`);\n                        avgSplatCount = avgSplatCount / nodeCount;\n                        console.log(`Avg splat count per node: ${avgSplatCount}`);\n                        console.log(`Total splat count: ${this.getSplatCount()}`);\n                    }\n                    resolve();\n                }\n            });\n        });\n    };\n\n    /**\n     * Construct this instance of SplatMesh.\n     * @param {Array<SplatBuffer>} splatBuffers The base splat data, instances of SplatBuffer\n     * @param {Array<object>} sceneOptions Dynamic options for each scene {\n     *\n     *         splatAlphaRemovalThreshold: Ignore any splats with an alpha less than the specified\n     *                                     value (valid range: 0 - 255), defaults to 1\n     *\n     *         position (Array<number>):   Position of the scene, acts as an offset from its default position, defaults to [0, 0, 0]\n     *\n     *         rotation (Array<number>):   Rotation of the scene represented as a quaternion, defaults to [0, 0, 0, 1]\n     *\n     *         scale (Array<number>):      Scene's scale, defaults to [1, 1, 1]\n     *\n     * }\n     * @param {boolean} keepSceneTransforms For a scene that already exists and is being overwritten, this flag\n     *                                      says to keep the transform from the existing scene.\n     * @param {boolean} finalBuild Will the splat mesh be in its final state after this build?\n     * @param {function} onSplatTreeIndexesUpload Function to be called when the upload of splat centers to the splat tree\n     *                                            builder worker starts and finishes.\n     * @param {function} onSplatTreeConstruction Function to be called when the conversion of the local splat tree from\n     *                                           the format produced by the splat tree builder worker starts and ends.\n     * @return {object} Object containing info about the splats that are updated\n     */\n    build(splatBuffers, sceneOptions, keepSceneTransforms = true, finalBuild = false,\n          onSplatTreeIndexesUpload, onSplatTreeConstruction, preserveVisibleRegion = true) {\n\n        this.sceneOptions = sceneOptions;\n        this.finalBuild = finalBuild;\n\n        const maxSplatCount = SplatMesh.getTotalMaxSplatCountForSplatBuffers(splatBuffers);\n\n        const newScenes = SplatMesh.buildScenes(this, splatBuffers, sceneOptions);\n        if (keepSceneTransforms) {\n            for (let i = 0; i < this.scenes.length && i < newScenes.length; i++) {\n                const newScene = newScenes[i];\n                const existingScene = this.getScene(i);\n                newScene.copyTransformData(existingScene);\n            }\n        }\n        this.scenes = newScenes;\n\n        let minSphericalHarmonicsDegree = 3;\n        for (let splatBuffer of splatBuffers) {\n            const splatBufferSphericalHarmonicsDegree = splatBuffer.getMinSphericalHarmonicsDegree();\n            if (splatBufferSphericalHarmonicsDegree < minSphericalHarmonicsDegree) {\n                minSphericalHarmonicsDegree = splatBufferSphericalHarmonicsDegree;\n            }\n        }\n        this.minSphericalHarmonicsDegree = Math.min(minSphericalHarmonicsDegree, this.sphericalHarmonicsDegree);\n\n        let splatBuffersChanged = false;\n        if (splatBuffers.length !== this.lastBuildScenes.length) {\n            splatBuffersChanged = true;\n        } else {\n            for (let i = 0; i < splatBuffers.length; i++) {\n                const splatBuffer = splatBuffers[i];\n                if (splatBuffer !== this.lastBuildScenes[i].splatBuffer) {\n                    splatBuffersChanged = true;\n                    break;\n                }\n            }\n        }\n\n        let isUpdateBuild = true;\n        if (this.scenes.length !== 1 ||\n            this.lastBuildSceneCount !== this.scenes.length ||\n            this.lastBuildMaxSplatCount !== maxSplatCount ||\n            splatBuffersChanged) {\n                isUpdateBuild = false;\n       }\n\n       if (!isUpdateBuild) {\n            this.boundingBox = new THREE.Box3();\n            if (!preserveVisibleRegion) {\n                this.maxSplatDistanceFromSceneCenter = 0;\n                this.visibleRegionBufferRadius = 0;\n                this.visibleRegionRadius = 0;\n                this.visibleRegionFadeStartRadius = 0;\n                this.firstRenderTime = -1;\n            }\n            this.lastBuildScenes = [];\n            this.lastBuildSplatCount = 0;\n            this.lastBuildMaxSplatCount = 0;\n            this.disposeMeshData();\n            this.geometry = SplatGeometry.build(maxSplatCount);\n            if (this.splatRenderMode === SplatRenderMode.ThreeD) {\n                this.material = SplatMaterial3D.build(this.dynamicMode, this.enableOptionalEffects, this.antialiased,\n                                                      this.maxScreenSpaceSplatSize, this.splatScale, this.pointCloudModeEnabled,\n                                                      this.minSphericalHarmonicsDegree, this.kernel2DSize);\n            } else {\n                this.material = SplatMaterial2D.build(this.dynamicMode, this.enableOptionalEffects,\n                                                      this.splatScale, this.pointCloudModeEnabled, this.minSphericalHarmonicsDegree);\n            }\n\n            const indexMaps = SplatMesh.buildSplatIndexMaps(splatBuffers);\n            this.globalSplatIndexToLocalSplatIndexMap = indexMaps.localSplatIndexMap;\n            this.globalSplatIndexToSceneIndexMap = indexMaps.sceneIndexMap;\n        }\n\n        const splatBufferSplatCount = this.getSplatCount(true);\n        if (this.enableDistancesComputationOnGPU) this.setupDistancesComputationTransformFeedback();\n        const dataUpdateResults = this.refreshGPUDataFromSplatBuffers(isUpdateBuild);\n\n        for (let i = 0; i < this.scenes.length; i++) {\n            this.lastBuildScenes[i] = this.scenes[i];\n        }\n        this.lastBuildSplatCount = splatBufferSplatCount;\n        this.lastBuildMaxSplatCount = this.getMaxSplatCount();\n        this.lastBuildSceneCount = this.scenes.length;\n\n        if (finalBuild && this.scenes.length > 0) {\n            this.buildSplatTree(sceneOptions.map(options => options.splatAlphaRemovalThreshold || 1),\n                                onSplatTreeIndexesUpload, onSplatTreeConstruction)\n            .then(() => {\n                if (this.onSplatTreeReadyCallback) this.onSplatTreeReadyCallback(this.splatTree);\n                this.onSplatTreeReadyCallback = null;\n            });\n        }\n\n        this.visible = (this.scenes.length > 0);\n\n        return dataUpdateResults;\n    }\n\n    freeIntermediateSplatData() {\n\n        const deleteTextureData = (texture) => {\n            delete texture.source.data;\n            delete texture.image;\n            texture.onUpdate = null;\n        };\n\n        delete this.splatDataTextures.baseData.covariances;\n        delete this.splatDataTextures.baseData.centers;\n        delete this.splatDataTextures.baseData.colors;\n        delete this.splatDataTextures.baseData.sphericalHarmonics;\n\n        delete this.splatDataTextures.centerColors.data;\n        delete this.splatDataTextures.covariances.data;\n        if (this.splatDataTextures.sphericalHarmonics) {\n            delete this.splatDataTextures.sphericalHarmonics.data;\n        }\n        if (this.splatDataTextures.sceneIndexes) {\n            delete this.splatDataTextures.sceneIndexes.data;\n        }\n\n        this.splatDataTextures.centerColors.texture.needsUpdate = true;\n        this.splatDataTextures.centerColors.texture.onUpdate = () => {\n            deleteTextureData(this.splatDataTextures.centerColors.texture);\n        };\n\n        this.splatDataTextures.covariances.texture.needsUpdate = true;\n        this.splatDataTextures.covariances.texture.onUpdate = () => {\n            deleteTextureData(this.splatDataTextures.covariances.texture);\n        };\n\n        if (this.splatDataTextures.sphericalHarmonics) {\n            if (this.splatDataTextures.sphericalHarmonics.texture) {\n                this.splatDataTextures.sphericalHarmonics.texture.needsUpdate = true;\n                this.splatDataTextures.sphericalHarmonics.texture.onUpdate = () => {\n                    deleteTextureData(this.splatDataTextures.sphericalHarmonics.texture);\n                };\n            } else {\n                this.splatDataTextures.sphericalHarmonics.textures.forEach((texture) => {\n                    texture.needsUpdate = true;\n                    texture.onUpdate = () => {\n                        deleteTextureData(texture);\n                    };\n                });\n            }\n        }\n        if (this.splatDataTextures.sceneIndexes) {\n            this.splatDataTextures.sceneIndexes.texture.needsUpdate = true;\n            this.splatDataTextures.sceneIndexes.texture.onUpdate = () => {\n                deleteTextureData(this.splatDataTextures.sceneIndexes.texture);\n            };\n        }\n    }\n    /**\n     * Dispose all resources held by the splat mesh\n     */\n    dispose() {\n        this.disposeMeshData();\n        this.disposeTextures();\n        this.disposeSplatTree();\n        if (this.enableDistancesComputationOnGPU) {\n            if (this.computeDistancesOnGPUSyncTimeout) {\n                clearTimeout(this.computeDistancesOnGPUSyncTimeout);\n                this.computeDistancesOnGPUSyncTimeout = null;\n            }\n            this.disposeDistancesComputationGPUResources();\n        }\n        this.scenes = [];\n        this.distancesTransformFeedback = {\n            'id': null,\n            'vertexShader': null,\n            'fragmentShader': null,\n            'program': null,\n            'centersBuffer': null,\n            'sceneIndexesBuffer': null,\n            'outDistancesBuffer': null,\n            'centersLoc': -1,\n            'modelViewProjLoc': -1,\n            'sceneIndexesLoc': -1,\n            'transformsLocs': []\n        };\n        this.renderer = null;\n\n        this.globalSplatIndexToLocalSplatIndexMap = [];\n        this.globalSplatIndexToSceneIndexMap = [];\n\n        this.lastBuildSplatCount = 0;\n        this.lastBuildScenes = [];\n        this.lastBuildMaxSplatCount = 0;\n        this.lastBuildSceneCount = 0;\n        this.firstRenderTime = -1;\n        this.finalBuild = false;\n\n        this.webGLUtils = null;\n\n        this.boundingBox = new THREE.Box3();\n        this.calculatedSceneCenter = new THREE.Vector3();\n        this.maxSplatDistanceFromSceneCenter = 0;\n        this.visibleRegionBufferRadius = 0;\n        this.visibleRegionRadius = 0;\n        this.visibleRegionFadeStartRadius = 0;\n        this.visibleRegionChanging = false;\n\n        this.splatScale = 1.0;\n        this.pointCloudModeEnabled = false;\n\n        this.disposed = true;\n        this.lastRenderer = null;\n        this.visible = false;\n    }\n\n    /**\n     * Dispose of only the Three.js mesh resources (geometry, material, and texture)\n     */\n    disposeMeshData() {\n        if (this.geometry && this.geometry !== dummyGeometry) {\n            this.geometry.dispose();\n            this.geometry = null;\n        }\n        if (this.material) {\n            this.material.dispose();\n            this.material = null;\n        }\n    }\n\n    disposeTextures() {\n        for (let textureKey in this.splatDataTextures) {\n            if (this.splatDataTextures.hasOwnProperty(textureKey)) {\n                const textureContainer = this.splatDataTextures[textureKey];\n                if (textureContainer.texture) {\n                    textureContainer.texture.dispose();\n                    textureContainer.texture = null;\n                }\n            }\n        }\n        this.splatDataTextures = null;\n    }\n\n    disposeSplatTree() {\n        if (this.splatTree) {\n            this.splatTree.dispose();\n            this.splatTree = null;\n        }\n        if (this.baseSplatTree) {\n            this.baseSplatTree.dispose();\n            this.baseSplatTree = null;\n        }\n    }\n\n    getSplatTree() {\n        return this.splatTree;\n    }\n\n    onSplatTreeReady(callback) {\n        this.onSplatTreeReadyCallback = callback;\n    }\n\n    /**\n     * Get copies of data that are necessary for splat distance computation: splat center positions and splat\n     * scene indexes (necessary for applying dynamic scene transformations during distance computation)\n     * @param {*} start The index at which to start copying data\n     * @param {*} end  The index at which to stop copying data\n     * @return {object}\n     */\n    getDataForDistancesComputation(start, end) {\n        const centers = this.integerBasedDistancesComputation ?\n                        this.getIntegerCenters(start, end, true) :\n                        this.getFloatCenters(start, end, true);\n        const sceneIndexes = this.getSceneIndexes(start, end);\n        return {\n            centers,\n            sceneIndexes\n        };\n    }\n\n    /**\n     * Refresh data textures and GPU buffers with splat data from the splat buffers belonging to this mesh.\n     * @param {boolean} sinceLastBuildOnly Specify whether or not to only update for splats that have been added since the last build.\n     * @return {object}\n     */\n    refreshGPUDataFromSplatBuffers(sinceLastBuildOnly) {\n        const splatCount = this.getSplatCount(true);\n        this.refreshDataTexturesFromSplatBuffers(sinceLastBuildOnly);\n        const updateStart = sinceLastBuildOnly ? this.lastBuildSplatCount : 0;\n        const { centers, sceneIndexes } = this.getDataForDistancesComputation(updateStart, splatCount - 1);\n        if (this.enableDistancesComputationOnGPU) {\n            this.refreshGPUBuffersForDistancesComputation(centers, sceneIndexes, sinceLastBuildOnly);\n        }\n        return {\n            'from': updateStart,\n            'to': splatCount - 1,\n            'count': splatCount - updateStart,\n            'centers': centers,\n            'sceneIndexes': sceneIndexes\n        };\n    }\n\n    /**\n     * Update the GPU buffers that are used for computing splat distances on the GPU.\n     * @param {Array<number>} centers Splat center positions\n     * @param {Array<number>} sceneIndexes Indexes of the scene to which each splat belongs\n     * @param {boolean} sinceLastBuildOnly Specify whether or not to only update for splats that have been added since the last build.\n     */\n    refreshGPUBuffersForDistancesComputation(centers, sceneIndexes, sinceLastBuildOnly = false) {\n        const offset = sinceLastBuildOnly ? this.lastBuildSplatCount : 0;\n        this.updateGPUCentersBufferForDistancesComputation(sinceLastBuildOnly, centers, offset);\n        this.updateGPUTransformIndexesBufferForDistancesComputation(sinceLastBuildOnly, sceneIndexes, offset);\n    }\n\n    /**\n     * Refresh data textures with data from the splat buffers for this mesh.\n     * @param {boolean} sinceLastBuildOnly Specify whether or not to only update for splats that have been added since the last build.\n     */\n    refreshDataTexturesFromSplatBuffers(sinceLastBuildOnly) {\n        const splatCount = this.getSplatCount(true);\n        const fromSplat = this.lastBuildSplatCount;\n        const toSplat = splatCount - 1;\n\n        if (!sinceLastBuildOnly) {\n            this.setupDataTextures();\n            this.updateBaseDataFromSplatBuffers();\n        } else {\n            this.updateBaseDataFromSplatBuffers(fromSplat, toSplat);\n        }\n\n        this.updateDataTexturesFromBaseData(fromSplat, toSplat);\n        this.updateVisibleRegion(sinceLastBuildOnly);\n    }\n\n    setupDataTextures() {\n        const maxSplatCount = this.getMaxSplatCount();\n        const splatCount = this.getSplatCount(true);\n\n        this.disposeTextures();\n\n        const computeDataTextureSize = (elementsPerTexel, elementsPerSplat) => {\n            const texSize = new THREE.Vector2(4096, 1024);\n            while (texSize.x * texSize.y * elementsPerTexel < maxSplatCount * elementsPerSplat) texSize.y *= 2;\n            return texSize;\n        };\n\n        const getCovariancesElementsPertexelStored = (compressionLevel) => {\n            return compressionLevel >= 1 ? COVARIANCES_ELEMENTS_PER_TEXEL_COMPRESSED_STORED : COVARIANCES_ELEMENTS_PER_TEXEL_STORED;\n        };\n\n        const getCovariancesInitialTextureSpecs = (compressionLevel) => {\n            const elementsPerTexelStored = getCovariancesElementsPertexelStored(compressionLevel);\n            const texSize = computeDataTextureSize(elementsPerTexelStored, 6);\n            return {elementsPerTexelStored, texSize};\n        };\n\n        let covarianceCompressionLevel = this.getTargetCovarianceCompressionLevel();\n        const scaleRotationCompressionLevel = 0;\n        const shCompressionLevel = this.getTargetSphericalHarmonicsCompressionLevel();\n\n        let covariances;\n        let scales;\n        let rotations;\n        if (this.splatRenderMode === SplatRenderMode.ThreeD) {\n            const initialCovTexSpecs = getCovariancesInitialTextureSpecs(covarianceCompressionLevel);\n            if (initialCovTexSpecs.texSize.x * initialCovTexSpecs.texSize.y > MAX_TEXTURE_TEXELS && covarianceCompressionLevel === 0) {\n                covarianceCompressionLevel = 1;\n            }\n            covariances = new Float32Array(maxSplatCount * COVARIANCES_ELEMENTS_PER_SPLAT);\n        } else {\n            scales = new Float32Array(maxSplatCount * 3);\n            rotations = new Float32Array(maxSplatCount * 4);\n        }\n\n        const centers = new Float32Array(maxSplatCount * 3);\n        const colors = new Uint8Array(maxSplatCount * 4);\n\n        let SphericalHarmonicsArrayType = Float32Array;\n        if (shCompressionLevel === 1) SphericalHarmonicsArrayType = Uint16Array;\n        else if (shCompressionLevel === 2) SphericalHarmonicsArrayType = Uint8Array;\n        const shComponentCount = getSphericalHarmonicsComponentCountForDegree(this.minSphericalHarmonicsDegree);\n        const shData = this.minSphericalHarmonicsDegree ? new SphericalHarmonicsArrayType(maxSplatCount * shComponentCount) : undefined;\n\n        // set up centers/colors data texture\n        const centersColsTexSize = computeDataTextureSize(CENTER_COLORS_ELEMENTS_PER_TEXEL, 4);\n        const paddedCentersCols = new Uint32Array(centersColsTexSize.x * centersColsTexSize.y * CENTER_COLORS_ELEMENTS_PER_TEXEL);\n        SplatMesh.updateCenterColorsPaddedData(0, splatCount - 1, centers, colors, paddedCentersCols);\n\n        const centersColsTex = new THREE.DataTexture(paddedCentersCols, centersColsTexSize.x, centersColsTexSize.y,\n                                                     THREE.RGBAIntegerFormat, THREE.UnsignedIntType);\n        centersColsTex.internalFormat = 'RGBA32UI';\n        centersColsTex.needsUpdate = true;\n        this.material.uniforms.centersColorsTexture.value = centersColsTex;\n        this.material.uniforms.centersColorsTextureSize.value.copy(centersColsTexSize);\n        this.material.uniformsNeedUpdate = true;\n\n        this.splatDataTextures = {\n            'baseData': {\n                'covariances': covariances,\n                'scales': scales,\n                'rotations': rotations,\n                'centers': centers,\n                'colors': colors,\n                'sphericalHarmonics': shData\n            },\n            'centerColors': {\n                'data': paddedCentersCols,\n                'texture': centersColsTex,\n                'size': centersColsTexSize\n            }\n        };\n\n        if (this.splatRenderMode === SplatRenderMode.ThreeD) {\n            // set up covariances data texture\n\n            const covTexSpecs = getCovariancesInitialTextureSpecs(covarianceCompressionLevel);\n            const covariancesElementsPerTexelStored = covTexSpecs.elementsPerTexelStored;\n            const covTexSize = covTexSpecs.texSize;\n\n            let CovariancesDataType = covarianceCompressionLevel >= 1 ? Uint32Array : Float32Array;\n            const covariancesElementsPerTexelAllocated = covarianceCompressionLevel >= 1 ?\n                                                         COVARIANCES_ELEMENTS_PER_TEXEL_COMPRESSED_ALLOCATED :\n                                                         COVARIANCES_ELEMENTS_PER_TEXEL_ALLOCATED;\n            const covariancesTextureData = new CovariancesDataType(covTexSize.x * covTexSize.y * covariancesElementsPerTexelAllocated);\n\n            if (covarianceCompressionLevel === 0) {\n                covariancesTextureData.set(covariances);\n            } else {\n                SplatMesh.updatePaddedCompressedCovariancesTextureData(covariances, covariancesTextureData, 0, 0, covariances.length);\n            }\n\n            let covTex;\n            if (covarianceCompressionLevel >= 1) {\n                covTex = new THREE.DataTexture(covariancesTextureData, covTexSize.x, covTexSize.y,\n                                               THREE.RGBAIntegerFormat, THREE.UnsignedIntType);\n                covTex.internalFormat = 'RGBA32UI';\n                this.material.uniforms.covariancesTextureHalfFloat.value = covTex;\n            } else {\n                covTex = new THREE.DataTexture(covariancesTextureData, covTexSize.x, covTexSize.y, THREE.RGBAFormat, THREE.FloatType);\n                this.material.uniforms.covariancesTexture.value = covTex;\n\n                // For some reason a usampler2D needs to have a valid texture attached or WebGL complains\n                const dummyTex = new THREE.DataTexture(new Uint32Array(32), 2, 2, THREE.RGBAIntegerFormat, THREE.UnsignedIntType);\n                dummyTex.internalFormat = 'RGBA32UI';\n                this.material.uniforms.covariancesTextureHalfFloat.value = dummyTex;\n                dummyTex.needsUpdate = true;\n            }\n            covTex.needsUpdate = true;\n\n            this.material.uniforms.covariancesAreHalfFloat.value = (covarianceCompressionLevel >= 1) ? 1 : 0;\n            this.material.uniforms.covariancesTextureSize.value.copy(covTexSize);\n\n            this.splatDataTextures['covariances'] = {\n                'data': covariancesTextureData,\n                'texture': covTex,\n                'size': covTexSize,\n                'compressionLevel': covarianceCompressionLevel,\n                'elementsPerTexelStored': covariancesElementsPerTexelStored,\n                'elementsPerTexelAllocated': covariancesElementsPerTexelAllocated\n            };\n        } else {\n            // set up scale & rotations data texture\n            const elementsPerSplat = 6;\n            const scaleRotationsTexSize = computeDataTextureSize(SCALES_ROTATIONS_ELEMENTS_PER_TEXEL, elementsPerSplat);\n            let ScaleRotationsDataType = scaleRotationCompressionLevel >= 1 ? Uint16Array : Float32Array;\n            let scaleRotationsTextureType = scaleRotationCompressionLevel >= 1 ? THREE.HalfFloatType : THREE.FloatType;\n            const paddedScaleRotations = new ScaleRotationsDataType(scaleRotationsTexSize.x * scaleRotationsTexSize.y *\n                                                                    SCALES_ROTATIONS_ELEMENTS_PER_TEXEL);\n\n            SplatMesh.updateScaleRotationsPaddedData(0, splatCount - 1, scales, rotations, paddedScaleRotations);\n\n            const scaleRotationsTex = new THREE.DataTexture(paddedScaleRotations, scaleRotationsTexSize.x, scaleRotationsTexSize.y,\n                                                            THREE.RGBAFormat, scaleRotationsTextureType);\n            scaleRotationsTex.needsUpdate = true;\n            this.material.uniforms.scaleRotationsTexture.value = scaleRotationsTex;\n            this.material.uniforms.scaleRotationsTextureSize.value.copy(scaleRotationsTexSize);\n\n            this.splatDataTextures['scaleRotations'] = {\n                'data': paddedScaleRotations,\n                'texture': scaleRotationsTex,\n                'size': scaleRotationsTexSize,\n                'compressionLevel': scaleRotationCompressionLevel\n            };\n        }\n\n        if (shData) {\n            const shTextureType = shCompressionLevel === 2 ? THREE.UnsignedByteType : THREE.HalfFloatType;\n\n            let paddedSHComponentCount = shComponentCount;\n            if (paddedSHComponentCount % 2 !== 0) paddedSHComponentCount++;\n            const shElementsPerTexel = 4;\n            const texelFormat = shElementsPerTexel === 4 ? THREE.RGBAFormat : THREE.RGFormat;\n            let shTexSize = computeDataTextureSize(shElementsPerTexel, paddedSHComponentCount);\n\n            // Use one texture for all spherical harmonics data\n            if (shTexSize.x * shTexSize.y <= MAX_TEXTURE_TEXELS) {\n                const paddedSHArraySize = shTexSize.x * shTexSize.y * shElementsPerTexel;\n                const paddedSHArray = new SphericalHarmonicsArrayType(paddedSHArraySize);\n                for (let c = 0; c < splatCount; c++) {\n                    const srcBase = shComponentCount * c;\n                    const destBase = paddedSHComponentCount * c;\n                    for (let i = 0; i < shComponentCount; i++) {\n                        paddedSHArray[destBase + i] = shData[srcBase + i];\n                    }\n                }\n\n                const shTexture = new THREE.DataTexture(paddedSHArray, shTexSize.x, shTexSize.y, texelFormat, shTextureType);\n                shTexture.needsUpdate = true;\n                this.material.uniforms.sphericalHarmonicsTexture.value = shTexture;\n                this.splatDataTextures['sphericalHarmonics'] = {\n                    'componentCount': shComponentCount,\n                    'paddedComponentCount': paddedSHComponentCount,\n                    'data': paddedSHArray,\n                    'textureCount': 1,\n                    'texture': shTexture,\n                    'size': shTexSize,\n                    'compressionLevel': shCompressionLevel,\n                    'elementsPerTexel': shElementsPerTexel\n                };\n            // Use three textures for spherical harmonics data, one per color channel\n            } else {\n                const shComponentCountPerChannel = shComponentCount / 3;\n                paddedSHComponentCount = shComponentCountPerChannel;\n                if (paddedSHComponentCount % 2 !== 0) paddedSHComponentCount++;\n                shTexSize = computeDataTextureSize(shElementsPerTexel, paddedSHComponentCount);\n\n                const paddedSHArraySize = shTexSize.x * shTexSize.y * shElementsPerTexel;\n                const textureUniforms = [this.material.uniforms.sphericalHarmonicsTextureR,\n                                         this.material.uniforms.sphericalHarmonicsTextureG,\n                                         this.material.uniforms.sphericalHarmonicsTextureB];\n                const paddedSHArrays = [];\n                const shTextures = [];\n                for (let t = 0; t < 3; t++) {\n                    const paddedSHArray = new SphericalHarmonicsArrayType(paddedSHArraySize);\n                    paddedSHArrays.push(paddedSHArray);\n                    for (let c = 0; c < splatCount; c++) {\n                        const srcBase = shComponentCount * c;\n                        const destBase = paddedSHComponentCount * c;\n                        if (shComponentCountPerChannel >= 3) {\n                            for (let i = 0; i < 3; i++) paddedSHArray[destBase + i] = shData[srcBase + t * 3 + i];\n                            if (shComponentCountPerChannel >= 8) {\n                                for (let i = 0; i < 5; i++) paddedSHArray[destBase + 3 + i] = shData[srcBase + 9 + t * 5 + i];\n                            }\n                        }\n                    }\n\n                    const shTexture = new THREE.DataTexture(paddedSHArray, shTexSize.x, shTexSize.y, texelFormat, shTextureType);\n                    shTextures.push(shTexture);\n                    shTexture.needsUpdate = true;\n                    textureUniforms[t].value = shTexture;\n                }\n\n                this.material.uniforms.sphericalHarmonicsMultiTextureMode.value = 1;\n                this.splatDataTextures['sphericalHarmonics'] = {\n                    'componentCount': shComponentCount,\n                    'componentCountPerChannel': shComponentCountPerChannel,\n                    'paddedComponentCount': paddedSHComponentCount,\n                    'data': paddedSHArrays,\n                    'textureCount': 3,\n                    'textures': shTextures,\n                    'size': shTexSize,\n                    'compressionLevel': shCompressionLevel,\n                    'elementsPerTexel': shElementsPerTexel\n                };\n            }\n\n            this.material.uniforms.sphericalHarmonicsTextureSize.value.copy(shTexSize);\n            this.material.uniforms.sphericalHarmonics8BitMode.value = shCompressionLevel === 2 ? 1 : 0;\n            for (let s = 0; s < this.scenes.length; s++) {\n                const splatBuffer = this.scenes[s].splatBuffer;\n                this.material.uniforms.sphericalHarmonics8BitCompressionRangeMin.value[s] =\n                    splatBuffer.minSphericalHarmonicsCoeff;\n                this.material.uniforms.sphericalHarmonics8BitCompressionRangeMax.value[s] =\n                    splatBuffer.maxSphericalHarmonicsCoeff;\n            }\n            this.material.uniformsNeedUpdate = true;\n        }\n\n        const sceneIndexesTexSize = computeDataTextureSize(SCENE_INDEXES_ELEMENTS_PER_TEXEL, 4);\n        const paddedTransformIndexes = new Uint32Array(sceneIndexesTexSize.x *\n                                                       sceneIndexesTexSize.y * SCENE_INDEXES_ELEMENTS_PER_TEXEL);\n        for (let c = 0; c < splatCount; c++) paddedTransformIndexes[c] = this.globalSplatIndexToSceneIndexMap[c];\n        const sceneIndexesTexture = new THREE.DataTexture(paddedTransformIndexes, sceneIndexesTexSize.x, sceneIndexesTexSize.y,\n                                                          THREE.RedIntegerFormat, THREE.UnsignedIntType);\n        sceneIndexesTexture.internalFormat = 'R32UI';\n        sceneIndexesTexture.needsUpdate = true;\n        this.material.uniforms.sceneIndexesTexture.value = sceneIndexesTexture;\n        this.material.uniforms.sceneIndexesTextureSize.value.copy(sceneIndexesTexSize);\n        this.material.uniformsNeedUpdate = true;\n        this.splatDataTextures['sceneIndexes'] = {\n            'data': paddedTransformIndexes,\n            'texture': sceneIndexesTexture,\n            'size': sceneIndexesTexSize\n        };\n        this.material.uniforms.sceneCount.value = this.scenes.length;\n    }\n\n    updateBaseDataFromSplatBuffers(fromSplat, toSplat) {\n        const covarancesTextureDesc = this.splatDataTextures['covariances'];\n        const covarianceCompressionLevel = covarancesTextureDesc ? covarancesTextureDesc.compressionLevel : undefined;\n        const scaleRotationsTextureDesc = this.splatDataTextures['scaleRotations'];\n        const scaleRotationCompressionLevel = scaleRotationsTextureDesc ? scaleRotationsTextureDesc.compressionLevel : undefined;\n        const shITextureDesc = this.splatDataTextures['sphericalHarmonics'];\n        const shCompressionLevel = shITextureDesc ? shITextureDesc.compressionLevel : 0;\n\n        this.fillSplatDataArrays(this.splatDataTextures.baseData.covariances, this.splatDataTextures.baseData.scales,\n                                 this.splatDataTextures.baseData.rotations, this.splatDataTextures.baseData.centers,\n                                 this.splatDataTextures.baseData.colors, this.splatDataTextures.baseData.sphericalHarmonics, undefined,\n                                 covarianceCompressionLevel, scaleRotationCompressionLevel, shCompressionLevel,\n                                 fromSplat, toSplat, fromSplat);\n    }\n\n    updateDataTexturesFromBaseData(fromSplat, toSplat) {\n        const covarancesTextureDesc = this.splatDataTextures['covariances'];\n        const covarianceCompressionLevel = covarancesTextureDesc ? covarancesTextureDesc.compressionLevel : undefined;\n        const scaleRotationsTextureDesc = this.splatDataTextures['scaleRotations'];\n        const scaleRotationCompressionLevel = scaleRotationsTextureDesc ? scaleRotationsTextureDesc.compressionLevel : undefined;\n        const shTextureDesc = this.splatDataTextures['sphericalHarmonics'];\n        const shCompressionLevel = shTextureDesc ? shTextureDesc.compressionLevel : 0;\n\n        // Update center & color data texture\n        const centerColorsTextureDescriptor = this.splatDataTextures['centerColors'];\n        const paddedCenterColors = centerColorsTextureDescriptor.data;\n        const centerColorsTexture = centerColorsTextureDescriptor.texture;\n        SplatMesh.updateCenterColorsPaddedData(fromSplat, toSplat, this.splatDataTextures.baseData.centers,\n                                               this.splatDataTextures.baseData.colors, paddedCenterColors);\n        const centerColorsTextureProps = this.renderer ? this.renderer.properties.get(centerColorsTexture) : null;\n        if (!centerColorsTextureProps || !centerColorsTextureProps.__webglTexture) {\n            centerColorsTexture.needsUpdate = true;\n        } else {\n            this.updateDataTexture(paddedCenterColors, centerColorsTextureDescriptor.texture, centerColorsTextureDescriptor.size,\n                                   centerColorsTextureProps, CENTER_COLORS_ELEMENTS_PER_TEXEL, CENTER_COLORS_ELEMENTS_PER_SPLAT, 4,\n                                   fromSplat, toSplat);\n        }\n\n        // update covariance data texture\n        if (covarancesTextureDesc) {\n            const covariancesTexture = covarancesTextureDesc.texture;\n            const covarancesStartElement = fromSplat * COVARIANCES_ELEMENTS_PER_SPLAT;\n            const covariancesEndElement = toSplat * COVARIANCES_ELEMENTS_PER_SPLAT;\n\n            if (covarianceCompressionLevel === 0) {\n                for (let i = covarancesStartElement; i <= covariancesEndElement; i++) {\n                    const covariance = this.splatDataTextures.baseData.covariances[i];\n                    covarancesTextureDesc.data[i] = covariance;\n                }\n            } else {\n                SplatMesh.updatePaddedCompressedCovariancesTextureData(this.splatDataTextures.baseData.covariances,\n                                                                       covarancesTextureDesc.data,\n                                                                       fromSplat * covarancesTextureDesc.elementsPerTexelAllocated,\n                                                                       covarancesStartElement, covariancesEndElement);\n            }\n\n            const covariancesTextureProps = this.renderer ? this.renderer.properties.get(covariancesTexture) : null;\n            if (!covariancesTextureProps || !covariancesTextureProps.__webglTexture) {\n                covariancesTexture.needsUpdate = true;\n            } else {\n                if (covarianceCompressionLevel === 0) {\n                    this.updateDataTexture(covarancesTextureDesc.data, covarancesTextureDesc.texture, covarancesTextureDesc.size,\n                                           covariancesTextureProps, covarancesTextureDesc.elementsPerTexelStored,\n                                           COVARIANCES_ELEMENTS_PER_SPLAT, 4, fromSplat, toSplat);\n                } else {\n                    this.updateDataTexture(covarancesTextureDesc.data, covarancesTextureDesc.texture, covarancesTextureDesc.size,\n                                           covariancesTextureProps, covarancesTextureDesc.elementsPerTexelAllocated,\n                                           covarancesTextureDesc.elementsPerTexelAllocated, 2, fromSplat, toSplat);\n                }\n            }\n        }\n\n        // update scale and rotation data texture\n        if (scaleRotationsTextureDesc) {\n            const paddedScaleRotations = scaleRotationsTextureDesc.data;\n            const scaleRotationsTexture = scaleRotationsTextureDesc.texture;\n            const elementsPerSplat = 6;\n            const bytesPerElement = scaleRotationCompressionLevel === 0 ? 4 : 2;\n\n            SplatMesh.updateScaleRotationsPaddedData(fromSplat, toSplat, this.splatDataTextures.baseData.scales,\n                                                     this.splatDataTextures.baseData.rotations, paddedScaleRotations);\n            const scaleRotationsTextureProps = this.renderer ? this.renderer.properties.get(scaleRotationsTexture) : null;\n            if (!scaleRotationsTextureProps || !scaleRotationsTextureProps.__webglTexture) {\n                scaleRotationsTexture.needsUpdate = true;\n            } else {\n                this.updateDataTexture(paddedScaleRotations, scaleRotationsTextureDesc.texture, scaleRotationsTextureDesc.size,\n                                       scaleRotationsTextureProps, SCALES_ROTATIONS_ELEMENTS_PER_TEXEL, elementsPerSplat, bytesPerElement,\n                                       fromSplat, toSplat);\n            }\n        }\n\n        // update spherical harmonics data texture\n        const shData = this.splatDataTextures.baseData.sphericalHarmonics;\n        if (shData) {\n            let shBytesPerElement = 4;\n            if (shCompressionLevel === 1) shBytesPerElement = 2;\n            else if (shCompressionLevel === 2) shBytesPerElement = 1;\n\n            const updateTexture = (shTexture, shTextureSize, elementsPerTexel, paddedSHArray, paddedSHComponentCount) => {\n                const shTextureProps = this.renderer ? this.renderer.properties.get(shTexture) : null;\n                if (!shTextureProps || !shTextureProps.__webglTexture) {\n                    shTexture.needsUpdate = true;\n                } else {\n                    this.updateDataTexture(paddedSHArray, shTexture, shTextureSize, shTextureProps, elementsPerTexel,\n                                           paddedSHComponentCount, shBytesPerElement, fromSplat, toSplat);\n                }\n            };\n\n            const shComponentCount = shTextureDesc.componentCount;\n            const paddedSHComponentCount = shTextureDesc.paddedComponentCount;\n\n            // Update for the case of a single texture for all spherical harmonics data\n            if (shTextureDesc.textureCount === 1) {\n                const paddedSHArray = shTextureDesc.data;\n                for (let c = fromSplat; c <= toSplat; c++) {\n                    const srcBase = shComponentCount * c;\n                    const destBase = paddedSHComponentCount * c;\n                    for (let i = 0; i < shComponentCount; i++) {\n                        paddedSHArray[destBase + i] = shData[srcBase + i];\n                    }\n                }\n                updateTexture(shTextureDesc.texture, shTextureDesc.size,\n                              shTextureDesc.elementsPerTexel, paddedSHArray, paddedSHComponentCount);\n            // Update for the case of spherical harmonics data split among three textures, one for each color channel\n            } else {\n                const shComponentCountPerChannel = shTextureDesc.componentCountPerChannel;\n                for (let t = 0; t < 3; t++) {\n                    const paddedSHArray = shTextureDesc.data[t];\n                    for (let c = fromSplat; c <= toSplat; c++) {\n                        const srcBase = shComponentCount * c;\n                        const destBase = paddedSHComponentCount * c;\n                        if (shComponentCountPerChannel >= 3) {\n                            for (let i = 0; i < 3; i++) paddedSHArray[destBase + i] = shData[srcBase + t * 3 + i];\n                            if (shComponentCountPerChannel >= 8) {\n                                for (let i = 0; i < 5; i++) paddedSHArray[destBase + 3 + i] = shData[srcBase + 9 + t * 5 + i];\n                            }\n                        }\n                    }\n                    updateTexture(shTextureDesc.textures[t], shTextureDesc.size,\n                                  shTextureDesc.elementsPerTexel, paddedSHArray, paddedSHComponentCount);\n                }\n            }\n        }\n\n        // update scene index & transform data\n        const sceneIndexesTexDesc = this.splatDataTextures['sceneIndexes'];\n        const paddedSceneIndexes = sceneIndexesTexDesc.data;\n        for (let c = this.lastBuildSplatCount; c <= toSplat; c++) {\n            paddedSceneIndexes[c] = this.globalSplatIndexToSceneIndexMap[c];\n        }\n        const sceneIndexesTexture = sceneIndexesTexDesc.texture;\n        const sceneIndexesTextureProps = this.renderer ? this.renderer.properties.get(sceneIndexesTexture) : null;\n        if (!sceneIndexesTextureProps || !sceneIndexesTextureProps.__webglTexture) {\n            sceneIndexesTexture.needsUpdate = true;\n        } else {\n            this.updateDataTexture(paddedSceneIndexes, sceneIndexesTexDesc.texture, sceneIndexesTexDesc.size,\n                                   sceneIndexesTextureProps, 1, 1, 1, this.lastBuildSplatCount, toSplat);\n        }\n    }\n\n    getTargetCovarianceCompressionLevel() {\n        return this.halfPrecisionCovariancesOnGPU ? 1 : 0;\n    }\n\n    getTargetSphericalHarmonicsCompressionLevel() {\n        return Math.max(1, this.getMaximumSplatBufferCompressionLevel());\n    }\n\n    getMaximumSplatBufferCompressionLevel() {\n        let maxCompressionLevel;\n        for (let i = 0; i < this.scenes.length; i++) {\n            const scene = this.getScene(i);\n            const splatBuffer = scene.splatBuffer;\n            if (i === 0 || splatBuffer.compressionLevel > maxCompressionLevel) {\n                maxCompressionLevel = splatBuffer.compressionLevel;\n            }\n        }\n        return maxCompressionLevel;\n    }\n\n    getMinimumSplatBufferCompressionLevel() {\n        let minCompressionLevel;\n        for (let i = 0; i < this.scenes.length; i++) {\n            const scene = this.getScene(i);\n            const splatBuffer = scene.splatBuffer;\n            if (i === 0 || splatBuffer.compressionLevel < minCompressionLevel) {\n                minCompressionLevel = splatBuffer.compressionLevel;\n            }\n        }\n        return minCompressionLevel;\n    }\n\n    static computeTextureUpdateRegion(startSplat, endSplat, textureWidth, elementsPerTexel, elementsPerSplat) {\n        const texelsPerSplat = elementsPerSplat / elementsPerTexel;\n\n        const startSplatTexels = startSplat * texelsPerSplat;\n        const startRow = Math.floor(startSplatTexels / textureWidth);\n        const startRowElement = startRow * textureWidth * elementsPerTexel;\n\n        const endSplatTexels = endSplat * texelsPerSplat;\n        const endRow = Math.floor(endSplatTexels / textureWidth);\n        const endRowEndElement = endRow * textureWidth * elementsPerTexel + (textureWidth * elementsPerTexel);\n\n        return {\n            'dataStart': startRowElement,\n            'dataEnd': endRowEndElement,\n            'startRow': startRow,\n            'endRow': endRow\n        };\n    }\n\n    updateDataTexture(paddedData, texture, textureSize, textureProps, elementsPerTexel, elementsPerSplat, bytesPerElement, from, to) {\n        const gl = this.renderer.getContext();\n        const updateRegion = SplatMesh.computeTextureUpdateRegion(from, to, textureSize.x, elementsPerTexel, elementsPerSplat);\n        const updateElementCount = updateRegion.dataEnd - updateRegion.dataStart;\n        const updateDataView = new paddedData.constructor(paddedData.buffer,\n                                                          updateRegion.dataStart * bytesPerElement, updateElementCount);\n        const updateHeight = updateRegion.endRow - updateRegion.startRow + 1;\n        const glType = this.webGLUtils.convert(texture.type);\n        const glFormat = this.webGLUtils.convert(texture.format, texture.colorSpace);\n        const currentTexture = gl.getParameter(gl.TEXTURE_BINDING_2D);\n        gl.bindTexture(gl.TEXTURE_2D, textureProps.__webglTexture);\n        gl.texSubImage2D(gl.TEXTURE_2D, 0, 0, updateRegion.startRow,\n                         textureSize.x, updateHeight, glFormat, glType, updateDataView);\n        gl.bindTexture(gl.TEXTURE_2D, currentTexture);\n    }\n\n    static updatePaddedCompressedCovariancesTextureData(sourceData, textureData, textureDataStartIndex, fromElement, toElement) {\n        let textureDataView = new DataView(textureData.buffer);\n        let textureDataIndex = textureDataStartIndex;\n        let sequentialCount = 0;\n        for (let i = fromElement; i <= toElement; i+=2) {\n            textureDataView.setUint16(textureDataIndex * 2, sourceData[i], true);\n            textureDataView.setUint16(textureDataIndex * 2 + 2, sourceData[i + 1], true);\n            textureDataIndex += 2;\n            sequentialCount++;\n            if (sequentialCount >= 3) {\n                textureDataIndex += 2;\n                sequentialCount = 0;\n            }\n        }\n    }\n\n    static updateCenterColorsPaddedData(from, to, centers, colors, paddedCenterColors) {\n        for (let c = from; c <= to; c++) {\n            const colorsBase = c * 4;\n            const centersBase = c * 3;\n            const centerColorsBase = c * 4;\n            paddedCenterColors[centerColorsBase] = rgbaArrayToInteger(colors, colorsBase);\n            paddedCenterColors[centerColorsBase + 1] = uintEncodedFloat(centers[centersBase]);\n            paddedCenterColors[centerColorsBase + 2] = uintEncodedFloat(centers[centersBase + 1]);\n            paddedCenterColors[centerColorsBase + 3] = uintEncodedFloat(centers[centersBase + 2]);\n        }\n    }\n\n    static updateScaleRotationsPaddedData(from, to, scales, rotations, paddedScaleRotations) {\n        const combinedSize = 6;\n        for (let c = from; c <= to; c++) {\n            const scaleBase = c * 3;\n            const rotationBase = c * 4;\n            const scaleRotationsBase = c * combinedSize;\n\n            paddedScaleRotations[scaleRotationsBase] = scales[scaleBase];\n            paddedScaleRotations[scaleRotationsBase + 1] = scales[scaleBase + 1];\n            paddedScaleRotations[scaleRotationsBase + 2] = scales[scaleBase + 2];\n\n            paddedScaleRotations[scaleRotationsBase + 3] = rotations[rotationBase];\n            paddedScaleRotations[scaleRotationsBase + 4] = rotations[rotationBase + 1];\n            paddedScaleRotations[scaleRotationsBase + 5] = rotations[rotationBase + 2];\n        }\n    }\n\n    updateVisibleRegion(sinceLastBuildOnly) {\n        const splatCount = this.getSplatCount(true);\n        const tempCenter = new THREE.Vector3();\n        if (!sinceLastBuildOnly) {\n            const avgCenter = new THREE.Vector3();\n            this.scenes.forEach((scene) => {\n                avgCenter.add(scene.splatBuffer.sceneCenter);\n            });\n            avgCenter.multiplyScalar(1.0 / this.scenes.length);\n            this.calculatedSceneCenter.copy(avgCenter);\n            this.material.uniforms.sceneCenter.value.copy(this.calculatedSceneCenter);\n            this.material.uniformsNeedUpdate = true;\n        }\n\n        const startSplatFormMaxDistanceCalc = sinceLastBuildOnly ? this.lastBuildSplatCount : 0;\n        for (let i = startSplatFormMaxDistanceCalc; i < splatCount; i++) {\n            this.getSplatCenter(i, tempCenter, true);\n            const distFromCSceneCenter = tempCenter.sub(this.calculatedSceneCenter).length();\n            if (distFromCSceneCenter > this.maxSplatDistanceFromSceneCenter) this.maxSplatDistanceFromSceneCenter = distFromCSceneCenter;\n        }\n\n        if (this.maxSplatDistanceFromSceneCenter - this.visibleRegionBufferRadius > VISIBLE_REGION_EXPANSION_DELTA) {\n            this.visibleRegionBufferRadius = this.maxSplatDistanceFromSceneCenter;\n            this.visibleRegionRadius = Math.max(this.visibleRegionBufferRadius - VISIBLE_REGION_EXPANSION_DELTA, 0.0);\n        }\n        if (this.finalBuild) this.visibleRegionRadius = this.visibleRegionBufferRadius = this.maxSplatDistanceFromSceneCenter;\n        this.updateVisibleRegionFadeDistance();\n    }\n\n    updateVisibleRegionFadeDistance(sceneRevealMode = SceneRevealMode.Default) {\n        const fastFadeRate = SCENE_FADEIN_RATE_FAST * this.sceneFadeInRateMultiplier;\n        const gradualFadeRate = SCENE_FADEIN_RATE_GRADUAL * this.sceneFadeInRateMultiplier;\n        const defaultFadeInRate = this.finalBuild ? fastFadeRate : gradualFadeRate;\n        const fadeInRate = sceneRevealMode === SceneRevealMode.Default ? defaultFadeInRate : gradualFadeRate;\n        this.visibleRegionFadeStartRadius = (this.visibleRegionRadius - this.visibleRegionFadeStartRadius) *\n                                             fadeInRate + this.visibleRegionFadeStartRadius;\n        const fadeInPercentage = (this.visibleRegionBufferRadius > 0) ?\n                                 (this.visibleRegionFadeStartRadius / this.visibleRegionBufferRadius) : 0;\n        const fadeInComplete = fadeInPercentage > 0.99;\n        const shaderFadeInComplete = (fadeInComplete || sceneRevealMode === SceneRevealMode.Instant) ? 1 : 0;\n\n        this.material.uniforms.visibleRegionFadeStartRadius.value = this.visibleRegionFadeStartRadius;\n        this.material.uniforms.visibleRegionRadius.value = this.visibleRegionRadius;\n        this.material.uniforms.firstRenderTime.value = this.firstRenderTime;\n        this.material.uniforms.currentTime.value = performance.now();\n        this.material.uniforms.fadeInComplete.value = shaderFadeInComplete;\n        this.material.uniformsNeedUpdate = true;\n        this.visibleRegionChanging = !fadeInComplete;\n    }\n\n    /**\n     * Set the indexes of splats that should be rendered; should be sorted in desired render order.\n     * @param {Uint32Array} globalIndexes Sorted index list of splats to be rendered\n     * @param {number} renderSplatCount Total number of splats to be rendered. Necessary because we may not want to render\n     *                                  every splat.\n     */\n    updateRenderIndexes(globalIndexes, renderSplatCount) {\n        const geometry = this.geometry;\n        geometry.attributes.splatIndex.set(globalIndexes);\n        geometry.attributes.splatIndex.needsUpdate = true;\n        if (renderSplatCount > 0 && this.firstRenderTime === -1) this.firstRenderTime = performance.now();\n        geometry.instanceCount = renderSplatCount;\n        geometry.setDrawRange(0, renderSplatCount);\n    }\n\n    /**\n     * Update the transforms for each scene in this splat mesh from their individual components (position,\n     * quaternion, and scale)\n     */\n    updateTransforms() {\n        for (let i = 0; i < this.scenes.length; i++) {\n            const scene = this.getScene(i);\n            scene.updateTransform(this.dynamicMode);\n        }\n    }\n\n    updateUniforms = function() {\n\n        const viewport = new THREE.Vector2();\n\n        return function(renderDimensions, cameraFocalLengthX, cameraFocalLengthY,\n                        orthographicMode, orthographicZoom, inverseFocalAdjustment) {\n            const splatCount = this.getSplatCount();\n            if (splatCount > 0) {\n                viewport.set(renderDimensions.x * this.devicePixelRatio,\n                             renderDimensions.y * this.devicePixelRatio);\n                this.material.uniforms.viewport.value.copy(viewport);\n                this.material.uniforms.basisViewport.value.set(1.0 / viewport.x, 1.0 / viewport.y);\n                this.material.uniforms.focal.value.set(cameraFocalLengthX, cameraFocalLengthY);\n                this.material.uniforms.orthographicMode.value = orthographicMode ? 1 : 0;\n                this.material.uniforms.orthoZoom.value = orthographicZoom;\n                this.material.uniforms.inverseFocalAdjustment.value = inverseFocalAdjustment;\n                if (this.dynamicMode) {\n                    for (let i = 0; i < this.scenes.length; i++) {\n                        this.material.uniforms.transforms.value[i].copy(this.getScene(i).transform);\n                    }\n                }\n                if (this.enableOptionalEffects) {\n                    for (let i = 0; i < this.scenes.length; i++) {\n                        this.material.uniforms.sceneOpacity.value[i] = clamp(this.getScene(i).opacity, 0.0, 1.0);\n                        this.material.uniforms.sceneVisibility.value[i] = this.getScene(i).visible ? 1 : 0;\n                        this.material.uniformsNeedUpdate = true;\n                    }\n                }\n                this.material.uniformsNeedUpdate = true;\n            }\n        };\n\n    }();\n\n    setSplatScale(splatScale = 1) {\n        this.splatScale = splatScale;\n        this.material.uniforms.splatScale.value = splatScale;\n        this.material.uniformsNeedUpdate = true;\n    }\n\n    getSplatScale() {\n        return this.splatScale;\n    }\n\n    setPointCloudModeEnabled(enabled) {\n        this.pointCloudModeEnabled = enabled;\n        this.material.uniforms.pointCloudModeEnabled.value = enabled ? 1 : 0;\n        this.material.uniformsNeedUpdate = true;\n    }\n\n    getPointCloudModeEnabled() {\n        return this.pointCloudModeEnabled;\n    }\n\n    getSplatDataTextures() {\n        return this.splatDataTextures;\n    }\n\n    getSplatCount(includeSinceLastBuild = false) {\n        if (!includeSinceLastBuild) return this.lastBuildSplatCount;\n        else return SplatMesh.getTotalSplatCountForScenes(this.scenes);\n    }\n\n    static getTotalSplatCountForScenes(scenes) {\n        let totalSplatCount = 0;\n        for (let scene of scenes) {\n            if (scene && scene.splatBuffer) totalSplatCount += scene.splatBuffer.getSplatCount();\n        }\n        return totalSplatCount;\n    }\n\n    static getTotalSplatCountForSplatBuffers(splatBuffers) {\n        let totalSplatCount = 0;\n        for (let splatBuffer of splatBuffers) totalSplatCount += splatBuffer.getSplatCount();\n        return totalSplatCount;\n    }\n\n    getMaxSplatCount() {\n        return SplatMesh.getTotalMaxSplatCountForScenes(this.scenes);\n    }\n\n    static getTotalMaxSplatCountForScenes(scenes) {\n        let totalSplatCount = 0;\n        for (let scene of scenes) {\n            if (scene && scene.splatBuffer) totalSplatCount += scene.splatBuffer.getMaxSplatCount();\n        }\n        return totalSplatCount;\n    }\n\n    static getTotalMaxSplatCountForSplatBuffers(splatBuffers) {\n        let totalSplatCount = 0;\n        for (let splatBuffer of splatBuffers) totalSplatCount += splatBuffer.getMaxSplatCount();\n        return totalSplatCount;\n    }\n\n    disposeDistancesComputationGPUResources() {\n\n        if (!this.renderer) return;\n\n        const gl = this.renderer.getContext();\n\n        if (this.distancesTransformFeedback.vao) {\n            gl.deleteVertexArray(this.distancesTransformFeedback.vao);\n            this.distancesTransformFeedback.vao = null;\n        }\n        if (this.distancesTransformFeedback.program) {\n            gl.deleteProgram(this.distancesTransformFeedback.program);\n            gl.deleteShader(this.distancesTransformFeedback.vertexShader);\n            gl.deleteShader(this.distancesTransformFeedback.fragmentShader);\n            this.distancesTransformFeedback.program = null;\n            this.distancesTransformFeedback.vertexShader = null;\n            this.distancesTransformFeedback.fragmentShader = null;\n        }\n        this.disposeDistancesComputationGPUBufferResources();\n        if (this.distancesTransformFeedback.id) {\n            gl.deleteTransformFeedback(this.distancesTransformFeedback.id);\n            this.distancesTransformFeedback.id = null;\n        }\n    }\n\n    disposeDistancesComputationGPUBufferResources() {\n\n        if (!this.renderer) return;\n\n        const gl = this.renderer.getContext();\n\n        if (this.distancesTransformFeedback.centersBuffer) {\n            this.distancesTransformFeedback.centersBuffer = null;\n            gl.deleteBuffer(this.distancesTransformFeedback.centersBuffer);\n        }\n        if (this.distancesTransformFeedback.outDistancesBuffer) {\n            gl.deleteBuffer(this.distancesTransformFeedback.outDistancesBuffer);\n            this.distancesTransformFeedback.outDistancesBuffer = null;\n        }\n    }\n\n    /**\n     * Set the Three.js renderer used by this splat mesh\n     * @param {THREE.WebGLRenderer} renderer Instance of THREE.WebGLRenderer\n     */\n    setRenderer(renderer) {\n        if (renderer !== this.renderer) {\n            this.renderer = renderer;\n            const gl = this.renderer.getContext();\n            const extensions = new WebGLExtensions(gl);\n            const capabilities = new WebGLCapabilities(gl, extensions, {});\n            extensions.init(capabilities);\n            this.webGLUtils = new THREE.WebGLUtils(gl, extensions, capabilities);\n            if (this.enableDistancesComputationOnGPU && this.getSplatCount() > 0) {\n                this.setupDistancesComputationTransformFeedback();\n                const { centers, sceneIndexes } = this.getDataForDistancesComputation(0, this.getSplatCount() - 1);\n                this.refreshGPUBuffersForDistancesComputation(centers, sceneIndexes);\n            }\n        }\n    }\n\n    setupDistancesComputationTransformFeedback = function() {\n\n        let currentMaxSplatCount;\n\n        return function() {\n            const maxSplatCount = this.getMaxSplatCount();\n\n            if (!this.renderer) return;\n\n            const rebuildGPUObjects = (this.lastRenderer !== this.renderer);\n            const rebuildBuffers = currentMaxSplatCount !== maxSplatCount;\n\n            if (!rebuildGPUObjects && !rebuildBuffers) return;\n\n            if (rebuildGPUObjects) {\n                this.disposeDistancesComputationGPUResources();\n            } else if (rebuildBuffers) {\n                this.disposeDistancesComputationGPUBufferResources();\n            }\n\n            const gl = this.renderer.getContext();\n\n            const createShader = (gl, type, source) => {\n                const shader = gl.createShader(type);\n                if (!shader) {\n                    console.error('Fatal error: gl could not create a shader object.');\n                    return null;\n                }\n\n                gl.shaderSource(shader, source);\n                gl.compileShader(shader);\n\n                const compiled = gl.getShaderParameter(shader, gl.COMPILE_STATUS);\n                if (!compiled) {\n                    let typeName = 'unknown';\n                    if (type === gl.VERTEX_SHADER) typeName = 'vertex shader';\n                    else if (type === gl.FRAGMENT_SHADER) typeName = 'fragement shader';\n                    const errors = gl.getShaderInfoLog(shader);\n                    console.error('Failed to compile ' + typeName + ' with these errors:' + errors);\n                    gl.deleteShader(shader);\n                    return null;\n                }\n\n                return shader;\n            };\n\n            let vsSource;\n            if (this.integerBasedDistancesComputation) {\n                vsSource =\n                `#version 300 es\n                in ivec4 center;\n                flat out int distance;`;\n                if (this.dynamicMode) {\n                    vsSource += `\n                        in uint sceneIndex;\n                        uniform ivec4 transforms[${Constants.MaxScenes}];\n                        void main(void) {\n                            ivec4 transform = transforms[sceneIndex];\n                            distance = center.x * transform.x + center.y * transform.y + center.z * transform.z + transform.w * center.w;\n                        }\n                    `;\n                } else {\n                    vsSource += `\n                        uniform ivec3 modelViewProj;\n                        void main(void) {\n                            distance = center.x * modelViewProj.x + center.y * modelViewProj.y + center.z * modelViewProj.z;\n                        }\n                    `;\n                }\n            } else {\n                vsSource =\n                `#version 300 es\n                in vec4 center;\n                flat out float distance;`;\n                if (this.dynamicMode) {\n                    vsSource += `\n                        in uint sceneIndex;\n                        uniform mat4 transforms[${Constants.MaxScenes}];\n                        void main(void) {\n                            vec4 transformedCenter = transforms[sceneIndex] * vec4(center.xyz, 1.0);\n                            distance = transformedCenter.z;\n                        }\n                    `;\n                } else {\n                    vsSource += `\n                        uniform vec3 modelViewProj;\n                        void main(void) {\n                            distance = center.x * modelViewProj.x + center.y * modelViewProj.y + center.z * modelViewProj.z;\n                        }\n                    `;\n                }\n            }\n\n            const fsSource =\n            `#version 300 es\n                precision lowp float;\n                out vec4 fragColor;\n                void main(){}\n            `;\n\n            const currentVao = gl.getParameter(gl.VERTEX_ARRAY_BINDING);\n            const currentProgram = gl.getParameter(gl.CURRENT_PROGRAM);\n            const currentProgramDeleted = currentProgram ? gl.getProgramParameter(currentProgram, gl.DELETE_STATUS) : false;\n\n            if (rebuildGPUObjects) {\n                this.distancesTransformFeedback.vao = gl.createVertexArray();\n            }\n\n            gl.bindVertexArray(this.distancesTransformFeedback.vao);\n\n            if (rebuildGPUObjects) {\n                const program = gl.createProgram();\n                const vertexShader = createShader(gl, gl.VERTEX_SHADER, vsSource);\n                const fragmentShader = createShader(gl, gl.FRAGMENT_SHADER, fsSource);\n                if (!vertexShader || !fragmentShader) {\n                    throw new Error('Could not compile shaders for distances computation on GPU.');\n                }\n                gl.attachShader(program, vertexShader);\n                gl.attachShader(program, fragmentShader);\n                gl.transformFeedbackVaryings(program, ['distance'], gl.SEPARATE_ATTRIBS);\n                gl.linkProgram(program);\n\n                const linked = gl.getProgramParameter(program, gl.LINK_STATUS);\n                if (!linked) {\n                    const error = gl.getProgramInfoLog(program);\n                    console.error('Fatal error: Failed to link program: ' + error);\n                    gl.deleteProgram(program);\n                    gl.deleteShader(fragmentShader);\n                    gl.deleteShader(vertexShader);\n                    throw new Error('Could not link shaders for distances computation on GPU.');\n                }\n\n                this.distancesTransformFeedback.program = program;\n                this.distancesTransformFeedback.vertexShader = vertexShader;\n                this.distancesTransformFeedback.vertexShader = fragmentShader;\n            }\n\n            gl.useProgram(this.distancesTransformFeedback.program);\n\n            this.distancesTransformFeedback.centersLoc =\n                gl.getAttribLocation(this.distancesTransformFeedback.program, 'center');\n            if (this.dynamicMode) {\n                this.distancesTransformFeedback.sceneIndexesLoc =\n                    gl.getAttribLocation(this.distancesTransformFeedback.program, 'sceneIndex');\n                for (let i = 0; i < this.scenes.length; i++) {\n                    this.distancesTransformFeedback.transformsLocs[i] =\n                        gl.getUniformLocation(this.distancesTransformFeedback.program, `transforms[${i}]`);\n                }\n            } else {\n                this.distancesTransformFeedback.modelViewProjLoc =\n                    gl.getUniformLocation(this.distancesTransformFeedback.program, 'modelViewProj');\n            }\n\n            if (rebuildGPUObjects || rebuildBuffers) {\n                this.distancesTransformFeedback.centersBuffer = gl.createBuffer();\n                gl.bindBuffer(gl.ARRAY_BUFFER, this.distancesTransformFeedback.centersBuffer);\n                gl.enableVertexAttribArray(this.distancesTransformFeedback.centersLoc);\n                if (this.integerBasedDistancesComputation) {\n                    gl.vertexAttribIPointer(this.distancesTransformFeedback.centersLoc, 4, gl.INT, 0, 0);\n                } else {\n                    gl.vertexAttribPointer(this.distancesTransformFeedback.centersLoc, 4, gl.FLOAT, false, 0, 0);\n                }\n\n                if (this.dynamicMode) {\n                    this.distancesTransformFeedback.sceneIndexesBuffer = gl.createBuffer();\n                    gl.bindBuffer(gl.ARRAY_BUFFER, this.distancesTransformFeedback.sceneIndexesBuffer);\n                    gl.enableVertexAttribArray(this.distancesTransformFeedback.sceneIndexesLoc);\n                    gl.vertexAttribIPointer(this.distancesTransformFeedback.sceneIndexesLoc, 1, gl.UNSIGNED_INT, 0, 0);\n                }\n            }\n\n            if (rebuildGPUObjects || rebuildBuffers) {\n                this.distancesTransformFeedback.outDistancesBuffer = gl.createBuffer();\n            }\n            gl.bindBuffer(gl.ARRAY_BUFFER, this.distancesTransformFeedback.outDistancesBuffer);\n            gl.bufferData(gl.ARRAY_BUFFER, maxSplatCount * 4, gl.STATIC_READ);\n\n            if (rebuildGPUObjects) {\n                this.distancesTransformFeedback.id = gl.createTransformFeedback();\n            }\n            gl.bindTransformFeedback(gl.TRANSFORM_FEEDBACK, this.distancesTransformFeedback.id);\n            gl.bindBufferBase(gl.TRANSFORM_FEEDBACK_BUFFER, 0, this.distancesTransformFeedback.outDistancesBuffer);\n\n            if (currentProgram && currentProgramDeleted !== true) gl.useProgram(currentProgram);\n            if (currentVao) gl.bindVertexArray(currentVao);\n\n            this.lastRenderer = this.renderer;\n            currentMaxSplatCount = maxSplatCount;\n        };\n\n    }();\n\n    /**\n     * Refresh GPU buffers used for computing splat distances with centers data from the scenes for this mesh.\n     * @param {boolean} isUpdate Specify whether or not to update the GPU buffer or to initialize & fill\n     * @param {Array<number>} centers The splat centers data\n     * @param {number} offsetSplats Offset in the GPU buffer at which to start updating data, specified in splats\n     */\n    updateGPUCentersBufferForDistancesComputation(isUpdate, centers, offsetSplats) {\n\n        if (!this.renderer) return;\n\n        const gl = this.renderer.getContext();\n\n        const currentVao = gl.getParameter(gl.VERTEX_ARRAY_BINDING);\n        gl.bindVertexArray(this.distancesTransformFeedback.vao);\n\n        const ArrayType = this.integerBasedDistancesComputation ? Uint32Array : Float32Array;\n        const attributeBytesPerCenter = 16;\n        const subBufferOffset = offsetSplats * attributeBytesPerCenter;\n\n        gl.bindBuffer(gl.ARRAY_BUFFER, this.distancesTransformFeedback.centersBuffer);\n\n        if (isUpdate) {\n            gl.bufferSubData(gl.ARRAY_BUFFER, subBufferOffset, centers);\n        } else {\n            const maxArray = new ArrayType(this.getMaxSplatCount() * attributeBytesPerCenter);\n            maxArray.set(centers);\n            gl.bufferData(gl.ARRAY_BUFFER, maxArray, gl.STATIC_DRAW);\n        }\n\n        gl.bindBuffer(gl.ARRAY_BUFFER, null);\n\n        if (currentVao) gl.bindVertexArray(currentVao);\n    }\n\n    /**\n     * Refresh GPU buffers used for pre-computing splat distances with centers data from the scenes for this mesh.\n     * @param {boolean} isUpdate Specify whether or not to update the GPU buffer or to initialize & fill\n     * @param {Array<number>} sceneIndexes The splat scene indexes\n     * @param {number} offsetSplats Offset in the GPU buffer at which to start updating data, specified in splats\n     */\n    updateGPUTransformIndexesBufferForDistancesComputation(isUpdate, sceneIndexes, offsetSplats) {\n\n        if (!this.renderer || !this.dynamicMode) return;\n\n        const gl = this.renderer.getContext();\n\n        const currentVao = gl.getParameter(gl.VERTEX_ARRAY_BINDING);\n        gl.bindVertexArray(this.distancesTransformFeedback.vao);\n\n        const subBufferOffset = offsetSplats * 4;\n\n        gl.bindBuffer(gl.ARRAY_BUFFER, this.distancesTransformFeedback.sceneIndexesBuffer);\n\n        if (isUpdate) {\n            gl.bufferSubData(gl.ARRAY_BUFFER, subBufferOffset, sceneIndexes);\n        } else {\n            const maxArray = new Uint32Array(this.getMaxSplatCount() * 4);\n            maxArray.set(sceneIndexes);\n            gl.bufferData(gl.ARRAY_BUFFER, maxArray, gl.STATIC_DRAW);\n        }\n        gl.bindBuffer(gl.ARRAY_BUFFER, null);\n\n        if (currentVao) gl.bindVertexArray(currentVao);\n    }\n\n    /**\n     * Get a typed array containing a mapping from global splat indexes to their scene index.\n     * @param {number} start Starting splat index to store\n     * @param {number} end Ending splat index to store\n     * @return {Uint32Array}\n     */\n    getSceneIndexes(start, end) {\n\n        let sceneIndexes;\n        const fillCount = end - start + 1;\n        sceneIndexes = new Uint32Array(fillCount);\n        for (let i = start; i <= end; i++) {\n            sceneIndexes[i] = this.globalSplatIndexToSceneIndexMap[i];\n        }\n\n        return sceneIndexes;\n    }\n\n    /**\n     * Fill 'array' with the transforms for each scene in this splat mesh.\n     * @param {Array} array Empty array to be filled with scene transforms. If not empty, contents will be overwritten.\n     */\n    fillTransformsArray = function() {\n\n        const tempArray = [];\n\n        return function(array) {\n            if (tempArray.length !== array.length) tempArray.length = array.length;\n            for (let i = 0; i < this.scenes.length; i++) {\n                const sceneTransform = this.getScene(i).transform;\n                const sceneTransformElements = sceneTransform.elements;\n                for (let j = 0; j < 16; j++) {\n                    tempArray[i * 16 + j] = sceneTransformElements[j];\n                }\n            }\n            array.set(tempArray);\n        };\n\n    }();\n\n    computeDistancesOnGPU = function() {\n\n        const tempMatrix = new THREE.Matrix4();\n\n        return function(modelViewProjMatrix, outComputedDistances) {\n            if (!this.renderer) return;\n\n            // console.time(\"gpu_compute_distances\");\n            const gl = this.renderer.getContext();\n\n            const currentVao = gl.getParameter(gl.VERTEX_ARRAY_BINDING);\n            const currentProgram = gl.getParameter(gl.CURRENT_PROGRAM);\n            const currentProgramDeleted = currentProgram ? gl.getProgramParameter(currentProgram, gl.DELETE_STATUS) : false;\n\n            gl.bindVertexArray(this.distancesTransformFeedback.vao);\n            gl.useProgram(this.distancesTransformFeedback.program);\n\n            gl.enable(gl.RASTERIZER_DISCARD);\n\n            if (this.dynamicMode) {\n                for (let i = 0; i < this.scenes.length; i++) {\n                    tempMatrix.copy(this.getScene(i).transform);\n                    tempMatrix.premultiply(modelViewProjMatrix);\n\n                    if (this.integerBasedDistancesComputation) {\n                        const iTempMatrix = SplatMesh.getIntegerMatrixArray(tempMatrix);\n                        const iTransform = [iTempMatrix[2], iTempMatrix[6], iTempMatrix[10], iTempMatrix[14]];\n                        gl.uniform4i(this.distancesTransformFeedback.transformsLocs[i], iTransform[0], iTransform[1],\n                                                                                        iTransform[2], iTransform[3]);\n                    } else {\n                        gl.uniformMatrix4fv(this.distancesTransformFeedback.transformsLocs[i], false, tempMatrix.elements);\n                    }\n                }\n            } else {\n                if (this.integerBasedDistancesComputation) {\n                    const iViewProjMatrix = SplatMesh.getIntegerMatrixArray(modelViewProjMatrix);\n                    const iViewProj = [iViewProjMatrix[2], iViewProjMatrix[6], iViewProjMatrix[10]];\n                    gl.uniform3i(this.distancesTransformFeedback.modelViewProjLoc, iViewProj[0], iViewProj[1], iViewProj[2]);\n                } else {\n                    const viewProj = [modelViewProjMatrix.elements[2], modelViewProjMatrix.elements[6], modelViewProjMatrix.elements[10]];\n                    gl.uniform3f(this.distancesTransformFeedback.modelViewProjLoc, viewProj[0], viewProj[1], viewProj[2]);\n                }\n            }\n\n            gl.bindBuffer(gl.ARRAY_BUFFER, this.distancesTransformFeedback.centersBuffer);\n            gl.enableVertexAttribArray(this.distancesTransformFeedback.centersLoc);\n            if (this.integerBasedDistancesComputation) {\n                gl.vertexAttribIPointer(this.distancesTransformFeedback.centersLoc, 4, gl.INT, 0, 0);\n            } else {\n                gl.vertexAttribPointer(this.distancesTransformFeedback.centersLoc, 4, gl.FLOAT, false, 0, 0);\n            }\n\n            if (this.dynamicMode) {\n                gl.bindBuffer(gl.ARRAY_BUFFER, this.distancesTransformFeedback.sceneIndexesBuffer);\n                gl.enableVertexAttribArray(this.distancesTransformFeedback.sceneIndexesLoc);\n                gl.vertexAttribIPointer(this.distancesTransformFeedback.sceneIndexesLoc, 1, gl.UNSIGNED_INT, 0, 0);\n            }\n\n            gl.bindTransformFeedback(gl.TRANSFORM_FEEDBACK, this.distancesTransformFeedback.id);\n            gl.bindBufferBase(gl.TRANSFORM_FEEDBACK_BUFFER, 0, this.distancesTransformFeedback.outDistancesBuffer);\n\n            gl.beginTransformFeedback(gl.POINTS);\n            gl.drawArrays(gl.POINTS, 0, this.getSplatCount());\n            gl.endTransformFeedback();\n\n            gl.bindBufferBase(gl.TRANSFORM_FEEDBACK_BUFFER, 0, null);\n            gl.bindTransformFeedback(gl.TRANSFORM_FEEDBACK, null);\n\n            gl.disable(gl.RASTERIZER_DISCARD);\n\n            const sync = gl.fenceSync(gl.SYNC_GPU_COMMANDS_COMPLETE, 0);\n            gl.flush();\n\n            const promise = new Promise((resolve) => {\n                const checkSync = () => {\n                    if (this.disposed) {\n                        resolve();\n                    } else {\n                        const timeout = 0;\n                        const bitflags = 0;\n                        const status = gl.clientWaitSync(sync, bitflags, timeout);\n                        switch (status) {\n                            case gl.TIMEOUT_EXPIRED:\n                                this.computeDistancesOnGPUSyncTimeout = setTimeout(checkSync);\n                                return this.computeDistancesOnGPUSyncTimeout;\n                            case gl.WAIT_FAILED:\n                                throw new Error('should never get here');\n                            default:\n                                this.computeDistancesOnGPUSyncTimeout = null;\n                                gl.deleteSync(sync);\n                                const currentVao = gl.getParameter(gl.VERTEX_ARRAY_BINDING);\n                                gl.bindVertexArray(this.distancesTransformFeedback.vao);\n                                gl.bindBuffer(gl.ARRAY_BUFFER, this.distancesTransformFeedback.outDistancesBuffer);\n                                gl.getBufferSubData(gl.ARRAY_BUFFER, 0, outComputedDistances);\n                                gl.bindBuffer(gl.ARRAY_BUFFER, null);\n\n                                if (currentVao) gl.bindVertexArray(currentVao);\n\n                                // console.timeEnd(\"gpu_compute_distances\");\n\n                                resolve();\n                        }\n                    }\n                };\n                this.computeDistancesOnGPUSyncTimeout = setTimeout(checkSync);\n            });\n\n            if (currentProgram && currentProgramDeleted !== true) gl.useProgram(currentProgram);\n            if (currentVao) gl.bindVertexArray(currentVao);\n\n            return promise;\n        };\n\n    }();\n\n    /**\n     * Given a global splat index, return corresponding local data (splat buffer, index of splat in that splat\n     * buffer, and the corresponding transform)\n     * @param {number} globalIndex Global splat index\n     * @param {object} paramsObj Object in which to store local data\n     * @param {boolean} returnSceneTransform By default, the transform of the scene to which the splat at 'globalIndex' belongs will be\n     *                                       returned via the 'sceneTransform' property of 'paramsObj' only if the splat mesh is static.\n     *                                       If 'returnSceneTransform' is true, the 'sceneTransform' property will always contain the scene\n     *                                       transform, and if 'returnSceneTransform' is false, the 'sceneTransform' property will always\n     *                                       be null.\n     */\n    getLocalSplatParameters(globalIndex, paramsObj, returnSceneTransform) {\n        if (returnSceneTransform === undefined || returnSceneTransform === null) {\n            returnSceneTransform = this.dynamicMode ? false : true;\n        }\n        paramsObj.splatBuffer = this.getSplatBufferForSplat(globalIndex);\n        paramsObj.localIndex = this.getSplatLocalIndex(globalIndex);\n        paramsObj.sceneTransform = returnSceneTransform ? this.getSceneTransformForSplat(globalIndex) : null;\n    }\n\n    /**\n     * Fill arrays with splat data and apply transforms if appropriate. Each array is optional.\n     * @param {Float32Array} covariances Target storage for splat covariances\n     * @param {Float32Array} scales Target storage for splat scales\n     * @param {Float32Array} rotations Target storage for splat rotations\n     * @param {Float32Array} centers Target storage for splat centers\n     * @param {Uint8Array} colors Target storage for splat colors\n     * @param {Float32Array} sphericalHarmonics Target storage for spherical harmonics\n     * @param {boolean} applySceneTransform By default, scene transforms are applied to relevant splat data only if the splat mesh is\n     *                                      static. If 'applySceneTransform' is true, scene transforms will always be applied and if\n     *                                      it is false, they will never be applied. If undefined, the default behavior will apply.\n     * @param {number} covarianceCompressionLevel The compression level for covariances in the destination array\n     * @param {number} sphericalHarmonicsCompressionLevel The compression level for spherical harmonics in the destination array\n     * @param {number} srcStart The start location from which to pull source data\n     * @param {number} srcEnd The end location from which to pull source data\n     * @param {number} destStart The start location from which to write data\n     */\n    fillSplatDataArrays(covariances, scales, rotations, centers, colors, sphericalHarmonics, applySceneTransform,\n                        covarianceCompressionLevel = 0, scaleRotationCompressionLevel = 0, sphericalHarmonicsCompressionLevel = 1,\n                        srcStart, srcEnd, destStart = 0, sceneIndex) {\n        const scaleOverride = new THREE.Vector3();\n        scaleOverride.x = undefined;\n        scaleOverride.y = undefined;\n        if (this.splatRenderMode === SplatRenderMode.ThreeD) {\n            scaleOverride.z = undefined;\n        } else {\n            scaleOverride.z = 1;\n        }\n        const tempTransform = new THREE.Matrix4();\n\n        let startSceneIndex = 0;\n        let endSceneIndex = this.scenes.length - 1;\n        if (sceneIndex !== undefined && sceneIndex !== null && sceneIndex >= 0 && sceneIndex <= this.scenes.length) {\n            startSceneIndex = sceneIndex;\n            endSceneIndex = sceneIndex;\n        }\n        for (let i = startSceneIndex; i <= endSceneIndex; i++) {\n            if (applySceneTransform === undefined || applySceneTransform === null) {\n                applySceneTransform = this.dynamicMode ? false : true;\n            }\n\n            const scene = this.getScene(i);\n            const splatBuffer = scene.splatBuffer;\n            let sceneTransform;\n            if (applySceneTransform) {\n                this.getSceneTransform(i, tempTransform);\n                sceneTransform = tempTransform;\n            }\n            if (covariances) {\n                splatBuffer.fillSplatCovarianceArray(covariances, sceneTransform, srcStart, srcEnd, destStart, covarianceCompressionLevel);\n            }\n            if (scales || rotations) {\n                if (!scales || !rotations) {\n                    throw new Error('SplatMesh::fillSplatDataArrays() -> \"scales\" and \"rotations\" must both be valid.');\n                }\n                splatBuffer.fillSplatScaleRotationArray(scales, rotations, sceneTransform,\n                                                        srcStart, srcEnd, destStart, scaleRotationCompressionLevel, scaleOverride);\n            }\n            if (centers) splatBuffer.fillSplatCenterArray(centers, sceneTransform, srcStart, srcEnd, destStart);\n            if (colors) splatBuffer.fillSplatColorArray(colors, scene.minimumAlpha, srcStart, srcEnd, destStart);\n            if (sphericalHarmonics) {\n                splatBuffer.fillSphericalHarmonicsArray(sphericalHarmonics, this.minSphericalHarmonicsDegree,\n                                                        sceneTransform, srcStart, srcEnd, destStart, sphericalHarmonicsCompressionLevel);\n            }\n            destStart += splatBuffer.getSplatCount();\n        }\n    }\n\n    /**\n     * Convert splat centers, which are floating point values, to an array of integers and multiply\n     * each by 1000. Centers will get transformed as appropriate before conversion to integer.\n     * @param {number} start The index at which to start retrieving data\n     * @param {number} end The index at which to stop retrieving data\n     * @param {boolean} padFour Enforce alignment of 4 by inserting a 1 after every 3 values\n     * @return {Int32Array}\n     */\n    getIntegerCenters(start, end, padFour = false) {\n        const splatCount = end - start + 1;\n        const floatCenters = new Float32Array(splatCount * 3);\n        this.fillSplatDataArrays(null, null, null, floatCenters, null, null, undefined, undefined, undefined, undefined, start);\n        let intCenters;\n        let componentCount = padFour ? 4 : 3;\n        intCenters = new Int32Array(splatCount * componentCount);\n        for (let i = 0; i < splatCount; i++) {\n            for (let t = 0; t < 3; t++) {\n                intCenters[i * componentCount + t] = Math.round(floatCenters[i * 3 + t] * 1000.0);\n            }\n            if (padFour) intCenters[i * componentCount + 3] = 1000;\n        }\n        return intCenters;\n    }\n\n    /**\n     * Returns an array of splat centers, transformed as appropriate, optionally padded.\n     * @param {number} start The index at which to start retrieving data\n     * @param {number} end The index at which to stop retrieving data\n     * @param {boolean} padFour Enforce alignment of 4 by inserting a 1 after every 3 values\n     * @return {Float32Array}\n     */\n    getFloatCenters(start, end, padFour = false) {\n        const splatCount = end - start + 1;\n        const floatCenters = new Float32Array(splatCount * 3);\n        this.fillSplatDataArrays(null, null, null, floatCenters, null, null, undefined, undefined, undefined, undefined, start);\n        if (!padFour) return floatCenters;\n        let paddedFloatCenters = new Float32Array(splatCount * 4);\n        for (let i = 0; i < splatCount; i++) {\n            for (let t = 0; t < 3; t++) {\n                paddedFloatCenters[i * 4 + t] = floatCenters[i * 3 + t];\n            }\n            paddedFloatCenters[i * 4 + 3] = 1.0;\n        }\n        return paddedFloatCenters;\n    }\n\n    /**\n     * Get the center for a splat, transformed as appropriate.\n     * @param {number} globalIndex Global index of splat\n     * @param {THREE.Vector3} outCenter THREE.Vector3 instance in which to store splat center\n     * @param {boolean} applySceneTransform By default, if the splat mesh is static, the transform of the scene to which the splat at\n     *                                      'globalIndex' belongs will be applied to the splat center. If 'applySceneTransform' is true,\n     *                                      the scene transform will always be applied and if 'applySceneTransform' is false, the\n     *                                      scene transform will never be applied. If undefined, the default behavior will apply.\n     */\n    getSplatCenter = function() {\n\n        const paramsObj = {};\n\n        return function(globalIndex, outCenter, applySceneTransform) {\n            this.getLocalSplatParameters(globalIndex, paramsObj, applySceneTransform);\n            paramsObj.splatBuffer.getSplatCenter(paramsObj.localIndex, outCenter, paramsObj.sceneTransform);\n        };\n\n    }();\n\n    /**\n     * Get the scale and rotation for a splat, transformed as appropriate.\n     * @param {number} globalIndex Global index of splat\n     * @param {THREE.Vector3} outScale THREE.Vector3 instance in which to store splat scale\n     * @param {THREE.Quaternion} outRotation THREE.Quaternion instance in which to store splat rotation\n     * @param {boolean} applySceneTransform By default, if the splat mesh is static, the transform of the scene to which the splat at\n     *                                      'globalIndex' belongs will be applied to the splat scale and rotation. If\n     *                                      'applySceneTransform' is true, the scene transform will always be applied and if\n     *                                      'applySceneTransform' is false, the scene transform will never be applied. If undefined,\n     *                                      the default behavior will apply.\n     */\n    getSplatScaleAndRotation = function() {\n\n        const paramsObj = {};\n        const scaleOverride = new THREE.Vector3();\n\n        return function(globalIndex, outScale, outRotation, applySceneTransform) {\n            this.getLocalSplatParameters(globalIndex, paramsObj, applySceneTransform);\n            scaleOverride.x = undefined;\n            scaleOverride.y = undefined;\n            scaleOverride.z = undefined;\n            if (this.splatRenderMode === SplatRenderMode.TwoD) scaleOverride.z = 0;\n            paramsObj.splatBuffer.getSplatScaleAndRotation(paramsObj.localIndex, outScale, outRotation,\n                                                           paramsObj.sceneTransform, scaleOverride);\n        };\n\n    }();\n\n    /**\n     * Get the color for a splat.\n     * @param {number} globalIndex Global index of splat\n     * @param {THREE.Vector4} outColor THREE.Vector4 instance in which to store splat color\n     */\n    getSplatColor = function() {\n\n        const paramsObj = {};\n\n        return function(globalIndex, outColor) {\n            this.getLocalSplatParameters(globalIndex, paramsObj);\n            paramsObj.splatBuffer.getSplatColor(paramsObj.localIndex, outColor);\n        };\n\n    }();\n\n    /**\n     * Store the transform of the scene at 'sceneIndex' in 'outTransform'.\n     * @param {number} sceneIndex Index of the desired scene\n     * @param {THREE.Matrix4} outTransform Instance of THREE.Matrix4 in which to store the scene's transform\n     */\n    getSceneTransform(sceneIndex, outTransform) {\n        const scene = this.getScene(sceneIndex);\n        scene.updateTransform(this.dynamicMode);\n        outTransform.copy(scene.transform);\n    }\n\n    /**\n     * Get the scene at 'sceneIndex'.\n     * @param {number} sceneIndex Index of the desired scene\n     * @return {SplatScene}\n     */\n    getScene(sceneIndex) {\n        if (sceneIndex < 0 || sceneIndex >= this.scenes.length) {\n            throw new Error('SplatMesh::getScene() -> Invalid scene index.');\n        }\n        return this.scenes[sceneIndex];\n    }\n\n    getSceneCount() {\n        return this.scenes.length;\n    }\n\n    getSplatBufferForSplat(globalIndex) {\n        return this.getScene(this.globalSplatIndexToSceneIndexMap[globalIndex]).splatBuffer;\n    }\n\n    getSceneIndexForSplat(globalIndex) {\n        return this.globalSplatIndexToSceneIndexMap[globalIndex];\n    }\n\n    getSceneTransformForSplat(globalIndex) {\n        return this.getScene(this.globalSplatIndexToSceneIndexMap[globalIndex]).transform;\n    }\n\n    getSplatLocalIndex(globalIndex) {\n        return this.globalSplatIndexToLocalSplatIndexMap[globalIndex];\n    }\n\n    static getIntegerMatrixArray(matrix) {\n        const matrixElements = matrix.elements;\n        const intMatrixArray = [];\n        for (let i = 0; i < 16; i++) {\n            intMatrixArray[i] = Math.round(matrixElements[i] * 1000.0);\n        }\n        return intMatrixArray;\n    }\n\n    computeBoundingBox(applySceneTransforms = false, sceneIndex) {\n        let splatCount = this.getSplatCount();\n        if (sceneIndex !== undefined && sceneIndex !== null) {\n            if (sceneIndex < 0 || sceneIndex >= this.scenes.length) {\n                throw new Error('SplatMesh::computeBoundingBox() -> Invalid scene index.');\n            }\n            splatCount = this.scenes[sceneIndex].splatBuffer.getSplatCount();\n        }\n\n        const floatCenters = new Float32Array(splatCount * 3);\n        this.fillSplatDataArrays(null, null, null, floatCenters, null, null, applySceneTransforms,\n                                 undefined, undefined, undefined, undefined, sceneIndex);\n\n        const min = new THREE.Vector3();\n        const max = new THREE.Vector3();\n        for (let i = 0; i < splatCount; i++) {\n            const offset = i * 3;\n            const x = floatCenters[offset];\n            const y = floatCenters[offset + 1];\n            const z = floatCenters[offset + 2];\n            if (i === 0 || x < min.x) min.x = x;\n            if (i === 0 || y < min.y) min.y = y;\n            if (i === 0 || z < min.z) min.z = z;\n            if (i === 0 || x > max.x) max.x = x;\n            if (i === 0 || y > max.y) max.y = y;\n            if (i === 0 || z > max.z) max.z = z;\n        }\n\n        return new THREE.Box3(min, max);\n    }\n}\n","\u0000asm\u0001\u0000\u0000\u0000\u0000\u000f\bdylink.0\u0001\u0004\u0000\u0000\u0000\u0000\u0001\u001b\u0003`\u0000\u0000`\u0010\u0000`\u0000\u0001\u0002\u0012\u0001\u0003env\u0006memory\u0002\u0003\u0000��\u0004\u0003\u0004\u0003\u0000\u0001\u0002\u0007T\u0004\u0011__wasm_call_ctors\u0000\u0000\u0018__wasm_apply_data_relocs\u0000\u0000\u000bsortIndexes\u0000\u0001\u0013emscripten_tls_init\u0000\u0002\n�\u0010\u0003\u0003\u0000\u0001\u000b�\u0010\u0004\u0001|\u0003{\u0003\u0003} \u000b \nk!\f\u0002@\u0002@ \u000e\u0004@ \r\u0004@A����\u0007!\nA����x!\r \u000b \fM\r\u0003 \f!\u0001\u0003@ \u0003 \u0001A\u0002t\"\u0005j \u0002 \u0000 \u0005j(\u0002\u0000A\u0002tj(\u0002\u0000\"\u00056\u0002\u0000 \u0005 \n \u0005 \nH\u001b!\n \u0005 \r \u0005 \rJ\u001b!\r \u0001A\u0001j\"\u0001 \u000bG\r\u0000\u000b\f\u0003\u000b \u000f\u0004@ \u000b \fM\r\u0002A!\u000fA����\u0007!\nA����x!\r \f!\u0002\u0003@ \u000f \u0007 \u0000 \u0002A\u0002t\"\u0015j(\u0002\u0000\"\u0016A\u0002tj(\u0002\u0000\"\u0014G\u0004@\u0002 \u0005�\t\u00028 \b \u0014A\u0006tj\"\u000e�\t\u0002\f \u000e*\u0002\u001c� \u0001 \u000e*\u0002,� \u0002 \u000e*\u0002<� \u0003��\u0001 \u0005�\t\u0002( \u000e�\t\u0002\b \u000e*\u0002\u0018� \u0001 \u000e*\u0002(� \u0002 \u000e*\u00028� \u0003��\u0001 \u0005�\t\u0002\b \u000e�\t\u0002\u0000 \u000e*\u0002\u0010� \u0001 \u000e*\u0002 � \u0002 \u000e*\u00020� \u0003��\u0001 \u0005�\t\u0002\u0018 \u000e�\t\u0002\u0004 \u000e*\u0002\u0014� \u0001 \u000e*\u0002$� \u0002 \u000e*\u00024� \u0003��\u0001��\u0001��\u0001��\u0001\"\u0011�_�\f\u0000\u0000\u0000\u0000\u0000@�@\u0000\u0000\u0000\u0000\u0000@�@\"\u0012��\u0001\"\u0013�!\u0001\"\u0010�D\u0000\u0000\u0000\u0000\u0000\u0000�Ac\u0004@ \u0010�\f\u0001\u000bA����x\u000b!\u000e\u0002 \u0013�!\u0000\"\u0010�D\u0000\u0000\u0000\u0000\u0000\u0000�Ac\u0004@ \u0010�\f\u0001\u000bA����x\u000b�\u0011 \u000e�\u001c\u0001\u0002 \u0011 \u0011�\r\b\t\n\u000b\f\r\u000e\u000f\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000�_ \u0012��\u0001\"\u0011�!\u0000\"\u0010�D\u0000\u0000\u0000\u0000\u0000\u0000�Ac\u0004@ \u0010�\f\u0001\u000bA����x\u000b�\u001c\u0002\u0002 \u0011�!\u0001\"\u0010�D\u0000\u0000\u0000\u0000\u0000\u0000�Ac\u0004@ \u0010�\f\u0001\u000bA����x\u000b�\u001c\u0003!\u0012 \u0014!\u000f\u000b \u0003 \u0015j \u0001 \u0016A\u0004tj�\u0000\u0000\u0000 \u0012��\u0001\"\u0011�\u001b\u0000 \u0011�\u001b\u0001j \u0011�\u001b\u0002j \u0011�\u001b\u0003j\"\u000e6\u0002\u0000 \u000e \n \n \u000eJ\u001b!\n \u000e \r \r \u000eH\u001b!\r \u0002A\u0001j\"\u0002 \u000bG\r\u0000\u000b\f\u0003\u000b\u0002 \u0005*\u0002\b��\u0014 \u0005*\u0002\u0018��\"\u0001�\f\u0000\u0000\u0000\u0000\u0000@�@\u0000\u0000\u0000\u0000\u0000@�@��\u0001\"\u0011�!\u0001\"\u0010�D\u0000\u0000\u0000\u0000\u0000\u0000�Ac\u0004@ \u0010�\f\u0001\u000bA����x\u000b!\u000e\u0002 \u0011�!\u0000\"\u0010�D\u0000\u0000\u0000\u0000\u0000\u0000�Ac\u0004@ \u0010�\f\u0001\u000bA����x\u000b!\u0002\u0002 \u0005*\u0002(�D\u0000\u0000\u0000\u0000\u0000@�@�\"\u0010�D\u0000\u0000\u0000\u0000\u0000\u0000�Ac\u0004@ \u0010�\f\u0001\u000bA����x\u000b!\u0005A����\u0007!\nA����x!\r \u000b \fM\r\u0002 \u0002�\u0011 \u000e�\u001c\u0001 \u0005�\u001c\u0002!\u0012 \f!\u0005\u0003@ \u0003 \u0005A\u0002t\"\u0002j \u0001 \u0000 \u0002j(\u0002\u0000A\u0004tj�\u0000\u0000\u0000 \u0012��\u0001\"\u0011�\u001b\u0000 \u0011�\u001b\u0001j \u0011�\u001b\u0002j\"\u00026\u0002\u0000 \u0002 \n \u0002 \nH\u001b!\n \u0002 \r \u0002 \rJ\u001b!\r \u0005A\u0001j\"\u0005 \u000bG\r\u0000\u000b\f\u0002\u000b \r\u0004@A����\u0007!\nA����x!\r \u000b \fM\r\u0002 \f!\u0001\u0003@ \u0003 \u0001A\u0002t\"\u0005j\u0002 \u0002 \u0000 \u0005j(\u0002\u0000A\u0002tj*\u0002\u0000�D\u0000\u0000\u0000\u0000\u0000\u0000�@�\"\u0010�D\u0000\u0000\u0000\u0000\u0000\u0000�Ac\u0004@ \u0010�\f\u0001\u000bA����x\u000b\"\u000e6\u0002\u0000 \n \u000e \n \u000eH\u001b!\n \r \u000e \r \u000eJ\u001b!\r \u0001A\u0001j\"\u0001 \u000bG\r\u0000\u000b\f\u0002\u000b \u000fE\u0004@ \u000b \fM\r\u0001 \u0005*\u0002(!\u0017 \u0005*\u0002\u0018!\u0018 \u0005*\u0002\b!\u0019A����\u0007!\nA����x!\r \f!\u0005\u0003@\u0002 \u0017 \u0001 \u0000 \u0005A\u0002t\"\u0007j(\u0002\u0000A\u0004tj\"\u0002*\u0002\b� \u0019 \u0002*\u0002\u0000� \u0018 \u0002*\u0002\u0004����D\u0000\u0000\u0000\u0000\u0000\u0000�@�\"\u0010�D\u0000\u0000\u0000\u0000\u0000\u0000�Ac\u0004@ \u0010�\f\u0001\u000bA����x\u000b!\u000e \u0003 \u0007j \u000e6\u0002\u0000 \n \u000e \n \u000eH\u001b!\n \r \u000e \r \u000eJ\u001b!\r \u0005A\u0001j\"\u0005 \u000bG\r\u0000\u000b\f\u0002\u000b \u000b \fM\r\u0000A!\u000fA����\u0007!\nA����x!\r \f!\u0002\u0003@ \u000f \u0007 \u0000 \u0002A\u0002t\"\u0014j(\u0002\u0000A\u0002t\"\u0015j(\u0002\u0000\"\u000eG\u0004@ \u0005�\t\u00028 \b \u000eA\u0006tj\"\u000f�\t\u0002\f \u000f*\u0002\u001c� \u0001 \u000f*\u0002,� \u0002 \u000f*\u0002<� \u0003��\u0001 \u0005�\t\u0002( \u000f�\t\u0002\b \u000f*\u0002\u0018� \u0001 \u000f*\u0002(� \u0002 \u000f*\u00028� \u0003��\u0001 \u0005�\t\u0002\b \u000f�\t\u0002\u0000 \u000f*\u0002\u0010� \u0001 \u000f*\u0002 � \u0002 \u000f*\u00020� \u0003��\u0001 \u0005�\t\u0002\u0018 \u000f�\t\u0002\u0004 \u000f*\u0002\u0014� \u0001 \u000f*\u0002$� \u0002 \u000f*\u00024� \u0003��\u0001��\u0001��\u0001��\u0001!\u0011 \u000e!\u000f\u000b \u0003 \u0014j\u0002 \u0011�\u001f\u0003 \u0001 \u0015A\u0002t\"\u000eA\frj*\u0002\u0000� \u0011�\u001f\u0002 \u0001 \u000eA\brj*\u0002\u0000� \u0011�\u001f\u0000 \u0001 \u000ej*\u0002\u0000� \u0011�\u001f\u0001 \u0001 \u000eA\u0004rj*\u0002\u0000�����D\u0000\u0000\u0000\u0000\u0000\u0000�@�\"\u0010�D\u0000\u0000\u0000\u0000\u0000\u0000�Ac\u0004@ \u0010�\f\u0001\u000bA����x\u000b\"\u000e6\u0002\u0000 \n \u000e \n \u000eH\u001b!\n \r \u000e \r \u000eJ\u001b!\r \u0002A\u0001j\"\u0002 \u000bG\r\u0000\u000b\f\u0001\u000bA����x!\rA����\u0007!\n\u000b \u000b \fK\u0004@ \tA\u0001k� \r� \n���!\u0017 \f!\r\u0003@\u0002 \u0017 \u0003 \rA\u0002tj\"\u0001(\u0002\u0000 \nk��\"\u0018�C\u0000\u0000\u0000O]\u0004@ \u0018�\f\u0001\u000bA����x\u000b!\u000e \u0001 \u000e6\u0002\u0000 \u0004 \u000eA\u0002tj\"\u0001 \u0001(\u0002\u0000A\u0001j6\u0002\u0000 \rA\u0001j\"\r \u000bG\r\u0000\u000b\u000b \tA\u0002O\u0004@ \u0004(\u0002\u0000!\rA\u0001!\n\u0003@ \u0004 \nA\u0002tj\"\u0001 \u0001(\u0002\u0000 \rj\"\r6\u0002\u0000 \nA\u0001j\"\n \tG\r\u0000\u000b\u000b \fA\u0000J\u0004@ \f!\n\u0003@ \u0006 \nA\u0001k\"\u0001A\u0002t\"\u0002j \u0000 \u0002j(\u0002\u00006\u0002\u0000 \nA\u0001K!\u0002 \u0001!\n \u0002\r\u0000\u000b\u000b \u000b \fJ\u0004@ \u000b!\n\u0003@ \u0006 \u000b \u0004 \u0003 \nA\u0001k\"\nA\u0002t\"\u0001j(\u0002\u0000A\u0002tj\"\u0002(\u0002\u0000\"\u0005kA\u0002tj \u0000 \u0001j(\u0002\u00006\u0002\u0000 \u0002 \u0005A\u0001k6\u0002\u0000 \n \fJ\r\u0000\u000b\u000b\u000b\u0004\u0000A\u0000\u000b","\u0000asm\u0001\u0000\u0000\u0000\u0000\u000f\bdylink.0\u0001\u0004\u0000\u0000\u0000\u0000\u0001\u0017\u0002`\u0000\u0000`\u0010\u0000\u0002\u0012\u0001\u0003env\u0006memory\u0002\u0003\u0000��\u0004\u0003\u0003\u0002\u0000\u0001\u0007>\u0003\u0011__wasm_call_ctors\u0000\u0000\u0018__wasm_apply_data_relocs\u0000\u0000\u000bsortIndexes\u0000\u0001\n�\u000f\u0002\u0002\u0000\u000b�\u000f\u0003\u0001|\u0007}\u0006 \u000b \nk!\f\u0002@\u0002@ \u000e\u0004@ \r\u0004@A����\u0007!\nA����x!\r \u000b \fM\r\u0003 \f!\u0005\u0003@ \u0003 \u0005A\u0002t\"\u0001j \u0002 \u0000 \u0001j(\u0002\u0000A\u0002tj(\u0002\u0000\"\u00016\u0002\u0000 \u0001 \n \u0001 \nH\u001b!\n \u0001 \r \u0001 \rJ\u001b!\r \u0005A\u0001j\"\u0005 \u000bG\r\u0000\u000b\f\u0003\u000b \u000f\u0004@ \u000b \fM\r\u0002A!\u000fA����\u0007!\nA����x!\r \f!\u0002\u0003@ \u000f \u0007 \u0000 \u0002A\u0002t\"\u001aj(\u0002\u0000A\u0002t\"\u001bj(\u0002\u0000\"\u000eG\u0004@\u0002 \u0005*\u00028\"\u0011 \b \u000eA\u0006tj\"\u000f*\u0002<� \u0005*\u0002(\"\u0012 \u000f*\u00028� \u0005*\u0002\b\"\u0013 \u000f*\u00020� \u0005*\u0002\u0018\"\u0014 \u000f*\u00024�����D\u0000\u0000\u0000\u0000\u0000@�@�\"\u0010�D\u0000\u0000\u0000\u0000\u0000\u0000�Ac\u0004@ \u0010�\f\u0001\u000bA����x\u000b!\u0018\u0002 \u0011 \u000f*\u0002,� \u0012 \u000f*\u0002(� \u0013 \u000f*\u0002 � \u0014 \u000f*\u0002$�����D\u0000\u0000\u0000\u0000\u0000@�@�\"\u0010�D\u0000\u0000\u0000\u0000\u0000\u0000�Ac\u0004@ \u0010�\f\u0001\u000bA����x\u000b!\u0019\u0002 \u0011 \u000f*\u0002\u001c� \u0012 \u000f*\u0002\u0018� \u0013 \u000f*\u0002\u0010� \u0014 \u000f*\u0002\u0014�����D\u0000\u0000\u0000\u0000\u0000@�@�\"\u0010�D\u0000\u0000\u0000\u0000\u0000\u0000�Ac\u0004@ \u0010�\f\u0001\u000bA����x\u000b!\u001c\u0002 \u0011 \u000f*\u0002\f� \u0012 \u000f*\u0002\b� \u0013 \u000f*\u0002\u0000� \u0014 \u000f*\u0002\u0004�����D\u0000\u0000\u0000\u0000\u0000@�@�\"\u0010�D\u0000\u0000\u0000\u0000\u0000\u0000�Ac\u0004@ \u0010�\f\u0001\u000bA����x\u000b!\u001d \u000e!\u000f\u000b \u0003 \u001aj \u0001 \u001bA\u0002tj\"\u000e(\u0002\u0004 \u001cl \u000e(\u0002\u0000 \u001dlj \u000e(\u0002\b \u0019lj \u000e(\u0002\f \u0018lj\"\u000e6\u0002\u0000 \u000e \n \n \u000eJ\u001b!\n \u000e \r \r \u000eH\u001b!\r \u0002A\u0001j\"\u0002 \u000bG\r\u0000\u000b\f\u0003\u000b\u0002 \u0005*\u0002(�D\u0000\u0000\u0000\u0000\u0000@�@�\"\u0010�D\u0000\u0000\u0000\u0000\u0000\u0000�Ac\u0004@ \u0010�\f\u0001\u000bA����x\u000b!\u0002\u0002 \u0005*\u0002\u0018�D\u0000\u0000\u0000\u0000\u0000@�@�\"\u0010�D\u0000\u0000\u0000\u0000\u0000\u0000�Ac\u0004@ \u0010�\f\u0001\u000bA����x\u000b!\u0007 \u000b \fM\u0002 \u0005*\u0002\b�D\u0000\u0000\u0000\u0000\u0000@�@�\"\u0010�D\u0000\u0000\u0000\u0000\u0000\u0000�Ac\u0004@ \u0010�\f\u0001\u000bA����x\u000b!\u000fA����\u0007!\nA����x!\r\r\u0002 \f!\u0005\u0003@ \u0003 \u0005A\u0002t\"\bj \u0001 \u0000 \bj(\u0002\u0000A\u0004tj\"\b(\u0002\u0004 \u0007l \b(\u0002\u0000 \u000flj \b(\u0002\b \u0002lj\"\b6\u0002\u0000 \b \n \b \nH\u001b!\n \b \r \b \rJ\u001b!\r \u0005A\u0001j\"\u0005 \u000bG\r\u0000\u000b\f\u0002\u000b \r\u0004@A����\u0007!\nA����x!\r \u000b \fM\r\u0002 \f!\u0005\u0003@ \u0003 \u0005A\u0002t\"\u0001j\u0002 \u0002 \u0000 \u0001j(\u0002\u0000A\u0002tj*\u0002\u0000�D\u0000\u0000\u0000\u0000\u0000\u0000�@�\"\u0010�D\u0000\u0000\u0000\u0000\u0000\u0000�Ac\u0004@ \u0010�\f\u0001\u000bA����x\u000b\"\u000e6\u0002\u0000 \n \u000e \n \u000eH\u001b!\n \r \u000e \r \u000eJ\u001b!\r \u0005A\u0001j\"\u0005 \u000bG\r\u0000\u000b\f\u0002\u000b \u000fE\u0004@ \u000b \fM\r\u0001 \u0005*\u0002(!\u0011 \u0005*\u0002\u0018!\u0012 \u0005*\u0002\b!\u0013A����\u0007!\nA����x!\r \f!\u0005\u0003@\u0002 \u0011 \u0001 \u0000 \u0005A\u0002t\"\u0007j(\u0002\u0000A\u0004tj\"\u0002*\u0002\b� \u0013 \u0002*\u0002\u0000� \u0012 \u0002*\u0002\u0004����D\u0000\u0000\u0000\u0000\u0000\u0000�@�\"\u0010�D\u0000\u0000\u0000\u0000\u0000\u0000�Ac\u0004@ \u0010�\f\u0001\u000bA����x\u000b!\u000e \u0003 \u0007j \u000e6\u0002\u0000 \n \u000e \n \u000eH\u001b!\n \r \u000e \r \u000eJ\u001b!\r \u0005A\u0001j\"\u0005 \u000bG\r\u0000\u000b\f\u0002\u000b \u000b \fM\r\u0000A!\u000fA����\u0007!\nA����x!\r \f!\u0002\u0003@ \u000f \u0007 \u0000 \u0002A\u0002t\"\u0018j(\u0002\u0000A\u0002t\"\u0019j(\u0002\u0000\"\u000eG\u0004@ \u0005*\u00028\"\u0011 \b \u000eA\u0006tj\"\u000f*\u0002<� \u0005*\u0002(\"\u0012 \u000f*\u00028� \u0005*\u0002\b\"\u0013 \u000f*\u00020� \u0005*\u0002\u0018\"\u0014 \u000f*\u00024����!\u0015 \u0011 \u000f*\u0002,� \u0012 \u000f*\u0002(� \u0013 \u000f*\u0002 � \u0014 \u000f*\u0002$����!\u0016 \u0011 \u000f*\u0002\u001c� \u0012 \u000f*\u0002\u0018� \u0013 \u000f*\u0002\u0010� \u0014 \u000f*\u0002\u0014����!\u0017 \u0011 \u000f*\u0002\f� \u0012 \u000f*\u0002\b� \u0013 \u000f*\u0002\u0000� \u0014 \u000f*\u0002\u0004����!\u0011 \u000e!\u000f\u000b \u0003 \u0018j\u0002 \u0015 \u0001 \u0019A\u0002tj\"\u000e*\u0002\f� \u0016 \u000e*\u0002\b� \u0011 \u000e*\u0002\u0000� \u0017 \u000e*\u0002\u0004�����D\u0000\u0000\u0000\u0000\u0000\u0000�@�\"\u0010�D\u0000\u0000\u0000\u0000\u0000\u0000�Ac\u0004@ \u0010�\f\u0001\u000bA����x\u000b\"\u000e6\u0002\u0000 \n \u000e \n \u000eH\u001b!\n \r \u000e \r \u000eJ\u001b!\r \u0002A\u0001j\"\u0002 \u000bG\r\u0000\u000b\f\u0001\u000bA����x!\rA����\u0007!\n\u000b \u000b \fK\u0004@ \tA\u0001k� \r� \n���!\u0011 \f!\r\u0003@\u0002 \u0011 \u0003 \rA\u0002tj\"\u0001(\u0002\u0000 \nk��\"\u0012�C\u0000\u0000\u0000O]\u0004@ \u0012�\f\u0001\u000bA����x\u000b!\u000e \u0001 \u000e6\u0002\u0000 \u0004 \u000eA\u0002tj\"\u0001 \u0001(\u0002\u0000A\u0001j6\u0002\u0000 \rA\u0001j\"\r \u000bG\r\u0000\u000b\u000b \tA\u0002O\u0004@ \u0004(\u0002\u0000!\rA\u0001!\n\u0003@ \u0004 \nA\u0002tj\"\u0001 \u0001(\u0002\u0000 \rj\"\r6\u0002\u0000 \nA\u0001j\"\n \tG\r\u0000\u000b\u000b \fA\u0000J\u0004@ \f!\n\u0003@ \u0006 \nA\u0001k\"\u0001A\u0002t\"\u0002j \u0000 \u0002j(\u0002\u00006\u0002\u0000 \nA\u0001K \u0001!\n\r\u0000\u000b\u000b \u000b \fJ\u0004@ \u000b!\n\u0003@ \u0006 \u000b \u0004 \u0003 \nA\u0001k\"\nA\u0002t\"\u0001j(\u0002\u0000A\u0002tj\"\u0002(\u0002\u0000\"\u0005kA\u0002tj \u0000 \u0001j(\u0002\u00006\u0002\u0000 \u0002 \u0005A\u0001k6\u0002\u0000 \n \fJ\r\u0000\u000b\u000b\u000b","\u0000asm\u0001\u0000\u0000\u0000\u0000\u000f\bdylink.0\u0001\u0004\u0000\u0000\u0000\u0000\u0001\u0017\u0002`\u0000\u0000`\u0010\u0000\u0002\u000f\u0001\u0003env\u0006memory\u0002\u0000\u0000\u0003\u0003\u0002\u0000\u0001\u0007>\u0003\u0011__wasm_call_ctors\u0000\u0000\u0018__wasm_apply_data_relocs\u0000\u0000\u000bsortIndexes\u0000\u0001\n�\u000f\u0002\u0002\u0000\u000b�\u000f\u0004\u0001|\u0003{\u0007}\u0003 \u000b \nk!\f\u0002@\u0002@ \u000e\u0004@ \r\u0004@A����\u0007!\nA����x!\r \u000b \fM\r\u0003 \f!\u0005\u0003@ \u0003 \u0005A\u0002t\"\u0001j \u0002 \u0000 \u0001j(\u0002\u0000A\u0002tj(\u0002\u0000\"\u00016\u0002\u0000 \u0001 \n \u0001 \nH\u001b!\n \u0001 \r \u0001 \rJ\u001b!\r \u0005A\u0001j\"\u0005 \u000bG\r\u0000\u000b\f\u0003\u000b \u000f\u0004@ \u000b \fM\r\u0002A!\u000fA����\u0007!\nA����x!\r \f!\u0002\u0003@ \u000f \u0007 \u0000 \u0002A\u0002t\"\u001cj(\u0002\u0000\"\u001dA\u0002tj(\u0002\u0000\"\u001bG\u0004@\u0002 \u0005�\t\u00028 \b \u001bA\u0006tj\"\u000e�\t\u0002\f \u000e*\u0002\u001c� \u0001 \u000e*\u0002,� \u0002 \u000e*\u0002<� \u0003��\u0001 \u0005�\t\u0002( \u000e�\t\u0002\b \u000e*\u0002\u0018� \u0001 \u000e*\u0002(� \u0002 \u000e*\u00028� \u0003��\u0001 \u0005�\t\u0002\b \u000e�\t\u0002\u0000 \u000e*\u0002\u0010� \u0001 \u000e*\u0002 � \u0002 \u000e*\u00020� \u0003��\u0001 \u0005�\t\u0002\u0018 \u000e�\t\u0002\u0004 \u000e*\u0002\u0014� \u0001 \u000e*\u0002$� \u0002 \u000e*\u00024� \u0003��\u0001��\u0001��\u0001��\u0001\"\u0011�_�\f\u0000\u0000\u0000\u0000\u0000@�@\u0000\u0000\u0000\u0000\u0000@�@\"\u0012��\u0001\"\u0013�!\u0001\"\u0010�D\u0000\u0000\u0000\u0000\u0000\u0000�Ac\u0004@ \u0010�\f\u0001\u000bA����x\u000b!\u000e\u0002 \u0013�!\u0000\"\u0010�D\u0000\u0000\u0000\u0000\u0000\u0000�Ac\u0004@ \u0010�\f\u0001\u000bA����x\u000b�\u0011 \u000e�\u001c\u0001\u0002 \u0011 \u0011�\r\b\t\n\u000b\f\r\u000e\u000f\u0000\u0001\u0002\u0003\u0000\u0001\u0002\u0003�_ \u0012��\u0001\"\u0011�!\u0000\"\u0010�D\u0000\u0000\u0000\u0000\u0000\u0000�Ac\u0004@ \u0010�\f\u0001\u000bA����x\u000b�\u001c\u0002\u0002 \u0011�!\u0001\"\u0010�D\u0000\u0000\u0000\u0000\u0000\u0000�Ac\u0004@ \u0010�\f\u0001\u000bA����x\u000b�\u001c\u0003!\u0012 \u001b!\u000f\u000b \u0003 \u001cj \u0001 \u001dA\u0004tj�\u0000\u0000\u0000 \u0012��\u0001\"\u0011�\u001b\u0000 \u0011�\u001b\u0001j \u0011�\u001b\u0002j \u0011�\u001b\u0003j\"\u000e6\u0002\u0000 \u000e \n \n \u000eJ\u001b!\n \u000e \r \r \u000eH\u001b!\r \u0002A\u0001j\"\u0002 \u000bG\r\u0000\u000b\f\u0003\u000b\u0002 \u0005*\u0002\b��\u0014 \u0005*\u0002\u0018��\"\u0001�\f\u0000\u0000\u0000\u0000\u0000@�@\u0000\u0000\u0000\u0000\u0000@�@��\u0001\"\u0011�!\u0001\"\u0010�D\u0000\u0000\u0000\u0000\u0000\u0000�Ac\u0004@ \u0010�\f\u0001\u000bA����x\u000b!\u000e\u0002 \u0011�!\u0000\"\u0010�D\u0000\u0000\u0000\u0000\u0000\u0000�Ac\u0004@ \u0010�\f\u0001\u000bA����x\u000b\u0002 \u0005*\u0002(�D\u0000\u0000\u0000\u0000\u0000@�@�\"\u0010�D\u0000\u0000\u0000\u0000\u0000\u0000�Ac\u0004@ \u0010�\f\u0001\u000bA����x\u000b!\u0005A����\u0007!\nA����x!\r \u000b \fM\r\u0002�\u0011 \u000e�\u001c\u0001 \u0005�\u001c\u0002!\u0012 \f!\u0005\u0003@ \u0003 \u0005A\u0002t\"\u0002j \u0001 \u0000 \u0002j(\u0002\u0000A\u0004tj�\u0000\u0000\u0000 \u0012��\u0001\"\u0011�\u001b\u0000 \u0011�\u001b\u0001j \u0011�\u001b\u0002j\"\u00026\u0002\u0000 \u0002 \n \u0002 \nH\u001b!\n \u0002 \r \u0002 \rJ\u001b!\r \u0005A\u0001j\"\u0005 \u000bG\r\u0000\u000b\f\u0002\u000b \r\u0004@A����\u0007!\nA����x!\r \u000b \fM\r\u0002 \f!\u0005\u0003@ \u0003 \u0005A\u0002t\"\u0001j\u0002 \u0002 \u0000 \u0001j(\u0002\u0000A\u0002tj*\u0002\u0000�D\u0000\u0000\u0000\u0000\u0000\u0000�@�\"\u0010�D\u0000\u0000\u0000\u0000\u0000\u0000�Ac\u0004@ \u0010�\f\u0001\u000bA����x\u000b\"\u000e6\u0002\u0000 \n \u000e \n \u000eH\u001b!\n \r \u000e \r \u000eJ\u001b!\r \u0005A\u0001j\"\u0005 \u000bG\r\u0000\u000b\f\u0002\u000b \u000fE\u0004@ \u000b \fM\r\u0001 \u0005*\u0002(!\u0014 \u0005*\u0002\u0018!\u0015 \u0005*\u0002\b!\u0016A����\u0007!\nA����x!\r \f!\u0005\u0003@\u0002 \u0014 \u0001 \u0000 \u0005A\u0002t\"\u0007j(\u0002\u0000A\u0004tj\"\u0002*\u0002\b� \u0016 \u0002*\u0002\u0000� \u0015 \u0002*\u0002\u0004����D\u0000\u0000\u0000\u0000\u0000\u0000�@�\"\u0010�D\u0000\u0000\u0000\u0000\u0000\u0000�Ac\u0004@ \u0010�\f\u0001\u000bA����x\u000b!\u000e \u0003 \u0007j \u000e6\u0002\u0000 \n \u000e \n \u000eH\u001b!\n \r \u000e \r \u000eJ\u001b!\r \u0005A\u0001j\"\u0005 \u000bG\r\u0000\u000b\f\u0002\u000b \u000b \fM\r\u0000A!\u000fA����\u0007!\nA����x!\r \f!\u0002\u0003@ \u000f \u0007 \u0000 \u0002A\u0002t\"\u001bj(\u0002\u0000A\u0002t\"\u001cj(\u0002\u0000\"\u000eG\u0004@ \u0005*\u00028\"\u0014 \b \u000eA\u0006tj\"\u000f*\u0002<� \u0005*\u0002(\"\u0015 \u000f*\u00028� \u0005*\u0002\b\"\u0016 \u000f*\u00020� \u0005*\u0002\u0018\"\u0017 \u000f*\u00024����!\u0018 \u0014 \u000f*\u0002,� \u0015 \u000f*\u0002(� \u0016 \u000f*\u0002 � \u0017 \u000f*\u0002$����!\u0019 \u0014 \u000f*\u0002\u001c� \u0015 \u000f*\u0002\u0018� \u0016 \u000f*\u0002\u0010� \u0017 \u000f*\u0002\u0014����!\u001a \u0014 \u000f*\u0002\f� \u0015 \u000f*\u0002\b� \u0016 \u000f*\u0002\u0000� \u0017 \u000f*\u0002\u0004����!\u0014 \u000e!\u000f\u000b \u0003 \u001bj\u0002 \u0018 \u0001 \u001cA\u0002tj\"\u000e*\u0002\f� \u0019 \u000e*\u0002\b� \u0014 \u000e*\u0002\u0000� \u001a \u000e*\u0002\u0004�����D\u0000\u0000\u0000\u0000\u0000\u0000�@�\"\u0010�D\u0000\u0000\u0000\u0000\u0000\u0000�Ac\u0004@ \u0010�\f\u0001\u000bA����x\u000b\"\u000e6\u0002\u0000 \n \u000e \n \u000eH\u001b!\n \r \u000e \r \u000eJ\u001b!\r \u0002A\u0001j\"\u0002 \u000bG\r\u0000\u000b\f\u0001\u000bA����x!\rA����\u0007!\n\u000b \u000b \fK\u0004@ \tA\u0001k� \r� \n���!\u0014 \f!\r\u0003@\u0002 \u0014 \u0003 \rA\u0002tj\"\u0001(\u0002\u0000 \nk��\"\u0015�C\u0000\u0000\u0000O]\u0004@ \u0015�\f\u0001\u000bA����x\u000b!\u000e \u0001 \u000e6\u0002\u0000 \u0004 \u000eA\u0002tj\"\u0001 \u0001(\u0002\u0000A\u0001j6\u0002\u0000 \rA\u0001j\"\r \u000bG\r\u0000\u000b\u000b \tA\u0002O\u0004@ \u0004(\u0002\u0000!\rA\u0001!\n\u0003@ \u0004 \nA\u0002tj\"\u0001 \u0001(\u0002\u0000 \rj\"\r6\u0002\u0000 \nA\u0001j\"\n \tG\r\u0000\u000b\u000b \fA\u0000J\u0004@ \f!\n\u0003@ \u0006 \nA\u0001k\"\u0001A\u0002t\"\u0002j \u0000 \u0002j(\u0002\u00006\u0002\u0000 \nA\u0001K \u0001!\n\r\u0000\u000b\u000b \u000b \fJ\u0004@ \u000b!\n\u0003@ \u0006 \u000b \u0004 \u0003 \nA\u0001k\"\nA\u0002t\"\u0001j(\u0002\u0000A\u0002tj\"\u0002(\u0002\u0000\"\u0005kA\u0002tj \u0000 \u0001j(\u0002\u00006\u0002\u0000 \u0002 \u0005A\u0001k6\u0002\u0000 \n \fJ\r\u0000\u000b\u000b\u000b","\u0000asm\u0001\u0000\u0000\u0000\u0000\u000f\bdylink.0\u0001\u0004\u0000\u0000\u0000\u0000\u0001\u0017\u0002`\u0000\u0000`\u0010\u0000\u0002\u000f\u0001\u0003env\u0006memory\u0002\u0000\u0000\u0003\u0003\u0002\u0000\u0001\u0007>\u0003\u0011__wasm_call_ctors\u0000\u0000\u0018__wasm_apply_data_relocs\u0000\u0000\u000bsortIndexes\u0000\u0001\n�\u000f\u0002\u0002\u0000\u000b�\u000f\u0003\u0001|\u0007}\u0006 \u000b \nk!\f\u0002@\u0002@ \u000e\u0004@ \r\u0004@A����\u0007!\nA����x!\r \u000b \fM\r\u0003 \f!\u0005\u0003@ \u0003 \u0005A\u0002t\"\u0001j \u0002 \u0000 \u0001j(\u0002\u0000A\u0002tj(\u0002\u0000\"\u00016\u0002\u0000 \u0001 \n \u0001 \nH\u001b!\n \u0001 \r \u0001 \rJ\u001b!\r \u0005A\u0001j\"\u0005 \u000bG\r\u0000\u000b\f\u0003\u000b \u000f\u0004@ \u000b \fM\r\u0002A!\u000fA����\u0007!\nA����x!\r \f!\u0002\u0003@ \u000f \u0007 \u0000 \u0002A\u0002t\"\u001aj(\u0002\u0000A\u0002t\"\u001bj(\u0002\u0000\"\u000eG\u0004@\u0002 \u0005*\u00028\"\u0011 \b \u000eA\u0006tj\"\u000f*\u0002<� \u0005*\u0002(\"\u0012 \u000f*\u00028� \u0005*\u0002\b\"\u0013 \u000f*\u00020� \u0005*\u0002\u0018\"\u0014 \u000f*\u00024�����D\u0000\u0000\u0000\u0000\u0000@�@�\"\u0010�D\u0000\u0000\u0000\u0000\u0000\u0000�Ac\u0004@ \u0010�\f\u0001\u000bA����x\u000b!\u0018\u0002 \u0011 \u000f*\u0002,� \u0012 \u000f*\u0002(� \u0013 \u000f*\u0002 � \u0014 \u000f*\u0002$�����D\u0000\u0000\u0000\u0000\u0000@�@�\"\u0010�D\u0000\u0000\u0000\u0000\u0000\u0000�Ac\u0004@ \u0010�\f\u0001\u000bA����x\u000b!\u0019\u0002 \u0011 \u000f*\u0002\u001c� \u0012 \u000f*\u0002\u0018� \u0013 \u000f*\u0002\u0010� \u0014 \u000f*\u0002\u0014�����D\u0000\u0000\u0000\u0000\u0000@�@�\"\u0010�D\u0000\u0000\u0000\u0000\u0000\u0000�Ac\u0004@ \u0010�\f\u0001\u000bA����x\u000b!\u001c\u0002 \u0011 \u000f*\u0002\f� \u0012 \u000f*\u0002\b� \u0013 \u000f*\u0002\u0000� \u0014 \u000f*\u0002\u0004�����D\u0000\u0000\u0000\u0000\u0000@�@�\"\u0010�D\u0000\u0000\u0000\u0000\u0000\u0000�Ac\u0004@ \u0010�\f\u0001\u000bA����x\u000b!\u001d \u000e!\u000f\u000b \u0003 \u001aj \u0001 \u001bA\u0002tj\"\u000e(\u0002\u0004 \u001cl \u000e(\u0002\u0000 \u001dlj \u000e(\u0002\b \u0019lj \u000e(\u0002\f \u0018lj\"\u000e6\u0002\u0000 \u000e \n \n \u000eJ\u001b!\n \u000e \r \r \u000eH\u001b!\r \u0002A\u0001j\"\u0002 \u000bG\r\u0000\u000b\f\u0003\u000b\u0002 \u0005*\u0002(�D\u0000\u0000\u0000\u0000\u0000@�@�\"\u0010�D\u0000\u0000\u0000\u0000\u0000\u0000�Ac\u0004@ \u0010�\f\u0001\u000bA����x\u000b!\u0002\u0002 \u0005*\u0002\u0018�D\u0000\u0000\u0000\u0000\u0000@�@�\"\u0010�D\u0000\u0000\u0000\u0000\u0000\u0000�Ac\u0004@ \u0010�\f\u0001\u000bA����x\u000b!\u0007 \u000b \fM\u0002 \u0005*\u0002\b�D\u0000\u0000\u0000\u0000\u0000@�@�\"\u0010�D\u0000\u0000\u0000\u0000\u0000\u0000�Ac\u0004@ \u0010�\f\u0001\u000bA����x\u000b!\u000fA����\u0007!\nA����x!\r\r\u0002 \f!\u0005\u0003@ \u0003 \u0005A\u0002t\"\bj \u0001 \u0000 \bj(\u0002\u0000A\u0004tj\"\b(\u0002\u0004 \u0007l \b(\u0002\u0000 \u000flj \b(\u0002\b \u0002lj\"\b6\u0002\u0000 \b \n \b \nH\u001b!\n \b \r \b \rJ\u001b!\r \u0005A\u0001j\"\u0005 \u000bG\r\u0000\u000b\f\u0002\u000b \r\u0004@A����\u0007!\nA����x!\r \u000b \fM\r\u0002 \f!\u0005\u0003@ \u0003 \u0005A\u0002t\"\u0001j\u0002 \u0002 \u0000 \u0001j(\u0002\u0000A\u0002tj*\u0002\u0000�D\u0000\u0000\u0000\u0000\u0000\u0000�@�\"\u0010�D\u0000\u0000\u0000\u0000\u0000\u0000�Ac\u0004@ \u0010�\f\u0001\u000bA����x\u000b\"\u000e6\u0002\u0000 \n \u000e \n \u000eH\u001b!\n \r \u000e \r \u000eJ\u001b!\r \u0005A\u0001j\"\u0005 \u000bG\r\u0000\u000b\f\u0002\u000b \u000fE\u0004@ \u000b \fM\r\u0001 \u0005*\u0002(!\u0011 \u0005*\u0002\u0018!\u0012 \u0005*\u0002\b!\u0013A����\u0007!\nA����x!\r \f!\u0005\u0003@\u0002 \u0011 \u0001 \u0000 \u0005A\u0002t\"\u0007j(\u0002\u0000A\u0004tj\"\u0002*\u0002\b� \u0013 \u0002*\u0002\u0000� \u0012 \u0002*\u0002\u0004����D\u0000\u0000\u0000\u0000\u0000\u0000�@�\"\u0010�D\u0000\u0000\u0000\u0000\u0000\u0000�Ac\u0004@ \u0010�\f\u0001\u000bA����x\u000b!\u000e \u0003 \u0007j \u000e6\u0002\u0000 \n \u000e \n \u000eH\u001b!\n \r \u000e \r \u000eJ\u001b!\r \u0005A\u0001j\"\u0005 \u000bG\r\u0000\u000b\f\u0002\u000b \u000b \fM\r\u0000A!\u000fA����\u0007!\nA����x!\r \f!\u0002\u0003@ \u000f \u0007 \u0000 \u0002A\u0002t\"\u0018j(\u0002\u0000A\u0002t\"\u0019j(\u0002\u0000\"\u000eG\u0004@ \u0005*\u00028\"\u0011 \b \u000eA\u0006tj\"\u000f*\u0002<� \u0005*\u0002(\"\u0012 \u000f*\u00028� \u0005*\u0002\b\"\u0013 \u000f*\u00020� \u0005*\u0002\u0018\"\u0014 \u000f*\u00024����!\u0015 \u0011 \u000f*\u0002,� \u0012 \u000f*\u0002(� \u0013 \u000f*\u0002 � \u0014 \u000f*\u0002$����!\u0016 \u0011 \u000f*\u0002\u001c� \u0012 \u000f*\u0002\u0018� \u0013 \u000f*\u0002\u0010� \u0014 \u000f*\u0002\u0014����!\u0017 \u0011 \u000f*\u0002\f� \u0012 \u000f*\u0002\b� \u0013 \u000f*\u0002\u0000� \u0014 \u000f*\u0002\u0004����!\u0011 \u000e!\u000f\u000b \u0003 \u0018j\u0002 \u0015 \u0001 \u0019A\u0002tj\"\u000e*\u0002\f� \u0016 \u000e*\u0002\b� \u0011 \u000e*\u0002\u0000� \u0017 \u000e*\u0002\u0004�����D\u0000\u0000\u0000\u0000\u0000\u0000�@�\"\u0010�D\u0000\u0000\u0000\u0000\u0000\u0000�Ac\u0004@ \u0010�\f\u0001\u000bA����x\u000b\"\u000e6\u0002\u0000 \n \u000e \n \u000eH\u001b!\n \r \u000e \r \u000eJ\u001b!\r \u0002A\u0001j\"\u0002 \u000bG\r\u0000\u000b\f\u0001\u000bA����x!\rA����\u0007!\n\u000b \u000b \fK\u0004@ \tA\u0001k� \r� \n���!\u0011 \f!\r\u0003@\u0002 \u0011 \u0003 \rA\u0002tj\"\u0001(\u0002\u0000 \nk��\"\u0012�C\u0000\u0000\u0000O]\u0004@ \u0012�\f\u0001\u000bA����x\u000b!\u000e \u0001 \u000e6\u0002\u0000 \u0004 \u000eA\u0002tj\"\u0001 \u0001(\u0002\u0000A\u0001j6\u0002\u0000 \rA\u0001j\"\r \u000bG\r\u0000\u000b\u000b \tA\u0002O\u0004@ \u0004(\u0002\u0000!\rA\u0001!\n\u0003@ \u0004 \nA\u0002tj\"\u0001 \u0001(\u0002\u0000 \rj\"\r6\u0002\u0000 \nA\u0001j\"\n \tG\r\u0000\u000b\u000b \fA\u0000J\u0004@ \f!\n\u0003@ \u0006 \nA\u0001k\"\u0001A\u0002t\"\u0002j \u0000 \u0002j(\u0002\u00006\u0002\u0000 \nA\u0001K \u0001!\n\r\u0000\u000b\u000b \u000b \fJ\u0004@ \u000b!\n\u0003@ \u0006 \u000b \u0004 \u0003 \nA\u0001k\"\nA\u0002t\"\u0001j(\u0002\u0000A\u0002tj\"\u0002(\u0002\u0000\"\u0005kA\u0002tj \u0000 \u0001j(\u0002\u00006\u0002\u0000 \u0002 \u0005A\u0001k6\u0002\u0000 \n \fJ\r\u0000\u000b\u000b\u000b","import SorterWasm from './sorter.wasm';\nimport SorterWasmNoSIMD from './sorter_no_simd.wasm';\nimport SorterWasmNonShared from './sorter_non_shared.wasm';\nimport SorterWasmNoSIMDNonShared from './sorter_no_simd_non_shared.wasm';\nimport { isIOS, getIOSSemever } from '../Util.js';\nimport { Constants } from '../Constants.js';\n\nfunction sortWorker(self) {\n\n    let wasmInstance;\n    let wasmMemory;\n    let useSharedMemory;\n    let integerBasedSort;\n    let dynamicMode;\n    let splatCount;\n    let indexesToSortOffset;\n    let sortedIndexesOffset;\n    let sceneIndexesOffset;\n    let transformsOffset;\n    let precomputedDistancesOffset;\n    let mappedDistancesOffset;\n    let frequenciesOffset;\n    let centersOffset;\n    let modelViewProjOffset;\n    let countsZero;\n    let sortedIndexesOut;\n    let distanceMapRange;\n    let uploadedSplatCount;\n    let Constants;\n\n    function sort(splatSortCount, splatRenderCount, modelViewProj,\n                  usePrecomputedDistances, copyIndexesToSort, copyPrecomputedDistances, copyTransforms) {\n        const sortStartTime = performance.now();\n\n        if (!useSharedMemory) {\n            const indexesToSort = new Uint32Array(wasmMemory, indexesToSortOffset, copyIndexesToSort.byteLength / Constants.BytesPerInt);\n            indexesToSort.set(copyIndexesToSort);\n            const transforms = new Float32Array(wasmMemory, transformsOffset, copyTransforms.byteLength / Constants.BytesPerFloat);\n            transforms.set(copyTransforms);\n            if (usePrecomputedDistances) {\n                let precomputedDistances;\n                if (integerBasedSort) {\n                    precomputedDistances = new Int32Array(wasmMemory, precomputedDistancesOffset,\n                                                          copyPrecomputedDistances.byteLength / Constants.BytesPerInt);\n                } else {\n                    precomputedDistances = new Float32Array(wasmMemory, precomputedDistancesOffset,\n                                                            copyPrecomputedDistances.byteLength / Constants.BytesPerFloat);\n                }\n                precomputedDistances.set(copyPrecomputedDistances);\n            }\n        }\n\n        if (!countsZero) countsZero = new Uint32Array(distanceMapRange);\n        new Float32Array(wasmMemory, modelViewProjOffset, 16).set(modelViewProj);\n        new Uint32Array(wasmMemory, frequenciesOffset, distanceMapRange).set(countsZero);\n        wasmInstance.exports.sortIndexes(indexesToSortOffset, centersOffset, precomputedDistancesOffset,\n                                         mappedDistancesOffset, frequenciesOffset, modelViewProjOffset,\n                                         sortedIndexesOffset, sceneIndexesOffset, transformsOffset, distanceMapRange,\n                                         splatSortCount, splatRenderCount, splatCount, usePrecomputedDistances, integerBasedSort,\n                                         dynamicMode);\n\n        const sortMessage = {\n            'sortDone': true,\n            'splatSortCount': splatSortCount,\n            'splatRenderCount': splatRenderCount,\n            'sortTime': 0\n        };\n        if (!useSharedMemory) {\n            const sortedIndexes = new Uint32Array(wasmMemory, sortedIndexesOffset, splatRenderCount);\n            if (!sortedIndexesOut || sortedIndexesOut.length < splatRenderCount) {\n                sortedIndexesOut = new Uint32Array(splatRenderCount);\n            }\n            sortedIndexesOut.set(sortedIndexes);\n            sortMessage.sortedIndexes = sortedIndexesOut;\n        }\n        const sortEndTime = performance.now();\n\n        sortMessage.sortTime = sortEndTime - sortStartTime;\n\n        self.postMessage(sortMessage);\n    }\n\n    self.onmessage = (e) => {\n        if (e.data.centers) {\n            centers = e.data.centers;\n            sceneIndexes = e.data.sceneIndexes;\n            if (integerBasedSort) {\n                new Int32Array(wasmMemory, centersOffset + e.data.range.from * Constants.BytesPerInt * 4,\n                               e.data.range.count * 4).set(new Int32Array(centers));\n            } else {\n                new Float32Array(wasmMemory, centersOffset + e.data.range.from * Constants.BytesPerFloat * 4,\n                                 e.data.range.count * 4).set(new Float32Array(centers));\n            }\n            if (dynamicMode) {\n                new Uint32Array(wasmMemory, sceneIndexesOffset + e.data.range.from * 4,\n                                e.data.range.count).set(new Uint32Array(sceneIndexes));\n            }\n            uploadedSplatCount = e.data.range.from + e.data.range.count;\n        } else if (e.data.sort) {\n            const renderCount = Math.min(e.data.sort.splatRenderCount || 0, uploadedSplatCount);\n            const sortCount = Math.min(e.data.sort.splatSortCount || 0, uploadedSplatCount);\n            const usePrecomputedDistances = e.data.sort.usePrecomputedDistances;\n\n            let copyIndexesToSort;\n            let copyPrecomputedDistances;\n            let copyTransforms;\n            if (!useSharedMemory) {\n                copyIndexesToSort = e.data.sort.indexesToSort;\n                copyTransforms = e.data.sort.transforms;\n                if (usePrecomputedDistances) copyPrecomputedDistances = e.data.sort.precomputedDistances;\n            }\n            sort(sortCount, renderCount, e.data.sort.modelViewProj, usePrecomputedDistances,\n                 copyIndexesToSort, copyPrecomputedDistances, copyTransforms);\n        } else if (e.data.init) {\n            // Yep, this is super hacky and gross :(\n            Constants = e.data.init.Constants;\n\n            splatCount = e.data.init.splatCount;\n            useSharedMemory = e.data.init.useSharedMemory;\n            integerBasedSort = e.data.init.integerBasedSort;\n            dynamicMode = e.data.init.dynamicMode;\n            distanceMapRange = e.data.init.distanceMapRange;\n            uploadedSplatCount = 0;\n\n            const CENTERS_BYTES_PER_ENTRY = integerBasedSort ? (Constants.BytesPerInt * 4) : (Constants.BytesPerFloat * 4);\n\n            const sorterWasmBytes = new Uint8Array(e.data.init.sorterWasmBytes);\n\n            const matrixSize = 16 * Constants.BytesPerFloat;\n            const memoryRequiredForIndexesToSort = splatCount * Constants.BytesPerInt;\n            const memoryRequiredForCenters = splatCount * CENTERS_BYTES_PER_ENTRY;\n            const memoryRequiredForModelViewProjectionMatrix = matrixSize;\n            const memoryRequiredForPrecomputedDistances = integerBasedSort ?\n                                                          (splatCount * Constants.BytesPerInt) : (splatCount * Constants.BytesPerFloat);\n            const memoryRequiredForMappedDistances = splatCount * Constants.BytesPerInt;\n            const memoryRequiredForSortedIndexes = splatCount * Constants.BytesPerInt;\n            const memoryRequiredForIntermediateSortBuffers = integerBasedSort ? (distanceMapRange * Constants.BytesPerInt * 2) :\n                                                                                (distanceMapRange * Constants.BytesPerFloat * 2);\n            const memoryRequiredforTransformIndexes = dynamicMode ? (splatCount * Constants.BytesPerInt) : 0;\n            const memoryRequiredforTransforms = dynamicMode ? (Constants.MaxScenes * matrixSize) : 0;\n            const extraMemory = Constants.MemoryPageSize * 32;\n\n            const totalRequiredMemory = memoryRequiredForIndexesToSort +\n                                        memoryRequiredForCenters +\n                                        memoryRequiredForModelViewProjectionMatrix +\n                                        memoryRequiredForPrecomputedDistances +\n                                        memoryRequiredForMappedDistances +\n                                        memoryRequiredForIntermediateSortBuffers +\n                                        memoryRequiredForSortedIndexes +\n                                        memoryRequiredforTransformIndexes +\n                                        memoryRequiredforTransforms +\n                                        extraMemory;\n            const totalPagesRequired = Math.floor(totalRequiredMemory / Constants.MemoryPageSize ) + 1;\n            const sorterWasmImport = {\n                module: {},\n                env: {\n                    memory: new WebAssembly.Memory({\n                        initial: totalPagesRequired,\n                        maximum: totalPagesRequired,\n                        shared: true,\n                    }),\n                }\n            };\n            WebAssembly.compile(sorterWasmBytes)\n            .then((wasmModule) => {\n                return WebAssembly.instantiate(wasmModule, sorterWasmImport);\n            })\n            .then((instance) => {\n                wasmInstance = instance;\n                indexesToSortOffset = 0;\n                centersOffset = indexesToSortOffset + memoryRequiredForIndexesToSort;\n                modelViewProjOffset = centersOffset + memoryRequiredForCenters;\n                precomputedDistancesOffset = modelViewProjOffset + memoryRequiredForModelViewProjectionMatrix;\n                mappedDistancesOffset = precomputedDistancesOffset + memoryRequiredForPrecomputedDistances;\n                frequenciesOffset = mappedDistancesOffset + memoryRequiredForMappedDistances;\n                sortedIndexesOffset = frequenciesOffset + memoryRequiredForIntermediateSortBuffers;\n                sceneIndexesOffset = sortedIndexesOffset + memoryRequiredForSortedIndexes;\n                transformsOffset = sceneIndexesOffset + memoryRequiredforTransformIndexes;\n                wasmMemory = sorterWasmImport.env.memory.buffer;\n                if (useSharedMemory) {\n                    self.postMessage({\n                        'sortSetupPhase1Complete': true,\n                        'indexesToSortBuffer': wasmMemory,\n                        'indexesToSortOffset': indexesToSortOffset,\n                        'sortedIndexesBuffer': wasmMemory,\n                        'sortedIndexesOffset': sortedIndexesOffset,\n                        'precomputedDistancesBuffer': wasmMemory,\n                        'precomputedDistancesOffset': precomputedDistancesOffset,\n                        'transformsBuffer': wasmMemory,\n                        'transformsOffset': transformsOffset\n                    });\n                } else {\n                    self.postMessage({\n                        'sortSetupPhase1Complete': true\n                    });\n                }\n            });\n        }\n    };\n}\n\nexport function createSortWorker(splatCount, useSharedMemory, enableSIMDInSort, integerBasedSort, dynamicMode,\n                                 splatSortDistanceMapPrecision = Constants.DefaultSplatSortDistanceMapPrecision) {\n    const worker = new Worker(\n        URL.createObjectURL(\n            new Blob(['(', sortWorker.toString(), ')(self)'], {\n                type: 'application/javascript',\n            }),\n        ),\n    );\n\n    let sourceWasm = SorterWasm;\n\n    // iOS makes choosing the right WebAssembly configuration tricky :(\n    const iOSSemVer = isIOS() ? getIOSSemever() : null;\n    if (!enableSIMDInSort && !useSharedMemory) {\n        sourceWasm = SorterWasmNoSIMD;\n        // Testing on various devices has shown that even when shared memory is disabled, the WASM module with shared\n        // memory can still be used most of the time -- the exception seems to be iOS devices below 16.4\n        if (iOSSemVer && iOSSemVer.major <= 16 && iOSSemVer.minor < 4) {\n            sourceWasm = SorterWasmNoSIMDNonShared;\n        }\n    } else if (!enableSIMDInSort) {\n        sourceWasm = SorterWasmNoSIMD;\n    } else if (!useSharedMemory) {\n        // Same issue with shared memory as above on iOS devices\n        if (iOSSemVer && iOSSemVer.major <= 16 && iOSSemVer.minor < 4) {\n            sourceWasm = SorterWasmNonShared;\n        }\n    }\n\n    const sorterWasmBinaryString = atob(sourceWasm);\n    const sorterWasmBytes = new Uint8Array(sorterWasmBinaryString.length);\n    for (let i = 0; i < sorterWasmBinaryString.length; i++) {\n        sorterWasmBytes[i] = sorterWasmBinaryString.charCodeAt(i);\n    }\n\n    worker.postMessage({\n        'init': {\n            'sorterWasmBytes': sorterWasmBytes.buffer,\n            'splatCount': splatCount,\n            'useSharedMemory': useSharedMemory,\n            'integerBasedSort': integerBasedSort,\n            'dynamicMode': dynamicMode,\n            'distanceMapRange': 1 << splatSortDistanceMapPrecision,\n            // Super hacky\n            'Constants': {\n                'BytesPerFloat': Constants.BytesPerFloat,\n                'BytesPerInt': Constants.BytesPerInt,\n                'MemoryPageSize': Constants.MemoryPageSize,\n                'MaxScenes': Constants.MaxScenes\n            }\n        }\n    });\n    return worker;\n}\n","export const WebXRMode = {\n    None: 0,\n    VR: 1,\n    AR: 2\n};\n","/*\nCopyright © 2010-2024 three.js authors & Mark Kellogg\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n*/\n\nexport class VRButton {\n\n    static createButton( renderer, sessionInit = {} ) {\n\n        const button = document.createElement( 'button' );\n\n        function showEnterVR( /* device */ ) {\n\n            let currentSession = null;\n\n            async function onSessionStarted( session ) {\n\n                session.addEventListener( 'end', onSessionEnded );\n\n                await renderer.xr.setSession( session );\n                button.textContent = 'EXIT VR';\n\n                currentSession = session;\n\n            }\n\n            function onSessionEnded( /* event */ ) {\n\n                currentSession.removeEventListener( 'end', onSessionEnded );\n\n                button.textContent = 'ENTER VR';\n\n                currentSession = null;\n\n            }\n\n            //\n\n            button.style.display = '';\n\n            button.style.cursor = 'pointer';\n            button.style.left = 'calc(50% - 50px)';\n            button.style.width = '100px';\n\n            button.textContent = 'ENTER VR';\n\n            // WebXR's requestReferenceSpace only works if the corresponding feature\n            // was requested at session creation time. For simplicity, just ask for\n            // the interesting ones as optional features, but be aware that the\n            // requestReferenceSpace call will fail if it turns out to be unavailable.\n            // ('local' is always available for immersive sessions and doesn't need to\n            // be requested separately.)\n\n            const sessionOptions = {\n                ...sessionInit,\n                optionalFeatures: [\n                    'local-floor',\n                    'bounded-floor',\n                    'layers',\n                    ...( sessionInit.optionalFeatures || [] )\n                ],\n            };\n\n            button.onmouseenter = function() {\n\n                button.style.opacity = '1.0';\n\n            };\n\n            button.onmouseleave = function() {\n\n                button.style.opacity = '0.5';\n\n            };\n\n            button.onclick = function() {\n\n                if ( currentSession === null ) {\n\n                    navigator.xr.requestSession( 'immersive-vr', sessionOptions ).then( onSessionStarted );\n\n                } else {\n\n                    currentSession.end();\n\n                    if ( navigator.xr.offerSession !== undefined ) {\n\n                        navigator.xr.offerSession( 'immersive-vr', sessionOptions )\n                            .then( onSessionStarted )\n                            .catch( ( err ) => {\n\n                                console.warn( err );\n\n                            } );\n\n                    }\n\n                }\n\n            };\n\n            if ( navigator.xr.offerSession !== undefined ) {\n\n                navigator.xr.offerSession( 'immersive-vr', sessionOptions )\n                    .then( onSessionStarted )\n                    .catch( ( err ) => {\n\n                        console.warn( err );\n\n                    } );\n\n            }\n\n        }\n\n        function disableButton() {\n\n            button.style.display = '';\n\n            button.style.cursor = 'auto';\n            button.style.left = 'calc(50% - 75px)';\n            button.style.width = '150px';\n\n            button.onmouseenter = null;\n            button.onmouseleave = null;\n\n            button.onclick = null;\n\n        }\n\n        function showWebXRNotFound() {\n\n            disableButton();\n\n            button.textContent = 'VR NOT SUPPORTED';\n\n        }\n\n        function showVRNotAllowed( exception ) {\n\n            disableButton();\n\n            console.warn( 'Exception when trying to call xr.isSessionSupported', exception );\n\n            button.textContent = 'VR NOT ALLOWED';\n\n        }\n\n        function stylizeElement( element ) {\n\n            element.style.position = 'absolute';\n            element.style.bottom = '20px';\n            element.style.padding = '12px 6px';\n            element.style.border = '1px solid #fff';\n            element.style.borderRadius = '4px';\n            element.style.background = 'rgba(0,0,0,0.1)';\n            element.style.color = '#fff';\n            element.style.font = 'normal 13px sans-serif';\n            element.style.textAlign = 'center';\n            element.style.opacity = '0.5';\n            element.style.outline = 'none';\n            element.style.zIndex = '999';\n\n        }\n\n        if ( 'xr' in navigator ) {\n\n            button.id = 'VRButton';\n            button.style.display = 'none';\n\n            stylizeElement( button );\n\n            navigator.xr.isSessionSupported( 'immersive-vr' ).then( function( supported ) {\n\n                supported ? showEnterVR() : showWebXRNotFound();\n\n                if ( supported && VRButton.xrSessionIsGranted ) {\n\n                    button.click();\n\n                }\n\n            } ).catch( showVRNotAllowed );\n\n            return button;\n\n        } else {\n\n            const message = document.createElement( 'a' );\n\n            if ( window.isSecureContext === false ) {\n\n                message.href = document.location.href.replace( /^http:/, 'https:' );\n                message.innerHTML = 'WEBXR NEEDS HTTPS'; // TODO Improve message\n\n            } else {\n\n                message.href = 'https://immersiveweb.dev/';\n                message.innerHTML = 'WEBXR NOT AVAILABLE';\n\n            }\n\n            message.style.left = 'calc(50% - 90px)';\n            message.style.width = '180px';\n            message.style.textDecoration = 'none';\n\n            stylizeElement( message );\n\n            return message;\n\n        }\n\n    }\n\n    static registerSessionGrantedListener() {\n\n        if ( typeof navigator !== 'undefined' && 'xr' in navigator ) {\n\n            // WebXRViewer (based on Firefox) has a bug where addEventListener\n            // throws a silent exception and aborts execution entirely.\n            if ( /WebXRViewer\\//i.test( navigator.userAgent ) ) return;\n\n            navigator.xr.addEventListener( 'sessiongranted', () => {\n\n                VRButton.xrSessionIsGranted = true;\n\n            } );\n\n        }\n\n    }\n\n}\n\nVRButton.xrSessionIsGranted = false;\nVRButton.registerSessionGrantedListener();\n","/*\nCopyright © 2010-2024 three.js authors & Mark Kellogg\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n*/\n\nexport class ARButton {\n\n    static createButton( renderer, sessionInit = {} ) {\n\n        const button = document.createElement( 'button' );\n\n        function showStartAR( /* device */ ) {\n\n            if ( sessionInit.domOverlay === undefined ) {\n\n                const overlay = document.createElement( 'div' );\n                overlay.style.display = 'none';\n                document.body.appendChild( overlay );\n\n                const svg = document.createElementNS( 'http://www.w3.org/2000/svg', 'svg' );\n                svg.setAttribute( 'width', 38 );\n                svg.setAttribute( 'height', 38 );\n                svg.style.position = 'absolute';\n                svg.style.right = '20px';\n                svg.style.top = '20px';\n                svg.addEventListener( 'click', function() {\n\n                    currentSession.end();\n\n                } );\n                overlay.appendChild( svg );\n\n                const path = document.createElementNS( 'http://www.w3.org/2000/svg', 'path' );\n                path.setAttribute( 'd', 'M 12,12 L 28,28 M 28,12 12,28' );\n                path.setAttribute( 'stroke', '#fff' );\n                path.setAttribute( 'stroke-width', 2 );\n                svg.appendChild( path );\n\n                if ( sessionInit.optionalFeatures === undefined ) {\n\n                    sessionInit.optionalFeatures = [];\n\n                }\n\n                sessionInit.optionalFeatures.push( 'dom-overlay' );\n                sessionInit.domOverlay = { root: overlay };\n\n            }\n\n            //\n\n            let currentSession = null;\n\n            async function onSessionStarted( session ) {\n\n                session.addEventListener( 'end', onSessionEnded );\n\n                renderer.xr.setReferenceSpaceType( 'local' );\n\n                await renderer.xr.setSession( session );\n\n                button.textContent = 'STOP AR';\n                sessionInit.domOverlay.root.style.display = '';\n\n                currentSession = session;\n\n            }\n\n            function onSessionEnded( /* event */ ) {\n\n                currentSession.removeEventListener( 'end', onSessionEnded );\n\n                button.textContent = 'START AR';\n                sessionInit.domOverlay.root.style.display = 'none';\n\n                currentSession = null;\n\n            }\n\n            //\n\n            button.style.display = '';\n\n            button.style.cursor = 'pointer';\n            button.style.left = 'calc(50% - 50px)';\n            button.style.width = '100px';\n\n            button.textContent = 'START AR';\n\n            button.onmouseenter = function() {\n\n                button.style.opacity = '1.0';\n\n            };\n\n            button.onmouseleave = function() {\n\n                button.style.opacity = '0.5';\n\n            };\n\n            button.onclick = function() {\n\n                if ( currentSession === null ) {\n\n                    navigator.xr.requestSession( 'immersive-ar', sessionInit ).then( onSessionStarted );\n\n                } else {\n\n                    currentSession.end();\n\n                    if ( navigator.xr.offerSession !== undefined ) {\n\n                        navigator.xr.offerSession( 'immersive-ar', sessionInit )\n                            .then( onSessionStarted )\n                            .catch( ( err ) => {\n\n                                console.warn( err );\n\n                            } );\n\n                    }\n\n                }\n\n            };\n\n            if ( navigator.xr.offerSession !== undefined ) {\n\n                navigator.xr.offerSession( 'immersive-ar', sessionInit )\n                    .then( onSessionStarted )\n                    .catch( ( err ) => {\n\n                        console.warn( err );\n\n                    } );\n\n            }\n\n        }\n\n        function disableButton() {\n\n            button.style.display = '';\n\n            button.style.cursor = 'auto';\n            button.style.left = 'calc(50% - 75px)';\n            button.style.width = '150px';\n\n            button.onmouseenter = null;\n            button.onmouseleave = null;\n\n            button.onclick = null;\n\n        }\n\n        function showARNotSupported() {\n\n            disableButton();\n\n            button.textContent = 'AR NOT SUPPORTED';\n\n        }\n\n        function showARNotAllowed( exception ) {\n\n            disableButton();\n\n            console.warn( 'Exception when trying to call xr.isSessionSupported', exception );\n\n            button.textContent = 'AR NOT ALLOWED';\n\n        }\n\n        function stylizeElement( element ) {\n\n            element.style.position = 'absolute';\n            element.style.bottom = '20px';\n            element.style.padding = '12px 6px';\n            element.style.border = '1px solid #fff';\n            element.style.borderRadius = '4px';\n            element.style.background = 'rgba(0,0,0,0.1)';\n            element.style.color = '#fff';\n            element.style.font = 'normal 13px sans-serif';\n            element.style.textAlign = 'center';\n            element.style.opacity = '0.5';\n            element.style.outline = 'none';\n            element.style.zIndex = '999';\n\n        }\n\n        if ( 'xr' in navigator ) {\n\n            button.id = 'ARButton';\n            button.style.display = 'none';\n\n            stylizeElement( button );\n\n            navigator.xr.isSessionSupported( 'immersive-ar' ).then( function( supported ) {\n\n                supported ? showStartAR() : showARNotSupported();\n\n            } ).catch( showARNotAllowed );\n\n            return button;\n\n        } else {\n\n            const message = document.createElement( 'a' );\n\n            if ( window.isSecureContext === false ) {\n\n                message.href = document.location.href.replace( /^http:/, 'https:' );\n                message.innerHTML = 'WEBXR NEEDS HTTPS'; // TODO Improve message\n\n            } else {\n\n                message.href = 'https://immersiveweb.dev/';\n                message.innerHTML = 'WEBXR NOT AVAILABLE';\n\n            }\n\n            message.style.left = 'calc(50% - 90px)';\n            message.style.width = '180px';\n            message.style.textDecoration = 'none';\n\n            stylizeElement( message );\n\n            return message;\n\n        }\n\n    }\n\n}\n","export const RenderMode = {\n    Always: 0,\n    OnChange: 1,\n    Never: 2\n};\n","import * as THREE from 'three';\nimport { OrbitControls } from './OrbitControls.js';\nimport { PlyLoader } from './loaders/ply/PlyLoader.js';\nimport { SplatLoader } from './loaders/splat/SplatLoader.js';\nimport { KSplatLoader } from './loaders/ksplat/KSplatLoader.js';\nimport { SpzLoader } from './loaders/spz/SpzLoader.js';\nimport { sceneFormatFromPath } from './loaders/Utils.js';\nimport { LoadingSpinner } from './ui/LoadingSpinner.js';\nimport { LoadingProgressBar } from './ui/LoadingProgressBar.js';\nimport { InfoPanel } from './ui/InfoPanel.js';\nimport { SceneHelper } from './SceneHelper.js';\nimport { Raycaster } from './raycaster/Raycaster.js';\nimport { SplatMesh } from './splatmesh/SplatMesh.js';\nimport { createSortWorker } from './worker/SortWorker.js';\nimport { Constants } from './Constants.js';\nimport { getCurrentTime, isIOS, getIOSSemever, clamp } from './Util.js';\nimport { AbortablePromise, AbortedPromiseError } from './AbortablePromise.js';\nimport { SceneFormat } from './loaders/SceneFormat.js';\nimport { WebXRMode } from './webxr/WebXRMode.js';\nimport { VRButton } from './webxr/VRButton.js';\nimport { ARButton } from './webxr/ARButton.js';\nimport { delayedExecute, abortablePromiseWithExtractedComponents } from './Util.js';\nimport { LoaderStatus } from './loaders/LoaderStatus.js';\nimport { DirectLoadError } from './loaders/DirectLoadError.js';\nimport { RenderMode } from './RenderMode.js';\nimport { LogLevel } from './LogLevel.js';\nimport { SceneRevealMode } from './SceneRevealMode.js';\nimport { SplatRenderMode } from './SplatRenderMode.js';\n\nconst THREE_CAMERA_FOV = 50;\nconst MINIMUM_DISTANCE_TO_NEW_FOCAL_POINT = .75;\nconst MIN_SPLAT_COUNT_TO_SHOW_SPLAT_TREE_LOADING_SPINNER = 1500000;\nconst FOCUS_MARKER_FADE_IN_SPEED = 10.0;\nconst FOCUS_MARKER_FADE_OUT_SPEED = 2.5;\nconst CONSECUTIVE_RENDERED_FRAMES_FOR_FPS_CALCULATION = 60;\n\n/**\n * Viewer: Manages the rendering of splat scenes. Manages an instance of SplatMesh as well as a web worker\n * that performs the sort for its splats.\n */\nexport class Viewer {\n\n    constructor(options = {}) {\n\n        // The natural 'up' vector for viewing the scene (only has an effect when used with orbit controls and\n        // when the viewer uses its own camera).\n        if (!options.cameraUp) options.cameraUp = [0, 1, 0];\n        this.cameraUp = new THREE.Vector3().fromArray(options.cameraUp);\n\n        // The camera's initial position (only used when the viewer uses its own camera).\n        if (!options.initialCameraPosition) options.initialCameraPosition = [0, 10, 15];\n        this.initialCameraPosition = new THREE.Vector3().fromArray(options.initialCameraPosition);\n\n        // The initial focal point of the camera and center of the camera's orbit (only used when the viewer uses its own camera).\n        if (!options.initialCameraLookAt) options.initialCameraLookAt = [0, 0, 0];\n        this.initialCameraLookAt = new THREE.Vector3().fromArray(options.initialCameraLookAt);\n\n        // 'dropInMode' is a flag that is used internally to support the usage of the viewer as a Three.js scene object\n        this.dropInMode = options.dropInMode || false;\n\n        // If 'selfDrivenMode' is true, the viewer manages its own update/animation loop via requestAnimationFrame()\n        if (options.selfDrivenMode === undefined || options.selfDrivenMode === null) options.selfDrivenMode = true;\n        this.selfDrivenMode = options.selfDrivenMode && !this.dropInMode;\n        this.selfDrivenUpdateFunc = this.selfDrivenUpdate.bind(this);\n\n        // If 'useBuiltInControls' is true, the viewer will create its own instance of OrbitControls and attach to the camera\n        if (options.useBuiltInControls === undefined) options.useBuiltInControls = true;\n        this.useBuiltInControls = options.useBuiltInControls;\n\n        // parent element of the Three.js renderer canvas\n        this.rootElement = options.rootElement;\n\n        // Tells the viewer to pretend the device pixel ratio is 1, which can boost performance on devices where it is larger,\n        // at a small cost to visual quality\n        this.ignoreDevicePixelRatio = options.ignoreDevicePixelRatio || false;\n        this.devicePixelRatio = this.ignoreDevicePixelRatio ? 1 : (window.devicePixelRatio || 1);\n\n        // Tells the viewer to use 16-bit floating point values when storing splat covariance data in textures, instead of 32-bit\n        this.halfPrecisionCovariancesOnGPU = options.halfPrecisionCovariancesOnGPU || false;\n\n        // If 'threeScene' is valid, it will be rendered by the viewer along with the splat mesh\n        this.threeScene = options.threeScene;\n        // Allows for usage of an external Three.js renderer\n        this.renderer = options.renderer;\n        // Allows for usage of an external Three.js camera\n        this.camera = options.camera;\n\n        // If 'gpuAcceleratedSort' is true, a partially GPU-accelerated approach to sorting splats will be used.\n        // Currently this means pre-computing splat distances from the camera on the GPU\n        this.gpuAcceleratedSort = options.gpuAcceleratedSort || false;\n\n        // if 'integerBasedSort' is true, the integer version of splat centers as well as other values used to calculate\n        // splat distances are used instead of the float version. This speeds up computation, but introduces the possibility of\n        // overflow in larger scenes.\n        if (options.integerBasedSort === undefined || options.integerBasedSort === null) {\n            options.integerBasedSort = true;\n        }\n        this.integerBasedSort = options.integerBasedSort;\n\n        // If 'sharedMemoryForWorkers' is true, a SharedArrayBuffer will be used to communicate with web workers. This method\n        // is faster than copying memory to or from web workers, but comes with security implications as outlined here:\n        // https://web.dev/articles/cross-origin-isolation-guide\n        // If enabled, it requires specific CORS headers to be present in the response from the server that is sent when\n        // loading the application. More information is available in the README.\n        if (options.sharedMemoryForWorkers === undefined || options.sharedMemoryForWorkers === null) options.sharedMemoryForWorkers = true;\n        this.sharedMemoryForWorkers = options.sharedMemoryForWorkers;\n\n        // if 'dynamicScene' is true, it tells the viewer to assume scene elements are not stationary or that the number of splats in the\n        // scene may change. This prevents optimizations that depend on a static scene from being made. Additionally, if 'dynamicScene' is\n        // true it tells the splat mesh to not apply scene tranforms to splat data that is returned by functions like\n        // SplatMesh.getSplatCenter() by default.\n        this.dynamicScene = !!options.dynamicScene;\n\n        // When true, will perform additional steps during rendering to address artifacts caused by the rendering of gaussians at a\n        // substantially different resolution than that at which they were rendered during training. This will only work correctly\n        // for models that were trained using a process that utilizes this compensation calculation. For more details:\n        // https://github.com/nerfstudio-project/gsplat/pull/117\n        // https://github.com/graphdeco-inria/gaussian-splatting/issues/294#issuecomment-1772688093\n        this.antialiased = options.antialiased || false;\n\n        // This constant is added to the projected 2D screen-space splat scales\n        this.kernel2DSize = (options.kernel2DSize === undefined) ? 0.3 : options.kernel2DSize;\n\n        this.webXRMode = options.webXRMode || WebXRMode.None;\n        if (this.webXRMode !== WebXRMode.None) {\n            this.gpuAcceleratedSort = false;\n        }\n        this.webXRActive = false;\n\n        this.webXRSessionInit = options.webXRSessionInit || {};\n\n        // if 'renderMode' is RenderMode.Always, then the viewer will rrender the scene on every update. If it is RenderMode.OnChange,\n        // it will only render when something in the scene has changed.\n        this.renderMode = options.renderMode || RenderMode.Always;\n\n        // SceneRevealMode.Default results in a nice, slow fade-in effect for progressively loaded scenes,\n        // and a fast fade-in for non progressively loaded scenes.\n        // SceneRevealMode.Gradual will force a slow fade-in for all scenes.\n        // SceneRevealMode.Instant will force all loaded scene data to be immediately visible.\n        this.sceneRevealMode = options.sceneRevealMode || SceneRevealMode.Default;\n\n        // Hacky, experimental, non-scientific parameter for tweaking focal length related calculations. For scenes with very\n        // small gaussians, small details, and small dimensions -- increasing this value can help improve visual quality.\n        this.focalAdjustment = options.focalAdjustment || 1.0;\n\n        // Specify the maximum screen-space splat size, can help deal with large splats that get too unwieldy\n        this.maxScreenSpaceSplatSize = options.maxScreenSpaceSplatSize || 1024;\n\n        // The verbosity of console logging\n        this.logLevel = options.logLevel || LogLevel.None;\n\n        // Degree of spherical harmonics to utilize in rendering splats (assuming the data is present in the splat scene).\n        // Valid values are 0 - 2. Default value is 0.\n        this.sphericalHarmonicsDegree = options.sphericalHarmonicsDegree || 0;\n\n        // When true, allows for usage of extra properties and attributes during rendering for effects such as opacity adjustment.\n        // Default is false for performance reasons. These properties are separate from transform properties (scale, rotation, position)\n        // that are enabled by the 'dynamicScene' parameter.\n        this.enableOptionalEffects = options.enableOptionalEffects || false;\n\n        // Enable the usage of SIMD WebAssembly instructions for the splat sort\n        if (options.enableSIMDInSort === undefined || options.enableSIMDInSort === null) options.enableSIMDInSort = true;\n        this.enableSIMDInSort = options.enableSIMDInSort;\n\n        // Level to compress non KSPLAT files when loading them for direct rendering\n        if (options.inMemoryCompressionLevel === undefined || options.inMemoryCompressionLevel === null) {\n            options.inMemoryCompressionLevel = 0;\n        }\n        this.inMemoryCompressionLevel = options.inMemoryCompressionLevel;\n\n        // Reorder splat data in memory after loading is complete to optimize cache utilization. Default is true.\n        // Does not apply if splat scene is progressively loaded.\n        if (options.optimizeSplatData === undefined || options.optimizeSplatData === null) {\n            options.optimizeSplatData = true;\n        }\n        this.optimizeSplatData = options.optimizeSplatData;\n\n        // When true, the intermediate splat data that is the result of decompressing splat bufffer(s) and is used to\n        // populate the data textures will be freed. This will reduces memory usage, but if that data needs to be modified\n        // it will need to be re-populated from the splat buffer(s). Default is false.\n        if (options.freeIntermediateSplatData === undefined || options.freeIntermediateSplatData === null) {\n            options.freeIntermediateSplatData = false;\n        }\n        this.freeIntermediateSplatData = options.freeIntermediateSplatData;\n\n        // It appears that for certain iOS versions, special actions need to be taken with the\n        // usage of SIMD instructions and shared memory\n        if (isIOS()) {\n            const semver = getIOSSemever();\n            if (semver.major < 17) {\n                this.enableSIMDInSort = false;\n            }\n            if (semver.major < 16) {\n                this.sharedMemoryForWorkers = false;\n            }\n        }\n\n        // Tell the viewer how to render the splats\n        if (options.splatRenderMode === undefined || options.splatRenderMode === null) {\n            options.splatRenderMode = SplatRenderMode.ThreeD;\n        }\n        this.splatRenderMode = options.splatRenderMode;\n\n        // Customize the speed at which the scene is revealed\n        this.sceneFadeInRateMultiplier = options.sceneFadeInRateMultiplier || 1.0;\n\n        // Set the range for the depth map for the counting sort used to sort the splats\n        this.splatSortDistanceMapPrecision = options.splatSortDistanceMapPrecision || Constants.DefaultSplatSortDistanceMapPrecision;\n        const maxPrecision = this.integerBasedSort ? 20 : 24;\n        this.splatSortDistanceMapPrecision = clamp(this.splatSortDistanceMapPrecision, 10, maxPrecision);\n\n        this.onSplatMeshChangedCallback = null;\n        this.createSplatMesh();\n\n        this.controls = null;\n        this.perspectiveControls = null;\n        this.orthographicControls = null;\n\n        this.orthographicCamera = null;\n        this.perspectiveCamera = null;\n\n        this.showMeshCursor = false;\n        this.showControlPlane = false;\n        this.showInfo = false;\n\n        this.sceneHelper = null;\n\n        this.sortWorker = null;\n        this.sortRunning = false;\n        this.splatRenderCount = 0;\n        this.splatSortCount = 0;\n        this.lastSplatSortCount = 0;\n        this.sortWorkerIndexesToSort = null;\n        this.sortWorkerSortedIndexes = null;\n        this.sortWorkerPrecomputedDistances = null;\n        this.sortWorkerTransforms = null;\n        this.preSortMessages = [];\n        this.runAfterNextSort = [];\n\n        this.selfDrivenModeRunning = false;\n        this.splatRenderReady = false;\n\n        this.raycaster = new Raycaster();\n\n        this.infoPanel = null;\n\n        this.startInOrthographicMode = false;\n\n        this.currentFPS = 0;\n        this.lastSortTime = 0;\n        this.consecutiveRenderFrames = 0;\n\n        this.previousCameraTarget = new THREE.Vector3();\n        this.nextCameraTarget = new THREE.Vector3();\n\n        this.mousePosition = new THREE.Vector2();\n        this.mouseDownPosition = new THREE.Vector2();\n        this.mouseDownTime = null;\n\n        this.resizeObserver = null;\n        this.mouseMoveListener = null;\n        this.mouseDownListener = null;\n        this.mouseUpListener = null;\n        this.keyDownListener = null;\n\n        this.sortPromise = null;\n        this.sortPromiseResolver = null;\n        this.splatSceneDownloadPromises = {};\n        this.splatSceneDownloadAndBuildPromise = null;\n        this.splatSceneRemovalPromise = null;\n\n        this.loadingSpinner = new LoadingSpinner(null, this.rootElement || document.body);\n        this.loadingSpinner.hide();\n        this.loadingProgressBar = new LoadingProgressBar(this.rootElement || document.body);\n        this.loadingProgressBar.hide();\n        this.infoPanel = new InfoPanel(this.rootElement || document.body);\n        this.infoPanel.hide();\n\n        this.usingExternalCamera = (this.dropInMode || this.camera) ? true : false;\n        this.usingExternalRenderer = (this.dropInMode || this.renderer) ? true : false;\n\n        this.initialized = false;\n        this.disposing = false;\n        this.disposed = false;\n        this.disposePromise = null;\n        if (!this.dropInMode) this.init();\n    }\n\n    createSplatMesh() {\n        this.splatMesh = new SplatMesh(this.splatRenderMode, this.dynamicScene, this.enableOptionalEffects,\n                                       this.halfPrecisionCovariancesOnGPU, this.devicePixelRatio, this.gpuAcceleratedSort,\n                                       this.integerBasedSort, this.antialiased, this.maxScreenSpaceSplatSize, this.logLevel,\n                                       this.sphericalHarmonicsDegree, this.sceneFadeInRateMultiplier, this.kernel2DSize);\n        this.splatMesh.frustumCulled = false;\n        if (this.onSplatMeshChangedCallback) this.onSplatMeshChangedCallback();\n    }\n\n    init() {\n\n        if (this.initialized) return;\n\n        if (!this.rootElement) {\n            if (!this.usingExternalRenderer) {\n                this.rootElement = document.createElement('div');\n                this.rootElement.style.width = '100%';\n                this.rootElement.style.height = '100%';\n                this.rootElement.style.position = 'absolute';\n                document.body.appendChild(this.rootElement);\n            } else {\n                this.rootElement = this.renderer.domElement || document.body;\n            }\n        }\n\n        this.setupCamera();\n        this.setupRenderer();\n        this.setupWebXR(this.webXRSessionInit);\n        this.setupControls();\n        this.setupEventHandlers();\n\n        this.threeScene = this.threeScene || new THREE.Scene();\n        this.sceneHelper = new SceneHelper(this.threeScene);\n        this.sceneHelper.setupMeshCursor();\n        this.sceneHelper.setupFocusMarker();\n        this.sceneHelper.setupControlPlane();\n\n        this.loadingProgressBar.setContainer(this.rootElement);\n        this.loadingSpinner.setContainer(this.rootElement);\n        this.infoPanel.setContainer(this.rootElement);\n\n        this.initialized = true;\n    }\n\n    setupCamera() {\n        if (!this.usingExternalCamera) {\n            const renderDimensions = new THREE.Vector2();\n            this.getRenderDimensions(renderDimensions);\n\n            this.perspectiveCamera = new THREE.PerspectiveCamera(THREE_CAMERA_FOV, renderDimensions.x / renderDimensions.y, 0.1, 1000);\n            this.orthographicCamera = new THREE.OrthographicCamera(renderDimensions.x / -2, renderDimensions.x / 2,\n                                                                   renderDimensions.y / 2, renderDimensions.y / -2, 0.1, 1000 );\n            this.camera = this.startInOrthographicMode ? this.orthographicCamera : this.perspectiveCamera;\n            this.camera.position.copy(this.initialCameraPosition);\n            this.camera.up.copy(this.cameraUp).normalize();\n            this.camera.lookAt(this.initialCameraLookAt);\n        }\n    }\n\n    setupRenderer() {\n        if (!this.usingExternalRenderer) {\n            const renderDimensions = new THREE.Vector2();\n            this.getRenderDimensions(renderDimensions);\n\n            this.renderer = new THREE.WebGLRenderer({\n                antialias: false,\n                precision: 'highp'\n            });\n            this.renderer.setPixelRatio(this.devicePixelRatio);\n            this.renderer.autoClear = true;\n            this.renderer.setClearColor(new THREE.Color( 0x000000 ), 0.0);\n            this.renderer.setSize(renderDimensions.x, renderDimensions.y);\n\n            this.resizeObserver = new ResizeObserver(() => {\n                this.getRenderDimensions(renderDimensions);\n                this.renderer.setSize(renderDimensions.x, renderDimensions.y);\n                this.forceRenderNextFrame();\n            });\n            this.resizeObserver.observe(this.rootElement);\n            this.rootElement.appendChild(this.renderer.domElement);\n        }\n\n    }\n\n    setupWebXR(webXRSessionInit) {\n        if (this.webXRMode) {\n            if (this.webXRMode === WebXRMode.VR) {\n                this.rootElement.appendChild(VRButton.createButton(this.renderer, webXRSessionInit));\n            } else if (this.webXRMode === WebXRMode.AR) {\n                this.rootElement.appendChild(ARButton.createButton(this.renderer, webXRSessionInit));\n            }\n            this.renderer.xr.addEventListener('sessionstart', (e) => {\n                this.webXRActive = true;\n            });\n            this.renderer.xr.addEventListener('sessionend', (e) => {\n                this.webXRActive = false;\n            });\n            this.renderer.xr.enabled = true;\n            this.camera.position.copy(this.initialCameraPosition);\n            this.camera.up.copy(this.cameraUp).normalize();\n            this.camera.lookAt(this.initialCameraLookAt);\n        }\n    }\n\n    setupControls() {\n        if (this.useBuiltInControls && this.webXRMode === WebXRMode.None) {\n            if (!this.usingExternalCamera) {\n                this.perspectiveControls = new OrbitControls(this.perspectiveCamera, this.renderer.domElement);\n                this.orthographicControls = new OrbitControls(this.orthographicCamera, this.renderer.domElement);\n            } else {\n                if (this.camera.isOrthographicCamera) {\n                    this.orthographicControls = new OrbitControls(this.camera, this.renderer.domElement);\n                } else {\n                    this.perspectiveControls = new OrbitControls(this.camera, this.renderer.domElement);\n                }\n            }\n            for (let controls of [this.orthographicControls, this.perspectiveControls,]) {\n                if (controls) {\n                    controls.listenToKeyEvents(window);\n                    controls.rotateSpeed = 0.5;\n                    controls.maxPolarAngle = Math.PI * .75;\n                    controls.minPolarAngle = 0.1;\n                    controls.enableDamping = true;\n                    controls.dampingFactor = 0.05;\n                    controls.target.copy(this.initialCameraLookAt);\n                    controls.update();\n                }\n            }\n            this.controls = this.camera.isOrthographicCamera ? this.orthographicControls : this.perspectiveControls;\n            this.controls.update();\n        }\n    }\n\n    setupEventHandlers() {\n        if (this.useBuiltInControls && this.webXRMode === WebXRMode.None) {\n            this.mouseMoveListener = this.onMouseMove.bind(this);\n            this.renderer.domElement.addEventListener('pointermove', this.mouseMoveListener, false);\n            this.mouseDownListener = this.onMouseDown.bind(this);\n            this.renderer.domElement.addEventListener('pointerdown', this.mouseDownListener, false);\n            this.mouseUpListener = this.onMouseUp.bind(this);\n            this.renderer.domElement.addEventListener('pointerup', this.mouseUpListener, false);\n            this.keyDownListener = this.onKeyDown.bind(this);\n            window.addEventListener('keydown', this.keyDownListener, false);\n        }\n    }\n\n    removeEventHandlers() {\n        if (this.useBuiltInControls) {\n            this.renderer.domElement.removeEventListener('pointermove', this.mouseMoveListener);\n            this.mouseMoveListener = null;\n            this.renderer.domElement.removeEventListener('pointerdown', this.mouseDownListener);\n            this.mouseDownListener = null;\n            this.renderer.domElement.removeEventListener('pointerup', this.mouseUpListener);\n            this.mouseUpListener = null;\n            window.removeEventListener('keydown', this.keyDownListener);\n            this.keyDownListener = null;\n        }\n    }\n\n    setRenderMode(renderMode) {\n        this.renderMode = renderMode;\n    }\n\n    setActiveSphericalHarmonicsDegrees(activeSphericalHarmonicsDegrees) {\n        this.splatMesh.material.uniforms.sphericalHarmonicsDegree.value = activeSphericalHarmonicsDegrees;\n        this.splatMesh.material.uniformsNeedUpdate = true;\n    }\n\n    onSplatMeshChanged(callback) {\n        this.onSplatMeshChangedCallback = callback;\n    }\n\n    onKeyDown = function() {\n\n        const forward = new THREE.Vector3();\n        const tempMatrixLeft = new THREE.Matrix4();\n        const tempMatrixRight = new THREE.Matrix4();\n\n        return function(e) {\n            forward.set(0, 0, -1);\n            forward.transformDirection(this.camera.matrixWorld);\n            tempMatrixLeft.makeRotationAxis(forward, Math.PI / 128);\n            tempMatrixRight.makeRotationAxis(forward, -Math.PI / 128);\n            switch (e.code) {\n                case 'KeyG':\n                    this.focalAdjustment += 0.02;\n                    this.forceRenderNextFrame();\n                break;\n                case 'KeyF':\n                    this.focalAdjustment -= 0.02;\n                    this.forceRenderNextFrame();\n                break;\n                case 'ArrowLeft':\n                    this.camera.up.transformDirection(tempMatrixLeft);\n                break;\n                case 'ArrowRight':\n                    this.camera.up.transformDirection(tempMatrixRight);\n                break;\n                case 'KeyC':\n                    this.showMeshCursor = !this.showMeshCursor;\n                break;\n                case 'KeyU':\n                    this.showControlPlane = !this.showControlPlane;\n                break;\n                case 'KeyI':\n                    this.showInfo = !this.showInfo;\n                    if (this.showInfo) {\n                        this.infoPanel.show();\n                    } else {\n                        this.infoPanel.hide();\n                    }\n                break;\n                case 'KeyO':\n                    if (!this.usingExternalCamera) {\n                        this.setOrthographicMode(!this.camera.isOrthographicCamera);\n                    }\n                break;\n                case 'KeyP':\n                    if (!this.usingExternalCamera) {\n                        this.splatMesh.setPointCloudModeEnabled(!this.splatMesh.getPointCloudModeEnabled());\n                    }\n                break;\n                case 'Equal':\n                    if (!this.usingExternalCamera) {\n                        this.splatMesh.setSplatScale(this.splatMesh.getSplatScale() + 0.05);\n                    }\n                break;\n                case 'Minus':\n                    if (!this.usingExternalCamera) {\n                        this.splatMesh.setSplatScale(Math.max(this.splatMesh.getSplatScale() - 0.05, 0.0));\n                    }\n                break;\n            }\n        };\n\n    }();\n\n    onMouseMove(mouse) {\n        this.mousePosition.set(mouse.offsetX, mouse.offsetY);\n    }\n\n    onMouseDown() {\n        this.mouseDownPosition.copy(this.mousePosition);\n        this.mouseDownTime = getCurrentTime();\n    }\n\n    onMouseUp = function() {\n\n        const clickOffset = new THREE.Vector2();\n\n        return function(mouse) {\n            clickOffset.copy(this.mousePosition).sub(this.mouseDownPosition);\n            const mouseUpTime = getCurrentTime();\n            const wasClick = mouseUpTime - this.mouseDownTime < 0.5 && clickOffset.length() < 2;\n            if (wasClick) {\n                this.onMouseClick(mouse);\n            }\n        };\n\n    }();\n\n    onMouseClick(mouse) {\n        this.mousePosition.set(mouse.offsetX, mouse.offsetY);\n        this.checkForFocalPointChange();\n    }\n\n    checkForFocalPointChange = function() {\n\n        const renderDimensions = new THREE.Vector2();\n        const toNewFocalPoint = new THREE.Vector3();\n        const outHits = [];\n\n        return function() {\n            if (!this.transitioningCameraTarget) {\n                this.getRenderDimensions(renderDimensions);\n                outHits.length = 0;\n                this.raycaster.setFromCameraAndScreenPosition(this.camera, this.mousePosition, renderDimensions);\n                this.raycaster.intersectSplatMesh(this.splatMesh, outHits);\n                if (outHits.length > 0) {\n                    const hit = outHits[0];\n                    const intersectionPoint = hit.origin;\n                    toNewFocalPoint.copy(intersectionPoint).sub(this.camera.position);\n                    if (toNewFocalPoint.length() > MINIMUM_DISTANCE_TO_NEW_FOCAL_POINT) {\n                        this.previousCameraTarget.copy(this.controls.target);\n                        this.nextCameraTarget.copy(intersectionPoint);\n                        this.transitioningCameraTarget = true;\n                        this.transitioningCameraTargetStartTime = getCurrentTime();\n                    }\n                }\n            }\n        };\n\n    }();\n\n    getRenderDimensions(outDimensions) {\n        if (this.rootElement) {\n            outDimensions.x = this.rootElement.offsetWidth;\n            outDimensions.y = this.rootElement.offsetHeight;\n        } else {\n            this.renderer.getSize(outDimensions);\n        }\n    }\n\n    setOrthographicMode(orthographicMode) {\n        if (orthographicMode === this.camera.isOrthographicCamera) return;\n        const fromCamera = this.camera;\n        const toCamera = orthographicMode ? this.orthographicCamera : this.perspectiveCamera;\n        toCamera.position.copy(fromCamera.position);\n        toCamera.up.copy(fromCamera.up);\n        toCamera.rotation.copy(fromCamera.rotation);\n        toCamera.quaternion.copy(fromCamera.quaternion);\n        toCamera.matrix.copy(fromCamera.matrix);\n        this.camera = toCamera;\n\n        if (this.controls) {\n\n            const resetControls = (controls) => {\n                controls.saveState();\n                controls.reset();\n            };\n\n            const fromControls = this.controls;\n            const toControls = orthographicMode ? this.orthographicControls : this.perspectiveControls;\n\n            resetControls(toControls);\n            resetControls(fromControls);\n\n            toControls.target.copy(fromControls.target);\n            if (orthographicMode) {\n                Viewer.setCameraZoomFromPosition(toCamera, fromCamera, fromControls);\n            } else {\n                Viewer.setCameraPositionFromZoom(toCamera, fromCamera, toControls);\n            }\n            this.controls = toControls;\n            this.camera.lookAt(this.controls.target);\n        }\n    }\n\n    static setCameraPositionFromZoom = function() {\n\n        const tempVector = new THREE.Vector3();\n\n        return function(positionCamera, zoomedCamera, controls) {\n            const toLookAtDistance = 1 / (zoomedCamera.zoom * 0.001);\n            tempVector.copy(controls.target).sub(positionCamera.position).normalize().multiplyScalar(toLookAtDistance).negate();\n            positionCamera.position.copy(controls.target).add(tempVector);\n        };\n\n    }();\n\n\n    static setCameraZoomFromPosition = function() {\n\n        const tempVector = new THREE.Vector3();\n\n        return function(zoomCamera, positionZamera, controls) {\n            const toLookAtDistance = tempVector.copy(controls.target).sub(positionZamera.position).length();\n            zoomCamera.zoom = 1 / (toLookAtDistance * .001);\n        };\n\n    }();\n\n    updateSplatMesh = function() {\n\n        const renderDimensions = new THREE.Vector2();\n\n        return function() {\n            if (!this.splatMesh) return;\n            const splatCount = this.splatMesh.getSplatCount();\n            if (splatCount > 0) {\n                this.splatMesh.updateVisibleRegionFadeDistance(this.sceneRevealMode);\n                this.splatMesh.updateTransforms();\n                this.getRenderDimensions(renderDimensions);\n                const focalLengthX = this.camera.projectionMatrix.elements[0] * 0.5 *\n                                     this.devicePixelRatio * renderDimensions.x;\n                const focalLengthY = this.camera.projectionMatrix.elements[5] * 0.5 *\n                                     this.devicePixelRatio * renderDimensions.y;\n\n                const focalMultiplier = this.camera.isOrthographicCamera ? (1.0 / this.devicePixelRatio) : 1.0;\n                const focalAdjustment = this.focalAdjustment * focalMultiplier;\n                const inverseFocalAdjustment = 1.0 / focalAdjustment;\n\n                this.adjustForWebXRStereo(renderDimensions);\n                this.splatMesh.updateUniforms(renderDimensions, focalLengthX * focalAdjustment, focalLengthY * focalAdjustment,\n                                              this.camera.isOrthographicCamera, this.camera.zoom || 1.0, inverseFocalAdjustment);\n            }\n        };\n\n    }();\n\n    adjustForWebXRStereo(renderDimensions) {\n        // TODO: Figure out a less hacky way to determine if stereo rendering is active\n        if (this.camera && this.webXRActive) {\n            const xrCamera = this.renderer.xr.getCamera();\n            const xrCameraProj00 = xrCamera.projectionMatrix.elements[0];\n            const cameraProj00 = this.camera.projectionMatrix.elements[0];\n            renderDimensions.x *= (cameraProj00 / xrCameraProj00);\n        }\n    }\n\n    isLoadingOrUnloading() {\n        return Object.keys(this.splatSceneDownloadPromises).length > 0 || this.splatSceneDownloadAndBuildPromise !== null ||\n                           this.splatSceneRemovalPromise !== null;\n    }\n\n    isDisposingOrDisposed() {\n        return this.disposing || this.disposed;\n    }\n\n    addSplatSceneDownloadPromise(promise) {\n        this.splatSceneDownloadPromises[promise.id] = promise;\n    }\n\n    removeSplatSceneDownloadPromise(promise) {\n        delete this.splatSceneDownloadPromises[promise.id];\n    }\n\n    setSplatSceneDownloadAndBuildPromise(promise) {\n        this.splatSceneDownloadAndBuildPromise = promise;\n    }\n\n    clearSplatSceneDownloadAndBuildPromise() {\n        this.splatSceneDownloadAndBuildPromise = null;\n    }\n\n    /**\n     * Add a splat scene to the viewer and display any loading UI if appropriate.\n     * @param {string} path Path to splat scene to be loaded\n     * @param {object} options {\n     *\n     *         splatAlphaRemovalThreshold: Ignore any splats with an alpha less than the specified\n     *                                     value (valid range: 0 - 255), defaults to 1\n     *\n     *         showLoadingUI:         Display a loading spinner while the scene is loading, defaults to true\n     *\n     *         position (Array<number>):   Position of the scene, acts as an offset from its default position, defaults to [0, 0, 0]\n     *\n     *         rotation (Array<number>):   Rotation of the scene represented as a quaternion, defaults to [0, 0, 0, 1]\n     *\n     *         scale (Array<number>):      Scene's scale, defaults to [1, 1, 1]\n     *\n     *         onProgress:                 Function to be called as file data are received, or other processing occurs\n     *\n     *         headers:                    Optional HTTP headers to be sent along with splat requests\n     * }\n     * @return {AbortablePromise}\n     */\n    addSplatScene(path, options = {}) {\n\n        if (this.isLoadingOrUnloading()) {\n            throw new Error('Cannot add splat scene while another load or unload is already in progress.');\n        }\n\n        if (this.isDisposingOrDisposed()) {\n            throw new Error('Cannot add splat scene after dispose() is called.');\n        }\n\n        if (options.progressiveLoad && this.splatMesh.scenes && this.splatMesh.scenes.length > 0) {\n            console.log('addSplatScene(): \"progressiveLoad\" option ignore because there are multiple splat scenes');\n            options.progressiveLoad = false;\n        }\n\n        const format = (options.format !== undefined && options.format !== null) ? options.format : sceneFormatFromPath(path);\n        const progressiveLoad = Viewer.isProgressivelyLoadable(format) && options.progressiveLoad;\n        const showLoadingUI = (options.showLoadingUI !== undefined && options.showLoadingUI !== null) ? options.showLoadingUI : true;\n\n        let loadingUITaskId = null;\n        if (showLoadingUI) {\n            this.loadingSpinner.removeAllTasks();\n            loadingUITaskId = this.loadingSpinner.addTask('Downloading...');\n        }\n        const hideLoadingUI = () => {\n            this.loadingProgressBar.hide();\n            this.loadingSpinner.removeAllTasks();\n        };\n\n        const onProgressUIUpdate = (percentComplete, percentCompleteLabel, loaderStatus) => {\n            if (showLoadingUI) {\n                if (loaderStatus === LoaderStatus.Downloading) {\n                    if (percentComplete == 100) {\n                        this.loadingSpinner.setMessageForTask(loadingUITaskId, 'Download complete!');\n                    } else {\n                        if (progressiveLoad) {\n                            this.loadingSpinner.setMessageForTask(loadingUITaskId, 'Downloading splats...');\n                        } else {\n                            const suffix = percentCompleteLabel ? `: ${percentCompleteLabel}` : `...`;\n                            this.loadingSpinner.setMessageForTask(loadingUITaskId, `Downloading${suffix}`);\n                        }\n                    }\n                } else if (loaderStatus === LoaderStatus.Processing) {\n                    this.loadingSpinner.setMessageForTask(loadingUITaskId, 'Processing splats...');\n                }\n            }\n        };\n\n        let downloadDone = false;\n        let downloadedPercentage = 0;\n        const splatBuffersAddedUIUpdate = (firstBuild, finalBuild) => {\n            if (showLoadingUI) {\n                if (firstBuild && progressiveLoad || finalBuild && !progressiveLoad) {\n                    this.loadingSpinner.removeTask(loadingUITaskId);\n                    if (!finalBuild && !downloadDone) this.loadingProgressBar.show();\n                }\n                if (progressiveLoad) {\n                    if (finalBuild) {\n                        downloadDone = true;\n                        this.loadingProgressBar.hide();\n                    } else {\n                        this.loadingProgressBar.setProgress(downloadedPercentage);\n                    }\n                }\n            }\n        };\n\n        const onProgress = (percentComplete, percentCompleteLabel, loaderStatus) => {\n            downloadedPercentage = percentComplete;\n            onProgressUIUpdate(percentComplete, percentCompleteLabel, loaderStatus);\n            if (options.onProgress) options.onProgress(percentComplete, percentCompleteLabel, loaderStatus);\n        };\n\n        const buildSection = (splatBuffer, firstBuild, finalBuild) => {\n            if (!progressiveLoad && options.onProgress) options.onProgress(0, '0%', LoaderStatus.Processing);\n            const addSplatBufferOptions = {\n                'rotation': options.rotation || options.orientation,\n                'position': options.position,\n                'scale': options.scale,\n                'splatAlphaRemovalThreshold': options.splatAlphaRemovalThreshold,\n            };\n            return this.addSplatBuffers([splatBuffer], [addSplatBufferOptions],\n                                         finalBuild, firstBuild && showLoadingUI, showLoadingUI,\n                                         progressiveLoad, progressiveLoad).then(() => {\n                if (!progressiveLoad && options.onProgress) options.onProgress(100, '100%', LoaderStatus.Processing);\n                splatBuffersAddedUIUpdate(firstBuild, finalBuild);\n            });\n        };\n\n        const loadFunc = progressiveLoad ? this.downloadAndBuildSingleSplatSceneProgressiveLoad.bind(this) :\n                                           this.downloadAndBuildSingleSplatSceneStandardLoad.bind(this);\n        return loadFunc(path, format, options.splatAlphaRemovalThreshold, buildSection.bind(this),\n                        onProgress, hideLoadingUI.bind(this), options.headers);\n    }\n\n    /**\n     * Download a single splat scene, convert to splat buffer and then rebuild the viewer's splat mesh\n     * by calling 'buildFunc' -- all before displaying the scene. Also sets/clears relevant instance synchronization objects,\n     * and calls appropriate functions on success or failure.\n     * @param {string} path Path to splat scene to be loaded\n     * @param {SceneFormat} format Format of the splat scene file\n     * @param {number} splatAlphaRemovalThreshold Ignore any splats with an alpha less than the specified value (valid range: 0 - 255)\n     * @param {function} buildFunc Function to build the viewer's splat mesh with the downloaded splat buffer\n     * @param {function} onProgress Function to be called as file data are received, or other processing occurs\n     * @param {function} onException Function to be called when exception occurs\n     * @param {object} headers Optional HTTP headers to pass to use for downloading splat scene\n     * @return {AbortablePromise}\n     */\n    downloadAndBuildSingleSplatSceneStandardLoad(path, format, splatAlphaRemovalThreshold, buildFunc, onProgress, onException, headers) {\n\n        const downloadPromise = this.downloadSplatSceneToSplatBuffer(path, splatAlphaRemovalThreshold, onProgress, false,\n                                                                     undefined, format, headers);\n        const downloadAndBuildPromise = abortablePromiseWithExtractedComponents(downloadPromise.abortHandler);\n\n        downloadPromise.then((splatBuffer) => {\n            this.removeSplatSceneDownloadPromise(downloadPromise);\n            return buildFunc(splatBuffer, true, true).then(() => {\n                downloadAndBuildPromise.resolve();\n                this.clearSplatSceneDownloadAndBuildPromise();\n            });\n        })\n        .catch((e) => {\n            if (onException) onException();\n            this.clearSplatSceneDownloadAndBuildPromise();\n            this.removeSplatSceneDownloadPromise(downloadPromise);\n            downloadAndBuildPromise.reject(this.updateError(e, `Viewer::addSplatScene -> Could not load file ${path}`));\n        });\n\n        this.addSplatSceneDownloadPromise(downloadPromise);\n        this.setSplatSceneDownloadAndBuildPromise(downloadAndBuildPromise.promise);\n\n        return downloadAndBuildPromise.promise;\n    }\n\n    /**\n     * Download a single splat scene and convert to splat buffer in a progressive manner, allowing rendering as the file downloads.\n     * As each section is downloaded, the viewer's splat mesh is rebuilt by calling 'buildFunc'\n     * Also sets/clears relevant instance synchronization objects, and calls appropriate functions on success or failure.\n     * @param {string} path Path to splat scene to be loaded\n     * @param {SceneFormat} format Format of the splat scene file\n     * @param {number} splatAlphaRemovalThreshold Ignore any splats with an alpha less than the specified value (valid range: 0 - 255)\n     * @param {function} buildFunc Function to rebuild the viewer's splat mesh after a new splat buffer section is downloaded\n     * @param {function} onDownloadProgress Function to be called as file data are received\n     * @param {function} onDownloadException Function to be called when exception occurs at any point during the full download\n     * @param {object} headers Optional HTTP headers to pass to use for downloading splat scene\n     * @return {AbortablePromise}\n     */\n    downloadAndBuildSingleSplatSceneProgressiveLoad(path, format, splatAlphaRemovalThreshold, buildFunc,\n                                                    onDownloadProgress, onDownloadException, headers) {\n        let progressiveLoadedSectionBuildCount = 0;\n        let progressiveLoadedSectionBuilding = false;\n        const queuedProgressiveLoadSectionBuilds = [];\n\n        const checkAndBuildProgressiveLoadSections = () => {\n            if (queuedProgressiveLoadSectionBuilds.length > 0 &&\n                !progressiveLoadedSectionBuilding &&\n                !this.isDisposingOrDisposed()) {\n                progressiveLoadedSectionBuilding = true;\n                const queuedBuild = queuedProgressiveLoadSectionBuilds.shift();\n                buildFunc(queuedBuild.splatBuffer, queuedBuild.firstBuild, queuedBuild.finalBuild)\n                .then(() => {\n                    progressiveLoadedSectionBuilding = false;\n                    if (queuedBuild.firstBuild) {\n                        progressiveLoadFirstSectionBuildPromise.resolve();\n                    } else if (queuedBuild.finalBuild) {\n                        splatSceneDownloadAndBuildPromise.resolve();\n                        this.clearSplatSceneDownloadAndBuildPromise();\n                    }\n                    if (queuedProgressiveLoadSectionBuilds.length > 0) {\n                        delayedExecute(() => checkAndBuildProgressiveLoadSections());\n                    }\n                });\n            }\n        };\n\n        const onProgressiveLoadSectionProgress = (splatBuffer, finalBuild) => {\n            if (!this.isDisposingOrDisposed()) {\n                if (finalBuild || queuedProgressiveLoadSectionBuilds.length === 0 ||\n                    splatBuffer.getSplatCount() > queuedProgressiveLoadSectionBuilds[0].splatBuffer.getSplatCount()) {\n                    queuedProgressiveLoadSectionBuilds.push({\n                        splatBuffer,\n                        firstBuild: progressiveLoadedSectionBuildCount === 0,\n                        finalBuild\n                    });\n                    progressiveLoadedSectionBuildCount++;\n                    checkAndBuildProgressiveLoadSections();\n                }\n            }\n        };\n\n        const splatSceneDownloadPromise = this.downloadSplatSceneToSplatBuffer(path, splatAlphaRemovalThreshold, onDownloadProgress, true,\n                                                                               onProgressiveLoadSectionProgress, format, headers);\n\n        const progressiveLoadFirstSectionBuildPromise = abortablePromiseWithExtractedComponents(splatSceneDownloadPromise.abortHandler);\n        const splatSceneDownloadAndBuildPromise = abortablePromiseWithExtractedComponents();\n\n        this.addSplatSceneDownloadPromise(splatSceneDownloadPromise);\n        this.setSplatSceneDownloadAndBuildPromise(splatSceneDownloadAndBuildPromise.promise);\n\n        splatSceneDownloadPromise.then(() => {\n            this.removeSplatSceneDownloadPromise(splatSceneDownloadPromise);\n        })\n        .catch((e) => {\n            this.clearSplatSceneDownloadAndBuildPromise();\n            this.removeSplatSceneDownloadPromise(splatSceneDownloadPromise);\n            const error = this.updateError(e, `Viewer::addSplatScene -> Could not load one or more scenes`);\n            progressiveLoadFirstSectionBuildPromise.reject(error);\n            if (onDownloadException) onDownloadException(error);\n        });\n\n        return progressiveLoadFirstSectionBuildPromise.promise;\n    }\n\n    /**\n     * Add multiple splat scenes to the viewer and display any loading UI if appropriate.\n     * @param {Array<object>} sceneOptions Array of per-scene options: {\n     *\n     *         path: Path to splat scene to be loaded\n     *\n     *         splatAlphaRemovalThreshold: Ignore any splats with an alpha less than the specified\n     *                                     value (valid range: 0 - 255), defaults to 1\n     *\n     *         position (Array<number>):   Position of the scene, acts as an offset from its default position, defaults to [0, 0, 0]\n     *\n     *         rotation (Array<number>):   Rotation of the scene represented as a quaternion, defaults to [0, 0, 0, 1]\n     *\n     *         scale (Array<number>):      Scene's scale, defaults to [1, 1, 1]\n     *\n     *         headers:                    Optional HTTP headers to be sent along with splat requests\n     *\n     *         format (SceneFormat)        Optional, the format of the scene data (.ply, .ksplat, .splat). If not present, the\n     *                                     file extension in 'path' will be used to determine the format (if it is present)\n     * }\n     * @param {boolean} showLoadingUI Display a loading spinner while the scene is loading, defaults to true\n     * @param {function} onProgress Function to be called as file data are received\n     * @return {AbortablePromise}\n     */\n    addSplatScenes(sceneOptions, showLoadingUI = true, onProgress = undefined) {\n\n        if (this.isLoadingOrUnloading()) {\n            throw new Error('Cannot add splat scene while another load or unload is already in progress.');\n        }\n\n        if (this.isDisposingOrDisposed()) {\n            throw new Error('Cannot add splat scene after dispose() is called.');\n        }\n\n        const fileCount = sceneOptions.length;\n        const percentComplete = [];\n\n        let loadingUITaskId;\n        if (showLoadingUI) {\n            this.loadingSpinner.removeAllTasks();\n            loadingUITaskId = this.loadingSpinner.addTask('Downloading...');\n        }\n\n        const onLoadProgress = (fileIndex, percent, percentLabel, loaderStatus) => {\n            percentComplete[fileIndex] = percent;\n            let totalPercent = 0;\n            for (let i = 0; i < fileCount; i++) totalPercent += percentComplete[i] || 0;\n            totalPercent = totalPercent / fileCount;\n            percentLabel = `${totalPercent.toFixed(2)}%`;\n            if (showLoadingUI) {\n                if (loaderStatus === LoaderStatus.Downloading) {\n                    this.loadingSpinner.setMessageForTask(loadingUITaskId, totalPercent == 100 ?\n                                                          `Download complete!` : `Downloading: ${percentLabel}`);\n                }\n            }\n            if (onProgress) onProgress(totalPercent, percentLabel, loaderStatus);\n        };\n\n        const baseDownloadPromises = [];\n        const nativeDownloadPromises = [];\n        for (let i = 0; i < sceneOptions.length; i++) {\n            const options = sceneOptions[i];\n            const format = (options.format !== undefined && options.format !== null) ? options.format : sceneFormatFromPath(options.path);\n            const baseDownloadPromise = this.downloadSplatSceneToSplatBuffer(options.path, options.splatAlphaRemovalThreshold,\n                                                                             onLoadProgress.bind(this, i), false, undefined,\n                                                                             format, options.headers);\n            baseDownloadPromises.push(baseDownloadPromise);\n            nativeDownloadPromises.push(baseDownloadPromise.promise);\n        }\n\n        const downloadAndBuildPromise = new AbortablePromise((resolve, reject) => {\n            Promise.all(nativeDownloadPromises)\n            .then((splatBuffers) => {\n                if (showLoadingUI) this.loadingSpinner.removeTask(loadingUITaskId);\n                if (onProgress) onProgress(0, '0%', LoaderStatus.Processing);\n                this.addSplatBuffers(splatBuffers, sceneOptions, true, showLoadingUI, showLoadingUI, false, false).then(() => {\n                    if (onProgress) onProgress(100, '100%', LoaderStatus.Processing);\n                    this.clearSplatSceneDownloadAndBuildPromise();\n                    resolve();\n                });\n            })\n            .catch((e) => {\n                if (showLoadingUI) this.loadingSpinner.removeTask(loadingUITaskId);\n                this.clearSplatSceneDownloadAndBuildPromise();\n                reject(this.updateError(e, `Viewer::addSplatScenes -> Could not load one or more splat scenes.`));\n            })\n            .finally(() => {\n                this.removeSplatSceneDownloadPromise(downloadAndBuildPromise);\n            });\n        }, (reason) => {\n            for (let baseDownloadPromise of baseDownloadPromises) {\n                baseDownloadPromise.abort(reason);\n            }\n        });\n        this.addSplatSceneDownloadPromise(downloadAndBuildPromise);\n        this.setSplatSceneDownloadAndBuildPromise(downloadAndBuildPromise);\n        return downloadAndBuildPromise;\n    }\n\n    /**\n     * Download a splat scene and convert to SplatBuffer instance.\n     * @param {string} path Path to splat scene to be loaded\n     * @param {number} splatAlphaRemovalThreshold Ignore any splats with an alpha less than the specified\n     *                                            value (valid range: 0 - 255), defaults to 1\n     *\n     * @param {function} onProgress Function to be called as file data are received\n     * @param {boolean} progressiveBuild Construct file sections into splat buffers as they are downloaded\n     * @param {function} onSectionBuilt Function to be called when new section is added to the file\n     * @param {string} format File format of the scene\n     * @param {object} headers Optional HTTP headers to pass to use for downloading splat scene\n     * @return {AbortablePromise}\n     */\n    downloadSplatSceneToSplatBuffer(path, splatAlphaRemovalThreshold = 1, onProgress = undefined,\n                                    progressiveBuild = false, onSectionBuilt = undefined, format, headers) {\n        try {\n            if (format === SceneFormat.Splat || format === SceneFormat.KSplat || format === SceneFormat.Ply) {\n                const optimizeSplatData = progressiveBuild ? false : this.optimizeSplatData;\n                if (format === SceneFormat.Splat) {\n                    return SplatLoader.loadFromURL(path, onProgress, progressiveBuild, onSectionBuilt, splatAlphaRemovalThreshold,\n                                                   this.inMemoryCompressionLevel, optimizeSplatData, headers);\n                } else if (format === SceneFormat.KSplat) {\n                    return KSplatLoader.loadFromURL(path, onProgress, progressiveBuild, onSectionBuilt, headers);\n                } else if (format === SceneFormat.Ply) {\n                    return PlyLoader.loadFromURL(path, onProgress, progressiveBuild, onSectionBuilt, splatAlphaRemovalThreshold,\n                                                 this.inMemoryCompressionLevel, optimizeSplatData, this.sphericalHarmonicsDegree, headers);\n                }\n            } else if (format === SceneFormat.Spz) {\n                return SpzLoader.loadFromURL(path, onProgress, splatAlphaRemovalThreshold, this.inMemoryCompressionLevel,\n                                             this.optimizeSplatData, this.sphericalHarmonicsDegree, headers);\n            }\n        } catch (e) {\n            throw this.updateError(e, null);\n        }\n\n        throw new Error(`Viewer::downloadSplatSceneToSplatBuffer -> File format not supported: ${path}`);\n    }\n\n    static isProgressivelyLoadable(format) {\n        return format === SceneFormat.Splat || format === SceneFormat.KSplat || format === SceneFormat.Ply;\n    }\n\n    /**\n     * Add one or more instances of SplatBuffer to the SplatMesh instance managed by the viewer and set up the sorting web worker.\n     * This function will terminate the existing sort worker (if there is one).\n     */\n    addSplatBuffers = function() {\n\n        return function(splatBuffers, splatBufferOptions = [], finalBuild = true, showLoadingUI = true,\n                        showLoadingUIForSplatTreeBuild = true, replaceExisting = false,\n                        enableRenderBeforeFirstSort = false, preserveVisibleRegion = true) {\n\n            if (this.isDisposingOrDisposed()) return Promise.resolve();\n\n            let splatProcessingTaskId = null;\n            const removeSplatProcessingTask = () => {\n                if (splatProcessingTaskId !== null) {\n                    this.loadingSpinner.removeTask(splatProcessingTaskId);\n                    splatProcessingTaskId = null;\n                }\n            };\n\n            this.splatRenderReady = false;\n            return new Promise((resolve) => {\n                if (showLoadingUI) {\n                    splatProcessingTaskId = this.loadingSpinner.addTask('Processing splats...');\n                }\n                delayedExecute(() => {\n                    if (this.isDisposingOrDisposed()) {\n                        resolve();\n                    } else {\n                        const buildResults = this.addSplatBuffersToMesh(splatBuffers, splatBufferOptions, finalBuild,\n                                                                        showLoadingUIForSplatTreeBuild, replaceExisting,\n                                                                        preserveVisibleRegion);\n\n                        const maxSplatCount = this.splatMesh.getMaxSplatCount();\n                        if (this.sortWorker && this.sortWorker.maxSplatCount !== maxSplatCount) this.disposeSortWorker();\n                        // If we aren't calculating the splat distances from the center on the GPU, the sorting worker needs\n                        // splat centers and transform indexes so that it can calculate those distance values.\n                        if (!this.gpuAcceleratedSort) {\n                            this.preSortMessages.push({\n                                'centers': buildResults.centers.buffer,\n                                'sceneIndexes': buildResults.sceneIndexes.buffer,\n                                'range': {\n                                    'from': buildResults.from,\n                                    'to': buildResults.to,\n                                    'count': buildResults.count\n                                }\n                            });\n                        }\n                        const sortWorkerSetupPromise = (!this.sortWorker && maxSplatCount > 0) ?\n                                                         this.setupSortWorker(this.splatMesh) : Promise.resolve();\n                        sortWorkerSetupPromise.then(() => {\n                            if (this.isDisposingOrDisposed()) return;\n                            this.runSplatSort(true, true).then((sortRunning) => {\n                                if (!this.sortWorker || !sortRunning) {\n                                    this.splatRenderReady = true;\n                                    removeSplatProcessingTask();\n                                    resolve();\n                                } else {\n                                    if (enableRenderBeforeFirstSort) {\n                                        this.splatRenderReady = true;\n                                    } else {\n                                        this.runAfterNextSort.push(() => {\n                                            this.splatRenderReady = true;\n                                        });\n                                    }\n                                    this.runAfterNextSort.push(() => {\n                                        removeSplatProcessingTask();\n                                        resolve();\n                                    });\n                                }\n                            });\n                        });\n                    }\n                }, true);\n            });\n        };\n\n    }();\n\n    /**\n     * Add one or more instances of SplatBuffer to the SplatMesh instance managed by the viewer. By default, this function is additive;\n     * all splat buffers contained by the viewer's splat mesh before calling this function will be preserved. This behavior can be\n     * changed by passing 'true' for 'replaceExisting'.\n     * @param {Array<SplatBuffer>} splatBuffers SplatBuffer instances\n     * @param {Array<object>} splatBufferOptions Array of options objects: {\n     *\n     *         splatAlphaRemovalThreshold: Ignore any splats with an alpha less than the specified\n     *                                     value (valid range: 0 - 255), defaults to 1\n     *\n     *         position (Array<number>):   Position of the scene, acts as an offset from its default position, defaults to [0, 0, 0]\n     *\n     *         rotation (Array<number>):   Rotation of the scene represented as a quaternion, defaults to [0, 0, 0, 1]\n     *\n     *         scale (Array<number>):      Scene's scale, defaults to [1, 1, 1]\n     * }\n     * @param {boolean} finalBuild Will the splat mesh be in its final state after this build?\n     * @param {boolean} showLoadingUIForSplatTreeBuild Whether or not to show the loading spinner during construction of the splat tree.\n     * @return {object} Object containing info about the splats that are updated\n     */\n    addSplatBuffersToMesh = function() {\n\n        let splatOptimizingTaskId;\n\n        return function(splatBuffers, splatBufferOptions, finalBuild = true, showLoadingUIForSplatTreeBuild = false,\n                        replaceExisting = false, preserveVisibleRegion = true) {\n            if (this.isDisposingOrDisposed()) return;\n            let allSplatBuffers = [];\n            let allSplatBufferOptions = [];\n            if (!replaceExisting) {\n                allSplatBuffers = this.splatMesh.scenes.map((scene) => scene.splatBuffer) || [];\n                allSplatBufferOptions = this.splatMesh.sceneOptions ? this.splatMesh.sceneOptions.map((sceneOptions) => sceneOptions) : [];\n            }\n            allSplatBuffers.push(...splatBuffers);\n            allSplatBufferOptions.push(...splatBufferOptions);\n            if (this.renderer) this.splatMesh.setRenderer(this.renderer);\n            const onSplatTreeIndexesUpload = (finished) => {\n                if (this.isDisposingOrDisposed()) return;\n                const splatCount = this.splatMesh.getSplatCount();\n                if (showLoadingUIForSplatTreeBuild && splatCount >= MIN_SPLAT_COUNT_TO_SHOW_SPLAT_TREE_LOADING_SPINNER) {\n                    if (!finished && !splatOptimizingTaskId) {\n                        this.loadingSpinner.setMinimized(true, true);\n                        splatOptimizingTaskId = this.loadingSpinner.addTask('Optimizing data structures...');\n                    }\n                }\n            };\n            const onSplatTreeReady = (finished) => {\n                if (this.isDisposingOrDisposed()) return;\n                if (finished && splatOptimizingTaskId) {\n                    this.loadingSpinner.removeTask(splatOptimizingTaskId);\n                    splatOptimizingTaskId = null;\n                }\n            };\n            const buildResults = this.splatMesh.build(allSplatBuffers, allSplatBufferOptions, true, finalBuild, onSplatTreeIndexesUpload,\n                                                      onSplatTreeReady, preserveVisibleRegion);\n            if (finalBuild && this.freeIntermediateSplatData) this.splatMesh.freeIntermediateSplatData();\n            return buildResults;\n        };\n\n    }();\n\n    /**\n     * Set up the splat sorting web worker.\n     * @param {SplatMesh} splatMesh SplatMesh instance that contains the splats to be sorted\n     * @return {Promise}\n     */\n    setupSortWorker(splatMesh) {\n        if (this.isDisposingOrDisposed()) return;\n        return new Promise((resolve) => {\n            const DistancesArrayType = this.integerBasedSort ? Int32Array : Float32Array;\n            const splatCount = splatMesh.getSplatCount();\n            const maxSplatCount = splatMesh.getMaxSplatCount();\n            this.sortWorker = createSortWorker(maxSplatCount, this.sharedMemoryForWorkers, this.enableSIMDInSort,\n                                               this.integerBasedSort, this.splatMesh.dynamicMode, this.splatSortDistanceMapPrecision);\n            this.sortWorker.onmessage = (e) => {\n                if (e.data.sortDone) {\n                    this.sortRunning = false;\n                    if (this.sharedMemoryForWorkers) {\n                        this.splatMesh.updateRenderIndexes(this.sortWorkerSortedIndexes, e.data.splatRenderCount);\n                    } else {\n                        const sortedIndexes = new Uint32Array(e.data.sortedIndexes.buffer, 0, e.data.splatRenderCount);\n                        this.splatMesh.updateRenderIndexes(sortedIndexes, e.data.splatRenderCount);\n                    }\n\n                    this.lastSplatSortCount = this.splatSortCount;\n\n                    this.lastSortTime = e.data.sortTime;\n                    this.sortPromiseResolver();\n                    this.sortPromiseResolver = null;\n                    this.forceRenderNextFrame();\n                    if (this.runAfterNextSort.length > 0) {\n                        this.runAfterNextSort.forEach((func) => {\n                            func();\n                        });\n                        this.runAfterNextSort.length = 0;\n                    }\n                } else if (e.data.sortCanceled) {\n                    this.sortRunning = false;\n                } else if (e.data.sortSetupPhase1Complete) {\n                    if (this.logLevel >= LogLevel.Info) console.log('Sorting web worker WASM setup complete.');\n                    if (this.sharedMemoryForWorkers) {\n                        this.sortWorkerSortedIndexes = new Uint32Array(e.data.sortedIndexesBuffer,\n                                                                       e.data.sortedIndexesOffset, maxSplatCount);\n                        this.sortWorkerIndexesToSort = new Uint32Array(e.data.indexesToSortBuffer,\n                                                                       e.data.indexesToSortOffset, maxSplatCount);\n                        this.sortWorkerPrecomputedDistances = new DistancesArrayType(e.data.precomputedDistancesBuffer,\n                                                                                     e.data.precomputedDistancesOffset,\n                                                                                     maxSplatCount);\n                         this.sortWorkerTransforms = new Float32Array(e.data.transformsBuffer,\n                                                                      e.data.transformsOffset, Constants.MaxScenes * 16);\n                    } else {\n                        this.sortWorkerIndexesToSort = new Uint32Array(maxSplatCount);\n                        this.sortWorkerPrecomputedDistances = new DistancesArrayType(maxSplatCount);\n                        this.sortWorkerTransforms = new Float32Array(Constants.MaxScenes * 16);\n                    }\n                    for (let i = 0; i < splatCount; i++) this.sortWorkerIndexesToSort[i] = i;\n                    this.sortWorker.maxSplatCount = maxSplatCount;\n\n                    if (this.logLevel >= LogLevel.Info) {\n                        console.log('Sorting web worker ready.');\n                        const splatDataTextures = this.splatMesh.getSplatDataTextures();\n                        const covariancesTextureSize = splatDataTextures.covariances.size;\n                        const centersColorsTextureSize = splatDataTextures.centerColors.size;\n                        console.log('Covariances texture size: ' + covariancesTextureSize.x + ' x ' + covariancesTextureSize.y);\n                        console.log('Centers/colors texture size: ' + centersColorsTextureSize.x + ' x ' + centersColorsTextureSize.y);\n                    }\n\n                    resolve();\n                }\n            };\n        });\n    }\n\n    updateError(error, defaultMessage) {\n        if (error instanceof AbortedPromiseError) return error;\n        if (error instanceof DirectLoadError) {\n            return new Error('File type or server does not support progressive loading.');\n        }\n        return defaultMessage ? new Error(defaultMessage) : error;\n    }\n\n    disposeSortWorker() {\n        if (this.sortWorker) this.sortWorker.terminate();\n        this.sortWorker = null;\n        this.sortPromise = null;\n        if (this.sortPromiseResolver) {\n            this.sortPromiseResolver();\n            this.sortPromiseResolver = null;\n        }\n        this.preSortMessages = [];\n        this.sortRunning = false;\n    }\n\n    removeSplatScene(indexToRemove, showLoadingUI = true) {\n        return this.removeSplatScenes([indexToRemove], showLoadingUI);\n    }\n\n    removeSplatScenes(indexesToRemove, showLoadingUI = true) {\n        if (this.isLoadingOrUnloading()) {\n            throw new Error('Cannot remove splat scene while another load or unload is already in progress.');\n        }\n\n        if (this.isDisposingOrDisposed()) {\n            throw new Error('Cannot remove splat scene after dispose() is called.');\n        }\n\n        let sortPromise;\n\n        this.splatSceneRemovalPromise = new Promise((resolve, reject) => {\n            let revmovalTaskId;\n\n            if (showLoadingUI) {\n                this.loadingSpinner.removeAllTasks();\n                this.loadingSpinner.show();\n                revmovalTaskId = this.loadingSpinner.addTask('Removing splat scene...');\n            }\n\n            const checkAndHideLoadingUI = () => {\n                if (showLoadingUI) {\n                    this.loadingSpinner.hide();\n                    this.loadingSpinner.removeTask(revmovalTaskId);\n                }\n            };\n\n            const onDone = (error) => {\n                checkAndHideLoadingUI();\n                this.splatSceneRemovalPromise = null;\n                if (!error) resolve();\n                else reject(error);\n            };\n\n            const checkForEarlyExit = () => {\n                if (this.isDisposingOrDisposed()) {\n                    onDone();\n                    return true;\n                }\n                return false;\n            };\n\n            sortPromise = this.sortPromise || Promise.resolve();\n            sortPromise.then(() => {\n                if (checkForEarlyExit()) return;\n                const savedSplatBuffers = [];\n                const savedSceneOptions = [];\n                const savedSceneTransformComponents = [];\n                for (let i = 0; i < this.splatMesh.scenes.length; i++) {\n                    let shouldRemove = false;\n                    for (let indexToRemove of indexesToRemove) {\n                        if (indexToRemove === i) {\n                            shouldRemove = true;\n                            break;\n                        }\n                    }\n                    if (!shouldRemove) {\n                        const scene = this.splatMesh.scenes[i];\n                        savedSplatBuffers.push(scene.splatBuffer);\n                        savedSceneOptions.push(this.splatMesh.sceneOptions[i]);\n                        savedSceneTransformComponents.push({\n                            'position': scene.position.clone(),\n                            'quaternion': scene.quaternion.clone(),\n                            'scale': scene.scale.clone()\n                        });\n                    }\n                }\n                this.disposeSortWorker();\n                this.splatMesh.dispose();\n                this.sceneRevealMode = SceneRevealMode.Instant;\n                this.createSplatMesh();\n                this.addSplatBuffers(savedSplatBuffers, savedSceneOptions, true, false, true)\n                .then(() => {\n                    if (checkForEarlyExit()) return;\n                    checkAndHideLoadingUI();\n                    this.splatMesh.scenes.forEach((scene, index) => {\n                        scene.position.copy(savedSceneTransformComponents[index].position);\n                        scene.quaternion.copy(savedSceneTransformComponents[index].quaternion);\n                        scene.scale.copy(savedSceneTransformComponents[index].scale);\n                    });\n                    this.splatMesh.updateTransforms();\n                    this.splatRenderReady = false;\n\n                    this.runSplatSort(true)\n                    .then(() => {\n                        if (checkForEarlyExit()) {\n                            this.splatRenderReady = true;\n                            return;\n                        }\n                        sortPromise = this.sortPromise || Promise.resolve();\n                        sortPromise.then(() => {\n                            this.splatRenderReady = true;\n                            onDone();\n                        });\n                    });\n                })\n                .catch((e) => {\n                    onDone(e);\n                });\n            });\n        });\n\n        return this.splatSceneRemovalPromise;\n    }\n\n    /**\n     * Start self-driven mode\n     */\n    start() {\n        if (this.selfDrivenMode) {\n            if (this.webXRMode) {\n                this.renderer.setAnimationLoop(this.selfDrivenUpdateFunc);\n            } else {\n                this.requestFrameId = requestAnimationFrame(this.selfDrivenUpdateFunc);\n            }\n            this.selfDrivenModeRunning = true;\n        } else {\n            throw new Error('Cannot start viewer unless it is in self driven mode.');\n        }\n    }\n\n    /**\n     * Stop self-driven mode\n     */\n    stop() {\n        if (this.selfDrivenMode && this.selfDrivenModeRunning) {\n            if (this.webXRMode) {\n                this.renderer.setAnimationLoop(null);\n            } else {\n                cancelAnimationFrame(this.requestFrameId);\n            }\n            this.selfDrivenModeRunning = false;\n        }\n    }\n\n    /**\n     * Dispose of all resources held directly and indirectly by this viewer.\n     */\n    async dispose() {\n        if (this.isDisposingOrDisposed()) return this.disposePromise;\n\n        let waitPromises = [];\n        let promisesToAbort = [];\n        for (let promiseKey in this.splatSceneDownloadPromises) {\n            if (this.splatSceneDownloadPromises.hasOwnProperty(promiseKey)) {\n                const downloadPromiseToAbort = this.splatSceneDownloadPromises[promiseKey];\n                promisesToAbort.push(downloadPromiseToAbort);\n                waitPromises.push(downloadPromiseToAbort.promise);\n            }\n        }\n        if (this.sortPromise) {\n            waitPromises.push(this.sortPromise);\n        }\n\n        this.disposing = true;\n        this.disposePromise = Promise.all(waitPromises).finally(() => {\n            this.stop();\n            if (this.orthographicControls) {\n                this.orthographicControls.dispose();\n                this.orthographicControls = null;\n            }\n            if (this.perspectiveControls) {\n                this.perspectiveControls.dispose();\n                this.perspectiveControls = null;\n            }\n            this.controls = null;\n            if (this.splatMesh) {\n                this.splatMesh.dispose();\n                this.splatMesh = null;\n            }\n            if (this.sceneHelper) {\n                this.sceneHelper.dispose();\n                this.sceneHelper = null;\n            }\n            if (this.resizeObserver) {\n                this.resizeObserver.unobserve(this.rootElement);\n                this.resizeObserver = null;\n            }\n            this.disposeSortWorker();\n            this.removeEventHandlers();\n\n            this.loadingSpinner.removeAllTasks();\n            this.loadingSpinner.setContainer(null);\n            this.loadingProgressBar.hide();\n            this.loadingProgressBar.setContainer(null);\n            this.infoPanel.setContainer(null);\n\n            this.camera = null;\n            this.threeScene = null;\n            this.splatRenderReady = false;\n            this.initialized = false;\n            if (this.renderer) {\n                if (!this.usingExternalRenderer) {\n                    this.rootElement.removeChild(this.renderer.domElement);\n                    this.renderer.dispose();\n                }\n                this.renderer = null;\n            }\n\n            if (!this.usingExternalRenderer) {\n                document.body.removeChild(this.rootElement);\n            }\n\n            this.sortWorkerSortedIndexes = null;\n            this.sortWorkerIndexesToSort = null;\n            this.sortWorkerPrecomputedDistances = null;\n            this.sortWorkerTransforms = null;\n            this.disposed = true;\n            this.disposing = false;\n            this.disposePromise = null;\n        });\n        promisesToAbort.forEach((toAbort) => {\n            toAbort.abort('Scene disposed');\n        });\n        return this.disposePromise;\n    }\n\n    selfDrivenUpdate() {\n        if (this.selfDrivenMode && !this.webXRMode) {\n            this.requestFrameId = requestAnimationFrame(this.selfDrivenUpdateFunc);\n        }\n        this.update();\n        if (this.shouldRender()) {\n            this.render();\n            this.consecutiveRenderFrames++;\n        } else {\n            this.consecutiveRenderFrames = 0;\n        }\n        this.renderNextFrame = false;\n    }\n\n    forceRenderNextFrame() {\n        this.renderNextFrame = true;\n    }\n\n    shouldRender = function() {\n\n        let renderCount = 0;\n        const lastCameraPosition = new THREE.Vector3();\n        const lastCameraOrientation = new THREE.Quaternion();\n        const changeEpsilon = 0.0001;\n\n        return function() {\n            if (!this.initialized || !this.splatRenderReady || this.isDisposingOrDisposed()) return false;\n\n            let shouldRender = false;\n            let cameraChanged = false;\n            if (this.camera) {\n                const cp = this.camera.position;\n                const co = this.camera.quaternion;\n                cameraChanged = Math.abs(cp.x - lastCameraPosition.x) > changeEpsilon ||\n                                Math.abs(cp.y - lastCameraPosition.y) > changeEpsilon ||\n                                Math.abs(cp.z - lastCameraPosition.z) > changeEpsilon ||\n                                Math.abs(co.x - lastCameraOrientation.x) > changeEpsilon ||\n                                Math.abs(co.y - lastCameraOrientation.y) > changeEpsilon ||\n                                Math.abs(co.z - lastCameraOrientation.z) > changeEpsilon ||\n                                Math.abs(co.w - lastCameraOrientation.w) > changeEpsilon;\n            }\n\n            shouldRender = this.renderMode !== RenderMode.Never && (renderCount === 0 || this.splatMesh.visibleRegionChanging ||\n                           cameraChanged || this.renderMode === RenderMode.Always || this.dynamicMode === true || this.renderNextFrame);\n\n            if (this.camera) {\n                lastCameraPosition.copy(this.camera.position);\n                lastCameraOrientation.copy(this.camera.quaternion);\n            }\n\n            renderCount++;\n            return shouldRender;\n        };\n\n    }();\n\n    render = function() {\n\n        return function() {\n            if (!this.initialized || !this.splatRenderReady || this.isDisposingOrDisposed()) return;\n\n            const hasRenderables = (threeScene) => {\n                for (let child of threeScene.children) {\n                    if (child.visible) return true;\n                }\n                return false;\n            };\n\n            const savedAuoClear = this.renderer.autoClear;\n            if (hasRenderables(this.threeScene)) {\n                this.renderer.render(this.threeScene, this.camera);\n                this.renderer.autoClear = false;\n            }\n            this.renderer.render(this.splatMesh, this.camera);\n            this.renderer.autoClear = false;\n            if (this.sceneHelper.getFocusMarkerOpacity() > 0.0) this.renderer.render(this.sceneHelper.focusMarker, this.camera);\n            if (this.showControlPlane) this.renderer.render(this.sceneHelper.controlPlane, this.camera);\n            this.renderer.autoClear = savedAuoClear;\n        };\n\n    }();\n\n    update(renderer, camera) {\n        if (this.dropInMode) this.updateForDropInMode(renderer, camera);\n\n        if (!this.initialized || !this.splatRenderReady || this.isDisposingOrDisposed()) return;\n\n        if (this.controls) {\n            this.controls.update();\n            if (this.camera.isOrthographicCamera && !this.usingExternalCamera) {\n                Viewer.setCameraPositionFromZoom(this.camera, this.camera, this.controls);\n            }\n        }\n        this.runSplatSort();\n        this.updateForRendererSizeChanges();\n        this.updateSplatMesh();\n        this.updateMeshCursor();\n        this.updateFPS();\n        this.timingSensitiveUpdates();\n        this.updateInfoPanel();\n        this.updateControlPlane();\n    }\n\n    updateForDropInMode(renderer, camera) {\n        this.renderer = renderer;\n        if (this.splatMesh) this.splatMesh.setRenderer(this.renderer);\n        this.camera = camera;\n        if (this.controls) this.controls.object = camera;\n        this.init();\n    }\n\n    updateFPS = function() {\n\n        let lastCalcTime = getCurrentTime();\n        let frameCount = 0;\n\n        return function() {\n            if (this.consecutiveRenderFrames > CONSECUTIVE_RENDERED_FRAMES_FOR_FPS_CALCULATION) {\n                const currentTime = getCurrentTime();\n                const calcDelta = currentTime - lastCalcTime;\n                if (calcDelta >= 1.0) {\n                    this.currentFPS = frameCount;\n                    frameCount = 0;\n                    lastCalcTime = currentTime;\n                } else {\n                    frameCount++;\n                }\n            } else {\n                this.currentFPS = null;\n            }\n        };\n\n    }();\n\n    updateForRendererSizeChanges = function() {\n\n        const lastRendererSize = new THREE.Vector2();\n        const currentRendererSize = new THREE.Vector2();\n        let lastCameraOrthographic;\n\n        return function() {\n            if (!this.usingExternalCamera) {\n                this.renderer.getSize(currentRendererSize);\n                if (lastCameraOrthographic === undefined || lastCameraOrthographic !== this.camera.isOrthographicCamera ||\n                    currentRendererSize.x !== lastRendererSize.x || currentRendererSize.y !== lastRendererSize.y) {\n                    if (this.camera.isOrthographicCamera) {\n                        this.camera.left = -currentRendererSize.x / 2.0;\n                        this.camera.right = currentRendererSize.x / 2.0;\n                        this.camera.top = currentRendererSize.y / 2.0;\n                        this.camera.bottom = -currentRendererSize.y / 2.0;\n                    } else {\n                        this.camera.aspect = currentRendererSize.x / currentRendererSize.y;\n                    }\n                    this.camera.updateProjectionMatrix();\n                    lastRendererSize.copy(currentRendererSize);\n                    lastCameraOrthographic = this.camera.isOrthographicCamera;\n                }\n            }\n        };\n\n    }();\n\n    timingSensitiveUpdates = function() {\n\n        let lastUpdateTime;\n\n        return function() {\n            const currentTime = getCurrentTime();\n            if (!lastUpdateTime) lastUpdateTime = currentTime;\n            const timeDelta = currentTime - lastUpdateTime;\n\n            this.updateCameraTransition(currentTime);\n            this.updateFocusMarker(timeDelta);\n\n            lastUpdateTime = currentTime;\n        };\n\n    }();\n\n    updateCameraTransition = function() {\n\n        let tempCameraTarget = new THREE.Vector3();\n        let toPreviousTarget = new THREE.Vector3();\n        let toNextTarget = new THREE.Vector3();\n\n        return function(currentTime) {\n            if (this.transitioningCameraTarget) {\n                toPreviousTarget.copy(this.previousCameraTarget).sub(this.camera.position).normalize();\n                toNextTarget.copy(this.nextCameraTarget).sub(this.camera.position).normalize();\n                const rotationAngle = Math.acos(toPreviousTarget.dot(toNextTarget));\n                const rotationSpeed = rotationAngle / (Math.PI / 3) * .65 + .3;\n                const t = (rotationSpeed / rotationAngle * (currentTime - this.transitioningCameraTargetStartTime));\n                tempCameraTarget.copy(this.previousCameraTarget).lerp(this.nextCameraTarget, t);\n                this.camera.lookAt(tempCameraTarget);\n                this.controls.target.copy(tempCameraTarget);\n                if (t >= 1.0) {\n                    this.transitioningCameraTarget = false;\n                }\n            }\n        };\n\n    }();\n\n    updateFocusMarker = function() {\n\n        const renderDimensions = new THREE.Vector2();\n        let wasTransitioning = false;\n\n        return function(timeDelta) {\n            this.getRenderDimensions(renderDimensions);\n            if (this.transitioningCameraTarget) {\n                this.sceneHelper.setFocusMarkerVisibility(true);\n                const currentFocusMarkerOpacity = Math.max(this.sceneHelper.getFocusMarkerOpacity(), 0.0);\n                let newFocusMarkerOpacity = Math.min(currentFocusMarkerOpacity + FOCUS_MARKER_FADE_IN_SPEED * timeDelta, 1.0);\n                this.sceneHelper.setFocusMarkerOpacity(newFocusMarkerOpacity);\n                this.sceneHelper.updateFocusMarker(this.nextCameraTarget, this.camera, renderDimensions);\n                wasTransitioning = true;\n                this.forceRenderNextFrame();\n            } else {\n                let currentFocusMarkerOpacity;\n                if (wasTransitioning) currentFocusMarkerOpacity = 1.0;\n                else currentFocusMarkerOpacity = Math.min(this.sceneHelper.getFocusMarkerOpacity(), 1.0);\n                if (currentFocusMarkerOpacity > 0) {\n                    this.sceneHelper.updateFocusMarker(this.nextCameraTarget, this.camera, renderDimensions);\n                    let newFocusMarkerOpacity = Math.max(currentFocusMarkerOpacity - FOCUS_MARKER_FADE_OUT_SPEED * timeDelta, 0.0);\n                    this.sceneHelper.setFocusMarkerOpacity(newFocusMarkerOpacity);\n                    if (newFocusMarkerOpacity === 0.0) this.sceneHelper.setFocusMarkerVisibility(false);\n                }\n                if (currentFocusMarkerOpacity > 0.0) this.forceRenderNextFrame();\n                wasTransitioning = false;\n            }\n        };\n\n    }();\n\n    updateMeshCursor = function() {\n\n        const outHits = [];\n        const renderDimensions = new THREE.Vector2();\n\n        return function() {\n            if (this.showMeshCursor) {\n                this.forceRenderNextFrame();\n                this.getRenderDimensions(renderDimensions);\n                outHits.length = 0;\n                this.raycaster.setFromCameraAndScreenPosition(this.camera, this.mousePosition, renderDimensions);\n                this.raycaster.intersectSplatMesh(this.splatMesh, outHits);\n                if (outHits.length > 0) {\n                    this.sceneHelper.setMeshCursorVisibility(true);\n                    this.sceneHelper.positionAndOrientMeshCursor(outHits[0].origin, this.camera);\n                } else {\n                    this.sceneHelper.setMeshCursorVisibility(false);\n                }\n            } else {\n                if (this.sceneHelper.getMeschCursorVisibility()) this.forceRenderNextFrame();\n                this.sceneHelper.setMeshCursorVisibility(false);\n            }\n        };\n\n    }();\n\n    updateInfoPanel = function() {\n\n        const renderDimensions = new THREE.Vector2();\n\n        return function() {\n            if (!this.showInfo) return;\n            const splatCount = this.splatMesh.getSplatCount();\n            this.getRenderDimensions(renderDimensions);\n            const cameraLookAtPosition = this.controls ? this.controls.target : null;\n            const meshCursorPosition = this.showMeshCursor ? this.sceneHelper.meshCursor.position : null;\n            const splatRenderCountPct = splatCount > 0 ? this.splatRenderCount / splatCount * 100 : 0;\n            this.infoPanel.update(renderDimensions, this.camera.position, cameraLookAtPosition,\n                                  this.camera.up, this.camera.isOrthographicCamera, meshCursorPosition,\n                                  this.currentFPS || 'N/A', splatCount, this.splatRenderCount, splatRenderCountPct,\n                                  this.lastSortTime, this.focalAdjustment, this.splatMesh.getSplatScale(),\n                                  this.splatMesh.getPointCloudModeEnabled());\n        };\n\n    }();\n\n    updateControlPlane() {\n        if (this.showControlPlane) {\n            this.sceneHelper.setControlPlaneVisibility(true);\n            this.sceneHelper.positionAndOrientControlPlane(this.controls.target, this.camera.up);\n        } else {\n            this.sceneHelper.setControlPlaneVisibility(false);\n        }\n    }\n\n    runSplatSort = function() {\n\n        const mvpMatrix = new THREE.Matrix4();\n        const cameraPositionArray = [];\n        const lastSortViewDir = new THREE.Vector3(0, 0, -1);\n        const sortViewDir = new THREE.Vector3(0, 0, -1);\n        const lastSortViewPos = new THREE.Vector3();\n        const sortViewOffset = new THREE.Vector3();\n        const queuedSorts = [];\n\n        const partialSorts = [\n            {\n                'angleThreshold': 0.55,\n                'sortFractions': [0.125, 0.33333, 0.75]\n            },\n            {\n                'angleThreshold': 0.65,\n                'sortFractions': [0.33333, 0.66667]\n            },\n            {\n                'angleThreshold': 0.8,\n                'sortFractions': [0.5]\n            }\n        ];\n\n        return function(force = false, forceSortAll = false) {\n            if (!this.initialized) return Promise.resolve(false);\n            if (this.sortRunning) return Promise.resolve(true);\n            if (this.splatMesh.getSplatCount() <= 0) {\n                this.splatRenderCount = 0;\n                return Promise.resolve(false);\n            }\n\n            let angleDiff = 0;\n            let positionDiff = 0;\n            let needsRefreshForRotation = false;\n            let needsRefreshForPosition = false;\n\n            sortViewDir.set(0, 0, -1).applyQuaternion(this.camera.quaternion);\n            angleDiff = sortViewDir.dot(lastSortViewDir);\n            positionDiff = sortViewOffset.copy(this.camera.position).sub(lastSortViewPos).length();\n\n            if (!force) {\n                if (!this.splatMesh.dynamicMode && queuedSorts.length === 0) {\n                    if (angleDiff <= 0.99) needsRefreshForRotation = true;\n                    if (positionDiff >= 1.0) needsRefreshForPosition = true;\n                    if (!needsRefreshForRotation && !needsRefreshForPosition) return Promise.resolve(false);\n                }\n            }\n\n            this.sortRunning = true;\n            let { splatRenderCount, shouldSortAll } = this.gatherSceneNodesForSort();\n            shouldSortAll = shouldSortAll || forceSortAll;\n            this.splatRenderCount = splatRenderCount;\n\n            mvpMatrix.copy(this.camera.matrixWorld).invert();\n            const mvpCamera = this.perspectiveCamera || this.camera;\n            mvpMatrix.premultiply(mvpCamera.projectionMatrix);\n            if (!this.splatMesh.dynamicMode) mvpMatrix.multiply(this.splatMesh.matrixWorld);\n\n            let gpuAcceleratedSortPromise = Promise.resolve(true);\n            if (this.gpuAcceleratedSort && (queuedSorts.length <= 1 || queuedSorts.length % 2 === 0)) {\n                gpuAcceleratedSortPromise = this.splatMesh.computeDistancesOnGPU(mvpMatrix, this.sortWorkerPrecomputedDistances);\n            }\n\n            gpuAcceleratedSortPromise.then(() => {\n                if (queuedSorts.length === 0) {\n                    if (this.splatMesh.dynamicMode || shouldSortAll) {\n                        queuedSorts.push(this.splatRenderCount);\n                    } else {\n                            for (let partialSort of partialSorts) {\n                            if (angleDiff < partialSort.angleThreshold) {\n                                for (let sortFraction of partialSort.sortFractions) {\n                                    queuedSorts.push(Math.floor(this.splatRenderCount * sortFraction));\n                                }\n                                break;\n                            }\n                        }\n                        queuedSorts.push(this.splatRenderCount);\n                    }\n                }\n                let sortCount = Math.min(queuedSorts.shift(), this.splatRenderCount);\n                this.splatSortCount = sortCount;\n\n                cameraPositionArray[0] = this.camera.position.x;\n                cameraPositionArray[1] = this.camera.position.y;\n                cameraPositionArray[2] = this.camera.position.z;\n\n                const sortMessage = {\n                    'modelViewProj': mvpMatrix.elements,\n                    'cameraPosition': cameraPositionArray,\n                    'splatRenderCount': this.splatRenderCount,\n                    'splatSortCount': sortCount,\n                    'usePrecomputedDistances': this.gpuAcceleratedSort\n                };\n                if (this.splatMesh.dynamicMode) {\n                    this.splatMesh.fillTransformsArray(this.sortWorkerTransforms);\n                }\n                if (!this.sharedMemoryForWorkers) {\n                    sortMessage.indexesToSort = this.sortWorkerIndexesToSort;\n                    sortMessage.transforms = this.sortWorkerTransforms;\n                    if (this.gpuAcceleratedSort) {\n                        sortMessage.precomputedDistances = this.sortWorkerPrecomputedDistances;\n                    }\n                }\n\n                this.sortPromise = new Promise((resolve) => {\n                    this.sortPromiseResolver = resolve;\n                });\n\n                if (this.preSortMessages.length > 0) {\n                    this.preSortMessages.forEach((message) => {\n                        this.sortWorker.postMessage(message);\n                    });\n                    this.preSortMessages = [];\n                }\n                this.sortWorker.postMessage({\n                    'sort': sortMessage\n                });\n\n                if (queuedSorts.length === 0) {\n                    lastSortViewPos.copy(this.camera.position);\n                    lastSortViewDir.copy(sortViewDir);\n                }\n\n                return true;\n            });\n\n            return gpuAcceleratedSortPromise;\n        };\n\n    }();\n\n    /**\n     * Determine which splats to render by checking which are inside or close to the view frustum\n     */\n    gatherSceneNodesForSort = function() {\n\n        const nodeRenderList = [];\n        let allSplatsSortBuffer = null;\n        const tempVectorYZ = new THREE.Vector3();\n        const tempVectorXZ = new THREE.Vector3();\n        const tempVector = new THREE.Vector3();\n        const modelView = new THREE.Matrix4();\n        const baseModelView = new THREE.Matrix4();\n        const sceneTransform = new THREE.Matrix4();\n        const renderDimensions = new THREE.Vector3();\n        const forward = new THREE.Vector3(0, 0, -1);\n\n        const tempMax = new THREE.Vector3();\n        const nodeSize = (node) => {\n            return tempMax.copy(node.max).sub(node.min).length();\n        };\n\n        return function(gatherAllNodes = false) {\n\n            this.getRenderDimensions(renderDimensions);\n            const cameraFocalLength = (renderDimensions.y / 2.0) / Math.tan(this.camera.fov / 2.0 * THREE.MathUtils.DEG2RAD);\n            const fovXOver2 = Math.atan(renderDimensions.x / 2.0 / cameraFocalLength);\n            const fovYOver2 = Math.atan(renderDimensions.y / 2.0 / cameraFocalLength);\n            const cosFovXOver2 = Math.cos(fovXOver2);\n            const cosFovYOver2 = Math.cos(fovYOver2);\n\n            const splatTree = this.splatMesh.getSplatTree();\n\n            if (splatTree) {\n                baseModelView.copy(this.camera.matrixWorld).invert();\n                if (!this.splatMesh.dynamicMode) baseModelView.multiply(this.splatMesh.matrixWorld);\n\n                let nodeRenderCount = 0;\n                let splatRenderCount = 0;\n\n                for (let s = 0; s < splatTree.subTrees.length; s++) {\n                    const subTree = splatTree.subTrees[s];\n                    modelView.copy(baseModelView);\n                    if (this.splatMesh.dynamicMode) {\n                        this.splatMesh.getSceneTransform(s, sceneTransform);\n                        modelView.multiply(sceneTransform);\n                    }\n                    const nodeCount = subTree.nodesWithIndexes.length;\n                    for (let i = 0; i < nodeCount; i++) {\n                        const node = subTree.nodesWithIndexes[i];\n                        if (!node.data || !node.data.indexes || node.data.indexes.length === 0) continue;\n                        tempVector.copy(node.center).applyMatrix4(modelView);\n\n                        const distanceToNode = tempVector.length();\n                        tempVector.normalize();\n\n                        tempVectorYZ.copy(tempVector).setX(0).normalize();\n                        tempVectorXZ.copy(tempVector).setY(0).normalize();\n\n                        const cameraAngleXZDot = forward.dot(tempVectorXZ);\n                        const cameraAngleYZDot = forward.dot(tempVectorYZ);\n\n                        const ns = nodeSize(node);\n                        const outOfFovY = cameraAngleYZDot < (cosFovYOver2 - .6);\n                        const outOfFovX = cameraAngleXZDot < (cosFovXOver2 - .6);\n                        if (!gatherAllNodes && ((outOfFovX || outOfFovY) && distanceToNode > ns)) {\n                            continue;\n                        }\n                        splatRenderCount += node.data.indexes.length;\n                        nodeRenderList[nodeRenderCount] = node;\n                        node.data.distanceToNode = distanceToNode;\n                        nodeRenderCount++;\n                    }\n                }\n\n                nodeRenderList.length = nodeRenderCount;\n                nodeRenderList.sort((a, b) => {\n                    if (a.data.distanceToNode < b.data.distanceToNode) return -1;\n                    else return 1;\n                });\n\n                let currentByteOffset = splatRenderCount * Constants.BytesPerInt;\n                for (let i = 0; i < nodeRenderCount; i++) {\n                    const node = nodeRenderList[i];\n                    const windowSizeInts = node.data.indexes.length;\n                    const windowSizeBytes = windowSizeInts * Constants.BytesPerInt;\n                    let destView = new Uint32Array(this.sortWorkerIndexesToSort.buffer,\n                                                   currentByteOffset - windowSizeBytes, windowSizeInts);\n                    destView.set(node.data.indexes);\n                    currentByteOffset -= windowSizeBytes;\n                }\n\n                return {\n                    'splatRenderCount': splatRenderCount,\n                    'shouldSortAll': false\n                };\n            } else {\n                const totalSplatCount = this.splatMesh.getSplatCount();\n                if (!allSplatsSortBuffer || allSplatsSortBuffer.length !== totalSplatCount) {\n                    allSplatsSortBuffer = new Uint32Array(totalSplatCount);\n                    for (let i = 0; i < totalSplatCount; i++) {\n                        allSplatsSortBuffer[i] = i;\n                    }\n                }\n                this.sortWorkerIndexesToSort.set(allSplatsSortBuffer);\n                return {\n                    'splatRenderCount': totalSplatCount,\n                    'shouldSortAll': true\n                };\n            }\n        };\n\n    }();\n\n    getSplatMesh() {\n        return this.splatMesh;\n    }\n\n    /**\n     * Get a reference to a splat scene.\n     * @param {number} sceneIndex The index of the scene to which the reference will be returned\n     * @return {SplatScene}\n     */\n    getSplatScene(sceneIndex) {\n        return this.splatMesh.getScene(sceneIndex);\n    }\n\n    getSceneCount() {\n        return this.splatMesh.getSceneCount();\n    }\n\n    isMobile() {\n        return navigator.userAgent.includes('Mobi');\n    }\n}\n","import * as THREE from 'three';\nimport { Viewer } from './Viewer.js';\n\n/**\n * DropInViewer: Wrapper for a Viewer instance that enables it to be added to a Three.js scene like\n * any other Three.js scene object (Mesh, Object3D, etc.)\n */\nexport class DropInViewer extends THREE.Group {\n\n    constructor(options = {}) {\n        super();\n\n        options.selfDrivenMode = false;\n        options.useBuiltInControls = false;\n        options.rootElement = null;\n        options.dropInMode = true;\n        options.camera = undefined;\n        options.renderer = undefined;\n\n        this.viewer = new Viewer(options);\n        this.splatMesh = null;\n        this.updateSplatMesh();\n\n        this.callbackMesh = DropInViewer.createCallbackMesh();\n        this.add(this.callbackMesh);\n        this.callbackMesh.onBeforeRender = DropInViewer.onBeforeRender.bind(this, this.viewer);\n\n        this.viewer.onSplatMeshChanged(() => {\n            this.updateSplatMesh();\n        });\n\n    }\n\n    updateSplatMesh() {\n        if (this.splatMesh !== this.viewer.splatMesh) {\n            if (this.splatMesh) {\n                this.remove(this.splatMesh);\n            }\n            this.splatMesh = this.viewer.splatMesh;\n            this.add(this.viewer.splatMesh);\n        }\n    }\n\n    /**\n     * Add a single splat scene to the viewer.\n     * @param {string} path Path to splat scene to be loaded\n     * @param {object} options {\n     *\n     *         splatAlphaRemovalThreshold: Ignore any splats with an alpha less than the specified\n     *                                     value (valid range: 0 - 255), defaults to 1\n     *\n     *         showLoadingUI:         Display a loading spinner while the scene is loading, defaults to true\n     *\n     *         position (Array<number>):   Position of the scene, acts as an offset from its default position, defaults to [0, 0, 0]\n     *\n     *         rotation (Array<number>):   Rotation of the scene represented as a quaternion, defaults to [0, 0, 0, 1]\n     *\n     *         scale (Array<number>):      Scene's scale, defaults to [1, 1, 1]\n     *\n     *         onProgress:                 Function to be called as file data are received\n     *\n     * }\n     * @return {AbortablePromise}\n     */\n    addSplatScene(path, options = {}) {\n        if (options.showLoadingUI !== false) options.showLoadingUI = true;\n        return this.viewer.addSplatScene(path, options);\n    }\n\n    /**\n     * Add multiple splat scenes to the viewer.\n     * @param {Array<object>} sceneOptions Array of per-scene options: {\n     *\n     *         path: Path to splat scene to be loaded\n     *\n     *         splatAlphaRemovalThreshold: Ignore any splats with an alpha less than the specified\n     *                                     value (valid range: 0 - 255), defaults to 1\n     *\n     *         position (Array<number>):   Position of the scene, acts as an offset from its default position, defaults to [0, 0, 0]\n     *\n     *         rotation (Array<number>):   Rotation of the scene represented as a quaternion, defaults to [0, 0, 0, 1]\n     *\n     *         scale (Array<number>):      Scene's scale, defaults to [1, 1, 1]\n     * }\n     * @param {boolean} showLoadingUI Display a loading spinner while the scene is loading, defaults to true\n     * @return {AbortablePromise}\n     */\n    addSplatScenes(sceneOptions, showLoadingUI) {\n        if (showLoadingUI !== false) showLoadingUI = true;\n        return this.viewer.addSplatScenes(sceneOptions, showLoadingUI);\n    }\n\n    /**\n     * Get a reference to a splat scene.\n     * @param {number} sceneIndex The index of the scene to which the reference will be returned\n     * @return {SplatScene}\n     */\n    getSplatScene(sceneIndex) {\n        return this.viewer.getSplatScene(sceneIndex);\n    }\n\n    removeSplatScene(index, showLoadingUI = true) {\n        return this.viewer.removeSplatScene(index, showLoadingUI);\n    }\n\n    removeSplatScenes(indexes, showLoadingUI = true) {\n        return this.viewer.removeSplatScenes(indexes, showLoadingUI);\n    }\n\n    getSceneCount() {\n        return this.viewer.getSceneCount();\n    }\n\n    setActiveSphericalHarmonicsDegrees(activeSphericalHarmonicsDegrees) {\n        this.viewer.setActiveSphericalHarmonicsDegrees(activeSphericalHarmonicsDegrees);\n    }\n\n    async dispose() {\n        return await this.viewer.dispose();\n    }\n\n    static onBeforeRender(viewer, renderer, threeScene, camera) {\n        viewer.update(renderer, camera);\n    }\n\n    static createCallbackMesh() {\n        const geometry = new THREE.SphereGeometry(1, 8, 8);\n        const material = new THREE.MeshBasicMaterial();\n        material.colorWrite = false;\n        material.depthWrite = false;\n        const mesh = new THREE.Mesh(geometry, material);\n        mesh.frustumCulled = false;\n        return mesh;\n    }\n\n}\n"],"names":["THREE","fromHalfFloat","RED","GREEN","BLUE","finalize","Ray","Plane","MathUtils","EventDispatcher","Vector3","MOUSE","TOUCH","Quaternion","Spherical","Vector2"],"mappings":"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,SAAS,CAAC;AACtF;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,YAAY,CAAC,CAAC;AACd;IACA,QAAQ,IAAI,qBAAqB,EAAE;IACnC,YAAY,kBAAkB,IAAI,CAAC;AACnC;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,CAAC,CAAC;IACd,SAAS;AACT;IACA,QAAQ,IAAI,WAAW,EAAE;IACzB,YAAY,kBAAkB,IAAI,CAAC;AACnC;AACA;AACA,YAAY,CAAC,CAAC;IACd,SAAS,MAAM;IACf,YAAY,kBAAkB,IAAI,CAAC,gDAAgD,CAAC,CAAC;IACrF,SAAS;AACT;IACA,QAAQ,kBAAkB,IAAI,CAAC;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,CAAC,CAAC;AACV;IACA;IACA,QAAQ,IAAI,2BAA2B,IAAI,CAAC,EAAE;AAC9C;IACA,YAAY,kBAAkB,IAAI,CAAC;AACnC;AACA,YAAY,CAAC,CAAC;AACd;IACA,YAAY,IAAI,WAAW,EAAE;IAC7B,gBAAgB,kBAAkB,IAAI,CAAC;AACvC;AACA,gBAAgB,CAAC,CAAC;IAClB,aAAa,MAAM;IACnB,gBAAgB,kBAAkB,IAAI,CAAC;AACvC;AACA,gBAAgB,CAAC,CAAC;IAClB,aAAa;AACb;IACA,YAAY,kBAAkB,IAAI,CAAC;AACnC;AACA;AACA;AACA,YAAY,CAAC,CAAC;AACd;IACA,YAAY,IAAI,2BAA2B,IAAI,CAAC,EAAE;IAClD,gBAAgB,kBAAkB,IAAI,CAAC;AACvC;AACA;AACA;AACA;AACA;AACA,gBAAgB,CAAC,CAAC;IAClB,aAAa;AACb;IACA;IACA;IACA;AACA;IACA;IACA,YAAY,IAAI,2BAA2B,KAAK,CAAC,EAAE;IACnD,gBAAgB,kBAAkB,IAAI,CAAC;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,CAAC,CAAC;IAClB;IACA,aAAa,MAAM,IAAI,2BAA2B,KAAK,CAAC,EAAE;IAC1D,gBAAgB,kBAAkB,IAAI,CAAC;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,CAAC,CAAC;IAClB,aAAa;AACb;IACA;IACA,YAAY,kBAAkB,IAAI,CAAC;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,CAAC,CAAC;AACd;IACA;IACA,YAAY,IAAI,2BAA2B,IAAI,CAAC,EAAE;AAClD;IACA,gBAAgB,kBAAkB,IAAI,CAAC;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,CAAC,CAAC;AAClB;IACA;IACA;IACA,gBAAgB,IAAI,2BAA2B,KAAK,CAAC,EAAE;IACvD,oBAAoB,kBAAkB,IAAI,CAAC;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,CAAC,CAAC;IACtB,iBAAiB;AACjB;IACA;IACA,gBAAgB,kBAAkB,IAAI,CAAC;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,CAAC,CAAC;IAClB,aAAa;AACb;IACA,YAAY,kBAAkB,IAAI,CAAC;AACnC;AACA;AACA;AACA;AACA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ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,CAAC,CAAC;AACV;IACA;IACA;IACA;IACA;IACA;AACA;IACA;IACA;IACA;IACA;IACA;AACA;IACA;IACA;IACA;IACA;AACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;AACA;IACA;IACA;IACA;IACA;IACA,QAAQ,MAAM,uBAAuB,GAAG,CAAC;AACzC;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,QAAQ,CAAC,CAAC;AACV;IACA,QAAQ,MAAM,oBAAoB,GAAG,KAAK,CAAC;IAC3C,QAAQ,IAAI,oBAAoB,EAAE;IAClC,YAAY,kBAAkB,IAAI,uBAAuB,CAAC;IAC1D,SAAS,MAAM;IACf;IACA;IACA;IACA;IACA,YAAY,kBAAkB,IAAI,CAAC;AACnC;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,oBAAoB,EAAE,uBAAuB,CAAC;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,CAAC,CAAC;IACd,SAAS;AACT;IACA,QAAQ,kBAAkB,IAAI,aAAa,CAAC,qBAAqB,EAAE,CAAC;IACpE,QAAQ,kBAAkB,IAAI,CAAC,CAAC,CAAC,CAAC;AAClC;IACA,QAAQ,OAAO,kBAAkB,CAAC;IAClC,KAAK;AACL;IACA,IAAI,OAAO,mBAAmB,GAAG;AACjC;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;AACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;AACA;IACA;IACA;IACA;AACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;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"}