@xviewer.js/postprocessing 1.0.0-alpha.5 → 1.0.0-alpha.51
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/main.js +269 -2272
- package/dist/main.js.map +1 -1
- package/dist/module.js +273 -2275
- package/dist/module.js.map +1 -1
- package/package.json +22 -24
- package/types/BloomPlugin.d.ts +1 -0
- package/types/EffectComposerPlugin.d.ts +1 -1
- package/types/EffectPassPlugin.d.ts +1 -0
- package/types/FXAAPlugin.d.ts +1 -0
- package/types/MSAAPlugin.d.ts +1 -0
- package/types/SMAAPlugin.d.ts +1 -0
- package/types/TRAAPlugin.d.ts +1 -0
- package/types/ToneMappingPlugin.d.ts +1 -0
- package/types/getVelocityDepthNormalPass.d.ts +3 -0
- package/types/index.d.ts +0 -1
- package/types/MotionBlurPlugin.d.ts +0 -5
package/dist/main.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"main.js","sources":["../../../node_modules/.pnpm/@swc+helpers@0.5.11/node_modules/@swc/helpers/esm/_extends.js","../src/realism-effects/temporal-reproject/utils/QuasirandomGenerator.js","../src/realism-effects/taa/TAAUtils.js","../src/realism-effects/ssgi/utils/Utils.js","../src/realism-effects/temporal-reproject/material/TemporalReprojectMaterial.js","../src/realism-effects/utils/SceneUtils.js","../src/realism-effects/temporal-reproject/TemporalReprojectPass.js","../src/realism-effects/traa/TRAAEffect.js","../src/realism-effects/ssgi/pass/CubeToEquirectEnvPass.js","../src/realism-effects/utils/blue_noise_rgba.png","../src/realism-effects/utils/BlueNoiseUtils.js","../src/realism-effects/gbuffer/material/GBufferMaterial.js","../src/realism-effects/gbuffer/GBufferPass.js","../src/realism-effects/ssgi/utils/EquirectHdrInfoUniform.js","../src/realism-effects/ssgi/material/SSGIMaterial.js","../src/realism-effects/ssgi/pass/SSGIPass.js","../src/realism-effects/temporal-reproject/material/VelocityDepthNormalMaterial.js","../src/realism-effects/gbuffer/utils/GBufferUtils.js","../src/realism-effects/temporal-reproject/pass/VelocityDepthNormalPass.js","../src/realism-effects/denoise/pass/DenoiserComposePass.js","../src/realism-effects/denoise/pass/PoissonDenoisePass.js","../src/realism-effects/denoise/Denoiser.js","../src/realism-effects/gbuffer/debug/GBufferDebugPass.js","../src/realism-effects/ssgi/SSGIOptions.js","../src/realism-effects/ssgi/SSGIEffect.js","../src/realism-effects/motion-blur/MotionBlurEffect.js","../src/realism-effects/ao/AOEffect.js","../src/EffectComposerPlugin.ts","../../../node_modules/.pnpm/tslib@2.6.2/node_modules/tslib/tslib.es6.mjs","../src/PassPlugin.ts","../src/ToneMappingPlugin.ts","../src/MotionBlurPlugin.ts","../src/BloomPlugin.ts","../src/FXAAPlugin.ts","../src/SMAAPlugin.ts","../src/MSAAPlugin.ts","../src/TRAAPlugin.ts"],"sourcesContent":["export function _extends() {\n _extends = Object.assign || function assign(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) if (Object.prototype.hasOwnProperty.call(source, key)) target[key] = source[key];\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\nexport { _extends as _ };\n","// from: https://news.ycombinator.com/item?id=17876741\n// reference: http://extremelearning.com.au/unreasonable-effectiveness-of-quasirandom-sequences/\n\n// eslint-disable-next-line no-unused-vars\nconst harmoniousNumber = (n = 2, value = 0, depth = 100) => {\n\tif (depth === 0) return value\n\n\treturn (1 + harmoniousNumber(n, value, depth - 1)) ** (1 / n)\n}\n\nconst g = 1.32471795724474602596090885447809 // Plastic number\nconst a1 = 1.0 / g\nconst a2 = 1.0 / (g * g)\nconst base = 1.1127756842787055 // harmoniousNumber(7), yields better coverage compared to using 0.5\n\nexport const generateR2 = count => {\n\tconst points = []\n\n\tfor (let n = 0; n < count; n++) {\n\t\tpoints.push([(base + a1 * n) % 1, (base + a2 * n) % 1])\n\t}\n\n\treturn points\n}\n\nexport const getR2Index = n => {\n\treturn [(base + a1 * n) % 1, (base + a2 * n) % 1]\n}\n\nexport const getR3Index = n => {\n\tconst g = 1.2207440846057596\n\tconst a1 = 1.0 / g\n\tconst a2 = 1.0 / (g * g)\n\tconst a3 = 1.0 / (g * g * g)\n\n\treturn [(base + a1 * n) % 1, (base + a2 * n) % 1, (base + a3 * n) % 1]\n}\n\nexport const generateR3 = count => {\n\tconst g = 1.32471795724474602596090885447809 // Plastic number\n\tconst a1 = 1.0 / g\n\tconst a2 = 1.0 / (g * g)\n\tconst a3 = 1.0 / (g * g * g)\n\tconst base = 1.1127756842787055 // harmoniousNumber(7), yields better coverage compared to using 0.5\n\n\tconst points = []\n\n\tfor (let n = 0; n < count; n++) {\n\t\tpoints.push([(base + a1 * n) % 1, (base + a2 * n) % 1, (base + a3 * n) % 1])\n\t}\n\n\treturn points\n}\n","import { generateR2 } from \"../temporal-reproject/utils/QuasirandomGenerator\"\n\nexport const r2Sequence = generateR2(256).map(([a, b]) => [a - 0.5, b - 0.5])\n\nexport function jitter(width, height, camera, frame, jitterScale = 1) {\n\tconst [x, y] = r2Sequence[frame % r2Sequence.length]\n\n\tif (camera.setViewOffset) {\n\t\tcamera.setViewOffset(width, height, x * jitterScale, y * jitterScale, width, height)\n\t}\n}\n","import { ShaderChunk, ShaderLib, UniformsUtils, Vector4 } from \"three\"\n\nexport const generateCubeUVSize = parameters => {\n\tconst imageHeight = parameters.envMapCubeUVHeight\n\n\tif (imageHeight === null) return null\n\n\tconst maxMip = Math.log2(imageHeight) - 2\n\n\tconst texelHeight = 1.0 / imageHeight\n\n\tconst texelWidth = 1.0 / (3 * Math.max(Math.pow(2, maxMip), 7 * 16))\n\n\treturn { texelWidth, texelHeight, maxMip }\n}\n\nexport const setupEnvMap = (ssgiMaterial, envMap, envMapCubeUVHeight) => {\n\tssgiMaterial.uniforms.envMap.value = envMap\n\n\tconst envMapCubeUVSize = generateCubeUVSize({ envMapCubeUVHeight })\n\n\tssgiMaterial.defines.ENVMAP_TYPE_CUBE_UV = \"\"\n\tssgiMaterial.defines.CUBEUV_TEXEL_WIDTH = envMapCubeUVSize.texelWidth\n\tssgiMaterial.defines.CUBEUV_TEXEL_HEIGHT = envMapCubeUVSize.texelHeight\n\tssgiMaterial.defines.CUBEUV_MAX_MIP = envMapCubeUVSize.maxMip + \".0\"\n\n\tssgiMaterial.needsUpdate = true\n}\n\nexport const getMaxMipLevel = texture => {\n\tconst { width, height } = texture.image\n\n\treturn Math.floor(Math.log2(Math.max(width, height))) + 1\n}\n\nexport const createGlobalDisableIblRadianceUniform = () => {\n\tif (!ShaderChunk.envmap_physical_pars_fragment.includes(\"iblRadianceDisabled\")) {\n\t\tShaderChunk.envmap_physical_pars_fragment = ShaderChunk.envmap_physical_pars_fragment.replace(\n\t\t\t\"vec3 getIBLRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness ) {\",\n\t\t\t/* glsl */ `\n\t\tuniform bool iblRadianceDisabled;\n\t\n\t\tvec3 getIBLRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness ) {\n\t\t if(iblRadianceDisabled) return vec3(0.);\n\t\t`\n\t\t)\n\t}\n\n\tif (\"iblRadianceDisabled\" in ShaderLib.physical.uniforms) return ShaderLib.physical.uniforms[\"iblRadianceDisabled\"]\n\n\tconst globalIblRadianceDisabledUniform = {\n\t\tvalue: false\n\t}\n\n\tShaderLib.physical.uniforms.iblRadianceDisabled = globalIblRadianceDisabledUniform\n\n\tconst { clone } = UniformsUtils\n\tUniformsUtils.clone = uniforms => {\n\t\tconst result = clone(uniforms)\n\n\t\tif (\"iblRadianceDisabled\" in uniforms) {\n\t\t\tresult.iblRadianceDisabled = globalIblRadianceDisabledUniform\n\t\t}\n\n\t\treturn result\n\t}\n\n\treturn globalIblRadianceDisabledUniform\n}\n\n// source: https://github.com/mrdoob/three.js/blob/b9bc47ab1978022ab0947a9bce1b1209769b8d91/src/renderers/webgl/WebGLProgram.js#L228\n// Unroll Loops\n\nconst unrollLoopPattern =\n\t/#pragma unroll_loop_start\\s+for\\s*\\(\\s*int\\s+i\\s*=\\s*(\\d+)\\s*;\\s*i\\s*<\\s*(\\d+)\\s*;\\s*i\\s*\\+\\+\\s*\\)\\s*{([\\s\\S]+?)}\\s+#pragma unroll_loop_end/g\n\nexport function unrollLoops(string) {\n\treturn string.replace(unrollLoopPattern, loopReplacer)\n}\n\nfunction loopReplacer(match, start, end, snippet) {\n\tlet string = \"\"\n\n\tfor (let i = parseInt(start); i < parseInt(end); i++) {\n\t\tstring += snippet.replace(/\\[\\s*i\\s*\\]/g, \"[ \" + i + \" ]\").replace(/UNROLLED_LOOP_INDEX/g, i)\n\t}\n\n\treturn string\n}\n\n//\n\nexport const splitIntoGroupsOfVector4 = arr => {\n\tconst result = []\n\tfor (let i = 0; i < arr.length; i += 4) {\n\t\tresult.push(new Vector4(...arr.slice(i, i + 4)))\n\t}\n\n\treturn result\n}\n\n// this function generates a Vogel distribution for a given number of samples\n// source: https://www.shadertoy.com/view/4t2SDh\nexport const generateVogelDistribution = (numSamples, scale = 1) => {\n\tconst samples = []\n\tconst goldenAngle = Math.PI * (3 - Math.sqrt(5))\n\n\tfor (let i = 0; i < numSamples; i++) {\n\t\tconst t = i / numSamples\n\t\tconst r = Math.sqrt(t)\n\t\tconst theta = i * goldenAngle\n\n\t\tconst x = r * Math.cos(theta)\n\t\tconst y = r * Math.sin(theta)\n\n\t\tsamples.push({ x, y })\n\t}\n\n\treturn samples\n}\n","/* eslint-disable camelcase */\nimport { GLSL3, Matrix4, NoBlending } from \"three\"\nimport { Vector3 } from \"three\"\nimport { ShaderMaterial, Uniform, Vector2 } from \"three\"\nimport vertexShader from \"../../utils/shader/basic.vert\"\nimport fragmentShader from \"../shader/temporal_reproject.frag\"\nimport reproject from \"../shader/reproject.frag\"\nimport gbuffer_packing from \"../../gbuffer/shader/gbuffer_packing.glsl\"\nimport { unrollLoops } from \"../../ssgi/utils/Utils\"\n\nexport class TemporalReprojectMaterial extends ShaderMaterial {\n\tconstructor(textureCount = 1) {\n\t\tlet finalFragmentShader = fragmentShader\n\t\t\t.replace(\"#include <reproject>\", reproject)\n\t\t\t.replace(\"#include <gbuffer_packing>\", gbuffer_packing)\n\n\t\tlet definitions = \"\"\n\t\tfor (let i = 0; i < textureCount; i++) {\n\t\t\tdefinitions += /* glsl */ `\n\t\t\t\tuniform sampler2D accumulatedTexture${i};\n\n\t\t\t\tlayout(location = ${i}) out vec4 gOutput${i};\n\t\t\t`\n\t\t}\n\n\t\tfinalFragmentShader = definitions + finalFragmentShader.replaceAll(\"textureCount\", textureCount)\n\t\tfinalFragmentShader = unrollLoops(finalFragmentShader)\n\n\t\tconst matches2 = finalFragmentShader.matchAll(/accumulatedTexture\\[\\s*[0-9]+\\s*]/g)\n\n\t\tfor (const [key] of matches2) {\n\t\t\tconst number = key.replace(/[^0-9]/g, \"\")\n\t\t\tfinalFragmentShader = finalFragmentShader.replace(key, \"accumulatedTexture\" + number)\n\t\t}\n\n\t\tconst matches3 = finalFragmentShader.matchAll(/gOutput\\[\\s*[0-9]+\\s*]/g)\n\n\t\tfor (const [key] of matches3) {\n\t\t\tconst number = key.replace(/[^0-9]/g, \"\")\n\t\t\tfinalFragmentShader = finalFragmentShader.replace(key, \"gOutput\" + number)\n\t\t}\n\n\t\tsuper({\n\t\t\ttype: \"TemporalReprojectMaterial\",\n\t\t\tuniforms: {\n\t\t\t\tinputTexture: new Uniform(null),\n\t\t\t\tvelocityTexture: new Uniform(null),\n\t\t\t\tdepthTexture: new Uniform(null),\n\t\t\t\tlastVelocityTexture: new Uniform(null),\n\t\t\t\tneighborhoodClampIntensity: new Uniform(0),\n\t\t\t\tfullAccumulate: new Uniform(false),\n\t\t\t\tkeepData: new Uniform(1),\n\t\t\t\tdelta: new Uniform(0),\n\t\t\t\tinvTexSize: new Uniform(new Vector2()),\n\t\t\t\tprojectionMatrix: new Uniform(new Matrix4()),\n\t\t\t\tprojectionMatrixInverse: new Uniform(new Matrix4()),\n\t\t\t\tcameraMatrixWorld: new Uniform(new Matrix4()),\n\t\t\t\tviewMatrix: new Uniform(new Matrix4()),\n\t\t\t\tprevViewMatrix: new Uniform(new Matrix4()),\n\t\t\t\tprevCameraMatrixWorld: new Uniform(new Matrix4()),\n\t\t\t\tprevProjectionMatrix: new Uniform(new Matrix4()),\n\t\t\t\tprevProjectionMatrixInverse: new Uniform(new Matrix4()),\n\t\t\t\tcameraPos: new Uniform(new Vector3()),\n\t\t\t\tprevCameraPos: new Uniform(new Vector3()),\n\t\t\t\tcameraNear: new Uniform(0),\n\t\t\t\tcameraFar: new Uniform(0),\n\t\t\t\tmaxBlend: new Uniform(0)\n\t\t\t},\n\t\t\tvertexShader,\n\t\t\tfragmentShader: finalFragmentShader,\n\t\t\tblending: NoBlending,\n\t\t\tdepthWrite: false,\n\t\t\tdepthTest: false,\n\t\t\ttoneMapped: false,\n\t\t\tglslVersion: GLSL3\n\t\t})\n\n\t\tfor (let i = 0; i < textureCount; i++) {\n\t\t\tthis.uniforms[\"inputTexture\" + i] = new Uniform(null)\n\t\t\tthis.uniforms[\"accumulatedTexture\" + i] = new Uniform(null)\n\t\t}\n\t}\n}\n","export const isGroundProjectedEnv = c => {\n\treturn c.material.fragmentShader?.includes(\n\t\t\"float intersection2 = diskIntersectWithBackFaceCulling( camPos, p, h, vec3( 0.0, 1.0, 0.0 ), radius );\"\n\t)\n}\n\nexport const isChildMaterialRenderable = (c, material = c.material) => {\n\treturn (\n\t\tmaterial.visible &&\n\t\tmaterial.depthWrite &&\n\t\tmaterial.depthTest &&\n\t\t(!material.transparent || material.opacity > 0) &&\n\t\t!isGroundProjectedEnv(c)\n\t)\n}\n\nexport const didCameraMove = (camera, lastCameraPosition, lastCameraQuaternion) => {\n\tif (camera.position.distanceToSquared(lastCameraPosition) > 0.000001) {\n\t\treturn true\n\t}\n\n\tif (camera.quaternion.angleTo(lastCameraQuaternion) > 0.001) {\n\t\treturn true\n\t}\n\n\treturn false\n}\n\nexport const getVisibleChildren = object => {\n\tconst queue = [object]\n\tconst objects = []\n\n\twhile (queue.length !== 0) {\n\t\tconst mesh = queue.shift()\n\t\tif (mesh.material) objects.push(mesh)\n\n\t\tfor (const c of mesh.children) {\n\t\t\tif (c.visible) queue.push(c)\n\t\t}\n\t}\n\n\treturn objects\n}\n","import { Pass } from \"postprocessing\"\nimport {\n\tClock,\n\tFramebufferTexture,\n\tLinearFilter,\n\tMatrix4,\n\tNearestFilter,\n\tQuaternion,\n\tVector2,\n\tVector3,\n\tWebGLRenderTarget\n} from \"three\"\nimport { jitter } from \"../taa/TAAUtils\"\nimport { TemporalReprojectMaterial } from \"./material/TemporalReprojectMaterial\"\nimport { didCameraMove } from \"../utils/SceneUtils\"\n\nexport const defaultTemporalReprojectPassOptions = {\n\tdilation: false,\n\tfullAccumulate: false,\n\tneighborhoodClamp: false,\n\tneighborhoodClampRadius: 1,\n\tneighborhoodClampIntensity: 1,\n\tmaxBlend: 1,\n\tlogTransform: false,\n\tdepthDistance: 2,\n\tworldDistance: 4,\n\treprojectSpecular: false,\n\trenderTarget: null,\n\tcopyTextures: true,\n\tconfidencePower: 0.75,\n\tinputType: \"diffuse\"\n}\n\nconst tmpProjectionMatrix = new Matrix4()\nconst tmpProjectionMatrixInverse = new Matrix4()\nconst tmpVec2 = new Vector2()\n\nexport class TemporalReprojectPass extends Pass {\n\tneedsSwap = false\n\n\toverrideAccumulatedTextures = []\n\tclock = new Clock()\n\tr2Sequence = []\n\tframe = 0\n\tlastCameraTransform = {\n\t\tposition: new Vector3(),\n\t\tquaternion: new Quaternion()\n\t}\n\n\tconstructor(\n\t\tscene,\n\t\tcamera,\n\t\tvelocityDepthNormalPass,\n\t\ttexture,\n\t\ttextureCount,\n\t\toptions = defaultTemporalReprojectPassOptions\n\t) {\n\t\tsuper(\"TemporalReprojectPass\")\n\n\t\tthis._scene = scene\n\t\tthis._camera = camera\n\t\tthis.textureCount = textureCount\n\t\toptions = { ...defaultTemporalReprojectPassOptions, ...options }\n\n\t\tthis.renderTarget = new WebGLRenderTarget(1, 1, {\n\t\t\tcount: textureCount,\n\t\t\tminFilter: NearestFilter,\n\t\t\tmagFilter: NearestFilter,\n\t\t\ttype: texture.type,\n\t\t\tdepthBuffer: false\n\t\t})\n\n\t\tthis.renderTarget.textures.forEach(\n\t\t\t(texture, index) => (texture.name = \"TemporalReprojectPass.accumulatedTexture\" + index)\n\t\t)\n\n\t\tthis.fullscreenMaterial = new TemporalReprojectMaterial(textureCount)\n\t\tthis.fullscreenMaterial.defines.textureCount = textureCount\n\n\t\tif (options.dilation) this.fullscreenMaterial.defines.dilation = \"\"\n\t\tif (options.neighborhoodClamp) this.fullscreenMaterial.defines.neighborhoodClamp = \"\"\n\t\tif (options.logTransform) this.fullscreenMaterial.defines.logTransform = \"\"\n\t\tif (camera.isPerspectiveCamera) this.fullscreenMaterial.defines.PERSPECTIVE_CAMERA = \"\"\n\t\tthis.fullscreenMaterial.defines.neighborhoodClampRadius = parseInt(options.neighborhoodClampRadius)\n\n\t\tthis.fullscreenMaterial.defines.depthDistance = options.depthDistance.toPrecision(5)\n\t\tthis.fullscreenMaterial.defines.worldDistance = options.worldDistance.toPrecision(5)\n\n\t\tthis.fullscreenMaterial.uniforms.fullAccumulate.value = options.fullAccumulate\n\t\tthis.fullscreenMaterial.uniforms.neighborhoodClampIntensity.value = options.neighborhoodClampIntensity\n\t\tthis.fullscreenMaterial.uniforms.maxBlend.value = options.maxBlend\n\n\t\tthis.fullscreenMaterial.uniforms.projectionMatrix.value = camera.projectionMatrix.clone()\n\t\tthis.fullscreenMaterial.uniforms.projectionMatrixInverse.value = camera.projectionMatrixInverse.clone()\n\t\tthis.fullscreenMaterial.uniforms.cameraMatrixWorld.value = camera.matrixWorld\n\t\tthis.fullscreenMaterial.uniforms.viewMatrix.value = camera.matrixWorldInverse\n\t\tthis.fullscreenMaterial.uniforms.cameraPos.value = camera.position\n\n\t\tthis.fullscreenMaterial.uniforms.prevViewMatrix.value = camera.matrixWorldInverse.clone()\n\t\tthis.fullscreenMaterial.uniforms.prevCameraMatrixWorld.value = camera.matrixWorld.clone()\n\t\tthis.fullscreenMaterial.uniforms.prevProjectionMatrix.value = camera.projectionMatrix.clone()\n\t\tthis.fullscreenMaterial.uniforms.prevProjectionMatrixInverse.value = camera.projectionMatrixInverse.clone()\n\n\t\tthis.fullscreenMaterial.uniforms.velocityTexture.value = velocityDepthNormalPass.renderTarget.texture\n\t\tthis.fullscreenMaterial.uniforms.depthTexture.value = velocityDepthNormalPass.depthTexture\n\n\t\tthis.fullscreenMaterial.defines.inputType =\n\t\t\t[\"diffuseSpecular\", \"diffuse\", \"specular\"].indexOf(options.inputType) ?? 1\n\n\t\tfor (const opt of [\"reprojectSpecular\", \"neighborhoodClamp\"]) {\n\t\t\tlet value = options[opt]\n\n\t\t\tif (typeof value !== \"array\") value = Array(textureCount).fill(value)\n\n\t\t\tthis.fullscreenMaterial.defines[opt] = /* glsl */ `bool[](${value.join(\", \")})`\n\t\t}\n\n\t\tthis.fullscreenMaterial.defines.confidencePower = options.confidencePower.toPrecision(5)\n\n\t\tthis.options = options\n\t\tthis.velocityDepthNormalPass = velocityDepthNormalPass\n\n\t\tthis.fullscreenMaterial.uniforms.inputTexture.value = texture\n\t}\n\n\tsetInputTexture(texture) {\n\t\tthis.fullscreenMaterial.uniforms.inputTexture.value = texture\n\t}\n\n\tdispose() {\n\t\tsuper.dispose()\n\n\t\tthis.renderTarget.dispose()\n\t\tthis.fullscreenMaterial.dispose()\n\t}\n\n\tsetSize(width, height) {\n\t\tthis.renderTarget.setSize(width, height)\n\n\t\tthis.fullscreenMaterial.uniforms.invTexSize.value.set(1 / width, 1 / height)\n\n\t\tthis.framebufferTexture?.dispose()\n\n\t\tconst inputTexture = this.fullscreenMaterial.uniforms.inputTexture.value\n\n\t\tthis.framebufferTexture = new FramebufferTexture(width, height, inputTexture.format)\n\t\tthis.framebufferTexture.type = inputTexture.type\n\t\tthis.framebufferTexture.minFilter = LinearFilter\n\t\tthis.framebufferTexture.magFilter = LinearFilter\n\n\t\tthis.framebufferTexture.needsUpdate = true\n\n\t\tfor (let i = 0; i < this.textureCount; i++) {\n\t\t\tconst accumulatedTexture = this.overrideAccumulatedTextures[i] ?? this.framebufferTexture\n\t\t\tthis.fullscreenMaterial.uniforms[\"accumulatedTexture\" + i].value = accumulatedTexture\n\t\t}\n\t}\n\n\tget texture() {\n\t\treturn this.renderTarget.texture;\n\t}\n\n\treset() {\n\t\tthis.fullscreenMaterial.uniforms.keepData.value = 0\n\t}\n\n\trender(renderer) {\n\t\tthis.frame = (this.frame + 1) % 4096\n\n\t\tconst delta = Math.min(1 / 10, this.clock.getDelta())\n\t\tthis.fullscreenMaterial.uniforms.delta.value = delta\n\n\t\ttmpProjectionMatrix.copy(this._camera.projectionMatrix)\n\t\ttmpProjectionMatrixInverse.copy(this._camera.projectionMatrixInverse)\n\n\t\tif (this._camera.view) this._camera.view.enabled = false\n\t\tthis._camera.updateProjectionMatrix()\n\n\t\tthis.fullscreenMaterial.uniforms.projectionMatrix.value.copy(this._camera.projectionMatrix)\n\t\tthis.fullscreenMaterial.uniforms.projectionMatrixInverse.value.copy(this._camera.projectionMatrixInverse)\n\t\tthis.fullscreenMaterial.uniforms.lastVelocityTexture.value = this.velocityDepthNormalPass.lastVelocityTexture\n\n\t\tthis.fullscreenMaterial.uniforms.fullAccumulate.value =\n\t\t\tthis.options.fullAccumulate &&\n\t\t\t!didCameraMove(this._camera, this.lastCameraTransform.position, this.lastCameraTransform.quaternion)\n\n\t\tthis.lastCameraTransform.position.copy(this._camera.position)\n\t\tthis.lastCameraTransform.quaternion.copy(this._camera.quaternion)\n\n\t\tif (this._camera.view) this._camera.view.enabled = true\n\t\tthis._camera.projectionMatrix.copy(tmpProjectionMatrix)\n\t\tthis._camera.projectionMatrixInverse.copy(tmpProjectionMatrixInverse)\n\n\t\tthis.fullscreenMaterial.uniforms.cameraNear.value = this._camera.near\n\t\tthis.fullscreenMaterial.uniforms.cameraFar.value = this._camera.far\n\n\t\trenderer.setRenderTarget(this.renderTarget)\n\t\trenderer.render(this.scene, this.camera)\n\n\t\tthis.fullscreenMaterial.uniforms.keepData.value = 1\n\n\t\tif (this.overrideAccumulatedTextures.length === 0) {\n\t\t\tthis.framebufferTexture.needsUpdate = true\n\t\t\trenderer.copyFramebufferToTexture(tmpVec2, this.framebufferTexture)\n\t\t}\n\n\t\t// save last transformations\n\t\tthis.fullscreenMaterial.uniforms.prevCameraMatrixWorld.value.copy(this._camera.matrixWorld)\n\t\tthis.fullscreenMaterial.uniforms.prevViewMatrix.value.copy(this._camera.matrixWorldInverse)\n\n\t\tthis.fullscreenMaterial.uniforms.prevProjectionMatrix.value.copy(\n\t\t\tthis.fullscreenMaterial.uniforms.projectionMatrix.value\n\t\t)\n\t\tthis.fullscreenMaterial.uniforms.prevProjectionMatrixInverse.value.copy(\n\t\t\tthis.fullscreenMaterial.uniforms.projectionMatrixInverse.value\n\t\t)\n\n\t\tthis.fullscreenMaterial.uniforms.prevCameraPos.value.copy(this._camera.position)\n\t}\n\n\tjitter(jitterScale = 1) {\n\t\tthis.unjitter()\n\n\t\tjitter(this.renderTarget.width, this.renderTarget.height, this._camera, this.frame, jitterScale)\n\t}\n\n\tunjitter() {\n\t\tif (this._camera.clearViewOffset) this._camera.clearViewOffset()\n\t}\n}\n","import { Effect } from \"postprocessing\"\nimport { Uniform } from \"three\"\nimport {\n\tTemporalReprojectPass,\n\tdefaultTemporalReprojectPassOptions\n} from \"../temporal-reproject/TemporalReprojectPass.js\"\n// eslint-disable-next-line camelcase\nimport traa_compose from \"./shader/traa_compose.frag\"\n\nexport class TRAAEffect extends Effect {\n\tconstructor(scene, camera, velocityDepthNormalPass, options = defaultTemporalReprojectPassOptions) {\n\t\tsuper(\"TRAAEffect\", traa_compose, {\n\t\t\ttype: \"FinalTRAAEffectMaterial\",\n\t\t\tuniforms: new Map([[\"accumulatedTexture\", new Uniform(null)]])\n\t\t})\n\n\t\tthis._scene = scene\n\t\tthis._camera = camera\n\t\tthis.velocityDepthNormalPass = velocityDepthNormalPass\n\n\t\toptions = {\n\t\t\t...options,\n\t\t\t...{\n\t\t\t\tmaxBlend: 0.9,\n\t\t\t\tneighborhoodClamp: true,\n\t\t\t\tneighborhoodClampIntensity: 1,\n\t\t\t\tneighborhoodClampRadius: 1,\n\t\t\t\tlogTransform: true,\n\t\t\t\tconfidencePower: 4\n\t\t\t}\n\t\t}\n\n\t\tthis.options = { ...defaultTemporalReprojectPassOptions, ...options }\n\n\t\tthis.setSize(options.width, options.height)\n\t}\n\n\tsetSize(width, height) {\n\t\tthis.temporalReprojectPass?.setSize(width, height)\n\t}\n\n\tdispose() {\n\t\tsuper.dispose()\n\n\t\tthis.temporalReprojectPass.dispose()\n\t}\n\n\treset() {\n\t\tthis.temporalReprojectPass.reset()\n\t}\n\n\tupdate(renderer, inputBuffer) {\n\t\tif (!this.temporalReprojectPass) {\n\t\t\tthis.temporalReprojectPass = new TemporalReprojectPass(\n\t\t\t\tthis._scene,\n\t\t\t\tthis._camera,\n\t\t\t\tthis.velocityDepthNormalPass,\n\t\t\t\tinputBuffer.texture,\n\t\t\t\t1,\n\t\t\t\tthis.options\n\t\t\t)\n\t\t\tthis.temporalReprojectPass.setSize(inputBuffer.width, inputBuffer.height)\n\n\t\t\tthis.uniforms.get(\"accumulatedTexture\").value = this.temporalReprojectPass.texture\n\t\t}\n\n\t\tthis.temporalReprojectPass.setInputTexture(inputBuffer.texture);\n\n\t\tthis.temporalReprojectPass.unjitter()\n\t\tthis.unjitteredProjectionMatrix = this._camera.projectionMatrix.clone()\n\n\t\tthis._camera.projectionMatrix.copy(this.unjitteredProjectionMatrix)\n\n\t\tthis.temporalReprojectPass.jitter()\n\n\t\tthis.temporalReprojectPass.render(renderer)\n\t}\n}\n\nTRAAEffect.DefaultOptions = defaultTemporalReprojectPassOptions\n","import { Pass } from \"postprocessing\"\nimport {\n\tClampToEdgeWrapping,\n\tDataTexture,\n\tEquirectangularReflectionMapping,\n\tFloatType,\n\tLinearMipMapLinearFilter,\n\tNoBlending,\n\tRGBAFormat,\n\tShaderMaterial,\n\tWebGLRenderTarget\n} from \"three\"\nimport basicVertexShader from \"../../utils/shader/basic.vert\"\n\nexport class CubeToEquirectEnvPass extends Pass {\n\tconstructor() {\n\t\tsuper(\"CubeToEquirectEnvPass\")\n\n\t\tthis.renderTarget = new WebGLRenderTarget(1, 1, { depthBuffer: false, type: FloatType })\n\n\t\tthis.fullscreenMaterial = new ShaderMaterial({\n\t\t\tfragmentShader: /* glsl */ `\n varying vec2 vUv;\n\t\t\tuniform samplerCube cubeMap;\n\n\t\t\t#define M_PI 3.1415926535897932384626433832795\n\t\t\t\n\t\t\t// source: https://github.com/spite/CubemapToEquirectangular/blob/master/src/CubemapToEquirectangular.js\n void main() {\n\t\t\t\tfloat longitude = vUv.x * 2. * M_PI - M_PI + M_PI / 2.;\n\t\t\t\tfloat latitude = vUv.y * M_PI;\n\n\t\t\t\tvec3 dir = vec3(\n\t\t\t\t\t- sin( longitude ) * sin( latitude ),\n\t\t\t\t\tcos( latitude ),\n\t\t\t\t\t- cos( longitude ) * sin( latitude )\n\t\t\t\t);\n\n\t\t\t\tdir.y = -dir.y;\n\n\t\t\t\tgl_FragColor = textureCube( cubeMap, dir );\n }\n `,\n\t\t\tvertexShader: basicVertexShader,\n\t\t\tuniforms: {\n\t\t\t\tcubeMap: { value: null }\n\t\t\t},\n\t\t\tblending: NoBlending,\n\t\t\tdepthWrite: false,\n\t\t\tdepthTest: false,\n\t\t\ttoneMapped: false\n\t\t})\n\t}\n\n\tdispose() {\n\t\tthis.renderTarget.dispose()\n\t}\n\n\tgenerateEquirectEnvMap(renderer, cubeMap, width = null, height = null, maxWidth = 4096) {\n\t\tif (width === null && height === null) {\n\t\t\tconst w = cubeMap.source.data[0].width\n\t\t\tconst widthEquirect = 2 ** Math.ceil(Math.log2(2 * w * 3 ** 0.5))\n\t\t\tconst heightEquirect = 2 ** Math.ceil(Math.log2(w * 3 ** 0.5))\n\n\t\t\twidth = widthEquirect\n\t\t\theight = heightEquirect\n\t\t}\n\n\t\tif (width > maxWidth) {\n\t\t\twidth = maxWidth\n\t\t\theight = maxWidth / 2\n\t\t}\n\n\t\tthis.renderTarget.setSize(width, height)\n\t\tthis.fullscreenMaterial.uniforms.cubeMap.value = cubeMap\n\n\t\tconst { renderTarget } = this\n\n\t\trenderer.setRenderTarget(renderTarget)\n\t\trenderer.render(this.scene, this.camera)\n\n\t\t// Create a new Float32Array to store the pixel data\n\t\tconst pixelBuffer = new Float32Array(width * height * 4)\n\t\trenderer.readRenderTargetPixels(renderTarget, 0, 0, width, height, pixelBuffer)\n\n\t\t// Create a new data texture\n\t\tconst equirectEnvMap = new DataTexture(pixelBuffer, width, height, RGBAFormat, FloatType)\n\n\t\t// Set texture options\n\t\tequirectEnvMap.wrapS = ClampToEdgeWrapping\n\t\tequirectEnvMap.wrapT = ClampToEdgeWrapping\n\t\tequirectEnvMap.minFilter = LinearMipMapLinearFilter\n\t\tequirectEnvMap.magFilter = LinearMipMapLinearFilter\n\t\tequirectEnvMap.needsUpdate = true\n\n\t\tequirectEnvMap.mapping = EquirectangularReflectionMapping\n\n\t\treturn equirectEnvMap\n\t}\n}\n","var img = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAYAAADDPmHLAAD/kElEQVR4AQTBBUATCAAAQOkUFERMsLsDFUnp7o4RIwYrGGs2xoKNUWNssLHB6NHdHQaIHbwdiAiCgNL9d1K3yR7RMNivLlBPlPFQ7JH3Lyef6D/gDy5P3Y+hv7K++qiDtz+nbhixJr4w/3Yxd1tHq4L/Wzu4pTQzJGVrP7iqpGJGXk5g9bS0VOLz37+M6y+9d1zCrlWXEfTEWvqTJVXDuiOPWh97WUj8lAEMi5J6V+p6ahbLP+V8nHpfsBo2OcwmeB06LbNRnVE3pPVOaTr09Rq/z7mq6cLayofnxA9euXFPhT3Sez8+4sb29g/l1T0Pnv/jwxB+4/73uFy8jpyg1LyPqJue1rZ7/af3x+h/F9mVT7Y+tDYbVowF/br+433xNZ8pfn1sjezTpzyiFfP3e4+9vzNYvV4vyncuRE6qenZLY8DD6kdzlVCcrgrRVE1ZxtCu/PvVw8mK/KChr1K7n3gIJHZ2PDBjPxeOl9u0XHDq1LOQ+PSeABo7H+9TddK57lLj17kV1TqfLxPnWqULXzY/L9EljfWhS49Jv56AzT7fdS7ng3xGeqDUDc8r4FMTy+88Ow1m9iwsfMthw94ZJyZ8L1zNlZOPWg3WenL7V439lxffsqaUH1VbMiQKwOXTg8/NLM9+Zib3uGm+PjtWdHmHUou1MySKFJiK/c5m/NHP7ArLtn8AH+tbQ8gZqd223Gpb+Nh4YHhOHVFfF/Zel/Y21W0NX8oy39e/o1BORDskqvoxjPsI7NSYeI59OF7B6xHlt6Olri/6xeAgAbRye4Mk5RKa74EKTYyicN04wCOQK0IjXEv0G91EnXeSHL6HfeBrFBMqlzbds6FDjuci/4ZrsGX1DtIqWNLBnE6hD9m7270xWuJxj7m2tV5kaHCyjHLFABtYDWjv8nRlldbufrL96iPmn+K349rn5x2IP7VWnHApp3aBvZMGxux1Vf4qfcG29nzqxg37ORyRCrbpzyaWV0Z9AJNSz/e9MMs6IjuL0qdVQqKCgScHaSWo+oa6H8I0VsAthNw2jg70NAaG3gyssdhNsxz9NBBN2/isTWncGGUmH0fCciVqSbLGmMAANSlA4c2Y//YHD+Jpl3+E0L31Q9IM6q0LZKUY9bJth4vVBk796snLdxqILjJT5shkuiVbrextuWBAng6sOxDoJPa3uPvTIzo40od7fGom2xPQdbNSr1cU42aINh7vnAhRK1j8XfUj4QU4+p4Tc4jjprhqtru9YD6LG1A4tTd0A1R643Oy0Y4FWDXF1zdH4baibMY2m9WaXI80iGYNz0zcsk+TSb4oSQ1+x5tBq0bmHRFmShP66U7lf6LC7FFWRx1KSicivT6xEx28PRTmJvh8klt3jIQVdjeRMqFxYiU4qOTQiJFJtFwji3lAgfDBKezJmns0INC7KTz8jee7YS2XnD9sNbhxTs26BO8POTv0SNmCLIwh9dNa0sCRGOOT/Muts0EfaG1se750SRgFTUl9kDT6C3/bG7gUB+HJufDPG+in4bCxd9u/F5OKLTdAc5HfUu47y9yzq0KY6xXibSjXaSwTYS7m/Vvpox4TVaSnVLBvNCqz7NEZfNO5yIsvSrss/qTftYajyRulpxysSFU0ZPqh5wXhcTOtrd38W0DPNLDRV0ZOelR2302VnKQbfawh4LtBzYCUDggWn/uwAJqV0ZbKakE1prAX0t5wxb03QQyjP42lF0pL9ezbKmjQil9xcYCgcXXrEvyt1Vabf1r0APjspYYRbiTL6L5obAtnXV6TQyzS89R33919SLZW1jxeKI3FFgZ+tBDqN8Sh84RU11hLFp3lvHXumIxAmBaTrPs14AQMEyjnbY3NJHrbLcQnh7geFCCxq9GbmGxdynrzzvsXZ/eVuR44EEsuNAs3rsj4K9jwfRxpSrvICHeAP/UisMsT9y+mXkiEc9cy3mex0RqaKE353Lmscn4XPSWMjaY3whO79HN6eTo12jd9ICsKpDftD/qKbwElUvIyjYpiwv7Vy5P8bpZkuNrFinWIu+K9F3n0UU+JWpg7FPfUJ9JLofxEFYIGrIMvmXY8yPxcG/0Jt5NBxgfXOq6HZn0MSjLz3WAVYfObqdmzL7ZA4MZOmPBaf1f6u/TNXbTVMPNqqRxrUut7z3sb02DHkl+ST5YY/4W0jh3++lyuITmfjO1gXTaveAR/8bZgBBoZhqnArehaTXZLmQcAmlE1UMmj+0sQgJSt7J0YS2BzGETIN1N+wdznu5dR+/ZDgxI2whyaHL7ay65HdcrxydIVyOO64W8lmjHRoM/bSqhLZj3ppIBT1wBk9t5TZipOR7wKb/nqNmuLspR1n51xCcdN91shSeXCTRe4hOJvNgFTUHxKeGugdVQ1qYBGe6PxpIDVSObBBsOKnEa06A1lxcQPtcJhp9JNpYTEqBxVSTPdeIzHzBzVTjPVPlsU6OIv/p7TdlDdXxCVHlRCivnv0dfxy8EIeku/Q1D/m1Vaf5HSk+VGsvKs7G23vEXzo71IZqYZ4CHByN1rxvHZ22H3c85JyGjA91t/5K2oDe+BZ0WQKqYIi2pIrkm/7260vfvXwlFN24DD4f6nGL9C+uLH0G1x1u5iW3pgWbxA4eSBzbfxgTPBJPfSHqYGcVlKtA0HgUpb/SmFhYqAxGpm1uV/BcPD/K3l4afMGjlgRCv+QzuSRz0bE+lI+vJhnXh0dyVkObloz8wYXz+5K+G5QwXzLyPhqTb1Z2KRVMC7MAfX22ejz1tsF/vLY/HZj8yNpYOdYMa5X3+CJi2rZaxQBi6UkFjMQGkDupynkbG3U1Mj80+ioS1J6ltzeisJ47FAwSwkREtbZby94hxGCbT033g0x8r8Sj806f9CVSNuh+Sqbk/BokQQI26GPu26BoGXRBYcQOs+qF2c3xVXl/T2tUH1JkZafQb60R1mHLXy4jtCJlAz5j3sGNSMfyJPUtXN9Gl5tNpefJX/k10oD63cT9lasZ1Z1RNRB/m7mbvV3aZMgvmJ3EFu7vI+vmdKhBUF+18uM00j9Nl5Jtk/1H3oIl4426YHHFrhXr7L4ao4OxRQt8teVwx9ZE7+eXpjNnTqGutUZEdcNF4dFegv4n1/eSyZtXbhWAoxmcaIb9yBf4neBje68+oRA/I7UMpqhGT/nNdkGf7kRZtI+aR7Xre4efgz7qyILS8vAifx/aS3ofy514FCxZFqSr8NVqHScT4PP201MObwVvYrmmcxy4a9IF4Oz312fMn/eFVLc1hc86f66sfxodHhJchUExqIqeninsN132UXBa0XPOviUgIZFXBNrdTX+dFjJdhpWw/Qy4SRBYhGMZmnm6SqGhGBW6/bl20j+JfNeLfwqsPQ3vsKzruAySHT9OePjImSa7N031iYcnqStTm1L4Jl4kbbNoJPgmRS5wN3d2WEeKSeBGR1AsPCfpqau6xPAfFc25mzHZ5JuyRo3VQud+p0kSuVx+9xK9mvHAuW1MDREfg3lBNXzFDkFrpUQEXrM5nAcXPpUCGqV5Cx0UT66PjiQujnnVTMFNKlvNIyEJdhX55bO7aXLEnzFClyB35ey5VxIqU+jc6AbsUg/aO6SkfqqVCAZ1IpsjfVC026ghsXJd0j9tgFfM9u/6dn2RefI39QF46F1HINE23icE8hStDZuQqO9yKwOnQ7QIvsUWAabpF+vZXRNGXOnvMzpGzyCtNse1Z9Iis2bIEZJD+ozvp/X+ABJskBgFg9q8CnNffc1dwD/XZtq/kHLMOWjgV/RDXtq1cW5zU29jt4D8S+9I3gFDB4sUpUvRtOAYxktXBiJEutGOYrxXGqMiiDzICevoj2Wy09uFialgQdhx1wkru0e2vKS/gnzrEYPOJ0KupKNflYDEpct83pjMaAMYXQ+lYH/ug8sR3a7A1sTGRa/wLneO5rO2350DR1H4Vu6BtiuVNbSKz2WoCoyro8VS0F73/ldbQkGeCe2o2FxCSPVSdfDahmnnPsE5an8SXlkspIHVps48V82TxcHarOo/plo13ardhdP6gd9Y/P4TIETbJyevjqgXd4DDAmqpUD+7JDCZS24h0ilbkg+ccYUHMsbea2xm2/ZBQX3TeRG3/ElSALCD7gB8omoRAFF9Iax0R1DtbNSakhljU5bY8MOJH9mLO7D3EsBGvhbH1Htsqf6xhHfOyI332pqseZ3dBWvWK083AseEApXEqyF0pTQVBUqlig9plmrsDN0WEM/gmbM+WD/uiaHZpObppUdZEiD0qvmebHFYepG1GBOyULBlIpcGndPnaUSm1zZ91OfKhEzlUu/kHJ8I78bpWyLbnVS8iA0OAP1RVZ4ABcvRCdw7RdwCU4tD18c7rgSrHQfLWKlO7a/iQmHpDiciFO/e7doR3AP484ZTEBORdOJmXGAEpuGkufSFe4UwHBMzOelSV46gO5G0WrrwfzckEPRuP24hdNdTTaBblHy4dinTE29w4yIkgAnFX7m9YbreG0qabm/IWylcyk7j0p7OJQqTBu1dnvrrnlcfyhF6FKZPWSXEEha4l6V1y4d4Ed/mCndFvHPY6jUXGGQCrsc6QgPDUBOI/amjn7NCboyIJmsu6tRByA6upHLmj1i18fK/wNVQ58v4XqTnTvdK71M/KLCnW798/mgC7v7078fhS6KWt5J26X51Pog8uyxfl+bFAI9fRD7p4x2jcgbE00br51gEcsY28FxcVHbHYBo8CDAfxKXw+hNKH9+c2M37fuNIIPy+b+uxUPXXmXcIad9UL98IZRY5dXEaHh9SADeVXz1IQf15L+IY695o0m1vuD55DAYmb0dNKFCd9cfMhP/W04M6KbNLF/6TtemhfhSHI9ZO9GkByJiLZIyJCqyT6ZB5CoRQOWOWNLVS1kPibxda3qYan2pKasVNt0Igjp7G30Oqypw6POTWziHX0+nedx+Sc2JoYVmzJ7fce29UefID+qLyhb6eay5wLFyuLDOLXZkdTZInkeW2rPNitx14yTzKzJ2dcJ7De7tI+lFW6lS8Y9YfFDKVYteCPYasW/+48/hHfGkfH7tdG7mzsieO15XqJrx/4KG5auVicQYHy5jNzvbEdfxqSadF5Ao1jNyCoid/Sq8ykgNjEzdd+ZGvQgGJ75L8B61o4oMcQrmdSavLp2zGM70kwP4F2PwAEoFpopZJBbUK6Qyr/AK4svb1mITeI8U8vOHWJ7r8+eurmfzcJKPDzeMCburHdzbb6Xt3lyQ1VOhnJQwAKY4f3Okh3x9d+tS+vSgNTBaYVBtXdZ88nwaxkoqCZly8UBW2o9hWXLhuASQu6Y0wYg6q+gTpWPfx/EyElBygsOBbv/YowSI3qqenuHmPaFOYte5np6T25vgimZfMnxhQgyIs7qTM/7W1PF4cRHxwsVK10ItCITmqEsvJmaeXKhq3ygsnL9JeWJY+KDDYHXcm2fnzA+1Lt7DQ+6WpmV/D3PVDX2PfyuVcRtDWZ++dE0nRMVZnIyCRRPjwX4PnDUIO9qUeLcR0WKmaI5ey2HrZFr/E5oD5SKeYj9XZntizWW6h7un13/HFQ5QzwYib+UI9ZtuMtKFTD+FrYwvhiE3LKo6gPzgtI82AgTT6MqCejrYNcqjB5k8ryZ1kGNlgc98Kik9PnmB1VfjhVktnIOIotdo2iFaden69wrEL3u0SuchADPtMS6+FyKR1EeCZxfw/AArQ3+i+owzOlPDZt2R+qG2PJzDvZ8IrBrAffaJnX2iSJZ/4I/MVBYBWIx7cEeL2iWcVHucqIZouaVl88bweOS7K61nT/R2c7XNfucxqU5W1PbNEt7wnuLgnAHP9p+TFSEfm89LdccehQdcuXhj2fhBwDJSeKCEPBu687vFIC5t5NXdGSwjZlPEM3ZWEE9cLUSVRht0ZZqELnjMy96C0K/tfOR1wiM4YKr578Sy2bZ+gQy7KWJ3tFPqZD+qnrRW6NAU+fdiiFRmhqDubKE8hwFK8mxh+68dO2MVyMv4Hiqp/KN7BzzdUW6BCJG0tuuO9/k8+eec1qhCrxyJ93IQTNHkEd67AeH5wbdpWzQ5uzt7Bsp4exnSpajzp6q6ZD35JgKM24TBFaPpv7IrcgHP4si1JBrTIjIa8YO7+4aJmk9z+iRtVXiBk+4Xg+NtebjzrzLND22eGoyv6rTra+6EHKyNkuluMOuwWaKjpaOPv07vamkKw9Td0GKKs1kihtPti7K1/yUObAOY/2VPZ0j9afhtxE6qEg0FDKdO/F9U5FXDc1zf/7mAl7jV+p9XU66IDY5NkzjjWzAxHp5PWJEIIOSefahL6FWzs1KqTefzV1P3Bcos7cr2rMoNZoVoGIsGtv+fCqyg/w4OHFE5XwYHRYCuzOaYtqB81Dqaj3TIKWcnHcuMpgEEl/AlfPwmWW/vhFqPQwOeFXBGSbxMrWjhSVb78HhLtdfiX2dJDvelmBYzkiZn2VwtxQc6RIHAkpk5O5ztOwtHn0a3g7FweJ3ytdCs74/fD6Ea/kl9VB/ADy/CzkwwUubDYv3NNsHawfoXSbf9owV+EZ3+zYgE+jOOpHzLtQdCZYDTHY7ju+vtru+mSCmvbmice2cZp0kjffugWyPXJ/TxrG3MKEPHRVP8jKwYZV1mZqQfVPUOaUt4LD2n6h8pQnLDNhHfa/nTn6JwAAv5LWvzifj+9JkFDG3HP05SYNnUfhvoAvP03EW6zdZm2D3HCnEOUYriKvzJfAGHaPmsX2OplEk31xUgSzOgPv1mqbtxgvUeRffuq78RGm4+F3SNvx07sp44oxn6M/p1XL/39kPkbwNRfdxDyPXgldL69fkLjxDpRF8O0pIWVhsks3+5gqIL5fVVmXyrIrs/FG7YhfPMbX6IoDH1sMfpGxfSfsd0/ve6CMXn4hMu2i7FRaTzq699qg0ZaxAKsNGXclY6rj5n7DYlAhPye30Y2qIkm4qLOB+wM4OfkrBaEZ0hkO1qbpzw5FiajxS+VwUOEA26ch1zH45b4NceMT6efdf7H5ooMGhlG75d+1h7nES21Pd5NyB0r0bSbsqnU5+SDFxrZRJ8PiJM83E+DefZxgR8ONfH7dHY5UPqPUHeyZtQDzMMEIJt6NeAa4Rdqs8YbKnPzi6g3LpxYZG7lffWLBztitBkhJZJz1xOS+jkiBMlVGtesTW79m29PvA9lx5z5IU9u1D5jY4VIpT2bU5p9/KOLUJMYpXbTwKlmTud8Kk/nQApEIZHvE0tNWr4qXXtXKp771Y0+DQtkC7tZIArmUpw8Q+s2DTYW0y7xPCpUTzO3TG1GNhHggh9+TFrIS9EdNi9PFFV+AyB7zv/pR0lgFvdcFbfkr2/3DQDOaBCy1q89hXMwOs3pvCMKBj9GPmCYspqymubKaIYUxz4znNBxNPDxsLLQwuVKcUKgaG/uKs1vNQn0sSNIS9lJ3X+aqlsxReDDyuCl6pzCgt8cnXv9h7dIWptGDwtIa4fCw5PO++71uVioSaLEqIr2W1VYDNyViUmdtkAhFuW14PZV/y8RCaJDnBvEs6qJqCi4J/GGoBeq/eISv4BXHNJXRB0Zn0x8UVwkD0fjXvSZejc9hK4OvsXf9Z1yRvwe5L3VSdVT8uUuM4nMq1vbN2RbjU+djsQ8yf0hkEJZ3iSZWztj2133jKq/Cb6ckGXIxCPvTTSwiHE7IP2v01Oj4KB5XW9iTWgW5FxRhCs69DRnvjVuVOqxWYnSG18xH1jF+4hSNhLzBNQpPkvgnF5gXiIPb4l9Z5mNsFZ+qVkDM1MUymTtiV0Gk7vln0OUa2Y1lu1YZu+X7JGEQSctosDtztfXH6gE93bGGZwo8O5OrPltug+Isod0Ylu2flRfZoE6oykWQryJWfTjJK9JqJTSeiz+aIqzC0omGcmyhqa+DMUe/1GOe0i1ZdAq8b26NvliIoo//+rAB7ofVF9PcGYFkrpYt8BEeK9NZCI8u1GdKcUBrfoz6llq4RFBl4nU5koDSY0gCaEQp6dD2LaAV9SteJhXhI0Jmr9Fce5PDIjtAcI0X3Yztw9x/+eKRXDTK2Sgy/PSoDXkZ2K6xulUGz1/LG2GFZATuOhiLLg0Yust5F8qxk5o5yphqFab4TL+Ovlu262jMc+G5/6tiH+psXIo6wCy/TaYu7d0UtRE0CfjB3sgXSXybr4wk11yt24zb5wZFomSj349Il8jnw0ASidVWxm4fb1m8+moUWjVsdLj6r2u5G8rPxIvlCjmccM4hxXcq/ugbXULxUV+SR01CR4K8DM+VgI4nlCo3caSHx0ZaUWlYLEOew0ILG5HN6HGKam4W5RfGGj2R5vIvQE782w3spn6rXex7VMR6C5dtjfrlVzt575ZXgrmdKRUYEjaOrXa5nPnLA74Vc9p5wRvtvdXjavwbP583sQki8jg5Nt4mbm/4KOArvi8vDW6X/h07GBHlOz/vYJcwnEAkg4fOPz4hru9TtDX9bXEWC3AuhMZv93bVKB52VuPRkVzAACQv5hFqNu6tW32XOiAqNtKnwmE7V8cA0pzKj2ENnXCoaYhX+hQBOWWNEfbHneQQ8W0vqcjfZi1kvgu1Jt5cojtupmEPYiIrIuoq7zY4vkm2+JiqJjvM0gJio7CGXk98vBMRKus1IVOCTQk4kr6cvF3mcH+7EwOsui99dB+ID+lRumvpdWPC6Nrsmj3L1SavPvfaO4qmcXnsx91DGlmLR8WTL9iN77hayUsDE8Y1wYjFzr0tnUhMUQ7vYbJwYfs31p1GMMqDXFAB9LiO3SqxH0jiRetPZLedy/K5BrDAJeamaIdmoFrnExbRIREKUv//x49DOP2C95aCfvt2UisOoqBz8AcBrMMcZFRTuEtSHrrxhNuFnqo/CL8IxdpbnlcUleu2KEpBxyxMzWRk+6VQJYtJNEBQTWQZbuV75SWUDjUEK3j23zGRtfJVdE6LxfRx7FibuIGH0jOlF2hKrbyZYirbes/9uaR6pNjkp+NxRBtRgu8y8ZPPau/y0oFWHAj8ImGUKof7xwRAvlBC7ZtWu7szypK7tmUq0SMn1COfLszcdihZNnzLK7lW+CziT6GGScrvk+5x/PaejZmMDGht1c3Cm+qwCcg3hboJ63/1f19cVAjw+3frlsgZo+uvKQsF9VmCS/C8DTp6m4/yTM9Coi/OX0h9E+2fyYasvs0xu/9eSBCfhzdPel4xsyM2LyFEx2zUjILqUQ1aHsrpLKCZxPTRfJ8VD7LN2CZcRsSc6Bd8D0XkYfP1o67nKxSUk71SiKffKnucRCH76ot9ZrZBq5cH7uAVOHHDZ5Oqi2UJKjWV+fZHHlWoOzif6TTFGs0WqC4pXFs077bqA08/h9vw88ynGp6X1GzWup07rzl3J2CWJ66hIr4I3Hd8KLUjXKCAbV0DQazLz1zyWZV5OLnxJ7RHvmlar3sGkE0K6Fe9TYglx3D3gG+EJuB3aD8W7UoR6/1X24Da6e4XhXVWinf+YjXz0fGZjpJo+5uxxqEjhySV3izjMrJ3LSF7EMTH8cpidINGlfuw6Pc7KslHDH7WaiaCL1WER9n4I5OK6YTOpGtwVY9ZkexQWl4bNM89hElc/q9nPOxmjpH/skI2h7+dr/IQBihYneQ3pE0XIogYvX3u1KaIvYgdzv7YoNCpEyiQiMFujafXUD/RnQbKnp8TxwkSlxyg/i/OI91EKKrEvO71NamPHTu+2W/u+BGYkTHtIDEQUXwXbhVBCvB8ZCNP5E/QR2HhdsduVOi+Ih2m3/nK6OTVBeXnZ+q0ADiH/ORoevBeYr+l9SxvRHD/5C5TnKX+vJoMtNf+wBUsvuNrY8iqZOZNvcz1mH3jNxxCe4/o6qs8+KWo3XrDdX8A2+S71bE8oSIl9cQ65ESTvqnaR8zvT5kel9JOnSJPooTHHBlrerSfZeQH6WQsIK7eHbT7xofsqY16g9XLvXZgZ9ygMxSqaXFHK90bkUdGhd8/J4qPkYFE9klUgL7uO2G4t8ejh3HLyJbz48o9C6i0IIhYR13nFSwV6lQDeUJSPvXD5k5+SSaXqzWchYzhpMXXbmyIZJTwi9sVkynk4VNi8Xdqrz0BR4NmCDvdr4QlemD+pjO2uVKuqIBkw9zpAwi+h0n2IbWutpW1vFKG35eftGP/BLVRSBRVW9NAl7CFu94/n0f4TT1015nJT/RTMN18EYEsqI4JqWWPrK82L3YhgOE0Rf6oy5j2edFDv8HbANxgZHo97LvP84Nk8H5OBUb+kqzPWXVf2kZXCVaqPPNzwcFVgE8Mwd3ai7m7f1ZenRmF4NSWcuFA0y6lJNtFgu7vrv6TJTQx6B1WQyaUMJQjALVITk28L65oImknX/glLd0Q4uY19LH2Rnb9mBSVdNSQQhdDD1tJnpxyDnb5K+kSVpogTYqfMWNOEzdtBx1Rn3qxYCaG5xWOY7Cto1PPZEh0tN0DLj5jne6Oi3UIDuAbzcwEq9CZ0uqubxXUgQnIMlBrDD/ffFOyTxbYYjVkOoxN3Ocomcu2QHuEmmufPAfaVl7foqz+oM4yXyB9bpeMcQ8Oi0qCgyTTkTtrjy7muB7KkXotUKJucGrCLCe7sPfMQ7SDL7VwVvWdr6Y5xVXn3HPb7Y6M4Tj8DUlPg2on5RoSy8OMkUhhX4t/9yE6Id087sWn08FxKOVPO97X14Yo+w3+xcAyo12P9P7Ci5EwLEPfxrzNwMTNrQOOXISi7gBaBvVmkc5kEKcVO5+DPwgQ6KWSDemtLxg9Zct908VPrM8D5eBsdEWQYX7S9ehpUETvEUajerzvkybhJ0gavvyuG9vMIiFFk9YOsUwRxL7+n6E0+IMNWfu18LMpySnonBt7UFrhT4bhfHs0FYNa8PTRlF5BEjGCuR6lew7dWPEu6mpKV59X45EucYqRAHrki7Kf7i7NEet00UkDIV2yGogm8zx6sFyr3Ob/+GaQwmR2cFNfxKGKNi9SHuwZPRvDGZvNa8VCXAugJZArJFw5GuAiRYKXYfb1bko60ZCeJSqloG6cMVyq3me3gd2YwfXtOK2JmbOPag8zFOPB1jxLizxv2nOLf6dir77XNZ7qqf4+fLLBIYuW8/AJEp5REkn11Nb4VBid4drveT0p1Xre7HAwVJQyCS2x+xvdnCzNmZbPWA358SgDuph+RKz2kMuNsYfvZwv47NQpDPzKFqkhBXJGSbontrlQVFKQE2fsSxjVmwKkMqZO7x5ED5M60Si2qdMc3ob8s3DOQeA3idseLws2IQVMvRTtsjI2tWbmPKp2+E+0GfG2YeA/wUTUiMC339kNi5C0z3r2g0Dw4dA4p80CieULJe5mhbhThtO4bbTgbsR7SqcWARXksv8qL2OMUXCeEk9zTlosRYa1pavHUUlf9y08fZJb2uVNKqxK7YF27Na1lfGT9cxd8cuVno3F7Gh57Pk0leVfJXO/0gYTFe7efxOEdekLx+jyH/TevEpI/FGlNbJVOSPE5Q3fOwICSNHBr6p3fV1B2oxPVjg5YfdsSVjAhN+O34FVERa2jSu1UVpYjfVz0MDsUHQb+w3cuCjk2ik84KjUP3/QusVXTGAiJTTze6fxb936JxJ4DVXA85uXSrXyQ1xekjQC5KHy5jI9bx4gqTwIqtflRl6kFmvIzdxz2FnjQV6+3ZkbHoN4kSP+j461IMbky0g5WFn+Yt3dZMArKCQU0kP3pAKTUiZrXz8PivzXnf3cYaXmQLaYt+9BorvkHzRuRjtSYG45fcH8P/9zDS7auL2THVHKlaKeP4LScI5aWbmGXSwTOj+1jriNumVN+fuuwsSNsOZvuV8KyguA3t74WX4toG+BjQrHVsDtP8wYfAbWkjx0A7KFGf3GdenrvqQIwPgGda3+hJrQ6YPfNqbaGTAQzGIpTlRkCQkprttkRg8S/lMuXrZXil2LAuaV/8Dth3pdaq4pcrI9Nn4kI2xX9WDIGSXH3erfcrRr+lFvrMCGDuleXHM38ovMcauCl+i1rIIIsxFXS0xoEOfwmzTMWcYQEo9Tyop2Zpx+Up+scnppMSfES8H01ZiDJfQJxVmrrqY6/SVbqcl93Yt4/aDE31VZNNJazAtfo68fSoOZTy9fvxbMUILNt2Zfs/di/E9T5c4ml73wu3cie5/agDG9k6Cc092rz+1c77TYx6juPgh3MvAuPWtvWWBAt5W72xJr4wWuu/zcPBddiz/1RsUJ4G9CvQ3yesAJ11ThrYfR/qRmyjspfOd87grLG4bzXQgcjH7amL0MtM7bnwF5xEO9EKYLGeADS8lP3PbInOhIgGetGpAevRjXrwpTnF5553JMR70FdoQ1yIgOyoJEzNxQtpcebyilwLwy7pQRb86BZKHp73j0ylHBfqSAVCC49vh2NZ67xparl7ofoNXd9echUr/17vPBxaCg9oX9bM8mzrP9tWnzIo2QtUPLlXDQIxbrf+p96PssuN/GLz2RMZok9YW6iJjnQbftZ/SdVWNotClRs4Kw/xUWFfw99TI0SJCc1swnDu0+fSWlQ+1sqVZeZfSuriAwQXw2yy5FXs00yvV8heq9Mt3BKNjl0GEhqe7BQJ7KW33SwKHTZl1A06DPhOzYY/gxuurdKLwWfZhPhq0uaxSzmIlmV/pP3PiLu2FTrLKHO1wQZzuqi9+7IGtUPp5ecXTZ6HeFT/zFP5/R5H0e7hjsZq6C+jJxbKkPJHlFArRf2ZnmnDOdVOCXknDis9LrEJethUyaiMGOXNnEz2ljdZwmwUm+nF15k/oq+QIoUcuJq0SawvFfasG6o5WaK4ylMd3cgf/9R76EHS+WedgFB7Ombm4091sKChZBC1cTUmKyqhTumeYhZHyuJpLBluMvuR8/GRzkxUOE88WRpCDBw1tuaK4+s31UXSraedrW/Rn1P7cyVERzJWOZwl46Wqhqka3amohPhov7Xi8DncT75ZEtsMtPlKlXmIRXjGAcBRQSEw1gjzhFlud4JR1J0fW1XzGTPZcThN8Q9ad9f/hGWlRdwNsyIbdwe/dOWPu4JzHdWru5l2e2X5/brH55ukFFnsZgQcmPa7XDrIZ9Sq6QEjpQJgDT/8wcKfOPcNrHbV/IHdeidbdN3xplDTxLi7TYDRsRvQLDs+jbnJrsS0hjxMh4y/Bt74Y/YHMZs/mPIy/EJihsOSb3OrNzGy/kEcb4GYFuhcwpKqnYHC5GWGt62rs4098jsPNXy1Y2aRWNWhW9iRqzwWu+zOyuMIhzbL/MFI0lbxu++624Zbq1GZlZa9jhFdJdOa9a0vCUvSLUTiaMk1V0jzndaGfvFWCc/8jki+Ynz1Ca8WUbYcINdW+0arkMYMg+XJuBN1t1PxW1wtC8iWfGOxBI15Nfp3ae0A9NTmfeqqKdiCuxIFI6d+EuyFMbITu4Fanjafi1MjBbv+/rOP5JCkjCCKWWVKZVjChl8UpPNxNswf/LfcJm9grOQukEe83RaYTXmSkUiLS8ugbviup1Ei9g6l9ltEeFDe8YsNRBZAG83aF4Bq4MfnbNwOheFDLw0sxkVx0899PUbEBi0TbkZnI/ZhUd/4clFzqXVS/hg1ijL7kt+wegY4/t8VBL18q1jN3ZYD3Z4v8KETCQoOD51nyiwrBKk09rocdkHbgQ3Uho7bl75XO2y5f/VuQQmmDPvDmsu0ApgPJ9tcwObi419HZtSwLwjEerDZNduaVjhoS8E0beoZxcOTay8oy3mzE4nRtXJR3AL69e1moQ7anyUmG6JpzqZGew7UtIaF2/ei6sIQnMLTvjaC+zpxCzs363Wrmi80NhFrjnds5Mdzu/TBo2UI1JrZRFdcSdsU/+yQlXItYs5VvlnrHs4Kv99cyAH4y7cb6wZCiHu/0HgoHFWF/1Tpm9u5Ec6R3GuW4ooJmnRJvqTkp6pq6K7V44GR42LzPUtqqNN9PfRfiXW9UT6ZjLMlw2HHZsDpexWEv4mZVrMx8MsfptH1Mr7O244YPMvxKmXkvTUMuFl4WV2hS4cYHlLAWx7AgwOB1YIXmJg2/dDUnAR+ZdVtLm/RlYIWN2P498Y/zZGbro29LI2ZVq6N1zwtfSoimOw9hRSfe7bSMrpTb1HE63HSr3/1bdC+dKTBXlXXRo2jfWOSp24XERdltbBhYrfvCsaLpbWZDpdZkgZoaIc3jS5xt4dW9zCYyHRCkkQ82PXKlM9NIrRe06fu1gTAM8GkS2jH0p+BQCqnvmh7505VADhAhAg0U8UBuih+mBX/LQwv/KTuTxeWsp4GYxcOvetqos/Vzo4NfG5PhLqCVV7hbmLqoFo/YMBb2dFbD5CdPntOXWzbM3lU53GjX/xZYkwHR2BOW3yoa3xmDGj8IzUpfDE+7WlGlSLtNky29mZpR0UIbApl+2pIqbnCwuuWaknooocPsZvpKe+8eYXBossHyQzfmbwqW6ibxm7XQWPYPCHUhltz5KeX3tYleE7yndDan0euaVcvVsDqmWUGVyYjr/g8Y6a5V+pMetSKcYBnMO9iPHNOoCR2jjCb91Vshc7JJ/x/LPOesKzC5ZOAjCPJjX9iiUUBN81aSvF8eP3dFj2iQRq1kI2D7Y9bg5igUqRRYjdpTO+CcNJs9tLZ0L8MH67dAqdD5FtjQus3PKQPLvsZ+6ueYBXmNV6Pw9G7jLi3hI4WA7/QhTkzQ2mQq9QciIQdI0oe+sNqd9/y1OCluDLxAqi0vFYp4/8lrg9psSGhPYMwbke0/uhB99oc9ddeXTLfY0r/6xSVCbjLkFSF5nx2pVplcwtcW12rTkvjXnX5Pj9k0ctGEkL8N8Z+xof8/sj5mZzZ52v0OZMYotTgeumXgm+GrPN3hDOww3f5QJXEiGDMAL4dCXZc3aWGVuaezug+3PRg2/rmHdywc050vxt+YgedU0YJlFoJCyFxSPaUBgtjHEpdxigCK4We/fhWDu0ixfZwUeBqDzSzg0bhLK//To/1MCgqDDApn/eUDcmyVohlgzib9y2vR/juxtg9YjvgNnKpBMaQ3IxOkCiG4WTMWWF/bLyLZfnU9DLROQtCb62sVnwhfFdtxLolYjcW/h7i7h+x2h6avycMYcvDG1psJmWdmosWnDxK8tytwKfGvBa7XPKtot9mC/1agfly2LolPL+7Crh6kna0vAXL5uN8OUTS2TzeIyUeXykEvsexdo+Pi4g77S5U3a+nhhDCtj9xJ/8cDkUS8rx1JXZzEGzmUHtL61oHJqiIxIPBLyadZWT05sTP/FYusf0EVh5pc7GHrwCmrEVa28RQsMSP1Y3inbOH3NWKq3/EnqK+dcG4Q348PaKYhxVvkjjgEUHwBt+abw7bNfLHuQg33Rxo4UiQULfbZ3/4cf19+kTTx1e15HID8e05KL1CvaHvrr1wposyPCap8n6eHx58WY9M63NYUF8GfocTOueaWZVsLdc9kuWHb2eE6JrIz3kC63IV1j91crTltxcTVCmL1yIzMTLH7SkSwJoHE7Oads7GVBq9LRuCq+198LXyp0MLI66UIbEqQRst497xlac3ZPz+y9aQ8YbgMPGzpWrgxEvrW+dg4SjBl+PVV9xycZaw8+i985XyaRrDlmtGQ8rLMpIHErq5LvvqPbQK/OvNiYAB6fA5M17B6+UvQKKMkFejegovbjmKa+crcHIw8ojP57rOQRnwC9AHYOJj+wJzcB0rflD+QdgbtY5X2bSP0ex7mPwHgFebnoY/9gXWZkXJe0TWPFO2AOnD1FcNZNItuKar085FeEK+aWEkHbxT1ZmdN0NiqVagBmoLPHCos0bqeyskLe0Ta4jXuDilCoVr5RfRAGxUTdGEnXKmLsLCWGQSmhTZO9H9BPYZ4vX2QlLbXsIUKTD1lzAxkmVQN1uRXpmomi8RVBzO70GFMYqi/TNNmBFXZ0346V0bR0X7sugn6oRqISn6fFKvB6SIG0zF6cALE8Cedlv/VviHEckndvhs/47DpYQuWtl+mW9Vt5B8r4ATcs8dugkaGdHsWzthm9+JLDjnMzTOonUP22Ya9XTqExciNmjZVMzdIdSeBYzzmRn+r/sQvuYi/FBN5t0Z86nSnMepLRGID0veGcF/VjX8k9AO9u0ojCSNVYMzV5OAjAhmzh4YF/uxt7dwCya4L8CdEK9VeKuEVk9lthII0b3fhUxYTXA5c/B3I3BXr5iYxJMdY+NAyWQqe13K59vEnwad+DlfESj5OMxxOn0QjEtK+MVY8CMvBzwqqF0Jjd24u2R9NJag5nZZDgrWoWLa+X1knWulp31APWPhPcIDFKyK4z8BH5Db/xl3DiYXMR+VNOKtmCyFtR7c+LpyZ9IGcbSqhTeLs3FGQAciwiN3CHCGsM6TZVz9DItPlzPI6jOykgk05LszxjyNbe23mAa0hzRIDBq3ts1ufDu0WEkTEGg0e/Jka3RUriKDGHjzpX9i9mRTPBq/XPZub+CS/in2hDim3kBn9mT9yEIOpPGr3CLvetf8Bft40qdlcJJtk8xbjo/cN6MbP0rAvm824kKghWV+ETGL5HCzG4EgScYB6+ROlNZ4Fp+9ndZ0DEjpuNhQSTGTRGw343zkpglmcRwLzXLcZZJOSAso5Sbyb1IH99NalMAPj55hvDgj9BINfLOHnf8D3Y3y+JSxauU2rrVqvaHCnGcU9DI+/9IqRluVQNztgxZWOcKxyY/HME4sieM3nNnLISbmWE5Jgf0AN62ORD99lncABt6Sdsb698X8foYndwvWqgseWPFLj6n2WQ2HJg8LXJR3LwRLOUJI1R6kcUj0X1VmOSPnm+Ovs/gnX2JDU4hp9znscoIEDUFjZ5cOiRcNgnwN+3dRprgRh/ugH5bgEufYoozSN3HzcnhCAZgcHvQ+meH5DKkJQV1FRKSlBL2tINdEZcYdQZ6eZZ4Is2trDbe/+TIjH9kRghr//ei3X1qOS8O72o4ZhJTT4qXk8zoKNcwjv0JOZvlbfS5NvkjsJyE+7eSqJMGLvwF6TqPLzhue4OuQEiJHWAnAbvDLZgVpNpzIsl4n2zMdXs+Wn1Hm3ddDlEBP7GWkRRraMWTDRQY4jYPuaSwqoahQypJr0QNfqNAunLyCM173NEacYiKSk+5162b4F1JiDDE7VrRkctslMnPayE0taxdWsrc+aZ/aVOHi6RYlB6vxlnkFHGgVu8WKySuSH1uyW4aZJckk3I7CzMXs6ZQCW96BM6qOFdPnfnaONhGm8Qb1gddWROsV8kORsUKKHUOlDaNGOC9fTMrjGZ9fYuQDGj4hPUV2RUvc4v7AiVB5x35h4cPnS9VqfNAEQvmDu+VgoaD56JdiwLNR+DcuEcv0o05VCr1+4XQhnXATwve7rfRHVmcLwojp4kSLxhHgVFC/jxnzxePu+5t6Te+wX9l/PgNlylouqY+cWytXuFPS39xAIWEtqlFQhW6YhLJdTaeks+o4Wc6epG07K/GWUaZRulta9uPzlMPJnJP7KSBjnW+tufL45+z9iQJQe6/JIuAmffzf6n3LsFIU1lmkD1WeGXZrYO29ZESX9zc1aOWbif+frDonBD/JfNVZZVLnEabu2c+Lb8mCHvEnd6FuOPlvFb50d69+ztVFJsB7/0zF1tfTIVX2P2kv0RkFZxEM56khMeqjm5HPX4qiy4/qaMMdHOJj7kVEaA2M/srJ8ZnURwWpwi6d83CZSw37GlIM/htiow/JRiExzQVZSi5U3WYwP9qchR0gzNZJOlwmnYB0VsXIJWRPymQH0HWRYrOxcwuBN578Rj0I6bv6N/Wy1ioS1lo1PRRN8yv5TsC1DvYdoLDePRZAHBnhB2Cd09N/Jvu4m/RBh/C5FYrnh+RaYQhoHKun2CyyZn44Zp8Xynks9PH2Y7BbU5pOrn3FIOVoLPxVfn21vXR0FUkWdwedjKWPxNiFmZAAriUFPAmhrWPRdUHMvcjahhZf/e6zr9Gz2Kf8kGjiTYnBNlhFQf58ij/9IiQvxIHHNysArGsjeXE849oPT6iIqJ1tnZfAdU+u4dxeEerPnqctlC/HUPH2Y7a9SRlW+XFrN194Y1X3cdRQ5DbnWw+18Vx4m1P+GzQVW5HI5TIkeLImkIUw3WJK2cAbhZTA3RwtlPirNsU89+ElNKSjk8QisSPyf8exwuBQJAqCFYdeK/QSt5duiS7A5+kxL5p0sxCLNPWkfSH7MfD+aXWxum9qVIv0yScqwaqfG2SHr1jNHz25+Zv03G0mvq8zEv91JPo1z0PBip1V/kC4VyOrPX5CbHXGGRNhQsvRN/o570t9bmdc57apQw8m32keuxgwlNUEvTIjQGHtF6MxO/mbEZi/qHuXKugdI5DG071GanOu8JXrrMak6uZQrsbvfnh7199BbpPuP80qmMfEs2sjMqAOPgxPnic26K+AhFcfTjNCxbZ6VzPCCjEDRxVDbBFeZla2V4o9sxCcwax3dRLASr8uOqLqAnaBp7QFmhUnJzuaJ9KGQmssX4j3f26savy9+UWgDBzcfNqctaDOeRg/Im8mPFyy5VwTptaqA2w94YMgeHzXCrQbQFefvr7VGhAiXfwxw6j9zXMTLn2qsHRjC8XA1vWfST1uLaPpm+AR+4gYBNlM1mbaY318S5/D7R4+7Y5Wv+BynGwAq5uZTgrMZRLEEd1Q5uHY3Ah15qSHw70j0n4/DlXP7WdCA1h5w3Yqff39Sv7v5UPDF1+HXKKUrijlieZUoaK52Z9TYB+xUVhqTdPoETrXiYVVLLKeu8AAzW5ujS2mFZj4f16/QfMQHQqYt9//Zl5Q3X61SWBJRl5pJgydXkaw2Wh2eDnwG0MszQoGNDhBr5DSZXIbWFJd+W3xHvsqjrkCBem//UkxVzdPKfj31QMylzqhNVUiQq6xWrNi11ynPAMjlt552eIkS81BbKsa2U4ycv5a2sTCzD4lp68iYjQ8V/3MJtiwlZsdNIeIHdsGpzS37GTvjFXLEB0t5n9Q2e5BZ3WNZiENWV5+yYcUBrz7bY3C/L8ccsihhXEHLdkl/r7td/qiEVbSIcUJs5O1dumZ+atzK/G8zi2ATXMNTqVPNgr18hecCRzD3/BCHvnUAOU8ki4i1hv7benvvCvPm4HgBbxr57D8t+Bvzj/t+C398H00us6vRqcaWHbiqtSYtZEuExbTulO8smezUfUfZgi/8K27yf/2eMgIwYgLlo6o+Mnbu5KyjcAK/M23u9AYjvVm7nbNTXH5FS71Dq9+3Ru4VLNRE30oX9/gjbFpp+Wo8dkZVbvCn0CqzAPXTpVZfC9I4WX0nBRlpmgDI9wb0OBz04vtiX1C2XbbahiRVQRrSU6y6a/ULkUajQeXzDq6GNa8tfMdVg1ZShTlF7p+uvIBq0AG/oOF1HfHwO3FtndVPX8bChTUkzwERPvK9ZXK76LRKPw40MvP43mRTfulC1Y55NqyuMuXSiG0OMmsdf7KPMNzpT4Aqijs9qOUlirrLxV0b8GaLUDiSlOl+pq4uZMTItpEjvMhjx5lWEtsTmvB+KMugAwkZ+DXcGNpfZPTp9QXMxrnjyj/rn/HtgZ2ttf7aoBIFqKRd7yt7omsf3lE+XT5ORp/OH+LlSq3ynvErvMRc/BGI6GSqZrwiRAvLKwV2XiI5zwUUQzzJ8nEkAuC84jcSgSrKFfNvZUQoipmGwZEJ+lbrhSW7T42D5vLWCKxmi/JTog9Jns/8qmpCaQon12XBLrrvGcwBQP272UAWCiOsqzdTscMg09M6cc+XAXtzB0p58RKN4Gms3O/5DYmetG+bQrlGuV8NE7XTasHZrDew/XyLsNxn/GpzsWBhh9nQjvYgwcJilRQcdg9GvQ/XktwirKfUDkR/B2t9BuiiHSdsuYh4TxvJhujqnFLv6wjJ+UoTJYbnNiT/XZgRut/EvwYitPqSdfucpOg1Jl3617iMG9Jsh2carFrQOmiEHD7gMb+ru5AZq8TCtU1fu3xzqyJGuAqgqAZ43AfzZ7uBmkp8d/YTdCsn22DivnYPuLVEoeb10vrWX4JLUUDgVpXX17WvWwQnRDAhgc+dr21hIicIwotoJpw8UH/lmC5aGQZoqyak/yMtNC5Jj34+a+61ajIllodkt+zYW0rSPZryeOFGUiByby9qZAN2kQ/9AEBOo0wMlvy8+44hbhy+OEZ7I1e15HmzmQZTyziHl4cbwqu4V548Xjz4WDq09aVcuLj1d1/CFjUfdh6mEzcajIX4fuKY165YWiuesiQp8MuYyZpLk3a/m/cYQ9lOdF9Sjte5UxXDMaqdzs2rxbiJ8Z7ahkcQt6BZjC1HQ+fXk/Uwaq+R1v0y6fk1kEXGBWzbgYw1yI+zbdgT2WPt9hoQOwiODhoE7RwYMNRx8WqaVFApeiAuLceQ5+2W9xDgWWMCXub5pxe5il/+Z9y7r1scfrP/Xe4mYIV44h2lyX2b78JTHj7aGLghDsoBFqVOTaC66LyP9lZTBa6+j18GVYY5W14SghIcjz4+82DqxFlB8whyhV9D4SkmKZaRl/p9QLPl4RwgLsUHJlhmetXm+ZrOgQe5U3IlB8bLgUlCJW1/zR9CCL3C+U/P4kqIkiK/4cfx0nuwWV2vxvirL59+tQyeqfmvMVEkoKN2aJiFI3ZluF8WkVktNCkefbecMY7QJY4F/jkLafp2NQQq+qntyzA4LfbscP4LHErCp64WDqGbIriJF6jTtybX3jP/QHtSCnJIuOZE1fYCP87Tr/z6L0a1+bIgJifgx0vqetAP4uoMuZZr7LWJIc/996SvftBLJ71CU124mEpZXz/n7RFk5uMeJ1cMz14mZCqBym81Gk/SclzIfYsvCYwnUZujckxfWTHH13pU4+jENSdnxDs94qshsvKA9tQR8Kbk2PcL/7I9GY3xBZrRHxbFlL4MHKaOdQOH9IDhfBiT0eU2zfgPSahTsuhNYiKJXyUM1irzMhNSsx8FVGtviuX7UAHB6D9ZIwTikLMtEoQ2WK8iMNs4jYS5dZuuxgUMQyYfd41HVTY4m/LE/eW/q9XcoRlrYV96y+xgWbh9RUH/Pk2Himl2z29i21vqws2j9r/uzhqRMPMGFxJECKUbqfFyA+FZCf6zI4Hzq3K9kigkGXyxzmz1tSZJdS8Kmh7Q8MdVj2ZeqLkJpw8ei2dJR6QKMzIqZc66ReW0SQ24MJ9CN+2iHa8GpS+Mh0ZJy0eBWwS0ESG8X+bRXrKr/RsXasLLHep7/lB1yR4m1bZWh1o7HEp+hwnG8TAktrdX12ad3rhLvbMtwP/nw1Zdo1S0pQoC1KD6/Pe50ZzMno5vjkmaf1hblrroVkNeeAU3XKkYzY0Mhg3ZiKy1lhBWWYMHjszWzwP446zb4OkH82Og4St6PxHFbJwdsGZSLLtdl5SUC3FqCZCP6jZZrdwQUTW++Pa/j5PsKug2HX3FSMzYoGSPwbIsl4+Jbr4jnbBa5mD8NBOPE8C5MbkWr+mkMDS6RJX9yxwf07iggBbFxMjcbK+Hsm3m02BXmRxrgDCsunIevf2CYwZW5yXo9mPYMXK4bKXw4BH3KCdGThzve7Q+riJE71u/rYdTEBflzZFbsct8FUlnGGJE3Vdk6Rzv5LrQykkF7eLwvLKD3auiv4blPijv09Buj7YHfCQTv34IlI7x/T/EcEUIkatUWpjHgiNvb2oOjC7BADLMO+X2KyYK3FJQZDXsM/z8iNGEapjUdJVvjrqIP/i/QJNKwFqHBnA6uWkVfjxMmIL6uNNKO7orLQ5K4HCqpGFZdD1/om8y9W/3GLxLm2EqC/EHjIG/j09fLyIEHcwOeM94fuDcUClacihE0spLfk2/+ICfMxs5MR9si3icsCRa1HX+Vdj/aUm90fpdgn/7HALybqF9BiLylHpEBBAW1tlU5lEhJmCEaQJaQoOmWE9PVaruf/BMEFICMKAABQTMedPtf5r88l1xxOd+cwTMxsNuuyxjZsY9jUdHf34dy5c93tupzu/u/VXqWM5wbl5m9+ZDjdTr60ozRnCmNhM66mG+wVj2FreaIAFo9xClqC37cOJsIObpNmX641iAd5OF30nTouYEzZZVxcZzpvJfo102Pje8xepLg/s5j7UgMuZP7aXrME8L8lIlKcpQfy4LhYh12CTl9lwrzSzgOoqvOip3vka/gXoDusJ39aeUBI4gBkJGciptppKvbIzEI19+lyrST3lV3V4fxb9p46i9QrZE9jgyVo8r+IRcb3v9ic8umYykNlWn6geSzPwz6wJNd5GXQ2pT1lb0poRZl/gA3wT39Krzi/LLed1vcqDS67kRBuX1ASv4Z6fUVl4bUTQLiCULxcb83y+21K9GE4IyLKmVDzOYa/NVCc7cV2UUsd0C/i1E+3ZoMrAvaixfbJOgTETcWuYb/wSthxF2hi+OmDBl3MwrmigbcEXw8OqFmzpdYv7B/Qe4IZaAF56fHTiRGwvN9L2TxUWhYAOMDmPPGOK2ieGKdh09ln5ioU6rGGtBtqLsXg2wmY5swvXYCjRWqZ6UjkfR1Ra0hvFdrY04BhyIW+Wev9G/oO1LAdjRniE5G5rT+qmJwQtuLwizIndi0s0ACqMMkLjyhLIltbz1P0uTVmy9JTL6BqAe7mgmqVYE8FGrbZI8AVtZp+1O+YmGYvVySD/0MMBkPTS6TI+I2qpNT6x8rah9r+FR35/C2twO/3m5EEp97hYiyp6dQdxb4FiLwEUNI/8AVi03YyxVfPwQ7y5INPF9HZ3s8b6Hf6CS2r61Zf7p6kmImtp945/UgFOACMAVaWzvrjMS7cBwQqlC3Z7x5gJRjpfxjPns79y5jslH3CTLF2S7mkwKEZ5HutkjPR15HaaI+30CmHdX5uzdc1ckxYBGjZEen4o+AQw+6/YUjMJfbGxy+zwZHOIQHbj+NtrkotEPeuD1/6LLegTH5dan0yUMbtMqz1+PXCrX6cVxQsK+cegaQc4mUQKjZM9THCdbqwJfN7Mo+yFmVYG2H3e1V5SjdvVGSo0LTXyB4+jGlGYk3rEI0K1P1uObOxJmjXPp5TniAoTWP5G1X6B9w8LGenhv3rH7lf+BztdjT3m1vuqCpunJzhCfKE3qgraO5pgDgo1Xj2WkzKuIiDx+Y3AhS9/8MS8S9vd+uS5KrQPc/uXW4UH0Rs9EaN5S8vwWDvJLMhV4Ti58ZpK3Gt25kns8pKOnQC8OD3TlzWtre0pv272yppCzqGi2pgSHzpKR/IJnXQp2Sy4BPkBNtDJy6gI9p2/qFg+3KLtLYecTeQ93n5BFx4hRJ5pnwoUjUfvCWhGlOspBrQTdru1P5YlFKc8QxPLM/2+K9VbB1AhOM9hiziT9ezP2WAuo/EU8lRruvv9ErzKjlJtwqfljF2CfG2p+5U8m5+5iqCbb0zHoeNAO68RUgP/U6CbFuNrD1PpakOJvdZJP7K/MYRTyHmW4GSjXB0tjtJzHfNjHT5VIfuS7uUdCVyXudKkAMr1BAyOxns/ek8WaWjKdIVspqwF5VuhjsLVQDm+731zYcmRx/Ds0l3skQCdIZ2JfZ4JHMLMTLn+j+AyufgWjw7W2uB29+EFwF/WgvX6yXD6cPdK2BiKbT0l7sQa24aqEv7GV0UvhZW73MqydyKRvTWdLY/P3B5Zy5Fces39GqqpzNIgad7AXIHO/Bf7uUCeUrW3Z2BCcQ4TZprElJ+P6TdQOcxZTfWY1IuItgJ5NTj4o11t95/wTNOzJ7842zjNen0k4ZJxCfiUHAaev6Krq9JovfQ41/HixIDS+nAudjRdm2eaKbBm7/Emo20tX3WNnSXM13KUo7TwX60yOlAr/ToXPDbZNuW7GnZnZxBOiZKtqO4/FVQlW88Utm3ZHJ0m4RSBt/ZdVvz5MXWyORtWS+zel5SRCdaiYXk6kqdnOp49sNEKPfqLYQTZuJ07HYu09vbAZfYiksrzxzgnR/oOLmlQK4g9aRWY1afW7KoNOBg/pk+iFyp1jK7MfPMk35E4i8YJy64qjvyImYzhaGYNkqVNtGn/bLV4jhFhs/b8DHfYhM3WZHeD1mGF+8BQ3R6O/+Gr4oJe5p93UlV/i7XQ09FL+gBqu6Qfv1aEWCQ+Isi6Yl51LD0eh9fwTKYfTjo+qgSCtI6qeGOiS5o/E1NiogASrFyhcL4taWHCmBmn8HbYo+wT1Mwglwhgh2UG0FTUB8ZLMAnfGXLsQKGyB3gFfmC8yL5XHHu3WdLcanxNQ+X/TOBkYdaIcCmkjuGR6SWRAUqaFcw1f58xh5zMg6UvhRiu2uj9p2T3o5Eazd+UAndRY+Qbhm8iIpe0cz3QRIzz9Mu8vn4e5t1XVxWairubHhoktZI5UMs6eVuS1AYdXzPTNZntUe32rYJcarFrY0+T0N5KZ5mWoKX1uw99WtFoiKfAglblPyUVr+EI06bqbxeMtxnZWngRYfkEBTsOW8Scj5Xfb4sX1UHG79uvHAYN9ycaxaGz1ntKOo7tLSyjlICdbDJJuvXnoKjgpfQARrZgrTEh+okBwTlrbgVFc0Ot4SFJJxjB/HCeUHqdbbh0u6Mwj52L/aWEvmiWID/nmlDjxLNuzzdNa7zjTiWFOKqPuy9IIP4E9sqaimMQiFVO2/GMNwYqUXU1dNfZC6Z/RVf1+jevuORWl3Gg4i1C1lnGwdinCYE1tilZJ1za2VRIeDR+yD+u8qY2vhO47k0q/lIWSeKj8GjAtvkNoxUeT6zbY4Aj1denK2Hx59ESSbKAGhUzAG8j2k3LebdagndoQyQWPbS+zOvKmR8W3PO+SPJQEKXXfo25MFqoI+KDny81kdJoggka+KKXK5ahZz5lHY26t8IsApIinz+vHgIFy2kX82rrEbcKmk6muLHTwP1AU3OrctslYW1ESodBXvcnJyh8H1T/xzUYY3E0vhXugv7LrtAMJbIqeNVnsT+4hOl2bRf1GNhn42r0SFkyuyOrV9HhNo9afIOO+IKUoMaciA6jSnOMIWoi6nb7jgsgSptKhawjZ75sUuLrf+8BYPQ3XRs+aZBjLoKLbt02ggsYPBdZtOHypjlgTedl5T9EE3STAX1+4AmYGSMbE7XPVgrU7ypP2ZMizff9A/+VFqYLPqCDbtptMe5dLs4Yh3PSeXUG4cnnwufhvTmQ1331SOBGwf6PYkpovbEQIx4dqKgJ9jtn8a3HgrkvZJbiJPb9sTjQMVPTLdIz7KXOxVnl2yCVQV25JRnHGb4rXkGCC1XOtyoPUMqzA7pGgikLZ9S8fmu9/vfXIabEGn5CqHDCgbnpRb8y3F5nNdskKTwnJrB6/XJTQb1y+MjcDISvHq7a4wvM91CKyrXMyRd7YCFhxHrjIVcyNuQWKtEUhxZw6v/1ALlOpb99ube+8TDWMxUMjTesr07MqmlMDbhEYc7y20OM7yqVOSq9ZDCbnjCbNOO0bsQRwpeyTc0XFAGb2CUAP+Kr8bX3p2nsDkVHJ5vjwBbwdv/ySyFk/ZEWImMOBF81APiFbFNVBxHOEFVrILOyHG3y+7Anf+dHZ986j+vdPhDTBB2F54md7XOuiNWzCsqQbHxThW7rK5M/IGDU/y9jESQlT0+rfpn+Xjw56WtXSczi0HDg+CPimWG88IERM1vchracdK3UZhQonh1S4FxUng96lz4RMZDhQqG1eOHw1DhD4JgvJDCSrF/eO8NNMh9g2eOHnWEERECP4GoEve6hf3u9/oAqEXm9tVq4JkfygTdv+jjSdGWfsqYM64/n0dgU+TlBmxtUTPM78sxDNhdeTe/qBkUevPXkUXSncK5Ejpw6ULOx09bh4al1KrWXwrD2hwYWtpzE76qaN/JTKoN/evT+lQnkmVzMl3OXXKa72VSv7rATBdV9bdkWgjUpdto7ZLtFvyRzZWSxj53jeacq0uvlHndF3fzgsKsuq/HzLkWOYAtjXdiSWlxXl6W7ldPgGkrCwNFdjRNKsXd9iFOwLD4UoijJo+clkmqHw+90qQ/FPcWENpYPVE220IncekOzIA3Nz7EbOf7u7eBHJ4shFDdzXOCFtxBmplvbHo/wC7dydl8h22MiHnl2nieivJQ8R3xq7cGu7f+2PLvzXPf5Gj8JZsqD37dDYt6/TsuosCl6ZNAg6CarHCbvGN/AAHY/h5my8ztMmdUZpa93Gk3+OHA7IPzHi82ieqELdv236SWOTJ3ZaF637OzSPpTcRE7aIJh2r96cZvpH+ZlzGJzfunHNkW2VQDNK1ixwOBT+fNH6uop+zZz0mHzHefbyuZLpZvPOB/auQddczvwrsbfk/oSzhJtUCQGYGZ/bbSM2fNmgIOw1EDwXIL37kh7fwlw7MJjD1MyW8k7xcd+nyAUt1V9m7KG5HvM6RMZ+EfuwY9yPm5Jtzsld4TpUxv8Yu8JXzRDUd2rcvxVT3qQqiAmojYVfExVRg6uUWt3KYG0duVqalWkUAjTG5anUomRsADHODYiVPI8K6w/nhF0IrDTWs99cUUm1i2KdeTobFM8jTDt35P00ugN0AdGmU+GJyceS21sy+ZlbfQMRkdzN81OO6VlAbtojaXz/Bebu/Oq4nLuadCqN0PAtYzwCrJ6iKJ3niUldXtwzMv1C+GrQWNSqM30Zlc/fS7s1e2VRIw41OMimmcjW7ikMqQevFUZ7E3xDq5xXX35rDvAhnFywuQLjKYIvJUq9D1fJPa/jDNf6nnGLX8FtX8YIePjCvYKzL0XfL88S7GdQmKmN014OK8z11y70jsTc56Na3xcjga/WvLyaPESm3y2PELkLlCl9kv4A5/XVYGmnyt9SPjiTsz9O3UrSXk2iK6sj72eM4CP03PCo4WtfJQvqmH0zvZEoAPrilpoc0D1rns07YgzRRG3CEsXFYiwP6XvieKci/6cLBi5NTc7LUKanV0UGD58qSa4gFaMvHZ+6KfaKfPaFMnWakupUmmZBxeUBj+tvT9EbTVIFNVafnr3HrJQf2ZqXW4t3WnPPoYRNFX9fSkcPkPuVvQp2PO6E17q1vqqUbTn2I5U95dg58ycq9/aEciYLRnA0B3bpzQJSfldTyzSKyjfa7YjD36JiFaKOB50WnZmll6iK6SAWUU5hD7BfWeaXU3JbYnmgr6tcpHwP/R/5UmrMBMT8LWNkFw/lYixcgxl9+OgUum+DPFYobGN35PXuhk58HRO3kWvi6dfAXSv2AYxY7A7Ps9/z4mxmzzsA+0cKO1Yu92lIWxjo4n6BRggJMdRp/cvbeI3z8qFmondbQfepXwf03Kr6rZJ440KW2hWmfBf7siQ6S1H+YjK32HfnreHFIZ+vllPMuHEL5Ynn709marnDWoQcL2yzbv3hUguWaGQKoc7noqXctM8q5nigJSIfYKwePqjsbnmnDH+GS6bIokZKd6DUNIRvDSSFVy3OCH0Qs8sXV0Kc85yqrMhRu1y6WyAoyrmhBuu5NWYUXV+LJNCyG0nMOB66oUKOxxIObzM9OSRojQap1C3evxWSI93dkl+9Y07Q6WzrXmAHkHqj9T59ZiGvSjh74gAQpWiQk9q4LhQ8Jrj6GKXXFyVK2FKJpVCVTRSuItjsIM7iqMk+fxZbzThd2p/RMZfHxXtiQQpUY88hrzuHE2P66s8DI4FlakhxsvzziUETu+f8ff1YVQOInWaeE+bYqT1dRQPI0EUfereaXmJTmXG7B7tnRstA+7b5WgBVVjvvRJJd+HyuW45QpWweM5552tONirzVZYKvluzZAmgAZzrzrVNqKD8ViSiv2kGksl48ldaVDuyALNmndyZqvnAtigN5fmA/WNyR3K+q+hIS+qbxJRtHgYxh4oE1NDzk6Fv3MxEnsnPR1VnROUgF/k991zemqr4o4V7RbI5Me2Io50MVEpJbVCw0cX6AD9jAvvh39rkFRWNjO4c7wnGUJcRZm8TvKLK18jbOkMyhrgTiAGprNmuwppmoAJB8CPRhH27qGrd916eyt/90bWZt869e3Fc6Hc7CdmRm1GgUP/GNJTzUvDFKYyKbn5hdVSj3yfj0puwfdkJpVmTii4pmEufT7Z5XTeYlhRfyOrmg80Rfzhbz+oV7Ivg3rORrdp6n9BHo5+9Omi3NyMhos3wAkDDqGVuTrrl57YbYoa4J+eJUo5zaLjfNW9ZrniUcO1ro7TR5vpinSSY/GXHVb99azYaHXta4ZmvEEPNqdEqOq/L47GjgM22hrsWynWNYb0BUeHce24Q2Xa3nXXf5EcU8h1KLcVD4DjoeGte1AIp50i4PWv9TkUhVDRYrg5aYQbfz3X0CH4EmOaFgsruPGv1YqdoAs995jizFy//m0uzmAvmxFKhA1+vam0kjPEbF4SRHCt26nrcA6VIsT4sUO7bH02rz1Qs+Mpua5VYRqj/iSLqEf10TVZFHePV8ROx9dsvOijexRz5xOVvyTwQeDAqloyuuJp3S5nIVdFN58SC7YJdH9y6vVYQnAeXTxFtuo1FhYLFBOCR+17n9m+HWRbcEg7ViEITHl7edM/+WjUYskHZOqakbefjs1XIdqwKk53gsilFZDxE25V2kq3b5/05ghrjG3onMf7k+7NKt1LLZvcNhwfrlUf9SLrmiW4I3/CaV/9McHXw2UO+NhQm6oC7fitfK8yAVcwTA20QAs20yGrgsQupSb4Bb6YU0Dcr3SJspPRHS/E6Gr5U9zhfLU2oqE9xFNbW9Kd+Ke9m1mcwfkQ8Vrrni6ddRLckdBiYztAJix5MxR5NL4C6LZBLnsqZgHBDd4nBndT7n+FCxXORURUcms7RiQarUWBhqnzM3AzpMBzVFYXxSnFAPxBRbx1F3zpuXfTYFkNibx2W3W/4l4u4yZOGaHX0o7HN3k986KPctqg/l7Q6MRNXX4Krdke05ZaHAVI+ZC0xakSub1qt7gtu2ESXzUQ4tDNVOpiZCWHIvdfSpno764C5VehH7QlsXDY+VF3b2tbywtYdOogEEQMqMY1maCQW2MwtJdaPSvOcnFOL5lO9vf3qk3pNSdSkq/uzx1SIyTcoS1nfsj73uXMXq8YOlJKrSQnejLQp7kQSRPe2bvAHfnxbGT6TwWRKh4+XF5d8KZim+PCwebvJ3rkcFg7ZXdeUcepfO13WPtOehnfZSRWx8R/fyX50SlxwCW8r7u7NL6qJbYiVMZt5HzUqysp4+yuf7++pPB4vVHp9su0rGxFqc1xdGG8RJf2aExwztmR+G6RUkzjia0DKjMjbSSF3gjOYcgTbuGgVI3QUJOVNg4yi3O116TaJ17LZAwkAMSVsedEvFCjoGVCk4RnitSa22Li2855v5jTNHcLdpXw2r10LNQSpb9cXsC5Qnl8OEEgrQjPPYslgWTHqEvMkh00vWT0b77FWgww0LXkTRmIt45M0ZhaFYo4Qp7ZP02ZvZOVkAE5iOgzclRKxnvxgLfn2sVJstnRct682V7Kk2VSfErxhVVSp7pL3EJXa7tbw7GXqzhLHqtffNhyuS7zogMGOJkapXPZzz+xPl+zRRv5FaubZZVLyrpTWF29A1bPFf7cndlQceYHd05wcSxzctvi3hRo48eNxqnj4BWCvNSF0Y4Fb8OVzUjmfcCWpz08h6tAUMnCoDB/YpJSl92CdqePosV2eXFjNuZ6ojO90EuRMugoVvI2eZVO8y8pQoGRknbtvOFA3XmNqEk9fxwrnIcwnRnPvo0rW4oWbtMrnzklp2VdU/MtILvUrQhWtrSfoWtnHoN+CrYCfrGAm97E1UIF8jAPEiuk3k093AKlSFKDud2cN9aL8bvJ2kk/t4yXpMjO2CcyqpM/z/BHEO/+0uQOF+fdkn50FlTVj1FtXv6/K35XyMmCrkvt47rbLS+2uCYwPcprxTOgyqhUotn3zKXSdtMPxn4z0DT887wcPTA6tZ1V6wg44f/qKXQxQHfGMw8FY96zg1+e8PyDnTxJL8byIIIAH7EVofTEhLr+MhijPO96UGB4gcFzZjBpX+jderGyZKEmJZlg/EsYfSc+Q+DBiJv9wrlfu+DSNcq5qrTHmhF5RcooH+gVYTfrgXdu8M30/++3CfQrhsBr/WqshSgDJZttox+ifnsbxjkB2WZFS7mLuvJZiLGVHv2Y6uiIqsm0uPHUvLalPfWIlZm56UboPXOvNKPdj70PEREFSVHQ0bjrn2SSoIjwxyxd3O6/kElPc05isnwyKg2vG13GgqSj7eMPcSMsQT05Cep172fl72qS23AAdmVx1DlTdFZivHendnvAUnw94OqjysIq1QZhxnbgSdyHE2S+mrW8SeUdSvps1ZFBSQSlq2HTY0uvOUvLgycQRC50f3InkSoLPVM0TPNx/P12xc6xXHadvtQiNU9qJgbc3fTl23L2vrHwsZbByNjJ/O1c4KJgp+vfGuThHUmrnTqnyciwoio1ihXwIMLcofaIiG/wjk+4O7FZMr3hu97KK9/C7s1b9J6e/pErH9VpqUkZ/NfypsuVS6JGPjDn3AvOHhA0HcGm+3pJYIi5E/XMJKAYMyKKJxu5FVZbfgKG4H8ScFUMPit/3DyQJbOVXSExE2f6XyNj0H/a8Pff680JfvV5hbBPTmnp/adc9dOcVDdDa/Z9VbEKZJfVFhfRlnly4eInMo8b4zm8jAIOWWAuERPUFcWl58Z4hTDOHqEp+EElW+c7L4lKy2y60ZmEdB3O0lwB2veVpF5HLSMJbCF05RzFLZUUvVWyxGLwFvnpqpuZvaFiw0wlGDiwRt1knL+CNWnr2wGzUPz4VX7I6Rg2B8TMrLeifdvgq/Gn0OXV4OggddWWa+IGT/xOzvWoj9ipU/ErLFo3RHKJBJs/Uei50lj7SkvPYEiMoqrUW3NpZvMS7ynP0QF6zpd7Y01qWdnzCO5d/FgNrEcpmuo3OLwjoFcsZ4e3RZLAErQlFodpbpQISQiU4j2w/+KTvQYQEUJYb6oQnuuCrBr2aZOZDE6yaM3dZsxj20PjjGFpvFTBBPeLE2yg3/cA+RZxZ2b3Jid1R0bKc77UlX0BhPRhGVNKdBumdvR+yl8Iau349aezI6kCf0Nij0Q7XL1YpIJP22kYRWIOhOAJtOfaoV0jOudiVBue5Mi0OFhNcoKT2V4FnBbcRaL4r4QrdipRd4TWkM+EaFyI+dzjHrhdiTTyBkRtI5WG/InwG2WPbwnEEHWFeNNC60+3wxuZb12MSgCAkAHnpbDR171KEo0w5HPCrzZsuE1t0QDa7RkrJsOx4xPFtymJjFwW793738yeFAnn1l1J2EKzmywp5oNvpKOSNMtq4bWA+obDjcznMA11VYdGvRICNVFxxqwIPiXUfeEvkGQO8jLtDavdcNbPl9bVVDFNdYzauc2sSxclj26IqTrHdQL/U3J5f6njwS4LMS5vvduaTOlCJItyhfrtkqfReTHtviX4QDfv8v4wu4UAUEyWCXLzughjDpjuiOiiqmEwn7WNeoDqh0C+BraA46NO5JYS3LH14omy96UIWKvfRioHsj772WE8g08aM8N0jFVEQRIWMHsxp0EsUTBnAs9hCPjr8w8dV1xjXlc5KvsK+/jDwCh+WLvGsrzr3ejO3/Y3drjRaRcFfVycHB5ecZaOg3ALkdSosLSLRtzUGcKLogx/6wzflr/XwsWRn2zkGVp9Cvpx0Sm0u/d/ao1RawBlDGRBwJvS9+o2BmNA8Yvi+DYwP9kp1ixxkRUVmuAW9eLAc9sT15IulzfXoOzLT5PB0REKA6Mb82LukvhvaoHy3/S4lV4UgJ39bkCLuYmxhW9yNvRF452wwyiunqIM2n8zJ1WREh3x/9dv4cln0V+fAnGjGK5E83T8m91vaX0tMRhhuoJTe6feSUVSLG+bEqw2k8RtPG8AwKbYtS0J6MTR2LtO4XYQSlbZQsIURY9HZATeL9sdoSxMiDYXRa6I/IdVubRDdKkat9sUdLR2ad2IC3iR8P0eEZufeeam0Z+3D1pZpD3a8rVLyEQ+NMI6iJ9znKHSAVG2117pHPTYNmtz+1TPhqeGg2a4J3dOlm/H/Va7p+VZ6u4UZrE3NmsH64cfsuYmw3MnY5KUE2ij36K2Y0ij81yFAxovQnxJHJZWkL7l3H7KUWNToCF2f88neCSHUX06xDtoLj88vbkltFjTJQ5UjFy5FOEsKs1/IOit7sQIC4+ooLlj8u7O8SBhy3sMCZhXZNZ63dkD7/lUULJ6fB7JOZkOClnnPgUZ/4kjwo2JMeRNYsikv77ShLXVFSs6ggjcZcDCJvOO1DFObSeMkbA32lzQDRN5xjaBlK0gDe7bX8HKgqL71Fh5wx+xdgCtFEaIQQdiIpMxGEF8Vb57Gj4oIKeWLeKCu9X9vo7drdcngUlW2UVoZWYNNzTpcEo1+oOSL1SXn7DfY/6Jv9/lUil/kqqahvOyJxoGeoDZKgl7cd17ZkUyZ+bgrEWzngovPTZauTxy1BJBiEwXX0k6khMjujvnuS1zjGd62LmMcQofhs2C/HZnSX/NFcGm+H1xXlJIavH/gLiMv42XWmzzc9w2QFuTsvtK6hPI7tp7BmZ4hLrf/eI0MhY9qCwNZ/2m49NajcB5Ly4GowpjMTw+PFoZxTJHNe7CuHmgT/0RgaFEO5O4s3C2tNZt58NU6ff0+1BaxnHZ0gaeO9p2uJ9lMCITzW/Jl+ncRkQa/QiyzJ58OCQZMlhDpggyIXxDV9sbrmljPnvZwf/AwmhAbmni2WjV3Tzr5V8ldJSdNFyT/T4vp7c6LciUfbU0KE6gjZnHM5He4VjeO+HGo47+gIareys228+4h8nHZBHnB876g2+6JL8OdMoqphRvQK/bII4DmYapblfnKx9r0i9xY2zNy+zXhwJprkg6WRCI8UYdxGavm5PzZXCgXBd4MJiUVeV9zHWx1zebFLeOFnGjiRUFUnCIZa/ensSI2xp5rd6V0ftmlkltW8lEaKw4x6Z0PmJnWBRp+j45bsheZgnHLoewkT8SR3vSmNIDNoelDf/jN+WHJC4e4OKIFrLJkR0cv7xdLXZANIR0dOjk++z7/R2IivDrOnih+rFTgiHkoLOEXhG/xjntZ7Ds6juBSbp3/jxi4ZHPk4ldL5ejIwyuQrBDdu/cGtHXor42lEbT0y2QbF4HLZEAJVfqo9NxYMsfc6qE3AsT7Pp7cUNQSc0W77ojvGooUnA9QKXuwq/gfcw8XM6nv+RiSsp55CMwtKZV6OQsFG+7kMpnqnP9S3bESny0qwuaphIog5NLxRwcjHjDzENEPfscHe5vLxR0h+xQghbaAsERETYaeiwNArc9iXaFWOcrAL/esGk14q0wSWqLYAQSG0acEbh/HE/fQ4wghUT1hV11Y1/zSTZvTIk/StcIkUZ7w1q2XXtUFREMb40soT18g7UP5ir+DdXDRI3Ky4v1ecaqno8LQStt1H/spCpLTNSQpCaDub03s5RLfCyinNYN/JByfVYDpPAf1mLwaCLxlOyCC8+Msiclnpo7a52x4jSWOBj0ejJZ1p3QP4H7lPXwIsnoQ9Thr6X6pKWMBdOU/IdpxdpPzJuDm4W+PmQinjQZQVUPhS1BXz1iqojDsor4tYkKHZSQSpL6YLwhEg69ccnZl1njiRXTSnPcmNhhfyc/wm7fvyLUA3GXTExonY3aVdoxjB1rcv73sizH3+3Nr1jr9FmB1jbgcrFB9Hy6pWg1M+BKcU+oQ45ipF4iRyU7xTcexZjLczhd5GmH1RREl5zZmdvefW4r+SZhsdsj4byXY9mtaalbDOeV6g3QdeWaAlRh03iwxTBT07zo/OlJJ6H+pvrqmWucWRp5wPVbz51ZmC7i4nIwKC1NanPaGNvCACx1d6vJXtTk1Cq5RUan+ZLSGum5AqJvpJCRkQQ9b+SvT4iUpALszNN0rv+igo4oQnzW2Xk5rlb1qlZ/SrOsmLi65kMQ2jr3cYR+3aclhS7LaCoWY9c9WBjKfvji2R7+OEd0zv2kzIkwjIEFZCdn71kRie6r8U063OEMJQaB7s370cyQafw/4qsILeiZttFJob58g5kh0LW3k5+HnrB27JeuJ8fGmOqIIARyjVAm5P7bwTxnB+sjG72gS7mGjyC6TswydkA/KUt+IljdK65RMLWBJo2c5RHqwlNzEsJoT82w392W9q4kc8caPDSGSOTGiFP5QgHM3xsrrfYz/1Z4kBX8RKpbBl8Pzd1w6XXDDRoNFnpZkPjCjx2K9i/WZNtDG6ERLaHritCMa+BdhaJdhfF3mu3zhWfLK0id0c3GpzJW38xkSqerKHfQ0WOcAF3kcr70X2+PXiEeMmCf6lGhZqikxB1rnTbAc4E6zKwkS1WZxaEaq8QleLds2QnoFgJXFpwdGvxA+U5jl2c+ZpsK6GaIb/4qcvmIsLrKUPlLmtFQKYcrrb2ctcRW6waE751Ip17PTvzdzGrFaEq3Iv+APdBTkVxUxyyfpd2hHXzTnAvFzX7jdXt+v4YCFqt4E9Sz7Vn37PzO72Q5BWg3viPEJh/mt4QFAfsTK1+KK9RmASAX046mNi2guyn81U6p8l555uQzbMHQoET0f/gg4uHrjZ2RNWiJbS+Aej/gVvVnNUAHJbWYR1+DFbsvBlLtZv0yvRXFvG11ZN3zvweIDsvmZXc40W0zocZ41Da5W4+1/fGvqf9ctEYTIMkq24pH3S5gy5P3ssOfQ4stBH2IN7qoAI6PVHWvP/c5BxnRSMk4GVhXcvLG6DoL6cDKe3PJ+8LdgqmRDo7lQknP6lrD79fbC0yIH7nPBHqPYERf/r1NZVdT52yUXUg6yYwKCKz3mvYbNiaToZGUqdSwBKNwZnmobRGgR9E6eK3WNGo0Pd/n1c2DH8pmZGjd7t7eMB6ZgfahEONxlD13KhMd68rWHPUwUq2bkNZFGPK1nnifKEnyzEu/5Cp95hKX9GkY4TjpY+ILx34rJW2YywM7ykTcPC09vcTGvzy2uGQe1hIrnTnz8E5vqEt28NhuA5G3irlzsk/dgadQMaCg1f3UYckZfVXbQ00qIk23lNWxsPj7BVgX0ZuzUcxFTOzqkPmYCx3sc1UyznUcD8oOROw7EYoko0NXBpN/gmhzB3zOtpSl/mUMN448nTFTSDzFk+4aeenQ9Zd513v8Wnq9kePIS5sk/veH4n0/LHoUD97O1sMx7oob1cWrkM7pTHeOoDdmLz5oaxW+mmojVHiDUAopwCC4sV2F/Dk0AO4jU/+wZdqmiryPfoJWw8j3btyuXawGPlUllnzSRfU1JKgn8/ObsLqdgKpbt/OopenE8Lb42317RWWGUMhXnrb5ykXaM6ZPh8Mo4d1q2MHub8w707yy5TxE++RAbiNu6zLCCMPrZGORESy7dZbcEmlsOqzhZV3tIJie3S5pwaImGZt/zGLpPKXn8S9s19eo6wlYaFss9OqbXQYdJmwuxKo6Vh4qVpY1ZyNqMwSLRq7rTG9WZ8qO/jlfzHNu0eJhrWbdvgr5vm6h1cljaQU7VvHlmV61nroLvv+9wYcjQGcVjo22e0/byD8+NVtzgLmID03DVLm8/Tf06g4AXgdNc9ekh/PonSThV62TH1XjeceyCTz92oLyyJCvg6qCG3kxycr5HQ5mXvWCGvlgCMKvUL65kBWriqvRJakoW7QUB52EDkg47PlxL/pdE1Q7RmUn04xUs2deZsUsOtNecPAyNoO9sfPTTbqcY41J9E4hiOG/Lz0Jejt6rOCgCmI/uUtKx1N5o1NmyO+FB4oDx5lwCL9rs+jF583+VO5Yac6XB2OP3tT6WJA3sPWOd4xV1ndW/I+XBmJC0Pznm1Qj92wsZXLGzyte16ELQ2cHKRVtOuZl/0ygCAQ+8bXkxP2gLwb0AL/qzI3uLz3+2c8lIeMy0PVg1v2VpcnsdKq6Cb1fzrN0vKRdUpLOetJZRt1YWNxgXuUr25hTRE4/FDtEpCIoyQo7FdL6WDtQPyxJWrgkLvr4OVpAJZvp+OAOeE+KvA7qzlVVpGCeY/WLW6UBLmkf4iZC4uqlytaGmbi0NFyhtgLSnleRrLeyeSyMAIWALoeZfj7geIKgi72dW9tMxHc2oiHU8Tdb8VmFqSC+hzsw/wK3TLPmuqdvo2Ht4pI516gmEPVd1m3AQwq6TQYufOhYEoFGYrBRuwoc8J0X79EQIVRjy52AKIc0nQG/+ZXNzpfOWO3OKdyDUS0/jE9HC66BLz8OZfpHsOuV062WPILlpjVQXoJH3fVhgP+EqJihsRy/9eirJcDmDskbqfdH4PE5T8rmD1Rdel7t3A+uWU6f28tVetu9u1QVjJI6p9Fg23DLAf+Rj5N+ibE9g9gHA03gNeU5WBMqjMt++VAFnJuDBUver2XWoeJks/qdepaAGhiOcApcE21aLYsMhE8M70Mwfd8M/koDQYB4gtGik0SnkhM+4pRoa9dPY0d+o4flxvGxCWPVb8ELa8co0V88KU7WXjxLzZAR68V1qK9duB4X7Q/Fr6lwjB838k8KIg9IGotVdhfIPL7ILsnQLXXuuxWHrXN+IzoVPq5UaklYw9PLEsaKTUj8mGMLdzw8Ar5hrXtyCRxnWXLCNpqq4n+Fe9KZ8jp8AyupMZQagEXQUYr/R4EnKi/42D/q+xpCWrGI5rSIZiGILXKfL/RZ0wHF4/Pq6xN7fHBJSCpG9T0Ph5DKgP8rlMOeZdX6BiThHe7wzcAP4rIRXDT3gMO3GarqWfsy5k4QrHHvG3e5W0vZ0oqackWBgY+uAywrrbIO+aEmNSDbgej3DFd/qmF4LjT6MavyBRiVQgVc23SfaHW+Cu46nwhrscXcGftwL08xO7jbGHjufkLgdPgRDUNQvFVztbqI5qQSPBfteOPe72TcxmnujcJrP7OUkWxRDU9YKkERu/wv7G4CQ3+v1e91jE5PZEL9/mK1g2Gfx1QwP4kdk0HDBJsLv997BSMo6/5gcj59rjNIm2E2VlB4sAKDiAoUYyRHT7WL8nzdGno+z9WXjBo/6L0dCeOUPjFZxfRk3KBFnhHIPDZyIStWyoDQmCih9Wr5a0o3L//jcI73QtE7VmlAdAS1QP26e3/KClVNdkJMTeCxP8BwJBbxiTd5+rxRx312MZFystOUFW7maubiKn5xU3e3qKTZJtRo/6GLlCqPv8D/065qy3WnWpBrhcva3IYlvWS22Qzc3/h2KJx/4/Hh03V1Jb6VZWubfjG8V4acHt0TC9SqZy1/fRuaopxwp3f8okT4DOfGLIc5NKuAHcm8b7q4p+TMj+ZjnpqIbqpNb+Y52VhzO4J+ZGbfFxuGUnf69Fia+KnKkovhFYuCxDqO4KBg5UEnFRQqUr0hlabvyKW6gPNPQ0y3Dcya3b/KQSuWBVOt9kuTgqgtDIRNXlriIBWpb+CXbPeq7YpWVsdBDu4zuEF59w09Ta1uTVIr5PeR0tul7B5nMdW3iB3jRs55LPA7hLPYvZfMzTNvbeldT2vkTO7NxRRsZObg4k9OHTLdVnEY7hzsqAKPul5Vr2eYFC2Sez1vEP36+AknwZx4Mg7QYsKlgxEtKb01lZi/dXYtxFYBa3ZnVBkjnZ9TOgXLkIggTDb9e4PVXfQdzjUOdrDsXoItbnCxypX7I1+IDgWvYSKDbwKbWk7zUKPBNpEN3QKtTT2tdOr3b99Dtite6GmreGUz443R14y9KSod4+XCWPUSk/t7orfxg8C6XjJdPcIIJfr17093O4OSeXv5g9uCffu89fJJnk+u2KNh0HqmBG5B8cxvU3cLq2F4VfGhmCVjJswzwdyTXZkWF8i2ZP3OzvkLNsGryRqTe7EX0m2IVWPxH4mu4008uZ+zrVnXuakld9B/cQ/OavtJvMIWNhfKXG4xbaxo2KeFWtrOXFxs9vOQu2yffVvVb/Ss8DMPgbD0hExjwFsJvNI87RSDcPn3zeOuAEMeujUYayw2EX/tywimqvPGbtZKBlzYBytPlRS4UvTdqETMB78+XhOs0xs7uyqM44I71FOQ1LjnQeqyT7Ihhg/m2E5faY99bxCAk4Qzv0xlTK7dkMeF+jQfvm3l69Q4IbbHrXbZlRTWkHVuN69dunsrhijoIJ2C71oLsUMyaYOvDLsbq5jyPuOrt20KqGSlafnYJ2cxPGwb577tv7nQ7AFRKLYzzQLMlD65s/ufwqpOFum7Peoz0qosBUD6mRj0nx443sFwkGhdT06J42wu+vvPGpdOtkktya60O9PTOxuIBEzRSN4Jy7GZBahQ8sq7KVFlcA1qH6iT4Rtm0RXAjvyiUAm8UboO0L0GBvDpgIZeAI0jGQN2axNFYnx7qNqwNMNvOHrGZ9Shw6oXjDDfb/fD25rS/neD5oJ/HIAfPJe7W2bp6XfTMCWsclxsmF7sNzog8sODR/OFJaVBTdCiXcQRU06dklqWuIc5gCQdvm3VXlR2BpmW00l+mnsT8dm6L3BJh/dpJ5XhtVFqhNAAC2Pru9x/EBKH8jr9PRHYsq6zpTdSVdLHury97nsNq2uDcqwIqrowZItDt41FKOo5UyeDw4QTPqIjmhpND1Ip8eRq/pCEyNk+vM1UQ7FjZHsnX36HF2cPi3P/e1ZObjy6km1sVJ00m1KazOjzh9LTRxR0DbpF2mge/2vNjo1Ye1WMDtvWONQaHShinmbNbLPxc8rAKhJr+d4sL6RRJrjAKRhmkjlXdcYSrijQ0bhBC4p/NqC4rSc39BvQcfFLCtkj3OeVfW75Kbn9g5HSfF5pNWnC8YMxmFXA9bjtFJSZ2y9sZN+VoxTr1qjqbHJqRPtKf1K/xemQyQUg7+zZ6VjN6mZMVvXkoQ54U6aHdjaCE1avf+o9tM7f0PPkqd11I9E4wtT6+ArpDdAI2IH+YrP6I9OxfxUVHx0mriXdEdhauuQF3rx3vn5al4EOx3yO/Yq/F1zGi5beWqQ5l9ElZkeEpBLXUh8FbZVZm6tnISAoaGsLxTqiRafD1jcdXbjXtDzKx9OJO628WQDYpRVlh+152Ha+cQIxXLxXi0p/UjxzuVLx8SSbK1fV0GOkfMq4wYZQ8HmqdXF6t+k1Vp8XiUR4iixZHj/VGAXU3XizFiYmHmDLb1n2dAkYOkKOLZbwCCEfwXVuVoCtllvuhx9SdvLWCdZ+mUKna9gVvEpbUUVcAxytWH1DCD0TgX9ucMz7gzo+S3WRE2ZakesQXb9iuLM4Riqpjd0u3WA0OCTzSalTcZ7PyltRUznsc3AxXVhNHg4FDvnGc2ssV2daeR2zT+cUXAjPqF1+QDiw65y7aiVpnV+m0lAUjExm27xbaAdeUEvmZdc8Da562/bU3fq/xFeVLwIV5PYDb70PMR+taj9oisXD2GOmMcWEi8nfzVGbGdH6UgJxrAZrc2EXsRslupmDqMX+yqLaP13e8wv8pmKDIlgnZcCOnL4Dd1n2A60xeFPRGequ7RWF9CJhOs7hG8OtZF67aW4reuuNEobR8j2b6Wg1Yr4QiF0dyIeViHCvUPYgsxmWnuHvOLDzxyYWvMcvKG9rW/hxmjOEXWBnyVaq7YYsdycEoGrhjkLpafz8VEi/z+NPoRDZlo5BfvSgeZeFKNPKCe7fPPH2XU72U1VS3Nijb3aVVzZ1OBNZ0O6XzqSxBwDZlxWhW5tjH3VJfDaeOf8K95aA6Q70kjWp3WojbpizD60ZcEDneIocuywqLTR+h53ooXNjNYFcMRWTI0raGmLTUhTD/IHKwRV2BJ7kBBwmJ7AjhY5fYwiP+ZKP6Jpv63oTybV+K/4pN7Apy6tMqHYZaZxno7uKUxZZz7Vs0GqgmS/GBSRTVLzdWibiXaiJi8680m+5cM59hgMgsazDkxxvyqQypGsyvOiKAYeZsf79gHK3zowr3MC5HkzVpUOlDG6lP3SP8fCS8tancQrckvyfdZrntwZ6/jUaN+l1ABqViKRoVb8NH4xZektRyMsPAzMXuz1XV6BhSkaQpC+oGaNTON9uu989GxpMIjwQRX7SsvMmSgd+tgN648eRFU+OemeACeutc8c7MD5mbq64HVPypDtnbfeTYEsq2tH3XNmrOl0RQ4bLM0aWjdz1vUncmd1ONNwE/5xMOjj5LUUTFh9tH31ft69NE3y2IjvfqT0Toa7YlpfxWot3QkkHkFcXZai2udVcGVojJmacx+d92yLYyuUsTw+0a2VrlIPRGrm5C61f6hSBT3Ev+3+Dz9x88s8rc6//86IR6DKRoInh6Q98cvQ69oeEYr6C6fgoUyW9Onbj+CaMxWGpdee90redcmmTcgX4kJcuck/s1L7hpkrtIznsf+IlmX3Szhn/KQzuGoZO3/JRZJ5hC1qLoO1NkkwkfgymvXQ/HxMSsReeBCx+jMsOmuc6FtiLzJ+cdtJQ36MOF4MsDSflpd06B+HIxAGjg72Ipr17pc3Y6B7R+OU7INOIHd+emfX/M1ZLXHukBiILvVAMnWDhlXMQVZndgaGYA+3iXkAyNOljrNt9k6FcJIb1Z7fAZhL+P39fKgEqKVjyOGOH0Ab9LB6PcwwBh/ppGwlNyRd+o+uR46Kqm00szDwmXoQ1RHnRILwIY8k/9rdb0iEfFLp1+nPKtlTPxJ9qC5GsaNOvjxLTyvb+mG7rgxB7qPIne2BsqL/B8BTq4szZzF4pEtScwIor9uQ0l2YGOcT3d6ccPoo7L+k27ZG/y5GkpHluyyv0of2tdWftPgT5SyEaRXcZ1iIR+Jje7wtnEwaA3UD0xecvjWgyfY3TgaRqaHkGvmcO/N4ilZaDwpCLDCycHN7taPN0ZSR++iUIyk4ZK0sy95ghVC/mleUwLus1Vt5sJ0X3lrJeiMFb8wXOqJqVhhoLXNqFXr596gvVC6hbLsfEd4bhB5BOK+/c/nk6xjq0+m6L0eGXuiBUq7m/P9TIkwMbELSkoGFMLJoJO2aT3+8U93uqxXyly+RrJtu6HUmwnJiUNtLQ7+XR902CuVgN1vdX+KeKTOub2wSUH98GHedhAFW5ZXVkE5dbBtrx4Tf1i1j63XCkq3frdkUxUmHvrhspmUQw7GxS5VhKaac64O7L/XUwm8G457bbJmAeBqP3tUI1cK0AA2Y9+5AY+BzZjw1Sw1IkpTnh+XQfK7lu0DqWQGsEqvp0bnb4FCWfEeP1rlTW5LYtQJnoWipJ3UccwGZs3+fl2zpQki63zSexiP3iV2ONCTsPyCIrJigM8uzzd4z265ZWx39NFA2BZ/x3rTT3tjmfTc7CKGbanBH8okbniO4ZxNTilyo/xF0ejJ3ZKQkZai0s/bpqkf3DNyMXv5wyFU+1iQZ6PgNd+IVTSAjBoqmP0OPZ5vILV2y2ZUeYOseYyRWYGBPtY8kpiE9N14kq8N4a51RAIFm17rup7m5CeXYZMExTAS5LjLljKv4ojlAZ2Sl5N8JNte6rFs7CwkQ8+pYcSVeXSK4WBl1z5WSZZKyXaK86ybFES6HZlw/JvuJIveUU/65idsIjzSiN+xdRwpCAEDDMKndc/LC2ZzFxSfQoI6IwxyLdtPd1TvLLv1OeWJxn0EJ0DDG8uPbj52o4nXLd2sbtweEdyA7XD5tgZsjLIwOHMQmxKcQzscbLUlHKlkJ4S9d5iKjjNNBlT+pJ3P576X+RPw/s//2uSb1PnlWNXSWWn/bp9dMkqyaNwcvOlBjCRltIXaFDMXuJ6dG2Mzh+ti4qC4/+CvivwfuEcT8XmbWo8Wr7ozEsMCDFV+wcarUwjGvc/RyKO5gIEssddc70npVWLSHcB1ActME33lW25RlOof0SDnl/Oz/zhEfGATs/yv5bk7NG8W0/MqIxPQEEqJXUnEpEQCu6dw7n1H+2NHhm2AQfP+jQ/roHdO8c4YbxVEBRiEMJ+h5c96X9grz7iika6QA1wbbts1zw3lR/ZqIIgCNsEBVEy/s4R/IK5iKwpA19ruOdRrL8P/5wjmLXFbuSS77XP49er7zi6lgpXCVWXINeHbXLGRfvqD2TAgj+atSvwrE4LyfZQjvd81L4dE5j1uMwjUdeMZi9s6CW8y/T6b1MxekVRN8amfXwm/pRr0vVtmFfOZS1x5+Nt1wj27jU93t6Wc2bRIVrHTu0vRHpuVQtiFHCbiwivoPEXXJj+yfofxp6I8GmOi/tqbNJtUtjPPpz+T3MgCdwUfm7VVobi059tnVJjEFecccQWIv71GM+MnjMU7UJTR6j/CP7TjLeF6a5qWeaPTH6XjfOLehj5tfFXodsnEzu/BYoMGIQurZPn4ROREzz+D6bFahrwAEJ/oigq/EvxsRfV22a/tbjBbN4IFo24UlN0xbCQL+n7DKfGv6Mt282hDCsCqTKZ4IfktJMGSOYA5NV8bN+TYnJxBV4wmFJdK9s5VWG6vZhFdnvsP6g4y32DTGY1tagzqNgHMoNqU33q7tnYSvHRMKhUZuhRXAfgvQcIFkhMhJ/tAiHspyaDCT6lnIRI45mCp/yyBN3+qbBTVz3gVbP557GUnxNY+6ZlCRidslRc7N90J3w36V9wpDVxamVC/Co60Xpm8lB3RHzSXZAJTjfFtUWvDCYo3OaZ8XtXoS/MIz21Fwx43kvz9IBA5CmdJUtOIvl53ZbkouX0noSsjo6OIbedd5WWrVN9IESWDysyIzSZEn+mjhABChCcuvfxHJh1Q+bJfVOX3+TKe1UXBeVLOMVL1Te9t261cIig9gvk0kNNSaIQbh1GeHEuMBKb6Zceh/xQCN2CYQcNyw7JgePB8dPIkZTZwiCYiyi9zbAyFfNtHfU+FO3bwk0QjImbySby8+qNjx6aFlZwPKmKVpV8QdWAomVYYvmu5n3E6F0xUEX5/tY8cHHzeH5EUZ9St9vK1uNbSfP5WD5qe9NGp7IHOdV39bI5uXvDFfiYeCANmFKato/JfHKrGBglVz7tBbkymUwdSQ2685xY44mksISJEU1OjtzFtCfZQChD2SO1+PiTkAITBVLxe7bXda2Y0PW4zEyliRpDBe/hB4L5TdC3VpiQVNZDePB3sbRuKMX98L+C3RkbmTR76JV1PXIjiql1i7ExW0V6SLXiJ9VbZ3gR5vS/OKPDqTL5WFGZS8VsTGnmP0i/5QS/RUfqCMvF0r0LUeFBJSiAb9jwH9mo6b1Jq0GNdih6w2JIDcz+z3q0EHw2hzajhfjDa4Ul3DZi39eVycHl+C5LS0EFCEvaJYEXVESmye1xGyvk9GiG8ze0ll896K+z/vMpyh8v+BJHG4CTRccCx2y4izHixJCtgNq0BeE9xqI72bC+0ccZxzkT+Vel5Vo1/UDx5SxcA7qpcH22Igdchm58Zw6w4Svycc2oBPlvSx/lRc0UfVkRXjUi7MKaB46i6cvIrojNql5oaW8y2LzfSAMv0Hvd9Cor+eavnZ0y17wq15yO1aKE8/FykD5elnisM78yor7n3FjZ93BCCvPLPYyc0bFTj5EyHO3LRqcB5PjbCDjf71q5/ZVo7m+1jDwLWTPWF9AH0J37Us5J4tZc9J/evLcOQrsCtknslWzvDK13xUEe09AmaapxYGW/0wf57aj8rO1Hn8dznX8amwog73I/71pN9F7+cOloU8nYGj0nfjH6rIlVFGNZuIsgVUxpmQok8UKIdvW2/o6sv7QfmzeHvYnyifmOCRVFTv3NtV/w+0IFZfYwe90wtAMG5nUIM/JsBJlrs2Jpy62xk/sSHtDvd64q/Tssp5yGbVE00FGK9Y4LI3Lgxra5mu/Zo5GIu0M3tus1imOQq0+YZeRhAXx83iYHvQ6q0k8FabCuUqjY/OLzxMPZRWR/jopR59WEp+oLd9BeDDbZtTlpxCkkQCDXYqf8flHUmOVySoW8QtLaXv4/QXAB0AQCAACQ7pJQAbs7UVERBGmkG0YPNjbWxRo2YBu1YMTYRnc3KAhIqIiBgbzdiqKEdP8dNawk+foHbjTB3LFtP8NJeT0jjuzzuqB9rVAnnmi21y2S7xc3o1DvE2j6guSRqiwpyNk8NJzehGIf+GBemcZ9hquXFxBGv4Mc6pLekWeakl4Z9vrYECI76p/82awLXKxIabf3kzSOOlWovOtUO3tigQ0u+g5JjXf6XVEV+0n8RIjadRn+lN7wp6FCnxNN3n/WzaUgogL6kllGOPD49w3V+ofl6JF+FgYYxWswn+66z1ZCDAKy//DS9ncNRtXkyUTvytZLGYSj979UeIyggGegUrMCa0LQ10yDhnOP8/yntM++yzvwNo/pHV9Hc/HLGdOeuKLLluD/qpg5ACO8j8po2JSFpn69dx7ewM+T3WIcg0mtTPhwbI3ipU6ylOFEKpdQa+fZX+yqJ/RW8h9ju0OaBQkMtYy9NaD8+5aC5/G86Zs/M/etVDF83NKOJBnJdJ1pqrNrbaeCnnyMwx6QcCyPfLwWZ0L13xemXRtws7RJ5J2WUuy/HqL761aj/rUZz1jPw4N+V5UTbH9FHcpwiI0gqZfbuQ2eAronB3zawEycZw01gVC5OtCUdhJxX+VV1kFpRT7XNc6YTY0J/lGV86bFzBrWeV47tPMbRH11j+cxf8Ug9LS7z1DWRxzl36+808WIZZTZz4horXHytq9ffIldgupEDs9G8K3CSWoXucPMeGlLQZj6kXL3hsvfMom1DZcmM61ETi+8k9gjrzm5u+7HNh0Q+KsIP61u04qoFivWfYoL2GgGpNjrtwedi5aZz3NoepjCk9f70qT980VQQkCskvQu2jg3gvu7KHPrXD7Dyxs+4nkXCoumqwZCQ+MZm0a0l57gvhQe4avP7VNRlLqMl4VGXGoa679Ysg+mwijm/gPxmoXkEaH9d/y5UueymSzeS8JkicGUv66fIy3xc3INr61UJogXT7PVNtWOQ/biN1+lVNxY3oHxmNP1Sbb/Hhv27d6WhxCKZg3OWuWz/qvtfeepIwe8jbeoQut5XGHtQPrPxW9ib6R7N8x5jIg/0zKRFV3DiLo1y6W2f7jB3BbmZz9wMzMZDd3SVfU7Zyo+gTlXftQng5vGqw9Lz9SaPTiErNVxd2FQY01mWWFP1nZbgGiLIcCUuGHUgNmsP1C/zFmUWsbuvb7xO7yzPItE6B9XQQopO9IQzsk+y566URau151ed3zyyCWFG1VFBfuQxgqmENi8r4VRTr8vMYqaQofmKSxEg851q49J1LfVS+bmDa5NJ7ed/fz5vzVUNstt+5YR72QXoaXGf72gQFb6xWseqUHpQb291nl1kCTrZQmtE2ZYAiioe4psM/vqK3rBn35wm2ZbrnbL7XEk1mRj7Fnaj3mk88pWodW/VvIvcWY25puDjz1cxjvoE4wQfWzQkFylp8H5ravkBosWLnhpZ5bruoTcafSFtltwYCvZKbQTAQOIk9cauD5+fqM3L2coXcIpP5Y3apzyxGwBvDfrhGeT24OPdDhU1nXMdOq7prKqQ4TTPytXX7bPF2P/C80IR6tlPEHf/BUuF5QE8zRxeZBTt5TZtBvXs3s36iLI9j1XLYcjpW7cjwdHGbTZnGBbWWIHtNlKe8MK94MeNPuf0+yylibF2P6nFxD2M/1XT/nwrVuTV7IomSznSX/RnCvwUdCzivIYbIfEvJcDMJB1j8lJK3p4cShvSc7hkrZpKRDnt+TvmZ0TqaLmEAQKSOGorP97EQjqRmJLDDrnU71qglbvBA1j5BlFvnpVF95VX/aJqfM5511O+5fOTfx4tnCe/nmjROZDjmjpBaocXltV5rOaPISJEcswbFFroEvhIc6Ev2q+cUk2OwvWAxLsnce3J0A6xmN0cQdtIBbzmuhDgWo3aXFkKwS3tJC2GtKacO/yr84z7pxtyazSCjEjP/fQIdNZovoLvkagQ6Ovhdwu3Em7qAEpsFKw1JOkWXIc8T612RJ+EmEfzCAxC4buNYbt9IZ8EZoo2U4uEYIZ26aAAf9xrwd3ApPgR9xk/CHMp+ngPY88kTd1RHd2hPCXslCu5VCaadAmAecMBznNe9CK1T3idHT+vqXSC8mQbWsSdNLpNKUOzJLIkfFjmtNHeMkd6yr6uEpd9PoV58+UPV2h5+anPUojrgnScgmPI/772PDeRyLf1jCcdSqhgiRXDBq0NUDKMPdveSUv2y7LCrwteAo+O3cqm+CapXi0kjGOaSh8zt4rbqjM6tun/dXTbUsiZ5LSnYkfCsK9uI94+1ZLGSMZi3j8MYIv8BkFafz6gaPLXR/BCl0ai24VfH8oqS35nrT6igpleXh+G2fkRUJU3C29jik9eUSmRaCS6/8ZtrsC5qcQ4RX3DufNdxKt/MfuBKbz99+vOATXjvP5+3Jsx5VxQs3T32zyEZ1tZgqbzt9NnEeyIuCHJx2rYsFInC4oeWfYVJz/caok06//zcLdplTsTY/7Lxi4Z9RMQxH9jIdyNCS9KKFCAaIhhomsLgUZ5yF4Yvw4n5dG9N7Yb/k05tykdXwfG9JZ+NBMusLcvp6rQi536MPulh8KLe2FJ6Ff/3h06nlsD/6GDPDvCSr8GnRjODJQkXS1Wb8qaDzf7zukQ6jwWeNh9d4lDVOIfFfnmt6zsoJF9X47UtHSekcFOJPY8ezdRXlc8mYV1jG9ihkhKYftjT4zV26hIy6sdoKsfk6jeXmflX6AIjKW9WcZ2cl7RgbRxKWtcdWOofeY9ISM0g42t2kr1ndGOOmfKkf0EkqLmAjzKszDDJEd+LRl4PD6eGDpwUdY/1r1XY/pgsmT8rDPZsSPMeiHZbS6tOTXbiXTgUl7c5HbAjP9bshOBHDkTyy0bFuwhQcgbFHUfCJnIo85LjLIrnDKVjbwPa27WI5M4xQe8C2J7YsAknzfBVUH5LilJfPvRKkQD7utFq8VPDL6lHITLwaBQjI37V9Ko+/mZnWd6DJGw2iM32bAFea49e7oY3/iKCEiDwMzY2iEauxJVc0mXCBtqggKWb8fQC5+f4WvddXre0NQNnlAkegfUYLSzd5zK/+71186iAMxFBqufd0CToxPw8Zm7m1IbGC0bDnXyhcQ3e1o4OdXYe99Qv+E53yKs2X2ZBvYjYftMcdjNrO3KcUcm5fO3XLK7uIdJFbtTHp9hDpuK28LtutGpluV+275s6ANbMVOXIYuhmyv5Cc2mt+g41IDC89AAouC3+ba8RAuO1J33L7Fb4qlFOdlJB3ZO6zRU8vKT5xOb594gI2CvgOjmLmwSS8ViJ+/B2zGNuFIHigo6GwTIbWBXr9FsSgXssz+rZNQoPfbyOyFq69bsk389wcuRQVWiGoyr/l23hnt2KRc78lIlTB6F3fFMlcl8UkvMr4raF3+ALGMSw9ykC2vPQ/udHcrHE9+OXKbn5LmIcU9OHfQ/KHOpis0+8g7a8uUM9/5GixoWjfRNb8rzztfah8dcmrRfUrfIJE0d7pM2bME8SujIjk/7gXMP9WpBN/REAZ/unw26HSo6R6cW09kipx4wyVLHqSfOfZnTbCcaD8pQgns0Y4I1O5tY+aX4b48/o7AT1Wycp9/m9/qqWRhYeS4yBdRKe6MuB4e6kq8Bt9lv/S8IcJKXEuZJY4BadfLQHM8Zfb9+MUtWytmdR5g4DHSF49eU0QhmcA7e4CjzhPxhI4x4l9NNpas54UKyK+Yxu6wahvLFYWvvXy7fp4O6gjXtr3XhFZeD1KhrmWt81vAyN5t8ZWYrA+FWmYvaHw/FIiSS1J8kb1S3kxRpe2t9lHmTZhCSovx4U5Ll0h3c+O3fes5+7Pjxyw2FpnGvAramJWk42s0TqPtBPv+JP48jThCQ77E0gk3tq5jyhXZFpxP9uk3oIxsRw8EEZJwWfTCIv2BjnEE92Pqtq0gP8tMTyKE6IhvlfeR7jEDznBcoWNQ/+yBB9W1ShunHEah8a3Jq9sJvCgRYANQHkeyNAiKp8qAkkCmqLtLr1X7KHzQ3l/Oiwu3X2BR9a/MVn7ZaLz3QjbRlVOpH6/B7aI/u0McWYAoT37629pIbjnDnP8k8phBoPiO1Cu2d3NduZfqA6e2EhwC6+7amppZy/L2rhzekdyaFnuroy6GKSz48ZnNdF8P354r/prRqKYjlIaEbr1hMmlTq4nDN7QrtrLnk7buKluOEjGiqUXfj2I0Mwdbj7TxkekiLWu/YUko+IOhp57869vqk+nSqi8qIZ6aQV9lVd+co+ddYGmFf2/ifZeJYkZzphGQkPo0UMQ1ier1bNlT2WFbE4isY7j+zGZf3ix95i07MKq4KuCgrO0/b4e/G+T8VwgmMzp4MGcf3CqpdHa3V8T+MozDqLtyF8LT1aAdCETEq3krJt2w2LgbizOImt2VrhWXNB0/I6nFvhbH1XImUwq84KHN3y3eBCqjY0NWGF6X5DCpXkjL57T6C9FIQWiuk5g9SvPdoJ2qVI/WgDWOi1IY9R4L2Gj14HFzOqFYYFtz5o3ao8Tkc7ILB7BasXv31dTwzhm+CL5GAlgeuVwAX0mcsRcejUk6f7/6TZdNCaSGf7vANl/hTEdgAAP60uvkrozInIyVC1eAvKEFtYIJR5ULzwcT+spmNbbxS6ffER14MtQ143D1iIhgiCyTHqjVaWdqx66WIws1r51NVCXYcsPSznESJmUvP9Jl39a7rsHaoh7pfYPmpTEbZk2J3O20+1dyyN7758YkcLHLbcbKYkDDFEMJtqHeNrEswQ64J07mec4Cy35h8qTts8FFBk7EJ40/h0tKfqXGqMXIWDlv1Uo2mM9IEZAz1ArB3IEwkxVaN5Hd9LM+stY2vdCDsn9puHZfdAeh9WtA4LHUjlO1B+O4Qw6QGqWfKc/XY/eTmzNy7D7IhoZhVM7hVcI48nTHxevOERuR6waYlwc73GilQacfI0M78Adlzj9HZ+nx3XZ1vjjYGEB4lDi3zL7qG0xDAieqh9ZjsIbev78hhwl5bZEODoRYNlf9vydx5ZC3f9DfrquNUsu2sCPEjOMXsupDwK3hS+FGMy1h0ZdPgO5FlV0+qyYyZHvVbFLNOI17d1GzOSqcCyV33k5J+nokqamV5fI31jKRqOfW7vY32vKUi7bjQ04t/AeOhSbNoT6FmUV4Xln97XOI4Q2tykvy0Z4bKGZE/VaVwj2h26+c+/zX4worxvJzZMnay6qXOajhoEuZDHbR01X9rhj5guOqmO/iomMXQt8EZ/bYY7v6PbM9/x5vDE0ewUsM5IqRun8eRdPJMvzalaQQXlT8tl44liEHK0/KWvaKOxe/BlxadH33iXFHlZPPETakmqhX5uZDFTv36YNcRutnXXgiAuoAczQaY5bqmq+nj6ECqKcVN6V75B5kiloT1pYRS/B0DqsgPjyuTAb2g/HwIG5Yz2dvbk5DZ6VJTHgPmOVZGDsTRYM0nldL4UnCBkss4pDWjpd5EPckcIZK3QiON+cnOUINC4fXv1YgR9e07F6dSo0c5xhed+5qBTAKmBLzWeOUC5Ve5Q2xCjcy8GFX3w/G/ysunfnuNoX2g/f8pEnvbk80P5T4NKZIhY5ouZn2ervLefkyrdEFp6k6+N9h6cpq7opGq0k8Tyntsj4Qg8i8kx5wbykRsJ4uOUzJbAem6cee1wo/WNH0EF2sfp5SX5sQLDqgLHNeIauH8L0qB+XY+cQypD/BziHFx8FGNyKt5eAOlmzj7wcyr4PSQjZBi96X4lFAu1+r3pPgkJ5j30A/5nZUBpMPNZ/UvdE3FzzXffRHuMkJZ48oZHrwDjtAsAEmIq1MGiZQQfWdGahjTexugo6kGkUzxiYS9NHyg+kMcI81y6GOkfhqgYwXlTq/V55YTlqUKdzhWmKkTGy8kIEbMFyoBicAc14BAiveeqqdcFvvzO7m4ahSvTR4FdyB3vpmeJvOZExHbvb1O3PpnYcYYxPi3oOJfv7ptvNqy0HY7/PvbauMNT/3d5/ZFRSSHMNgKN0KvWsLH5jlP8G7BotZIzmX0/TJvhyVKNWJ+P65d9dDZK6VHo8BhZVqbj5oKZBRmJZPEnj7o/ePM6jV0VNDI8y+Q2BHb5vj+LCF+Fwts9RjVeoPqzv3/1QuYwnIZMF942XWMiNn6A2ZFG+PIHhcoxuXCj7v7FurjEJLbtXUHbu5fXqny+1ScftiK3kaEwPyp1alWvFXEr4nBLB/P6/5hcjJshnq43reUNB+58E6NhhnDClLp5hqnPZAiUOU7t/ptkoY8XC7I3pjuvJDAVWmUwKUP11cUFF8OQjTTUmpFVzm1h3Riyoc2bghQUfx+FFrmCN+QhH54aA2P3K26nSd8fcR9knNxHK7ozkTQwVJu3M2XTFcraH3qWvERHliVZGqZKFbIP/vwJ61o0GlgRrBNcvUoHQdxUZ2xVzxa3Hid9HVmiIgW+79mQ87bibQlLIBb2OVVKrUyUimoOAv30uTY7LLoUmOS5f2oTLxgmEj0cFiAy7kqrj91UbG2bzmcZbT5JRqHODQmWrPueCtZNdH/2DbvfJBgR078Xs78n78LRhhcqeTBjfSovesfQsN08rJUHO4VCfIesgGi1Dt4fSwJi9myvNWTu5qlMlIzJRkP5MgEmJXWt59zg59WFsqJ8I8zD4RtWo7IYJK7IDWWpFBPrRwsaZMwM8aG9gDSmWR6hQzD6py+G9XaK//v8Oe0CUK7Hrifktpki6N6Nsef4qAS3gvk5SOLnyzE3OXSeWIdpvbHo+6fyL2a2KZWgdiEAZ9G9pNC5tIFKx3TGGcs8nmUNsfx95g+in+PvQx78TluMfMya03CVUFee7IcoXv67QKn2y5XWcfh+oyHqJSEcAcvVXZI+aqgjsR+RW3vkwplf8MoySkv4Lv98HWaPcjHQovpeANMU6lMbwgHwipiBQ1qngXHg5uNnGXh8Og2UWMpA3+iLMY2ec1Wd3+hOkHlf+g6WRoxfEMYuH244Al/K50qdlliSSo9mXiwL+bARcAGdUQTYAkMNOmCV/+zwbtPTor7379o8/gX/OUdO/rFF/V1HTeUqBHwKBlB9DFbeKywuPosaTQrMi5E5+CxRrHF1xVfLJYaXbRUMQPBJy0QDTLyE6Tb3ESuAco8FNx1MqmiKTwu6cGjPiKqsvd5zEIGukoduaZAu7xP3hR9uLpA1ow2XM78o9G5dDS4ynQyEQs7dTfo0whOdSdF+SIJ8fmKTs5o0vu/kKpMOsVWxsO7kG3BGAwZq0by/OdbTiEQXe6wrYSY46/Q8P8N2fMilm7ayO5yJVMD+ce6f/yhxse4OSTtJAAKIBNHhTpWTIZ2pQJ/QNP7cFCbtpcJUhV5BRQlgPC8O8yIsuyJBfzqj2Cr1ZNLlFZ5EEobUsRdLSJWUzdLqz102pdVgvMSgGjzCv3V7rAmzcTT9+DVMmvsMwcf+4LeM0u/zdviNXwRXtrRm8GFr18UXkmkM+8CzDYUY0wgjIiAHWQM0vhks2ypMgKIcQxfeilcrloApjrEp+T4F4pCr6a+/MYaYiSd2tN4SxqHAWSoioue74ocXa4ltBVmcRnsbaf3qtBojO3FA7tCTywAn5jNfrSJDc5AP2vxRkXFUilR/5WsrKi3pJmkY/FdJh3RYQV1oL5T8lj8rd2BJSHl2WZHu8MvLkMGxBST9MH7svdrIvbZh8aaGsX2KNzc/xwzKiXe16UUjiFE+4Hyb1rG/viTycqsNpqeAG4opQZCPJT8cJjM+R4PT5lOW6qFg/pGTEqqUKRjh+3XR31sr9lbOPiZpcZ7NidYzXFsLnImb+nK59tMJ9WBHsdgbje+Hphwj3CLk2LneD2/uQNEMJYtRboBOQtz9HEaNryyH96kEN4XsJpml37/ipIcrvmQnWJHj8DP02g75r7R/ASp1L9R4IIbojY2rMimG/VNYXYcERe1P6fd7o9IPOGLOV47oR5f7BtOPIv6ShsNSnRp09gah2LUCBOCMti/VxvuHqL/vPUy7BNgKX8gIZbJQm1AP7TwvgXtNOn/uqtXys+tUZKgohfFAUsJ8djLF2t93D2GuU5BJeGoog3k7J0fA8t+mehyYCsCR+RatVtB998/Ox/Zh9vRtrYUzlKQXjS42jY0vrBeovzBubg0cE7hOTw7EDlz6RB8UuXrtl7nOP9aXbFiug+qcAYUZNchjWxa3gu4Gs9TO2sTt6dlUi+rXAvF6y+Nib1wolxxYtJ3NGZX15lx21/zqwvTFfAXK7l93DsUaM++j2QnbmTpHQMfq3miO+WMgUq+lnSG3j4oS7w9RUOCG7fBJCCqhObuN0+gdnoKps6Sf7sZXf5Jdy3d60BwxBg9D8zOsqNR47fPtxBgRfPdplVueEeFmDpwSc9N8yPJ0ss8b9Ux2/EFmq9i4Xl3qjplkchclBkbek9ESH4BpA+RcYlIstR4felQUIuN3lBeK/81NxtJGf77/b4bRU7kR3JFmz0tixgTQKcUX8l6kjTg7J8ac3LTxHJS4S/nG+Z7lj4CMOAmenaJ/e7BIVbJ+Z7NUbHzPW6xibc6vlqmiuGI5+If/DRc2Kmmtek0WYWP4TcmjP1WWessbcoehFxdPhfy7Tkz7KJiG1R5bz/GlliExK9aO2Fbz365pYxpZL1K6E92T+7zYHh7xcPfiDMcscr3eY15xsR5KlBikVfFXwXjVJBShErNyOh8pqIQ2x7TNlR+lJl2m5PcX7bq7sH7zihq2qLtKpAUhOjvFwbgxKEUYNVf0qjX9mUQWQDYTXlxbA2W88/4piYJpuMHVsVWgVU+biEE8DbnwO1IeqJ9KPl0e+vcpvrNA+L6SCVhMw/wS6jUpZaZN7LcqlfpDPzC9FDmKHajypBGYazDIxpeuSsDsSBmgRwAvLAVwdCpyqKMl+VdfXti7586BmbbXTb6a4i+uOq4oKjCA275T822S7J6cNi9tGKRI2kdb3qGpDowhuWa4Z2d1TF7QdnlPH95k9YoxiFjgfpC2dZsaErw3M2St7yxN/D9ffMKHFzESzqzNJdal7PT8ITk8On0bGXP1JX1kXfyQF0pEaYskLTgByzql7l1N45RKVLoC1Mrf6Ah/FOBWlGRsgr4x1XXGuwATM0SE6as2bjhrVfJixLXPSqpGDGK0G/zSvjI/eHDpReQcu+reJyuUi7+K/e0v1/HvEcQBT0zYU7FLjAXhO3FB9Y2KR4bseJeFLqsrnXFV3mX3QWguA5fKnpbp8BqOGCstgk5qRG/vdP2BJxglIdYPxorG5SrFz0rtKVAsB1I6Qb9/6NCjZ8a7pChHJmJoP/m3QbIJqs/6saUGyF2Eb/ADVrAg0Lopl7AxZ2sN6ws3pWfIfSKc2E7EssElXLe+xPi0DBdyJbe1eXZgkHkJRWJBbeiVQkRKaWmKp+cDoujwK3dd4ZvxfUjrcj6yvwYzXLQ4Dbxs4N1nO4mbol0gOEza75A3SKSGh8ZCicJSqWtVJgoV8298lkboUIAusRfq/cCKCUxLGh2HaM4q7jhTBTdYD6gqNp+oe6YAubFNNlqUrtHTa33e7LbDdUmB2RxbRh4oHFaF7p8YF2eQ1KHPnU0aX1TpVIjUIvj12A5ecKZNzX6UKKBGuN+LPV4dre0PfV2OKAyXv9t0hC6lRM/BKwLppwgxCkXLYZnqAauet8YuS1pYwTISjqBWUNw9bZkJp0WfnP5Y6BbVa9shURKH+vQjLFiP/npWlZJ8B1rXYcmtGCh24FXzXt5sTupq2oWkuykrR4xvNlOIc5bxJyKiSCIBTdXDjj6pA06/S03b5BAYp/qhmRGbXcLaO04BWRtuhmU+J+SnmRhAurVlMFs27PED2W8lyFbxEV8DCq4ej00y2oijl2fWNZ0n1CAAt3hb58oDiWWDMmVgrj58SD36QWX2BqdnpUJf3n7F5//X2TPEyrzs9DsA2cs7+z6c1Imi7si+zKd8Pc/w7u0nXYmVdgnwB9CMbCy+32whZ4iZCTOlebC+N1eLmDP3lXrTirH83RtfBMCMIlEFA9cCaIzNuXfEIq6lTcjKDHm3kU4pYOvCFzb/gz93xddvTVbOLavCFAwr4Fit/TgRTQyKuZ692zqd2Ba2GqtY5Ybg3Ib5O1k/qA25VMP33exh2fWKpZWV2Au4GP58nFXnwNHrBPye5aHz63tU1Z4QgiKSqIyPCwOXnQ7WO8MqBoHdd5QyDwgzMDyTDxHOhXMcTMpFo5KnYlDCFeBXoddayNEsyrfToa6uJOWfXBnI0OtONalcy99M3I3iJWGpRQd8IHYwKOW9NoSciXpe9euuwkqpayCe9h6F7Z+ZHrls0Q2fhdI3kdHGcI3UtA3AAVvUcwhMxzxaXUXOMU8UNadttu7jN1gTzg2LMbGCx3RGTTVZERgskmOhG9ZSOo/OTwnHf56q3OaL8MgH6v9diIUl5tVZHWwCSIqOxx9dMhWrK7qwUgz4aHvAELOBThcySCU4i9cWcIItnFTuBGNIEuuZJv+o87YhYb8qPe3h6/m09ya4N4ZhhD43RC39blVmGLOWSYHPYKiXIOn2f5ejDtS5XNzW28FF78hbwVXwIjkL73Bdts6MsIgjn779DvqezwGDsxJSX6pNMJDNiYTtG/638UHB+RH8L6lrglsTDkfFBFtNlHVeja7cwZ15xVMX4YALFV0cffi0sffQRNVadIssUrdXfi5urZJpp5zxVWOb3Z69sTk0KLtEoBV6CXc7SMD4emCJLjn1iEMBvBtvnXlGmaBTedoiXD++wtfttELwhJHwwmETKnix3J+diw/adejdfQHGi1tdwnR8mFAvd47ksME2WluJijnNrQw2FA/S0vMDw9aop14uou0uCPrJ7VCJFscgH4uAWxKQ9iXRik7//3gWeYVUhKUIqiDtNUvPXY1YIUO2bevv1sKWeqmOMB+RFDtoHuLX6z5+E5G8OcKdWUvUkT1ri3vmUyCWgdX/H1XkT7Ux75hVysr6/K6ez6Ze3PNaIaj2ujTL9tk/Vfb6buHrK7/O9OWpE+v1Kxwv523SYJYxqIE+LXBW3xy45wYu09+Wht2vB1EsAh62YHW1nSysyN1w/kCLI7Q69WXJkq78mD7uzJ8E+tmYpbLyXYdmYg06TyzD44Rau+Tdb31hFJdzuTYQvMmjmt8CIyg4LQVnsjQrALXYNyjGZ6+eMglHICXl55JdLhfHF7fppDFnegGaqiJuPGPCmL+xI8j3aMYTk+fmCXL0v7VEReKWsAuTglqMFkNzWucoNoDPzwbvn07RxUFtLUxEOzOs2TPAepmFcxp8YiH79/HxdFmFM9anszPMh3UkqJjCqFfZabzwKh7AoupfK8Nk1jj2zKvKuNCS1otAKo9t5gVTzrqb6Wu/axsDY0z/+EFowfWQNTkq/OgNASYYX+hR+7nIdVSOJqR7U5N3IB/r+GBk8LCXMwpDbIjdl0xDus9t4BS71lhbFYCvlcX6tliW9K2A/8UHrGykETrr9aPS7JojQdR69v9WikJ7tT1694HkCo/VN/2B3Ja74rzM7pVP6rsO3lx/thnW1EZZMP3bxkWdqWAsQjg7TIbLQoBxf3UvR7VyGnYhygIk32fqFGSTLlJE7zUyZ8v9umpsSxKpEB+OeHgHrnObsF0GuKorRZ8JciGYgLRXUrieSVE6UmTJGtxcA6e7qM8mazoWFs1Pv0GFrSQRIY1KODP+KQX8SxLo1xdI1LWy169Dq+/k/Izcr2/bVp8i2jMS0ql+S9uvtfRAXHu15kGrZpBDfx4gKK4zZ0hzKKShCf7t3aH2GDtrwQ9ng2OmBhnZCxo7XoQ2aOKNzX9EWkjRD7EDDtFQUm2QbZPQVfKDkYODF2HO8Lf667rOEI15BESIhB4fyXwvXYm4nVrHBqAv0XvbwJsiW66gjsq5x8nXV25ZYb83AEt6CvVLqqz6Zlb5+mL7jnWHBczNPJk181gkjzzlHaOQkHH5Lnz2Yq+texlvD771A31DTKProbaqcknL6kfSqAns10/HjHK4plodf2cJsykk+GzwNDMOjqR7Tc7phqHjh49FZB3ELEyixCOUcnOm6nZPnBlQ853j6/PBPjPS8KWuCZ9snjjMrqXPpFesbJ5FU8z+6s8ijcLdAGdgwYYeofSd7na5B+71HKAwBQa98qqnYzrAYZP8rGHp+QCGPLM57/2PeqiZwRXZtf/E6qvUXXx+ZI/XGL3OxzMn7X2uyDFWzoJXxYFKvCJq3FLUdeQnqvFAgqC4rOOPVeXM6UTBaDrK4yeaKsV4v1m8/TA+/jhJGp6XpW9bel43lXj3o5+v7wZq1AgzVXHgHgW6Ow/c6iE37zWb8EsHDvHewbwjegnWMpw+jz/N1/9DD424B/Na/2USXt5SwCONUI+i8pp0jpx1vMdrrv9FLVU65ImweaPxANrKzBytv8/LAa4pgtM2WH3eXTgQQSEqGsHe2eG6QFDXh05akvyn8tP4RJcN6e0YDfdUEHLB/svQLGpe317hvAwdLaYtii6htg5TkyRoB5mytrNwl9B2r/dc08kwVxLW8JTMHWMfNhlqPdjmBcN71moFscobh6OeDbJ1+iMEAZ8X07Jw+z9fFs5U/eZfuZ1JBNawMxy9wiBxc0n2BkcW/SLZzjJbekeoig4xYDqVFVJTlHXSv27uY0vBkdOVxa7U3LpEDvAEFQuARanqFWl49bY0NSQ3JYMrZlFTnmJgtUwHafhGwjqsvDTGEZGvAYfQrVVg3jIL7/ewaTRsRgTiIvdIMrBkrHkkny3f9IQQ/6q9i53Gr1Rzj5wmysa2hoKux84xWfTx9rPt6STYwT8wqHVdRDlEdSozIGS69V7Fj2JmfbsKWeaSWhuW/VKXOVQ4g/neR4r6TdU2HgaEGpxEy0t/C1Ki0YD/ftvR2ftyUuMzJE5350LqVA7uB6IluRel8/E6c96PK7P3+V3zTuCzpbhMhnLoYiiQmpfwwZedFQlC5RwCozkARSL/YAZgIbf8YHlvgQ+nOqh5E96Ix+acpb1WsN55oAHIIg5fO1X9Yb/ihHR8+Ugu3bEnNfy/rKtAQ7nFOsR3wU5P+2hPQ8tOC0hNzJfvIi6HGgL2XuZ0SHijxk/s+3G8iDE1zQxLBO7akjsYMHPpbtwOJU7xNPmYcUZygrZQZ8GOi67mJ0WxUny8TSIE8Gj1vYFN+dPz2f8oxWztt1kF4AZbEaqlCQ9YGKQic4K8ujKSbtvGMCGGhslbTuX1VHKh6cqQRDC5vXMDEkagPe3hFhdReqDV/3EQrUIPMh6fdydu2dC6C4tRkMvOgQ/rEyOip33FOes/g+DE+q18MDpLI9HE6R1b0MndVc+Yql0855tPJYv9KNYRHm3AziiF605R7tHf8lt/Xt2/NDY2mBcDDd4IZgJjqgwPMxoZPE27GtoCNW4ckDp96Jfsbz12XqQ1dbdc+mxDkDOJP9VweEFSmmgMuy0syC1ESw5OJl9odnDp/c26PIhL8mPNX6bY6YNpDv10zola6WiUW58UQEGbg/PjHMQmySAO6zQysB0BbmttcwZ+cFDaTj3/DQtJXPGIBCr2FZuKSQ5v9HDncumOxPDGmLvtmCQsyXRxlcSChmAsaYh0Bv6C6J6NtfPGvbUVe170aqrfakD21q1e03yBJBrxk2Hu710TL6VqgniV+1UU2VjUFwNMF4L6lffJ4pYz9DDLJ4cd9NtogT6jczbMtxkPazUblUXXQqmXYdFxjOjTfpmFvoZJJDs3MSHv2AIdzIAsXVzIz2Uv8fBeuuTqfwz/wOtSTKv7tQyz4QeTJQ/OYdbMeX+Ho3uE8lOwToFAYQ8KiMRUvBnzdJUsElngwBb/wTy7rKvgf389SN5VWUyE8nnay0sB+Y8aPo53L3+UEWYlRw0vy3b953v+8o10lequndGWDVuCW/7YyuAIC70sx7fhWV2TihWBdMxHRcB0pVLNdPt2O2lnb0BmrvORo99/BCRsI05VZE8JZP5SSsv/RwUXLbRt5sunqkhiG16bhfYEk+7FbdYB1ivrZr//EpBVpsq3185RUUhsr4k9u69ZTdjph0GJtVhe+AmRDVLpSrhyKJZqj5ggj/qMa8c9syc3ryuk6At2qh/1TTozPRVRhTpvG7OEq9Zh+YF7n+M/BlFdCXukNz/0/o29rfF9vl3asn8OufQzFJdVdO0Hb775j3ScxyiDT2jLRPqnPNRWhqf2sEqD/ui7ureYD6l573hvwqeM6PT5eAEzdMI/gO+o67QJyvC64arh74wuyI8EFo4MxOQRxa0gSeqvr2BH+4gw4GJ9xv7k5KajuEXIY3qEjhd4tKErCvOjJoiKT6zHAkkZPn+p2G9PS9u+z2IrOyMQa+kn/7idwxWEXII1L6e+6/RfLKWjribxsH9z43ufJI6VFcXVkK9pxQMrKHS+DuDCPrVL+ZL3dTHOdD/H7op9HArSHsS8bWywCi71bs+NfLqxvyZz2Gf6gA5MepiT2Edt5zm8kJVv1noih5UlJ7/3N+U677Qkx/7GkXYM7qSH1IyrUsSkaUbLZQ6FOp0j11wT0rr0laz9Yp4f6dWt7VrkgSpjRH05oagK8bl09nloirFm5cKskdxEVuZBj1+mZy4Gk24NJKyD3ldRywLvvqeZRJ87NWH8HZZuG+zM64X0o7LBwJ7vFBo+ZGbuHoulDnJh/nm+rpnhSKzqX65WpDI6K2XqCSw9+bWYWDPn/jSkfzjR+7Vk6FKDiQ4pc/h6VzUelNbrScRPMmaQFlHTF47OQ80/2ezhglpk0tZ0fh7uq0uMETLqsy3jG3Y+15zpW+FhXCWg07YT0r4d+X7/kMECYf1eHIOJ6U3xqntW3xCRJYxRBulbNe0YlMZTVVjezYGEmYrhGbMT16f8/TmgW2PElRQWNY3a1moNHzS3xAXvW3caukJQaNN4n3NQcOjLnASzqAXnZxybnzIzFxCSZ15B8U5DCbjrpnVNhPMqQ6HVGaUc2Yjqiuk5SVx4mo6iTmx0UzvouHh5mAHhqVgb761MhqPrrMBenzKyY1HkaW0RYo7tiOvc9CCReGLtq3BzvmBSSVS/iX6+qRGy0Fa3Ka91xvho7jjGEpIohaB7/vsnH+wHmi1LV0y0r4peQKNjsmrqnkq/00kZbRWhwD6CuRb6+wA7efxIOiS05ZEHx6m6jMddZRckQI/CvAOLDgj+4/7Qga03pTVf4ArhEHrrsPsL43da6wUOT2BLfv7LZTRV0bclWZt53nhosEKcjfJiq2bgZ+O44xsny377vk2MnWUbQ0+xJiDPTdpm4q6fzgqmpSXuU5kfAuTmlTsMcqEEtBLllftkTB74GXJDUGPI/UXVeb9KINsdR2Sah1j2YcK/l0mmwBAeobJF4u0zyemNwc6e2f7MHF0MuGAlisXE8fofoPSXihP0C/wUh6qDJ0AJ07DEM/zsW0xRRhHxBr90bntbDujaB3XY/0JuUTheqixsPtQyMp7u6pvRHOY2LdxHKMiO4kIzGqMSCK9qcU7NgkcetUYz3RYWOmH/l/43m6VKCGT+SjMIaeXJCDK+yJwxlGtfPjPLq9iBXLs2WMCdMpU67yZ3y5q/2UZrO7OlLTJxLO13Kwwk2981P1Qwly12UL1r1dyqeveT7K068ajc7pwyVxxIOmBVdofzP5zgSPCxGFJm9dt+slUg33KoHDEyKmO1h3wPK/Gc7I7z2XNdSKn21BTu2gD1JFNW/fdN3NdMr3EgoA6MvYV8ITEWQXNsEpDHiOmkkPMwjISViLSzIIKZg6JfbsS+xChmU03NPsuVtS11IKeh4C8oP0hGXAPy4tnUu0RxBVgbU4+cztJAA109w9kPX3PcmxIbfrPmkLYdvrs++ZifEUxa0/wpMiyS1pN66zKOAdp1FoflNjQDBUMq9EbcMXtpedsqdp1HmaPt+LJhqnjljeuS3+lteK0E6Rx3gB5Ro+qHVmkxpSEU8E2ONhjcRUxOaVn1XzQWTh1sbyiMqU/v77pCg66+Pf8dviJNjuO1rjoEoyuzVx4XDRhXyU4ENC+Lz8SQzNML1E06HLtShrGZN6oK3+puHc6cIqtzvPfZxfwUoDYGLCMBIjxwwJ3rLVK1kYng0U6ScmGdyiVfciV7PCHI9OhqlU1VyVSv7GXlW6dQngmJ3lwqyWuwHxP1kJSoR0CRBbkALkcFyfc/nRnSoX6je7S4mw1I9phuIWkKJJbWWnd1HLgVePFIgaBVUluks9HhQYPSSA/eQ9+dLBC20T2YbszKdhfwvziza0z5BiIuLodNLD80yPW1muHrSoCGCg8HpZ0n/epGRm9Fz9ZUDmUkz1fWckROWQ6VHZbdBe9wLt8EFU1KdMRTXmUgz264CJGv6gcoWjLGfh5CUUGoWI++0QRH1WjzRzKB8CXcgTTXv+qawEGMxl8r/CGc83ycu6jKb2ehT2anVc6ZbcOiD0F0T3nMRP7gZeDVj1Djm0FcJSEj5hFTDuvKjIygQUhz9zo2290yLrK2YLvFLaP2fLD6RkGw/NzHRt0qj60FW5cpGcDa+9fOTN2tCnjqxi9J+MOJs8nb5IbiFpZF3o6Kvj9Uv+CPrpNfBHAo4/dsMBZKh4b+uGY2DDhv8xD0Aotr016k61tCb71A/p9YeRt8+da0Q/5pYT2LO2QNAHbN0PWjcPIDZ+SmH/uCt2nCmqzfc992UW0uges2tuh79yq5YP/d+Pb5YhahQf/aSeNSQ/gOjjcjityJGFWyfmfMkr8MqXFmkW7O5Wph0H+UY8iL4wVcECBn83y39r9zzHOXk+ocH3gEeTX8hN0nal0DJhWDhD93nPWXPE/nh9Lx1+zAf4m6XzkL5p+mXOlNwh33Sm1tGXUdnXbrdkPpO+GFaVzLPjnpE8hwvktll1AYIWEvSh8VbAhaLVlAytcKjzPg3Z9T1hfgFtzIcrGQ/V0DWlOX/62ishlgqpefs6xaAROzlhgkIMOiHaTe3Ht3U5rScyG57EU7m309ZB+cSMGq28kLIcvXKeHX4m05H15B1EnBIsu8sxGcl9eHqjf5X1bL6BC8waUGTyCqqdj154iU348kHXJBGD1wlxPJuxsLC5s6mpgJJt6G4C6XK8pVntppvxrVdU9mcjbr9m30ZJzSDXtK8iLkGZoI/HOBDt3uZc9RfQQk2LMoK+tXOxwJx69BojXS0891Gb1/O7u2QJi+MRJPn+q/I/pMB7/egu7S1bqAeq/I1sQe6HVnwPq5KOZtac3XU5oDBWvcqMRCifGa3xisxujq/4lZIWoKmbtqJEVUl2tO8Y4hfTVesEv1974kMxERNOJnEqVk2a6TGi4ouIxn2F0Qp7Xi1EBvfY+Fusb0RNO5I8wWcK1L74fn+W0rJFtSFegA55OcSYrZSIkxPtDV+brXEYKt6HdCB+4IX1k7kyd+Aoh+YLr9+um9V82/KIWj18fU/k/XIlIrnpB3CuWNAYe3P1fph2Iwl1pCRumfTo+VqREFJDb/JFI4+5I9zKpozeVRIpwWf0zKq+k7Nxtnf2eds1tJu6NTRioloSQW1vRSKQ2yZZ2VJM9w+Kp062XQ6Rrpd4KjFAIow59iBi5/Va6JnArmEhadDS2V7C3di1xE4Tnq8OO5yQdhFp2GQcBXucE2t0P/n8y56fCwavZIIfp0YlVCQZ9S7BSpvddRs9b/n+elDqHaDh4BVSyojtAGnzAvF/1p6SPuE8UWXFKJcTuo/qZtGF+qZ+0IOP1bAu6SRF7iihZOp6WDza3ynIOGpFKjzoCqhM8bovQ7lUJ6pQtl4pc4LEluxTNJWhQHYWWX+DDx9hZGJcLx3+6owSfn1RG5oXiK3+3NZ8GaI/6nElXy/kWyMWO6c0gK+qNpsuX2lgfg8a1nbW3ETDUjny7FEKknifBOeBIlUfXv1Jkc49LaRXHnR/rFRnHlpzv0rrYLviYGXLj/8OtzHORgkGq+uFp2L/qbid0QnbgRvQ2h5AiRSp2l3+W+1Dob5hf8IXPkX3n57x+7HmgquD7Ran/FzVS8wRXouOqvQTQL5gQyrg4SAAOpKc1cie9tuH4eYiHjB3fv6wf+fyg2ZhFntD0N5lu6seqprtdK5832CtWa6HWWYXTLZt4Er3PD2UHltQ8akWXrOAmeKQAgrJBsV635usRQVgaehLHCEX35gWJr1tSg3huuWsnkTG2lZZSiC1yTnaw7kyn9OsgxWdVOXm+wWDoFddUqsfpZnXdHJ6ZoDYPOQW2JkO/lXazK+fzm3VGR2KArOAxshbQvRGzEMenBSmrtSzlA4o09nyShYUYmto491yIdHM/0c71U/A/3ZwB3DtAS1MeMwN74j0ZVDv9I4DU9Hw30nGzzFGjgdpBWQ4no90h2VFYhQeqxOljGWZOxuRdR+J1gUkvO2qfa47QPFg8sNSH+ep/qXHgeTtmk385pbJW5DyZH6HpeKbR7zGN3i8glRmJ/8Erm4UAE0Rfy5KdAG2/jJ7vaOdUqKoAFwZLhAmc9fE4Fte6Zf8eCkDg+jS5HDulrQA5vUCDUB4eYranT+qsUHk8uVxvCAwwN80kYKM9RwLMnCQBzbITvxSifzi9LKBEpn9rvfT4qjXkrgU0FB/V78pjlyi5nk6NGZBdkbpuYRxMtNHvE0FMKmUg20ldh6fPi8UsRvjslopT/M2ZOyf1rou/iokYBFLnL+9TJb63fMnfcTyyYsZQZnsA4zDgegDqrfwrcqqmQQl8lE3yLE/LlLJ94U3RAtGDuAKKQkZ4fNkUgLq48ooTx+ICUV6EXGpEUlT4WzvHAj4g4p5ggurKYD05N7i8atIXhtLKIdQsxVgufSK2OTHchnzliGpcbfVt4Lpy6FQ4Y/fxxhqKvzGuEJKwXScI5pdtx0COF/SbKsR3JzD+rh2VmfDYyu/HO4Uzw0Pt4nx+lgVsNymUWitcgZ7sZgXHSzTu2qbMB4XmrB6plwSBY1h+TtevZzgI027+/PUfYxwF77Iq7bPz7NgRQj4mVYcedE5c+rK6+HUqxI18wNN6l8js1YRSrMULv9mx5R8M3e9lYppGe0r04isbSziMkvyHptuTXbb+J4LF08rTn3IXS3OqPzyj5rjAUw+dF116/0o5bNDN8qpuCRcrL9aHI2uSvL2DPUUL8EsQUaMLZfV39F3FrYZUaveeG4zg45YF0UXYTQ54ciiGnbhk3ZxlMeWemrIvM7mxmnqHFJxrG1O+tKMV9yctYA9UuCZUezNzyGiZ6VOGLzWOvjrTnmpfNM9vERWQ6l2tcTbNvx1ilOw3W9sxYvbCUamemE2WckDK0ktz2y918QloHgbDqdM8yV6wIfQSkGEKBwenyyYVy+u8tOkVEzDSu7MSM0U5XdP29T7KPQrfa+A7w3mcPQAsIIDH4TNRaLTkPwjyIvuQ7BmZYluJ8kJnHpyClZDelz5OhgS2z1JRUyzLvtwLgZf8pIoWPJvzgclbUeSVfGt4mrzEULBxGwV6yyWE52/PcNlZ9znXw46oYXIrXkEUxV8jgvUEbg4k3oxkR5QmQGDvZuIDxRG+ATmjHvst5mveFAseVKeu9SIG7MIuyhe8SqXVA+kYtv4z77Twm5DVtuaJ2WW6/2IpV6nnQ1+5vyBpEVmSPQOcgNbCdaYWi4uwGb4J4YdqFwsXS+6YHKzGHL3lCA6z43apud/ZC9JKaMxrJUFsSZX1S50KejT6WNd4V8UOY3hBUFHIu12R6v8uYsy47i70Mk97fti+FMHN64H2osO5wPGIRvRASYJweON51gRHfdCY6qKQ4ITOPNV630+jOqx569cZp0VveSZokch9eqMG4Ocke+fnz51ck77GHBplZlkJU3ogsbCtynWymXUg3q8Y71oxfmKTi3Or2rPOjKzfzyzShdBvrTqBsfpARC6t1SuEtOSA7tn1vYPxKZafxsl/KrzjhRKQxWT5bvo7ppCMKOhyv/HP/SVfYXcSyNXPQUHQTy9TpScWzZqCQhz8D6E2fC+0HJdefcxCb5QAxT4KjMIm5xnFJyYej0Zc1+LIPLAbPkC5goSP4hmDmccrgf6Litapa8WIB7PcameYSxLBolcZPWsNqkST+oRLMksLB67Hs3VX+PRMdB4vzDbRAc5Zv8qvTqYotDODgX3c5p7ud/uSnYWSIzBdawAV/UPgaG+Wf0sqzLWUB2TkYIrds+8zVzqYL9CidEC/kwDR75Mx4iU6TN7nx2jQO1trSvIRcoEYcx9In9pqeyM+35T2ag49Ue+mHObb3Nn4LrKudv4q7kVfsC+vpimziKUyebyIQCjoVLpU+tHiwx9cuLmtZaG6K+8zmp3cWxb/q+yIGJ45S3lh4FZbqNWKmfbV+5EX3n3K1wTOW21/NuB307XM/83mqzc6iQE0dH/ltJH/gbsdUPJIRlitnXLe7ilgzOiLCXWOPtdTG+x03zVx6zPGGp89a9Phh31WZeD+7V17Qhd0YjK5eSrR2Wsbxs6pD30x0HcBnpNJZzEXIUKR6McD73Ofn/lTmNqdbkO9EcF5Nd0D6w56lgil1xpeOFhYCUKhxGlSeOep/A6+jjBDCD4vqao2JpQkxAedXFmOg0avqjSUdQteMMTXq531Sms64lYCb6mVvEnXn74xNEKcaliopt/CcI2oPZNU6raeEI/JuoeOxxKXgxzq0Ndve97xtDFWBcfznTyg+aN+mdm/zeasHi0qOpP5NGQGfdGaKnMpq/5rQpjrmC186dtTonNM2GHhVcFcREz1A0tHJYpLq8AWVpQNA7Bxwv47i/mEvDVPSc+3ZG0+eesM3qEwWgZOcrzleUzc4ytov07pvcT9evoF/AhmgqTg7M3gyqmiIv+UPwcE5EOJ3OjH9u8fLL+uSgFc6hQ5qj4WFy7bu3nhSB+zt2Kv+ShKk1WK0hbDx7JejYQXV+64gHorlIffT3VHZebXgrqyKcw9xcBQyxa5XWiaqqyl280Ho4muZhnflZwH8ygpuNC7RZjFO2KXfepgLRLy2k+uv0q9rLZ19HxnmyThub3uit3U52i8Stw4UvybTw9/e7HfHoCwv7zsXL7GHAe0hR9FYm0dTj0efPKQJbcnHfr/M8cc8ieklmZyRnRFtm3Kf2NxrfalyBJB3gYxM6fJtpolhHHEbC//uYY+Dog0HTNnLuW67sVwVDJjotILYKXesvOnI3ZD1N7I9QqyonJmYS+XW0BhNV4RGEsJtmzCxYW+NjrBoSCg0LeC7mZghzUP1BA9sLeBe0iSIr0QwDg4Pnl7xmJjTHbUtsmApNmg8jI72rHJAboCSbVHZSxpnPLTlhLkB/5On7w7mCYarblZRt1df7fjo4UIkRJ9uSKI/mWn2X/WFIPjszTX4JWMdHP+l0cHFLzneapYWpib1RZx7NnPesqBDlGgZXLFV2yrxq5wyVOmSVYqIhKG0t0eeaEG+klK9NNFtaSu7lyeVFNQmS8q6HVW5kEmZhuuQnzu7AvHv9ddM3mBUZL3sHz6qk+lhfSieXRVS9E5AaQ9zlG9eKkGy88j2cKqnPmo9IXfVzcwK6fAsA5bNN6bLD4JuBia0kO3U44NKoDPenSZB0HsAbIlq/riP0ZBsytbzpIGGv666P2BMVw69o9R1S073hv8exjS58UafMcXhWYuCc8699pg2yV2upL/ys515hGlBEoVfIGV72stlUSgHuYZi7SYFU/dqDKpPw11pm9K3KVqmKJPFBtu9PH3W3Wzo8SoWqMa8c+lCwWpS3/1zsEBvTSzjX8FVM4ICzKxWLTUAq1r4c43LAYbMYDJTr8mHcVur/j5CNZOwYo//FvuSSu6Vx/KxOuhxB+SPFfjHdzrLQDBAQV+4HwwuCkQadlhu//BMEFQBoIAABAu3VzOue6u93mNp09u7sLBQQpQQFBBaQUpCwUsLu73aw558LFr1ynK7vbv+P2Ow0mILEleYqn5R1HFK530SvGtgVGRZ7L72xPMuGf+uHb9djFz907aXFmQv5UAwN7utdHdmbkVU1L3sPb4z08BmdidvsW0dc0zEOyLdAlkSyyyCoeXDgfGxrY/rEoBj+847kssze8/DjTjyYEzx1pvbqfnD70pcMKHxNYbRIkDPkb5mTWlRJkrjhRlgN91LKCS8JWPELi5dW6rMKBhj946v5AtaL+d0n+FjsDQJbhdRFunw55ysC9nQkeTsccVl2VYjkElZ6N2BO9df+2A3/h316oC8kGlaeIUyoKUHXHyF97gSQ2LPjt8CCB91fafI9QMSLdrcmOLVzj33Q9lba5RZfwGogP8yZyXAyxB43aNeKTr3SOA3OLgFVuCM98k8kf9onZS/09lTTfx7HHGAYfGCNEotHJk8LIIHIz5EHi0+91uSlJJSnalXcYs/MkX0fvy8/te0CnDv8KVsP0dp7jDiASeE1zJvZ/SAE/tsGht5T5ZRhEG6FYfutWT0rEl4TBf86lLitu9eqfLiVTuFgDztCHqrNZiQvr6S+74soyANewTuOmoJD+eYnExKWtpkGLlpKeVuLlm/AheO1mocKhpLYZ2DVs4vJ0fb1VVQXtjEpPwcKoS2V5VExUeflR3zTlqSMJwf76BHgcFrqOJk0LIoElzd8fl8o4SJqSFfcAW2ulHQ1ubPtrCeBppqqMLFGYdWngcKWXET5qYJrIzy09ka9cSG8vWU1YS467iUnifUycCk1ybJG7cn5TcigOUCaeRCz2loelHIy3vW0RHqgZM92SWMmYOzRiCA6V5Ev5zsiyrXewKM1nC6jlpZIbOPXn9c+rZhZfL7Zpwu1jppQLHZ0CksauXoiaccuB2Ort+GlOBv3JY6X/9PD88UfApKlFf6lbS/+AIko8OsuEFVRFqd36L3i/EwmFeg1igHMhYibV+Yg/SabxcmtBuJcg3MY2L8FXxaLs6fRP5JZ29WrCnYxft9NZntEGJfE9TnkP/e8PlIanIXPWVEbRPK90lGJI3tmrpYeBtu7hH/daQ4GM2G0xZSSgsVgLdp5eVuEXkz8vW+zzLep8XFZwy/tNj/xPLAc70fRXOWgaLz38yQER7OH2fhrXnUmGfrlunoQIls0b4dbRvDZPpZgSvqZT0VGqZefBIRuNQU/Rad7NiHIU2PNpubECtGq960DjYojfL/FVe+ulxTJAWd1X70WMYM6xaTzQjoWQpV1wqB7YiXzJA4MKfM6jBbA4yRrf1dGnrgVB+AMPTSEW/7nkwsy5Xn9pLyBQelhpKp9Ir32wszNPcVUjXVfjMdyBoYn8ew8oI3F71PJEqm6yNeZ9PMr0gNj4Z3rtlZjPpRR9rrPwzwsfw/h6Uxe1eVVFpiAliGN8eXP/iIAujYLHZuy1jzfZjJ5zK+0wI53XX/6twHB7eaPuM1e6IKZ4akpGAkopcbYVATYX8ZHF6UqhCbkuHufuQX4pleb3VR+sD1h+0eSa95/shspvpq34lLGn6t33aQLvMVFoGtM9XVNiQ/HFxqTUgyJv/dx3OVg9tuqzLDgQMorXs7rWdTGVGP9DqlzQ9HdHxM5zKdF2ctKKAqKHS21PKPJmcGN0z3a37BpS80JW6pE6Sbb5OQMZfXKZOJHaK5GisclhqZV/ZsjY12mVOaRXR+imFVcsN76G+tmWHHGdepfemYDL7q9dyuP2DgBMgzH+BIUg1Gbw4qw0e+QEmRTyYHpFbT1Lpro/4W59oTotSUTfY64iBURuT+6yzdaVRtaHRuo/+zmPdvfGyjz+aAAJMi6qWXd68PrsCIQfY2/9QanSiu0dIhRH4e/bWvH4WqU+MPPlSWnVT48ddrN0a3QsSuNrtKCWGWLQSx6+J4vtaxS9Hg0BqXOG8zyPc8mn3/NLEwp1w898RYT4Ge5TbvjpWarNSZVRMeuqwNW4GQtGtjd8dkXbGnNehGeO/zd7MlV1N/SJKiI3z1vvKNEvL7LGp+NupiMwvM3Tw64wW0EjYUF8jB+uOjSOLE+hjbKgjOx7eJffSw3e+XsuWP8s7/HUeg3a5dHb4Es4HGeokQ6VvVAc2/LkhuVLzynfQ5/veBPJ8lOjKU4KSVmJvZCXpkEhqMCIIsIxOK3Zu/jsOtdubybYAJ18/5K1JbPHzTF8OPg3jNnTlHWGhN1b+CH75w6mrGpugBrMhsaaAZnOvY8rCGo8xvoVgX/9Q2AY5uYA7TdOu5kcygVFWt43Fdr/WcFHB/1+JAHGx0B/pwXdA3GDKnVezEJAKTmEjJ6Ms85yHc6RyNloKaovtrRdCNovupuWaLe2wsz8Np4cBVfqci7pagxNxyNR+lZRSwXOQ0iANi93x0Bik3G6YRI3JoMu0wzPvkK6CAs1yzKllK8v+OxhUtxexuR0VP4hHknPNHWz2wSfweR59KTuU9u/w4xGyQBzCBzx9t+0SQkKWIe6NZsC1onylb9yE5kSPUbIK5/crG0qMFNee+bsgxbh4wgxvdZHefOnIm0nipLEU/33/msx/Jw3FIbxSf5HLXgWfCZZnr9Nw88aFD4gFzs4XnHjZklDqCyfW9Y8WM3ATCscYJXXdlxOUIgD9RXngZyX2hB7c8wm69nyZRhcBH8nMhIUxyQ02mSHyutWmteol/ERAXnhxSGBcdzsA99sN8XF95r+ax3Iafgdq1aPvZcUbyzdGLgTQEa8JyxYez22zzbh6hegyiHOnUBEN0BB8aJcSsEMsy4SdQnfs0dFY7km3JM4NPLU6TFsY7zU+T5/YnBGv/D5HlUWbi02i8ovDqd2HyNJcQy4qO1bLvegRDnPYERi0GPWe53p93PVVh45NbVMSBfthsnWFC6aX7kwvjkgu2Lm7mykkpiXczfukOtTG9uCMYcWV3JkAvcaioQmhnqbnr/9T6oJHJqKXTEvYqpdjP6SzE6zzr8E9HEIGo0RfiZPxdv+yv0i0Tg3j1UPVFjzCvdTy/7q8/eVo8cEbRiY/kHGxTffeicKIUsgSMINHlym+pcuoG76Z+5pogkS07Hfu9NEFfGYMdKlQbt+TF2m80CorsOgd+CLwi0D+L5IJ+VgJRkwQqwWA9oRP7+wcy4AnKJ1eaSNfayqB9UwuTHbEosLUsmX+uzphnPQsplLzacRVHLrFSi5F+VQ/VNczC4II3nqQMUQtlTn0OFi0NnKCroQm3MpuqgVkRyzoCSvkW/S1HnfjpAycxGKxIFfRrV56m5N5AHx+Cdikk9GA3w++WXXxivdXOTcdvZuYP7L0oTUY3zaLMNGzvGyZ0PmAXpeaYGj/KK1WcG6zdW8V4Ty1D8pq/SrIP43YcaZC9uvZEY27e9+e5mM9p9x0Gqe+ivke6aHUxOoy4OsF8DiOP+W9dbUDWTmfzoGzYh9kZm75NqEj1e9B6NXWF5jEUpYryCPx9Mf/x6UJd4rcj96JgPfSCAz+w2uJiXpeM3p30BkqEAsk7ZXBwvkwJQSo8zUQo9nV0tcC3pGw9L35jKVTnUXNYUIfVNc4tmyrp6vooqRISdtvligsB6oD0CTssxcWdi0KNudrdT4cAve4eTt4kqXd5835/0Zy9vJeh5VQLXxdcmwvZ9fnrR4mfX62PYUR7Vc0+JdHaRcCylXREwSMMp05EBowxSeTwdCroPeYtgvAinlOcn3czXG4H9aC18ynVCQ55p8LevbhzLgn/2zJ5SsHxYTgIWlVARDtPfyRw9rOektKUUxCaiVT7pSJLU8lW7Vuqg+99+zPN/FQMIDVDcovSy+qnDbbDzW/5RaLZolNkpL3aT7WIVSjATQt8XfT0dtv0k4QhBS2++WYSty+wTPN8+9cl2Pofro0EnQkp253hugEiITuN/v2Hjx80JgcTfzvzOm2gc483Z/z95BwwPZD87EThcdkgdArDjd4P9Cd+a4ztD/vU7xoUhbY6NJt6wz2hMB+IZnGI/19JvC2FOo9M0COOmFjA2eM2l9ruBnxJUd3zpOlTqZODL8lt58upuD3/rHxFkaed+mfEXfRFofTVJOJVek4xLj7HFxyLr0DpX1Y9m19p39ixuJvCDPgz/+ix/58ozHR/f5+/bXEZVFjmKqFUGEe1WLt14hlwUlOOAwuxqbxo9e8jAvE+3OqC6a7y/mHzn21ErzV7z7GNkwRlZFyURcVHirr7Q+k8CXTZZ3JGJEVh6EWBtvXEWuwt9denBuZI9ysu2v7G5P3AEV5DG2unv7p7XPecExsnBI6UeYp3Kty8/cntCSgUi58dRgvM8mHf7XLRX12C8jlGRMrNr5NvIW6k6CtX6cmy/aVzEqiwtL/zPWC4Xs3/Yf3uLRUK79nNxHdhhitAZw9Eqdtxlh05CgHRyYJwmqoXpuS3anWSkcjnXManCLeINELo2HRQlZ1P4z5UMeW3Viv6hYMvVfx5FKJdXrZ7nPUckvEXcfSix1wYIjwDgMpHH2+rIT6RgnbfUsAkNC83kB34UrWg4JsyGuM46PqF2JVmfO0l16clPtJD8bI96vnGxVTQozom/estRF5oXmSt7eOIM0VBFLxwVmY+/6zHe3f/myW+qSPA+c4Pvj0ydPXFD0YdpWQtjjruikuX/gbvIAQdTCXTYMcsE8Y5U8KBmxvB0o3+HUrYB48Otw438bA4/yNmY07SRaAoZz7HHo14VEUiik94V/5kaM58ClMQiQXdDjtHr7Pjhfoc3lIXMVn9vnPDiLmqpWi508olz3S66kaYdVGI6UeHHzRxkmGBnQbKzlUvIuOk+yzTvF8YNHTi5c9amhS+/gCti218fQRy2FjC1+USYU966XYNAg2uFwPTmK60d2NA6ATXw7b3yrESoTU3EfVEooOow9lNu66ZXDVIrq6lMJkJdUAgDwzoSaUi086tT2dymk8C7ho0Rac0GmXizL/uh0dRfdDx4oW7v3jqipOFSub+LAv+Zdal8ONnC/Vw1mtIWeHG2tOWrcdM0bM1n15ZFw/teOCohOA+EC2GMWdWGUwc/AgcRkdpbmeVrf74J/P8CXyqCgOxllW6l++N13l0bntVunB/IIFa+QPmj2VDojL6boY71878OTchhqoOiCiVUkGFFnhQhpdCqzO0qG2CyXZdiFwO8QOkpX6Yu7CEOVkVFK4a/h1rgZVMmvqHRN21ieWraXD76DAht6S0BM1nyJEPFephv2wHFJK2/hI/Khit7SJmLBI/L603JSV57wdjEx9T6d08Wwz3w9l+RtlzdtsRpwuyQlHNf6ZLS6Tb/ZRyD+s3YIt6xO85CaendmNe+DXc7JqA8GVXc/iPHb/+guuA9Z14XN5Vvc7dtfDWSkwcgRyTlU4DXtMa0AECLRKkw/X5U3hN8oitRmI2+nmH9QrV7T8wxuEn1GkN0avX7EIDRIQ2gx/C669Ecd9H6UkOHDfFZZEmuCNLK6yhKnKYS/rAzGF4NtwU/A7xIxh+hiMCvo3J02RaCzvJ88hxYo+njWeEHF14mpwc3aF6JOBz4tpRXW7ZiXMA2hmfUo8i7ZtLdKJuZPnEQqmO2AebT9Tkaceu2zd9UJrSc8HcqWdgMM5lp1p75Ga08NqPj3FWM6NQuzb/u6PEcnvT/311Jb+5GrtKbsF8QI05n7PljVJoEuE5Z5EgoYXx2HbRKZsjmu8S+p/xLrV68hb0bijalGSOWAXwcjfQ0ZHUoJHzXEp7wC7oHQz8vqpf31RzKMMeHTUFhvbGJKjrXyxxZzGy+a48HO4QAfDMcfyLp35gZYAFlGmB7T+FLq0dc1vGpQf/hamlDXTUZva3tEmOWLNQn9UCtM4ZkPKV/GiPHHCi11jRgZhjmqlCPTAAh6BPOX6QzFjWlvzuzSMwCmSATtx333wy49agzrfu948QLCixgMsM0c2B7IdOH9yYRaObC+lJxecci2jaS9+ao7Ecy6DcPFsF8CaH2Bpf6r5tU3brR5gF7dB94gAxaUjaC+W3+kr8cSpPZ/itB9f9egoilar0kG78kttsb+4n6/Ywn+d3sf6XB7bBUjcwu34FTeG6HAqEt791QntCAhXWP/qwEOaElTo6rSwl+hNDNzicBQbChTmC19n629517AIIq/HLilLvejdS3apdvoMrnY6DOq5wa/tofwrOJEj+7y9r1vJqhX5WeygUUVz5rSxg/m/aAJg/w+AeNTqkCG/YNFmXuFlrFl3O8eoxZPNnlWYcjslPKTJbtsZImsxWrBs5kne5YneAIh8bPsX4K7YcEjOM6KyyvDeQC00kvdDNlZ3mk+xpuH9s7lVrUsLIpKW+rgy2e/eaUoSbxVZOVbbz5AvcIGSXtdqah8KM5urazlrHC/41OR4t0MLBc0REr3rxxbfPYcmo/Os+rIwfftuljm0VSPg4pkbpQWE7c9KK31XUjPfUO7qRTCCPTTXxnGPWZ/d+q3MDEVzM6l7l94dcOrJJmU8GNEM8Yss2oerCHM9SgCdAcfF2jyMZABjzskH512MZp1GNMbFLzs8ef8h89PII421aHDITd6OBFMrS+PTMpnungHpctei8Tp6TYgWwUZT8VahltRSmeo8lzqHIcSDAsZa3meDVqER17PC5HfuNe/AdZSINsBgjkPHNcQbs+H+DstpEywPr+3Eapdhbzir3tqpPAMVorVqk7NAjLGEiYf9uxgGcIiHJfkuvhvlzcgLtCLMk/mRobnXDHreLUDnLzWczy8Mg9LTtUKy9BgzwUVeTxWBYYFe2rBOnWykxssQBqLdbHgzYweyjGvjbRy+ejuot+RMBJgOUB6pWw5CrUzyGqD+5NyG0EtSJL7PXcOdzcrBypZzKmzq6D2omnjsQq+tXnuI7+XANFEDaggddPdPKywffPLL8H8QoPp9J6GsBbmgjtZ1oKhScRKNvoXooB64foXm8JCGYI6W5x6xb/ztmU+bUHBpru8ozsGcy/1AgrFae8C3h+EB0CmAjhJNBXI5Y/xoaHJp7fU9XFYwvjMTCnEXHY9fPwTSXPHBxu1dNcaCbmXh6LtdYZ9U9kXu5Lg69QJPkaBk8W2kdkagF2XDD8Q6f7s8takR4QUmCwUTeCpLFWAswTEmjQXigJTo+JBdHEAUkCA/3L7PI62UW3MVFZO17kF/IWA2NSjJNEhvyMR7Q4e+4dcgyJTFXyDCdVDkOi1PTUtyIrqLz6Pgv4GjZbB9nKQfqgBMPMBNFUrriluZeWOE0ajL63xfE9JL7uhYfBZcftBOpb0yjctjpfvyNF8/1SZengN9o5jjgm5YN7q7OOm06W5UpAQMfixajeeRdtC7jMM7i8V4gdqpo8qV0XJQnbrpxzuh9Dsxp9BgxCwNo0vhf8GvnSCC/IOmDO++/3FZtIjvx2If1d4Ms5EowcmQWUuq8bU5lmw+xxvXgmEMA5JWt88pMQ1RrGPSL7h87RNTxUpIayCSOJoo8/CdLeeuwKDGtd3iViUZFa1JTyzuBld3S2dlrr6BBLm0h+3zD1QUDZiGxO5N7+gfAfbnAJ04l9zPHcWypQ/TX2kpABsc5g77GPlcQK3M7av/1FtpiY/Bg67w4yynFu+yYQFyxV3AXmxBinE5rhgzlnbPwRV59222x9sqdV0BdLrNdDsYv8bwRWxS7gm33GPI6tca/+Iw99PwJrWqwxpOzsG9KewoncIpaUFkz2P3baJz0TKLvvnG5zICIHIOHetyHM1SirOoRol8n4e63g/j8fyH4JSEuYNDzGdUtrK9gmy5pNMc8ge2/Y1gqWXmtkVgIEUrFDuZt/RZEAts2kbrhLnysSV54He9p7wttLmqdkI+BB+avJQRjkQoQR71O355ZSKYva0HdAZsUVMiXMnxB3HJ/1MuS91nDsnvMQw2PJfhnNeRF+PA07eh8/4SplOs9PhEjj5+u2Ls0mZF0BMdmJ4WQt5thwdslpVGVI6gJKjf0VVNwWzKt3+2VlGfQ4hi+lTy4WVLrwDD8LOEE+1G37KJNmbbOA9GPuflERkETokdYX/Zn5r8P3XszdwFfEFJ48IzEgBtcVujL0WTZs2Ujpj+ceYWSOLPMGrRt+j7kQa2eRcS+prcm//Znbpse3VWU5uK4g8eqhW1vkG175olj/2r/6SvGja/bD88JBcIG3K9CR1zVTCwSVHe40HqhW41osGRbkn2cO7scWsXo1XF5MLUsOnLx9khjmJMyM0T6xYu2Yr/vq2BVP845kAIjHft78SmyXip4IjQC5e0H7/+svovX7vrnfH63gNWJQpDhGFiR/BSgTXB/UHTwve5cB+K9NQhBSPSvtG83cUME2ldNzi472yQHn6MF+HNs8XF1mvH7vTka8GZzQ4CFJ/xjoBU5OgsfIXW2fjxJGIPgVD2ftPv2kNtDzNfppVX5rYlbA2iZig5iLcfkyQJgZURQmume83P+5yUb7ZawaWw1T++O9jcAwhM/q6XWM04JF0ZbajGE5qwrqwVaZ6EYRXZ27FFkd/OdwQ1+gw1Nn27lsC7bt8KMGbLnMRb1+W1rYuN1x5szMblZBs3LFiE0c0p6/d27abCg8IbbG6esuJpD2o/93qDwen4hJq4R5jiokugh61v3IVBjVZwY7oPBnzbdDbCBQkgjBGR3mZJTX4r1UiyOWnWBY7o5J7AAbmg6MYTfYvXuXKRm+zyN9syK6m+vOJlQQIxm7px0W9BFe3rvu2UvdjFrCS9JrJRUjb4DZoWssoS43zZfrd41KMwqwE2MELklBPziLlWyQcqPqp3RMnZyXSftjKqpBgP4v12UhlhOfSS5wnIulaq0ZhECxz8wYcV6xt627pZnstEZJRD5gqtqrun5JmSR7L2gvvdIQNnOCYykgsZrHV+DKVbUgHrpUiNvCgZWX8qe+F3fw4Q5LLKQbVbrlQGO5Mjx/RpXRO8jJWWr626gaCvFUzbjCD3stbMX/7PD0Mr4ksA+6+DESSyLHm350SD9KekAru2Fmah6aejt+VMwguTsEb6vgEFtaHl0FzHKQzr0Eyaq86GPxTjJ+erIl0U9i1op5yIjbKus1WdxAbki6jkD50LnBBVg5R88dyWk41ryJryMS0nFajVG6s3TQwlaNkuDDWjDjlly/t7WuLC7sydNrEcDBxNTjAaxmB9faAGThZeaWj2Cd6NERO62lq6utN5bf/ajMhO6Xy3TPqxatPev61jutHlpRst1JWYDJnOiy1i5MyD9h2Du5ruwm60rjshmZ7VdIb97g+7olf9V2LNfzAqQaPBVjzYztcZlVzr/WFP/rOkYqEcqXt39XhPWvl1sjttwqKVp4S2u9Ev5Krr6hn5eQhUU1wI88vFIPv/OXIdwkxuNtHldrMrOMKDfaL/wRV8XRYDfSA2dwvPjpoXy6JLeMCunqE1k5pePd5mDevehwhQXMV4i0yG36oHhu2LKYz4Ol5xcrN9p0Wqfy11rAT9m2hMZFcZO75SFY0Lmts7FXqZvdnx2NbBeZNKJ30e4FeMkRj+PT5RekPCYmV70t6atUWNFgc+uXR/aZQNNXdZVdKYlObR05hwa2M/SUDzuIBzr4LxeTOsEQ/csF9iLIWvAmYb0wLjsp41GKnrltEXQDjb+rWE34VaeS4SjsR+xdC5Z6U/oSYnMo1+m/AIEpZksuo89deCUNj2QNmvzR3bcvWULG7dvPhfnyADk5PzuHqd0+P+HFjOCP9QWagJKvI/+UJvn0PhtfwB68X+IA8Zh/ZU5yaL1X6coAVmMRTMv8Okn24NGzk+ruRA4+9sau7pSWjIj8/k3Z/v0Bs5heFh1+X91//7PhKd+71tzhZuuvuo4cbHsXTWKVprBDzE76EmYINqTtjoDQh2y+kqSnGgSU4IwOC9nBTW4nbCLdXjd5TGDz/9Ago3NvXMrVAtJ4+hDmZUKcWLWiyjVHRkH7XuU7QY7cB4nmCBRN9NYZGOVXrYTW5eN9n9VT8au09hgFon6H8Nfl3zDBbT7kDukuTYelBJUbG+ESFtDF9UX1toMXP6j8yFDVNimIEE+eJ1eTGpgxMNeN5D/tfhCFQGQsfK1jRQZRoy9DQUL2EY5vSi7APQYyr0qLSlBzQiUi9isHJNY5onUa3zuue/vm6N+guhKT89xh/nGxzpvY2cJYPErkr0wkrpCR/5zgXmVAfbG50vf4BRh6IUPDfOnfNYaKtrjAHqnQ6b+oHL41u7z8RMK94+HwtUZCC/dt236hCpLJqU5FsVbtlRZYqGJtayXIgMNkaLYOQAIX68P8cD+ydshTWGysntPGFV0uEVVqweDOfUsWj5uVuJBetgDzmWHcPb/lEd7gRJYfYo5xU1R2PS4zoNwwPr11OnOZ5JZZplMLe5Od4F7Ts4r/oKrZNzh1MFrx5r4bxL8lL4592y1LkZL7keoYHq9bOu3hGCkfPctIJ5fHNWgLELjpNHD5+UfaUyxfJmLj/OuDK8k7fnMGI0w90Hw6qQVcVVBczI320w5WFwHPwB1atWQacGXG1RqT2vV9X8JrTHl24fEC5zOwKz6M4WcUfm4AEp1y9zkvCXArx+0Tv6nqp7ltPlgu92KzxC9qUpPwfhrnp5uLveDW1eF6Wd9krl+VUk5oif6K8suxDcd6rxeZkLhh5azD5odrC0QD8ZHGUalZXYDkr/RV/anbZk3c+lWLWXkLp5nA0ojpDqnF3PbD2WuJTEaEBiEI6KQpw5Ju6T4aDsJpI4OzLnk+dr1U9vwe05ET/dr1b8YQTKG/XjtFYIqo3k9FQahPazYwYzvHoymDw/Ieb60WMG5MnkoO3Q23oyT3YdHehQnxn05XbRWdcSoZZ6YqCsERpzMB/cxxNbSFSWXjmxc8yAduttcEsILy8VDuu7HdMzOGtx/7NbFv9EzZu3xVUlkKjr/byuCri5UCsZt2/GMox5byQbBorJCmVi/6liXut6h97EvrEUOxpmyL0jM1uAEQ4yBvIm0PwpEl9iCCVdf0NdCPEPwytZwt4aVNczZFpWOutIRA3IHleIwsDC5GfbwzaOHq9BC8EXd69ReLRf8zamif71vcaVVbUb7M2UEHMp9qC0E/60T89tl/w/EiEAaY9zpTSI4MdV87rIQPX89z4a7B9ayRBBvOvgX+5bPJ3rQ+kq2bNSkcM/tHr8K51Ntk50Se4m40F1ozRCLb9FSxYz5vM+YO7jYcVhYMtMrotp94WVMxa1VqKblT0YSXJGWYPF6y+JEVvQ+gMtD30hEdxIUkeKIIdchZa7iT0yjAHqkbIBKl2l2VH6WIPDUh5K67ifD7e+hqUc82KdFEAr2z5EtgjraGaBYrwzl7vc7xOiZHkAQ9cu1czv+dcWU+aTHfXPS9hRA3pfFUd1eamcJHbVrHa54iYODiGdXJsSeNUTQ7nsonC4JtJiGTqkF2BSrPa5SIdIhjtg/rc1ZFhGn4gIpExddMYkMuKi5ZhB0Xo5bs62Wn/+j55fsIlp61mriQk4YmWafnWNkvb5RdV1qWxsRQaz5vc96E7NL8+pOZ8WfWi4pWk3LB8hWp0HuIyJm65ndq2N+uhUrPhEHi+IWX5PbU6PMb16/X5JusZYn86aVrnM+BOT9TuhoAB8kF6pSD/UTuSxlg6BxgB1IqP4vd3Mgrktu/CcjIL6qQ8BTti8D+aXM3nR2L2aWrN0rM8EoIS7PXby0CnvpbtXxyUS9CrqenHgoK5EoVOlE0D7OzD3fW7SJ3aRm933EqiBE3nvKX90rSIK7wH3x99PH/o/cSBX25KaY1UeZm2LHJqYFz5YzCll3w7jVqopbWvKENpmXGRYswJwVnYbKxayw4ZvCEXacsjNKpAs39yB3p8IEappnLRWdjKxxLxvkB25MyTqEvquXj3+oldQDmO6OVJTpFEqjNoJxH3KHUFWkUpSCGaR2R3eb95sntMUbp6ZO/h9TT0j8Co7XHKL584stDmf682L7C3gyYjU/XPSlmFB6rmfzCjivNdj+RRkYltu0SVWfWuOEg0cS74zRAG/cMNtg/HgPf4fMmouGcy13RcLzfp8epXvqpNPnTULrE0dzksxWScMRkc6xQf9nHXSyLglnp13osDeq/BPXHQE5gc3U7LRwFpqUlIkFLYL2JgXs4BjsnbsEonOGKA1NMs+ZxSnZ1zJh9ruRnHDPUMP9+OrEaC3qKuiR9KIlmXeSoZ8SldbsJLueFeVoOTdYoNgWxiZGXdn+pvIrFqS2zFFf2C7D9KlVsiDzY8eYFzFKcW2bOc+CnM5cdrZVgWqe4ypftlZyifkmARF0Ddpt9Prb3t2Fu49TVnBzAR40VFoL+f138koL4XdhQMgO737iDCQqgqn/oqKNHk1dPuNUY9smNjKTsiMDLPrr+9XeS2c2IfKbKn+Xa7lNc56LOMZ6UIl1K5V4AVwQ0wG1rYYOVvfJAYsUTm+/MziHvyl4ISm1MMedT2zT1ufAKDJompfxgUsMgO3M2+lbo0oi0PJMUG+kY2xLO9EN532e9HgM7SsldHTmgq1GbVIuNOf6kxgi8i03oaJoJCXkNHkyQFN2fM7cEFmQk772NyOSvP8EBoU599xbmwoP+Wo5qHD24F9Nff03kUKsEhhevsNWVifdbXeHRm6/5H93m70l+2RWyGTIGC+Go9FPXLwfkEKPzJduslaNaW3k+bTjOv5tzht1vYteVpPD4lKs7CSwcIBkR65G+8DtZjjcNWUOyn/2kyNmOLH5asvVBMFtg/ZLsD02oKRJTrTiEtLRW+Yu0Ien/p3OU/8RHRnRFOcKku9dupoVOK25+xp+qI13P/REr98XefRO8YUZKvvcaFHqzUooMhe/afYsWeCnj3vot2PJ7K7T4wWJvYlW0uy5V2zqox5Ykq5C/u110iRSMhx3KXoO1VCJde/yTaQgyurXX+on0yJY5/r1Y7e30lRZFYXu52h6LmCbgi6UrkF8t1s1ETEPwjj+C75epU77DeGHaNO83+VqPYKbjLUj1GjeRP4CM8YnhHZa8dX1AL0cRyv7w5udoC+ViwLjw40++egOlNfFjz7TOMaA69NfB1dT7tx7dDCuXO6qjCYi1Inki6k5uaB0mAaQZklbtbL3ws7p3e2Yy5syI9kesd0Zg3NCEqLMTyjakue/sAfv9AP+bWKZGL4pY+x9EohKYw/+/kiysgei495lB23mOqKT7yOavWTSSSXbsCzC/Aapz5PlFC3AVJRX7OhJjB/quSosPpVU+BvMLQb7Z9BsR9oK0nuNgavnKMylssq53OuAj/a4wOgj0of2lSO6T1eLIwoyw36VV1PQZ1qbTbNTkzOed3QG/cFQEIPDxY9GF7mZooKddgJjm6y/mcjBdcLnv5Nw9YGRstqgFaMkWHWYXXleDVGfY3/B/M7CvSCc5siJSEQOoIzkZoY58Rx2qfeKQpLO+YQZvs/jqpML88n2B2gGn1RlmMHpU7o557tQkm87rYYsF3uTOSToBN2sedxdy+M6eJL7iyHYwNryyoN003hINIAQXB53bl+A5Wxt0o+aD3JiA1Pd6UYQcTB/ejsj/GTGmYseb3rvEjWpjFDrVfFapDsEVg9cM+5rgLY5Mtv28gD0MnHz2+t+20NkExv+U+ITshg1wcLGWuvwD4gDZOThFSb0M75H1yIirkMpT5tDs7Dp8K3xbczkuK14xRjo+i8nuShVcCtUIgxd7jsKj/qNt2nuXyMCiuszHk9kB1jqg7XuOp1L3YoJL2oeGg+4QaHCsqCgSt9O38Nx0OQikv9DYfmtZxD04q2ha/4rR05PLSH3sHGpoUaad4hX3HpYb3hqSX5PcdnSRND6ouO3SyKd4cv9Pz05LMz9Sg5Ic+EMAs8HNOndcDQnHkFQ4VlXR9d1EfMkddFqbhY7LMgx9sRBrXKrdJSsQUkxU9UFog54hs+/LnnH/miHGt5d25CoRpPP64HXIPGDraBvsPmBUfTjnuhgmMBQHogU4lm7mxVw/2eH0uRTmAhyb79kiSfd0vpgNJwxDTlt2I+uqJubipB0Qx4ckwjnu58U5BJivoEed0pJnM8IvDZdXLO8pwDZ4Pg0Pua8QAQpD3dQCdwe1RPTLHL5GutPwGyphRkqqzpfuoVUVNO25anI4nwM6HhcwOYTjXoFddDeLDSaZMuynJnG/ahqnMY+mzmDHc9uH8v8n+iuA5JjAZt//D86/yv9JxiRvNaCaiOAd97gFiIVyHnPA1Y4ff2ZdK53Vjyl2zxtOC7OiQcjqlPvZu7IL2nYpOm6WvUBgoZLuGS208bpry6qhvkppmPDHCBafbj5ToUc5+EFV8SS/YIYIgvOzLhYFfhjlSS74fEpo94zHvxcF12a0IUVrXw7gCfkW0Q4fPFFS321v1aRNsDT1LlRbdDu1WZmPSEwhRe6PGhYJbqb+sLQPiKD8d22ZcF6u1BybOJgaB316Kpn7rxLFNM9pD8Hf7JcWr3dGFKfQdHkcFXlpdsgHJLrJmySTsu7aUtZ6LxX7njBxtwLtC4zRqfpmKhOiY9T+gbVEJoQ9xuIFzdyMDy2En4cdjHcqQwsc9g8l+7Cmh3qDsgMPs2wR2Qoa4zYwsaInY5fgV3teTbJUdcpXarP5rf5MQHK9nmzTUltuS35H7tzT3lvvhxG2JA5Cix7RNtxph5QglNqUu6993XjZ16+uZbRr2RBoK35EcGHiOzpz+aT/Iuw6cXI5I5+EmzqhLTTrAsnzslmmKX4oH1hQSLQ/xXjBK+ZZrqjazPXL4kNM7f0Jn8PBBt39pz5UIgfchbtk0X+cjB8WJ+STVyrpr4kyjASkO2QTZKWNN8X3q25ZPBxvSLvS4pEnCtodo9kUu40IyhZ/9Bf8G4E2Dp6rmiFDJ9EoFMz5Gvgh9X6MIFuXBaDt6AT4NzGwE1zqef1N7bTnpIqLKq5Q5CRYOyVhthX6wGfpAi5qnNiR2Hr5LwBGIYicVMikf+K4xVyq216IVkle0+ed6XQa1IPyqz+hqySuAIHrdGV0fCwnpEIkY+ShMT8hV9E11QPDXhI0wwL22Ai9u9n3pBO9MIECZHW0NOrGGlLtVl4Sh1jyJWyyACADJV59Avz1iwF6gLt2A395HEwHKHFg3Zdw9I10EE0zGosGLIUwhLq8pw72ezc2JnLc3zLTWNskQ0QMjNAc5joXjAY56LqW+EKMu4lZJ695wu1PUCgdj3S++QbsAo3jcxnDb9SrVb8vRzbseQSvLvh/v0Jg80EtVTD2WiT1ALsiVdcu+abWlHbO1DWCvsW7iSMje/pL0jIodvjNszdaxt/nqd/6XsxeMghmM8dhc9yPYZU9lu5k72gawZDHBzrS6cW7Z8oR9AHwg3uR2MmhF2QV5xvfMrezwL+rlMAytPtdGSfkFLjQ0TvW6T2fTUSoXaJb619QtfqSyKRIu8Mqb177SMVXocoLjzoUG23dsZgRvDqWGeP2gulKzjuh2DVWW5v2KlRVB8FyeOdnt6cBqvkJX9HThHxc7YcBu9wLlEJOSLF9xv3zx8pa9MCHI7TlHMfmrK/47DbTolwOO0lNV3rVr3uFufmBWaF1ANv+N7jO5xqoAzNU7LNuMfHU7WSBPUOwrz28OBjBPIS/9LVzT8seDkbe9L5fefn/++Ic7ufozO7XaerovvElB4fc+9e0A8brD64kfUZUxkYI5P3hrFolk+XfEVLyF0T+pdN+7J2B8dov4BOjBIaD3UwzX5ZRdCX9hq5QUblt9S8/kxo7HEZi4j96Z37cF6UKOJWyy3F5g5n0NgHWtflEHpM0x2ZbrMn0YOOxXgSvgX2YRHB0Hc01k/bj1KHPlTloFlG5yYlY2DYMHKEQ3JRQ5f10IeBrQowd7gXxeo7GjdiaBXiJ086w835thNkpVqLgWN/02yfG9iBxFm5wNAhB2BkhfjYCBoSWHP26ByfQ7cReJhm6yE+NhPwrTahKSpVuFlZXIU91sT5WlX4dcf7fftxRTY30X/mTEjZkqF1zwsV4ZGnrOTGlN+Qxx8/h+SNAVNRO8Sp/hXZZ1YWJKMoOBBngz68n48I+wlqvq70erzEZ3vtLaEbRufWur0Nsf4UfYKpFXT4oWWtyY8DgwI3JKWyNkNtH8G6ruXwDcLRrNhcx3ecqzaLZr2VeBo6GgBZlTZpF7WPD116WGGbKh6FXba8WI6cCkQ1NTU3aEhsMM6VL1D4sxkY7WKrhIDVYhETgPTcCF+c+GhdcO6U/mFwdybnTyWZDPwN+goisEm2MfnZKlMmPUU8623SvRyGlWlJtF8yqiTm6wW3gMlPTpO88A7f2ZC70x0c7rY9EeAy//04ltgQtB7M/NvbyO2ZxjF9A9v+c1Xh5RNrZnA1FhZ67UgRc3qu8Unj7zSqGEmJ7QgqiKC7x43B3vq0IwgiSg1StfWjfSDahF9yyGz8fFFISRl9nNHYk55wWW4cwxc8+rfa4A0dPs76W8+m2/22N32wvt+C/+pa2NaGC609cNt7L8VCPq8Sjagjh2ZPvJMEQ6buWww/TzmhTZainX4FWNiiKAF+6B3YGNU20JIiQ/63TWjkPJnfsP1u9ZZP4DQaojbz/C6fKEjjzoX0b/5A5ddgq6VHDpOezJ53D1WyTUzxRBfbThV9lHT9JKX53e4sj7Ye2Bi9zgNBdKASAtNMv+LEho3K8jim+TaVQh19ELF1Fwp+uILuMYXIfT9hdTRh1uD8vywaR0dUWCuKvKIVGUPi8HcW/16dt/KiKVySllvMNEVzTlR8Y7J6DXr/6jfKUkJIr6cpwIxL0uRj5ZkZ9Ey61/zH9x6wQXYxNLgWFNLpSLH7JSKH3/oJibghGnp/4R+enXVNp3F6RRmEll/u7z+ENPUS0Nv5aXXhLrgXncNsz+mLgQoo0EeeTS5KuqcS8bZiUt1nrbxiPhsSiRCk14jog/s99a/zMK4jpucgXolCvKF0STkJl7FH2t6cte5ZNrVy8h7D9OQRTe2TfCvQye0D7fXTXYwbGhV0d8q44gwP6JMCMR+jqH7hzQbuaCTCtr3kZQ029scOT32ByNqoIDlaINCIL2DWl8Q0zVrRoUnjBjgKQ5DgCOhfgycopQb07xNYui3AIrs24grlq9cI52Qo0q5nlv0XlSzFCO4O7+0MbtS/6ymoRVpFhKu+4o3/Z4srJ7XHGc18ELIbcyS1f/XsrofhJRJFeKbLGZvl88WiBg8A/p7JcO1Ftzc2Eq72aR3bpsguqz5P71F5ZXFPPhFkt1RTuP0zjI0Ow59BiytDKf1sdZLJWu8xZg1fe/84wpk9IqfX8OLAi22uFWYtzD2/CU1SuoG6yVetsjoX+uxiyWQ0qFE0k56eVPsnq4l8z8t21ZrFR46nJKXHGoLSjeBxr3cmnNZ5wP3Deyhj/HqBpuOrZCrwgGb8+Cc1LLUOaqdVhkdrnfzdebnujv3v06kKPeZGey8SH7K0CYxM/G7p//HH314VXBmh7Y/h/0jmOGXkmU5O+zuEvRqLK7esqjFFbuQuyB1Fh1HiMEzcTsZRVfzLG3xWwqiwsuFLBFoeQWbhju3gnVzCxBMvU+/5+ncqXaWcygJ1WsylE21pKNXNMh9FYI3yPdcmanYDeLsdqaQBCIdN9z5/iUm+WzNHrJCwuE+uVU3+2Y4IcoqNSB2+YBHtKbgNeWgwYsd3AEcLT18YuvJjSIZ+PQMERdkgrjpbKcw5MPQWeeSTNl+z7Gn//VJEzPXtT+/Rju6eBdc55YuUi9SCCNsbzVo2w8DuMYhc430om3OP8lXIvfSt5jNWcbW/qH0ZCm/aPgzeAMnlN3w0el0++DFW/1yeR59aK4nHs9Bw/J/Ka39CYHPtkykyQktX6W7syN0bhbbsZO3X2qIwrdNoqZ4lFmLrvWeKYsAeZPMf1/dT+ImFPaj93rYOR9nGyv/9iCpPZTqrLLB6yV7i1J2XdnmGsd/VPlgzczTPkvPylu+kStGRmUNzNS0pILPV7Ynu0VW5mki362DPCRPd4NiRiWy1B4jf+d2bwvnK76xv5yXaWPdt39HeCi8xQiPPdocZSC48bpquDo0Hhq/fbQMkB2l9nLdpzs30/Fe8NoVRpGmW9P4x5W/kJRmZBbPma/kzOkFbfLiIPdStKktK75ZvfrSEiRVeA7iU9OFELF20mEyfI8077vItrpEAW//J9MWmJoVdGgnvWYJS3OwOYi845AEhSjMpeAa+LQ4kr6ncj3vBMMyXHO4a037KOkQc7VMeqWl9Wz6dgN3f2BvCqgDkLD8EFDBoslkA3MaZ3wrJFvDEXuViaWOC1OBaa5RnYzlIOJwJfhSHkZ7ofFmB+VvTfA3TKb0L1RQzOF23PD0gNlvmq6LQ2BnVPtkYIoj2BJit+VBKWGdOnUp030a+L8QIp3c6MrBeOyP8nnDTzbqfpsXLx0I9qBoN6y4ViRkg1r37/1DdvOyHWFuV2hRvbSWf/lez9KfuQXXxoKjEWoYQQqrMLg0pE9cSfg8PGGErmYV5xB78hZ9OB1irGE4t1h+I1/VwVgqMldSgm6U/89Ku1YFvH6nqeNj59SsWKuhs6RvYA0xJMSZ+cDqeOb/pYB0bGfEk2ARanl92JxvLDLzwfqHz/Z0fHtDlBAutZtxeBNQQLoTS5ST4wrtzuJB+S07DJXqJUfOWvAzJYXdnv+/f6R45W6LTH6Uj0qTLY6Z6/i/iOQIEoWaLRMAoJRsvyfRU9gtpX8Ffu2rwHbETvXsgYTLAsY9y89G/KvvsZdaszC30pfEF1qYs9CR+wvvFWU/qlKyX91pj82N9M8kJ3tTjWcy1vo39H0WJguMxKn0c4Vmp0UGH3B5+7y6b9NG1wAyLICP1ZEXNhsfH3MxoGBuQu4YxZJnq6JP/Mmd0k7s8U3OTPprLXOi5HYec2MALa7y6AUAX+x5YbhLHnqr3eqg+yv1Ye7UQFTeVqzyf1sP/1qLt4apjDG/nqopoGP98ysGS+fsgrjlIm8b4d+Pye45nY7xSfdEmr1dE98TFCCcnH0HFPVXmQU2npZzKEdQCWymhr2RG642kx8WUwYlZGNTGKIBrKPaq3HK+ArdwWEamaF3vQemU/wpMhrJDzLShAaloy9g7XBgz07kpLRcpc6MZTeVG5gQ/UI5hlgMcPIjfnUgSdDEwoGiJLbme+qLYOSYo81XLRLox4brlvtfYJ9QJTyChy6UrXwdSk0efRnjFGO77XV0tC0ECFTy+1795nA2r8AAvGuDXiofX3s9cunxToylHUstE4gOYB3kkiGpVqZcnb9Xw+KIsw8lFYirGEOXi87ievFsq5aF9Taa25HyeztksILnHzMwtqt/TLEShP7RJQXU3pvyOrAQxX43pz5MwWnb6Z5kT+0/r0qW5AsmY+6uW//R3q1XP7yd1Ro4cIRwNNPBmEBnvPC5Rtrpm4+fUGDiUlxTynRljBplwRE248adeOLlJQC192B22oJ71wW5OI/OIZkyJLOf9B5ThCGil8sx+0sfSAbbl4TYfEFcyXyt1IzAlTiv+/r7bzUd7kM62LcuZI4Kxln7irBik0yy/plvfYKk1CAf6Z+kLt2nDkhrv9Wbz/gXz61ZUOGpa7B92x0xviiJQgfwxIr86CIxB5AU0Pqj7jpy/lZMOXJ4qO/tXQ9UgL6SNHZTACAtoZY8I8Vo7oDh16uevFnS+tvDJ/3c/mtxaVVssn9B6SIxYuqMKTOdxb2surrbQ7RMTeyUbpnstyBEYdfkLF3ZVqvgDflf47l6+fHfQqQ/Z5U5OFbgNXiV5weM3KfZ0PSN3QRlp2xVNNzERvkA8YsJ1KND2YjFlQ6LnoQ4ePkhgbcz+Qe43/oESmV2lBcPvB+zylvDt9fhZ7Nv9LdtyaoFLEoWI8rmbQOtcr4OPGiSzO1uG3qX4UiNwxf3/gTBmV3ywEFm/r4oOiwMN5qI/c9I6MdBVsaTdhWoujLss10z4w28P4ZI78PX55v7suHOe+7fb+pqOjmqSzijRyWTftLBBxu3X/mth/4kk/3wmqKBwimHORjn58bqsfM9IOy22CTElBtkjb9jbaQoi5r/ye9ee4TKLkOn8LWI9lT5XbuIEhFR3nHWzilpOmORfgxwnqMMv7WVM5Jxrn66a/PvSolaOZDMhIPTieGXY1qe8E98vLAteZaH11/oFiUQ/l+5IkJChyre1Q6t9z+wp0Y8snUd3udDdghoCIJC/rum3qDlNbOoIgd1u2Jqe3+spJ5JiDXz7ai7vSkUmFa0yWVx0gyaS0KKhc96rjaEeK4pP4VNp1fS8y7y92h52DRG2z7N8Jiy00etuufnWU4IcItix3xB7cD9HkqhLqzS3r3QlRF0zgguVRHm0bPyY5WfM4ZW8LnVAbNPkGPovaccZ3OAJ1HU101HhoZp/F+Rply307G8KDNjQpGLcM5KtKE0HhSYJibYyx5RZC5pJpmTijRvEmPr0ZJQtUDulh7uaIFNyuf7tZ3UPq0JMpSRdJzP/1WfaifoIW/+sP3twDppR/xMyjOTj9vtnzUYrnE4Gm8x2rgpxYRLDfhhi0Q77X6D72rANTxkKHTOrHJ23KXtI2nlB39kQy8myCuFhPVuMxTQW23qnZGJqGbpJLSL/XtdcAb028SvpVLRDaIvbB/nUV1hJW6ekKqIK1oR5xm2Be5mZlAeDVc4PTo/plvbfIesdSiiDYL73zvb/9Go6ZLxWlaYNspotyr6vY36g9kOfvm/uknHwv7mgUvg9ll3ZuUffrsDPvHmU3dz8c3/DENdtcDKLJ+W68/wXrCYTmepDGy/yGpEn8rFnN0m7/8qyREJgaBLFSs4HPsmRU3fnwv61nj17CGZar0J0BNSo/0i3JN4NUxYOkX1uox4GUOdWk5ozIZbfF3SYrTEqubHPW1+ltlS2ombVveKSxscPphXoD5T9R3jvzv3Ds+Bo/O4HJ7CDZNJ/+kcCLzxoO/dpzQc3aMUXfrO+HNueirCtzS4lshB8alhULRswC0N8heN25yK8MiDayA1EJi6FSkh036QDG7N+rwCacEta0VYYDT9N4QJkQ2WrFJ0JqKPQ2tAbW99SnbAA7but4qzsq8uRw+woo9bMe1jtk5vrlv+EZRmIZ71O/Y5l3JMqVcDW69/RguxW+jsORUuZL09fZ9DYvpgqTLlP7tXNc+CdI2Zmsi4YK/xn6NBGwcZeHbx973cPTkPRffYKwJagoxpjw+zKq7R3DqWHqcWV7hSyVElRah63L2vKEi5K1AJCA2StHj7F+8MNYsWfEdrTNoYJhEzpUkp75gvHFZPJN4KuvBdz5CCm1zLdiwualD2kfdNMMXXdSi7b0/SkGmerOqDj3Drb96S+ujW1UFYLH/rmLasTbrAVaRqfzlsMCyqC3yWp83ocseZO8lGlFs554UZ0kNhACu5bHs2GOIHNekyyVb609lZzJpQqJSwURdF9WfUmzkFWReectzNiZM4O5w39et0LVTDs3dCC6ua8UZrOIWBVCK5SWPllQH6LE7L7Blv6iMTx7R4bgCMFBVVtk+0pvPtLWNSaq2rReAaiYa1Qr59IfyNpIgC4IHgzUAOVj8ORD7JAm9ciQ52fHwDxsuwc0qadFwAeO+Z5RhmcQq31kFaT6QSlnquODv9z2GK26ZhQNmg+JjW97Hf7Ny9ctG8h+f0lo001UO4m4CqJk705uPdSYInPMgNwxjFqLfLxB37b7RLCeb60gII5L8iG+KPwkrCmKTf7MvPqpQvF/b/OBwQPGz7wsKLsEROaha8qlbGCxxx7Dvq0vANsdIefW86G2JhY7y9cvVuesR10XYa7ekHlpS0IVv0fHcYBnTkosi0mnlgwwQw1rHv8AOPxE2mbdFIFn72uWPLViGWnEzOOAGZQSbiWt/hFlwK3Z0Eo8GOjrFFcHle20iU/Cp5Nw0KVUnHqUI4XaJu/l59P8AhAB7/42kX95MLYGplHJa/k1IUJXf6micQF2+s2+cZIzhNzeW6Pt9co95XLhKrJ+m4LLQW29lq0WOioDQoKdt+P+HEH6FsLzUCHF+n2XUxO9b9CB8M3jF0Qhdyum+SH9sRzBgnKZpubWYRl6mhHJqB+aCgVb+cahk5nIJCRNtymQWrwlvi8KiRCZEpv+u0/tEAAAAAElFTkSuQmCC\";\n export default img;","/* eslint-disable camelcase */\nimport { NearestFilter, NoColorSpace, RepeatWrapping, TextureLoader, Vector2 } from \"three\"\nimport blueNoiseImage from \"./blue_noise_rgba.png\"\nimport blue_noise from \"../utils/shader/blue_noise.glsl\"\n\nconst blueNoiseSize = 128\nconst highestSignedInt = 0x7fffffff\n\nconst blueNoiseTexture = new TextureLoader().load(blueNoiseImage, () => {\n\tblueNoiseTexture.minFilter = NearestFilter\n\tblueNoiseTexture.magFilter = NearestFilter\n\tblueNoiseTexture.wrapS = RepeatWrapping\n\tblueNoiseTexture.wrapT = RepeatWrapping\n\tblueNoiseTexture.colorSpace = NoColorSpace\n})\n\nexport const setupBlueNoise = fragmentShader => {\n\tlet blueNoiseIndex = 0\n\tconst startIndex = Math.floor(Math.random() * highestSignedInt)\n\n\tconst uniforms = {\n\t\tblueNoiseTexture: { value: blueNoiseTexture },\n\t\tblueNoiseSize: { value: new Vector2(blueNoiseSize, blueNoiseSize) },\n\t\tblueNoiseIndex: {\n\t\t\tget value() {\n\t\t\t\tblueNoiseIndex = (startIndex + blueNoiseIndex + 1) % highestSignedInt\n\t\t\t\treturn blueNoiseIndex\n\t\t\t},\n\t\t\tset value(v) {\n\t\t\t\tblueNoiseIndex = v\n\t\t\t}\n\t\t}\n\t}\n\n\tfragmentShader = fragmentShader.replace(\"uniform vec2 resolution;\", \"uniform vec2 resolution;\\n\" + blue_noise)\n\n\treturn { uniforms, fragmentShader }\n}\n\nexport const useBlueNoise = material => {\n\tconst { fragmentShader, uniforms } = setupBlueNoise(material.fragmentShader)\n\tmaterial.fragmentShader = fragmentShader\n\tmaterial.uniforms = { ...material.uniforms, ...uniforms }\n\n\tmaterial.needsUpdate = true\n}\n","/* eslint-disable camelcase */\nimport { MeshPhysicalMaterial, Vector2 } from \"three\"\nimport gbuffer_packing from \"../shader/gbuffer_packing.glsl\"\nimport { setupBlueNoise } from \"../../utils/BlueNoiseUtils\"\n\nclass GBufferMaterial extends MeshPhysicalMaterial {\n\tonBeforeCompile(shader) {\n\t\tthis.uniforms = shader.uniforms\n\n\t\tshader.uniforms.resolution = { value: new Vector2(1, 1) }\n\t\tshader.uniforms.cameraNotMovedFrames = { value: 0 }\n\n\t\t// delete all includes that have the pattern \"#include <lights_something>\"\n\t\tshader.vertexShader = shader.vertexShader.replace(/#include <lights_.*>/g, \"\")\n\t\tshader.fragmentShader = shader.fragmentShader.replace(/#include <lights_.*>/g, \"\")\n\n\t\t// delete all includes that have the pattern \"#include <alpha...>\"\n\t\tshader.vertexShader = shader.vertexShader.replace(/#include <alpha.*>/g, \"\")\n\t\tshader.fragmentShader = shader.fragmentShader.replace(/#include <alpha.*>/g, \"\")\n\n\t\t// delete all includes that have the pattern \"#include <aomap...>\"\n\t\tshader.vertexShader = shader.vertexShader.replace(/#include <aomap.*>/g, \"\")\n\t\tshader.fragmentShader = shader.fragmentShader.replace(/#include <aomap.*>/g, \"\")\n\n\t\t// delete all includes that have the pattern \"#include <lightmap...>\"\n\t\tshader.vertexShader = shader.vertexShader.replace(/#include <lightmap.*>/g, \"\")\n\t\tshader.fragmentShader = shader.fragmentShader.replace(/#include <lightmap.*>/g, \"\")\n\n\t\t// delete all includes that have the pattern \"#include <alphahash...>\"\n\t\tshader.vertexShader = shader.vertexShader.replace(/#include <alphahash.*>/g, \"\")\n\t\tshader.fragmentShader = shader.fragmentShader.replace(/#include <alphahash.*>/g, \"\")\n\n\t\t// delete all includes that have the pattern \"#include <alphatest...>\"\n\t\tshader.vertexShader = shader.vertexShader.replace(/#include <alphatest.*>/g, \"\")\n\t\tshader.fragmentShader = shader.fragmentShader.replace(/#include <alphatest.*>/g, \"\")\n\n\t\t// remove opaque_fragment include\n\t\tshader.fragmentShader = shader.fragmentShader.replace(\"#include <opaque_fragment>\", \"\")\n\n\t\t// remove colorspace_fragment include\n\t\tshader.fragmentShader = shader.fragmentShader.replace(\"#include <colorspace_fragment>\", \"\")\n\n\t\t// delete the fog_fragment include\n\t\tshader.fragmentShader = shader.fragmentShader.replace(\"#include <fog_fragment>\", \"\")\n\n\t\tshader.fragmentShader = shader.fragmentShader\n\t\t\t.replace(\n\t\t\t\t\"void main() {\",\n\t\t\t\t/* glsl */ `\n\t\t\t#define vUv gl_FragCoord.xy\n uniform vec2 resolution;\n uniform float cameraNotMovedFrames;\n\n ${gbuffer_packing}\n\n void main() {\n\t\t\t\t\tfloat a = opacity;\n\n\t\t\t\t\t#ifdef USE_ALPHAMAP\n\t\t\t\t\t\ta *= texture2D( alphaMap, vAlphaMapUv ).g;\n\t\t\t\t\t#endif\n\n\t\t\t\t\tif (cameraNotMovedFrames == 0.) {\n\t\t\t\t\t\tif(a < 0.5) {\n\t\t\t\t\t\t\tdiscard;\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\ta = 1.;\n\t\t\t\t\t} else if (a != 1.) {\n\t\t\t\t\t\tfloat aStep = a > 0.5 ? 1. : 0.;\n\t\t\t\t\t\ta = mix(a, aStep, (1. / (cameraNotMovedFrames * 0.1 + 1.)));\n\n\t\t\t\t\t\tvec4 noise = blueNoise();\n\t\t\t\t\t\tif (noise.x > a) {\n\t\t\t\t\t\t\tdiscard;\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n `\n\t\t\t)\n\t\t\t.replace(\n\t\t\t\t\"#include <dithering_fragment>\",\n\t\t\t\t/* glsl */ `\n #include <dithering_fragment>\n\n vec3 worldNormal = normalize((vec4(normal, 1.) * viewMatrix).xyz);\n\n vec4 gBuffer = packGBuffer(diffuseColor, worldNormal, roughnessFactor, metalnessFactor, totalEmissiveRadiance);\n\n gl_FragColor = gBuffer;`\n\t\t\t)\n\n\t\tconst { uniforms, fragmentShader } = setupBlueNoise(shader.fragmentShader)\n\t\tshader.uniforms = { ...shader.uniforms, ...uniforms }\n\t\tshader.fragmentShader = fragmentShader\n\t}\n}\n\nconst gBufferMaterial = new GBufferMaterial()\n\nexport function createGBufferMaterial(originalMaterial) {\n\tconst material = gBufferMaterial.clone()\n\n\tcopyAllPropsToGBufferMaterial(originalMaterial, material)\n\n\treturn material\n}\n\nlet props = Object.keys(gBufferMaterial)\n\n// delete the ones that start with \"_\"\nprops = props.filter(\n\tkey => !key.startsWith(\"_\") && !key.startsWith(\"is\") && key !== \"uuid\" && key !== \"type\" && key !== \"transparent\"\n)\n\n// this function attempts to copy all the props from the original material to the new GBufferMaterial\nfunction copyAllPropsToGBufferMaterial(originalMaterial, gBufferMaterial) {\n\tfor (const key of props) {\n\t\tif (originalMaterial[key] !== undefined) {\n\t\t\tgBufferMaterial[key] = originalMaterial[key]\n\t\t}\n\t}\n}\n\nconst propsPrimitive = props.filter(\n\tkey => typeof gBufferMaterial[key] === \"string\" || typeof gBufferMaterial[key] === \"number\"\n)\n\nexport function copyPropsToGBufferMaterial(originalMaterial, gBufferMaterial) {\n\tfor (const prop of propsPrimitive) {\n\t\tgBufferMaterial[prop] = originalMaterial[prop]\n\t}\n}\n","import { Pass } from \"postprocessing\"\nimport { Color, DepthTexture, FloatType, NearestFilter, Quaternion, Vector3, WebGLRenderTarget } from \"three\"\nimport { didCameraMove, getVisibleChildren, isChildMaterialRenderable } from \"../utils/SceneUtils.js\"\nimport { copyPropsToGBufferMaterial, createGBufferMaterial } from \"./material/GBufferMaterial.js\"\n\nconst backgroundColor = new Color(0)\n\nexport class GBufferPass extends Pass {\n\tframe = 21483\n\tcachedMaterials = new WeakMap()\n\tvisibleMeshes = []\n\tlastCameraPosition = new Vector3()\n\tlastCameraQuaternion = new Quaternion()\n\n\tconstructor(scene, camera) {\n\t\tsuper(\"GBufferPass\")\n\n\t\tthis._scene = scene\n\t\tthis._camera = camera\n\n\t\tthis.initGBufferRenderTarget()\n\t}\n\n\tget texture() {\n\t\treturn this.renderTarget.texture\n\t}\n\n\tget depthTexture() {\n\t\treturn this.renderTarget.depthTexture\n\t}\n\n\tinitGBufferRenderTarget() {\n\t\tthis.renderTarget = new WebGLRenderTarget(1, 1, {\n\t\t\ttype: FloatType,\n\t\t\tminFilter: NearestFilter,\n\t\t\tmagFilter: NearestFilter,\n\t\t\tdepthBuffer: true\n\t\t})\n\n\t\tthis.renderTarget.texture.name = \"GBufferPass.Texture\"\n\n\t\tthis.renderTarget.depthTexture = new DepthTexture(1, 1)\n\t\tthis.renderTarget.depthTexture.type = FloatType\n\t\tthis.renderTarget.depthTexture.name = \"GBufferPass.DepthTexture\"\n\t}\n\n\tsetSize(width, height) {\n\t\tthis.renderTarget.setSize(width, height)\n\t}\n\n\tdispose() {\n\t\tsuper.dispose()\n\t\tthis.renderTarget.dispose()\n\t}\n\n\tsetGBufferMaterialInScene() {\n\t\tthis.visibleMeshes = getVisibleChildren(this._scene)\n\n\t\tconst cameraMoved = didCameraMove(this._camera, this.lastCameraPosition, this.lastCameraQuaternion)\n\n\t\tfor (const c of this.visibleMeshes) {\n\t\t\tconst originalMaterial = c.material\n\n\t\t\tlet [cachedOriginalMaterial, gBufferMaterial] = this.cachedMaterials.get(c) || []\n\n\t\t\t// init a new material if the original material changed or if the cached material is missing\n\t\t\tif (originalMaterial !== cachedOriginalMaterial) {\n\t\t\t\tif (gBufferMaterial) gBufferMaterial.dispose()\n\n\t\t\t\tgBufferMaterial = createGBufferMaterial(originalMaterial)\n\n\t\t\t\tthis.cachedMaterials.set(c, [originalMaterial, gBufferMaterial])\n\t\t\t}\n\n\t\t\t// gBufferMaterial.uniforms.resolution.value.set(this.renderTarget.width, this.renderTarget.height)\n\t\t\t// gBufferMaterial.uniforms.frame.value = this.frame\n\n\t\t\tif (gBufferMaterial.uniforms) {\n\t\t\t\tgBufferMaterial.uniforms.cameraNotMovedFrames.value = cameraMoved\n\t\t\t\t\t? 0\n\t\t\t\t\t: (gBufferMaterial.uniforms.cameraNotMovedFrames.value + 1) % 0xffff\n\t\t\t}\n\n\t\t\tc.visible = isChildMaterialRenderable(c, originalMaterial)\n\n\t\t\tcopyPropsToGBufferMaterial(originalMaterial, gBufferMaterial)\n\n\t\t\tc.material = gBufferMaterial\n\t\t}\n\t}\n\n\tunsetGBufferMaterialInScene() {\n\t\tfor (const c of this.visibleMeshes) {\n\t\t\tconst [originalMaterial] = this.cachedMaterials.get(c)\n\n\t\t\tc.material = originalMaterial\n\t\t}\n\t}\n\n\trender(renderer) {\n\t\tthis.frame = (this.frame + 1) % 4096\n\n\t\tconst { background } = this._scene\n\n\t\tthis._scene.background = backgroundColor\n\n\t\tthis.setGBufferMaterialInScene()\n\n\t\trenderer.setRenderTarget(this.renderTarget)\n\t\trenderer.render(this._scene, this._camera)\n\n\t\tthis.unsetGBufferMaterialInScene()\n\n\t\t// reset state\n\t\tthis.lastCameraPosition.copy(this._camera.position)\n\t\tthis.lastCameraQuaternion.copy(this._camera.quaternion)\n\n\t\tthis._scene.background = background\n\t}\n}\n","// source: https://github.com/gkjohnson/three-gpu-pathtracer/blob/main/src/uniforms/EquirectHdrInfoUniform.js\n\nimport { DataTexture, FloatType, NearestFilter, RGBAFormat, RedFormat, RepeatWrapping, Vector2 } from \"three\"\n\nconst workerOnMessage = ({ data: { width, height, isFloatType, flipY, data } }) => {\n\t// from: https://github.com/mrdoob/three.js/blob/dev/src/extras/DataUtils.js\n\n\t// importing modules doesn't seem to work for workers that were generated through createObjectURL() for some reason\n\n\tconst _tables = /* @__PURE__*/ _generateTables()\n\n\tfunction _generateTables() {\n\t\t// float32 to float16 helpers\n\n\t\tconst buffer = new ArrayBuffer(4)\n\t\tconst floatView = new Float32Array(buffer)\n\t\tconst uint32View = new Uint32Array(buffer)\n\n\t\tconst baseTable = new Uint32Array(512)\n\t\tconst shiftTable = new Uint32Array(512)\n\n\t\tfor (let i = 0; i < 256; ++i) {\n\t\t\tconst e = i - 127\n\n\t\t\t// very small number (0, -0)\n\n\t\t\tif (e < -27) {\n\t\t\t\tbaseTable[i] = 0x0000\n\t\t\t\tbaseTable[i | 0x100] = 0x8000\n\t\t\t\tshiftTable[i] = 24\n\t\t\t\tshiftTable[i | 0x100] = 24\n\n\t\t\t\t// small number (denorm)\n\t\t\t} else if (e < -14) {\n\t\t\t\tbaseTable[i] = 0x0400 >> (-e - 14)\n\t\t\t\tbaseTable[i | 0x100] = (0x0400 >> (-e - 14)) | 0x8000\n\t\t\t\tshiftTable[i] = -e - 1\n\t\t\t\tshiftTable[i | 0x100] = -e - 1\n\n\t\t\t\t// normal number\n\t\t\t} else if (e <= 15) {\n\t\t\t\tbaseTable[i] = (e + 15) << 10\n\t\t\t\tbaseTable[i | 0x100] = ((e + 15) << 10) | 0x8000\n\t\t\t\tshiftTable[i] = 13\n\t\t\t\tshiftTable[i | 0x100] = 13\n\n\t\t\t\t// large number (Infinity, -Infinity)\n\t\t\t} else if (e < 128) {\n\t\t\t\tbaseTable[i] = 0x7c00\n\t\t\t\tbaseTable[i | 0x100] = 0xfc00\n\t\t\t\tshiftTable[i] = 24\n\t\t\t\tshiftTable[i | 0x100] = 24\n\n\t\t\t\t// stay (NaN, Infinity, -Infinity)\n\t\t\t} else {\n\t\t\t\tbaseTable[i] = 0x7c00\n\t\t\t\tbaseTable[i | 0x100] = 0xfc00\n\t\t\t\tshiftTable[i] = 13\n\t\t\t\tshiftTable[i | 0x100] = 13\n\t\t\t}\n\t\t}\n\n\t\t// float16 to float32 helpers\n\n\t\tconst mantissaTable = new Uint32Array(2048)\n\t\tconst exponentTable = new Uint32Array(64)\n\t\tconst offsetTable = new Uint32Array(64)\n\n\t\tfor (let i = 1; i < 1024; ++i) {\n\t\t\tlet m = i << 13 // zero pad mantissa bits\n\t\t\tlet e = 0 // zero exponent\n\n\t\t\t// normalized\n\t\t\twhile ((m & 0x00800000) === 0) {\n\t\t\t\tm <<= 1\n\t\t\t\te -= 0x00800000 // decrement exponent\n\t\t\t}\n\n\t\t\tm &= ~0x00800000 // clear leading 1 bit\n\t\t\te += 0x38800000 // adjust bias\n\n\t\t\tmantissaTable[i] = m | e\n\t\t}\n\n\t\tfor (let i = 1024; i < 2048; ++i) {\n\t\t\tmantissaTable[i] = 0x38000000 + ((i - 1024) << 13)\n\t\t}\n\n\t\tfor (let i = 1; i < 31; ++i) {\n\t\t\texponentTable[i] = i << 23\n\t\t}\n\n\t\texponentTable[31] = 0x47800000\n\t\texponentTable[32] = 0x80000000\n\n\t\tfor (let i = 33; i < 63; ++i) {\n\t\t\texponentTable[i] = 0x80000000 + ((i - 32) << 23)\n\t\t}\n\n\t\texponentTable[63] = 0xc7800000\n\n\t\tfor (let i = 1; i < 64; ++i) {\n\t\t\tif (i !== 32) {\n\t\t\t\toffsetTable[i] = 1024\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\tfloatView: floatView,\n\t\t\tuint32View: uint32View,\n\t\t\tbaseTable: baseTable,\n\t\t\tshiftTable: shiftTable,\n\t\t\tmantissaTable: mantissaTable,\n\t\t\texponentTable: exponentTable,\n\t\t\toffsetTable: offsetTable\n\t\t}\n\t}\n\n\tfunction fromHalfFloat(val) {\n\t\tconst m = val >> 10\n\t\t_tables.uint32View[0] = _tables.mantissaTable[_tables.offsetTable[m] + (val & 0x3ff)] + _tables.exponentTable[m]\n\t\treturn _tables.floatView[0]\n\t}\n\n\tfunction colorToLuminance(r, g, b) {\n\t\t// https://en.wikipedia.org/wiki/Relative_luminance\n\t\treturn 0.2126 * r + 0.7152 * g + 0.0722 * b\n\t}\n\n\tconst binarySearchFindClosestIndexOf = (array, targetValue, offset = 0, count = array.length) => {\n\t\tlet lower = offset\n\t\tlet upper = offset + count - 1\n\n\t\twhile (lower < upper) {\n\t\t\tconst mid = (lower + upper) >> 1\n\n\t\t\t// check if the middle array value is above or below the target and shift\n\t\t\t// which half of the array we're looking at\n\t\t\tif (array[mid] < targetValue) {\n\t\t\t\tlower = mid + 1\n\t\t\t} else {\n\t\t\t\tupper = mid\n\t\t\t}\n\t\t}\n\n\t\treturn lower - offset\n\t}\n\n\tconst gatherData = (data, width, height, flipY, marginalDataArray, conditionalDataArray) => {\n\t\t// \"conditional\" = \"pixel relative to row pixels sum\"\n\t\t// \"marginal\" = \"row relative to row sum\"\n\n\t\t// remove any y flipping for cdf computation\n\t\tif (flipY) {\n\t\t\tfor (let y = 0, h = height - 1; y <= h; y++) {\n\t\t\t\tfor (let x = 0, w = width * 4; x < w; x += 4) {\n\t\t\t\t\tconst newY = h - y\n\t\t\t\t\tconst ogIndex = y * w + x\n\t\t\t\t\tconst newIndex = newY * w + x\n\t\t\t\t\tdata[newIndex] = data[ogIndex]\n\t\t\t\t\tdata[newIndex + 1] = data[ogIndex + 1]\n\t\t\t\t\tdata[newIndex + 2] = data[ogIndex + 2]\n\t\t\t\t\tdata[newIndex + 3] = data[ogIndex + 3]\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// track the importance of any given pixel in the image by tracking its weight relative to other pixels in the image\n\t\tconst pdfConditional = new Float32Array(width * height)\n\t\tconst cdfConditional = new Float32Array(width * height)\n\n\t\tconst pdfMarginal = new Float32Array(height)\n\t\tconst cdfMarginal = new Float32Array(height)\n\n\t\tlet totalSumValue = 0.0\n\t\tlet cumulativeWeightMarginal = 0.0\n\t\tfor (let y = 0; y < height; y++) {\n\t\t\tlet cumulativeRowWeight = 0.0\n\t\t\tfor (let x = 0; x < width; x++) {\n\t\t\t\tconst i = y * width + x\n\t\t\t\tconst r = data[4 * i + 0]\n\t\t\t\tconst g = data[4 * i + 1]\n\t\t\t\tconst b = data[4 * i + 2]\n\n\t\t\t\t// the probability of the pixel being selected in this row is the\n\t\t\t\t// scale of the luminance relative to the rest of the pixels.\n\t\t\t\t// TODO: this should also account for the solid angle of the pixel when sampling\n\t\t\t\tconst weight = colorToLuminance(r, g, b)\n\t\t\t\tcumulativeRowWeight += weight\n\t\t\t\ttotalSumValue += weight\n\n\t\t\t\tpdfConditional[i] = weight\n\t\t\t\tcdfConditional[i] = cumulativeRowWeight\n\t\t\t}\n\n\t\t\t// can happen if the row is all black\n\t\t\tif (cumulativeRowWeight !== 0) {\n\t\t\t\t// scale the pdf and cdf to [0.0, 1.0]\n\t\t\t\tfor (let i = y * width, l = y * width + width; i < l; i++) {\n\t\t\t\t\tpdfConditional[i] /= cumulativeRowWeight\n\t\t\t\t\tcdfConditional[i] /= cumulativeRowWeight\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tcumulativeWeightMarginal += cumulativeRowWeight\n\n\t\t\t// compute the marginal pdf and cdf along the height of the map.\n\t\t\tpdfMarginal[y] = cumulativeRowWeight\n\t\t\tcdfMarginal[y] = cumulativeWeightMarginal\n\t\t}\n\n\t\t// can happen if the texture is all black\n\t\tif (cumulativeWeightMarginal !== 0) {\n\t\t\t// scale the marginal pdf and cdf to [0.0, 1.0]\n\t\t\tfor (let i = 0, l = pdfMarginal.length; i < l; i++) {\n\t\t\t\tpdfMarginal[i] /= cumulativeWeightMarginal\n\t\t\t\tcdfMarginal[i] /= cumulativeWeightMarginal\n\t\t\t}\n\t\t}\n\n\t\t// compute a sorted index of distributions and the probabilities along them for both\n\t\t// the marginal and conditional data. These will be used to sample with a random number\n\t\t// to retrieve a uv value to sample in the environment map.\n\t\t// These values continually increase so it's okay to interpolate between them.\n\n\t\t// we add a half texel offset so we're sampling the center of the pixel\n\t\tfor (let i = 0; i < height; i++) {\n\t\t\tconst dist = (i + 1) / height\n\t\t\tconst row = binarySearchFindClosestIndexOf(cdfMarginal, dist)\n\n\t\t\tmarginalDataArray[i] = (row + 0.5) / height\n\t\t}\n\n\t\tfor (let y = 0; y < height; y++) {\n\t\t\tfor (let x = 0; x < width; x++) {\n\t\t\t\tconst i = y * width + x\n\t\t\t\tconst dist = (x + 1) / width\n\t\t\t\tconst col = binarySearchFindClosestIndexOf(cdfConditional, dist, y * width, width)\n\n\t\t\t\tconditionalDataArray[i] = (col + 0.5) / width\n\t\t\t}\n\t\t}\n\n\t\treturn totalSumValue\n\t}\n\n\tif (!isFloatType) {\n\t\tconst newData = new Float32Array(data.length)\n\n\t\t// eslint-disable-next-line guard-for-in\n\t\tfor (let i = 0; i < data.length; i++) {\n\t\t\tnewData[i] = fromHalfFloat(data[i])\n\t\t}\n\n\t\tdata = newData\n\t}\n\n\tconst marginalDataArray = new Float32Array(height)\n\tconst conditionalDataArray = new Float32Array(width * height)\n\n\tconst totalSumValue = gatherData(data, width, height, flipY, marginalDataArray, conditionalDataArray)\n\n\tpostMessage({ totalSumValue, marginalDataArray, conditionalDataArray })\n}\n\nconst blob = new Blob([\"onmessage = \" + workerOnMessage], { type: \"application/javascript\" })\nconst workerUrl = URL.createObjectURL(blob)\n\nexport class EquirectHdrInfoUniform {\n\tconstructor() {\n\t\t// we use NearestFilter instead of LinearFilter because on many recent Apple devices filtering from such a texture does not work\n\n\t\t// Default to a white texture and associated weights so we don't\n\t\t// just render black initially.\n\t\tconst whiteTex = new DataTexture(new Float32Array([1, 1, 1, 1]), 1, 1)\n\t\twhiteTex.type = FloatType\n\t\twhiteTex.format = RGBAFormat\n\t\twhiteTex.minFilter = NearestFilter\n\t\twhiteTex.magFilter = NearestFilter\n\t\twhiteTex.wrapS = RepeatWrapping\n\t\twhiteTex.wrapT = RepeatWrapping\n\t\twhiteTex.generateMipmaps = false\n\t\twhiteTex.needsUpdate = true\n\n\t\t// Stores a map of [0, 1] value -> cumulative importance row & pdf\n\t\t// used to sampling a random value to a relevant row to sample from\n\t\tconst marginalWeights = new DataTexture(new Float32Array([0, 1]), 1, 2)\n\t\tmarginalWeights.type = FloatType\n\t\tmarginalWeights.format = RedFormat\n\t\tmarginalWeights.minFilter = NearestFilter\n\t\tmarginalWeights.magFilter = NearestFilter\n\t\tmarginalWeights.generateMipmaps = false\n\t\tmarginalWeights.needsUpdate = true\n\n\t\t// Stores a map of [0, 1] value -> cumulative importance column & pdf\n\t\t// used to sampling a random value to a relevant pixel to sample from\n\t\tconst conditionalWeights = new DataTexture(new Float32Array([0, 0, 1, 1]), 2, 2)\n\t\tconditionalWeights.type = FloatType\n\t\tconditionalWeights.format = RedFormat\n\t\tconditionalWeights.minFilter = NearestFilter\n\t\tconditionalWeights.magFilter = NearestFilter\n\t\tconditionalWeights.generateMipmaps = false\n\t\tconditionalWeights.needsUpdate = true\n\n\t\tthis.map = whiteTex\n\t\tthis.marginalWeights = marginalWeights\n\t\tthis.conditionalWeights = conditionalWeights\n\n\t\t// the total sum value is separated into two values to work around low precision\n\t\t// storage of floating values in structs\n\t\tthis.totalSumWhole = 1\n\t\tthis.totalSumDecimal = 0\n\n\t\tthis.size = new Vector2()\n\t}\n\n\tdispose() {\n\t\tthis.marginalWeights.dispose()\n\t\tthis.conditionalWeights.dispose()\n\t\tthis.map.dispose()\n\t}\n\n\tupdateFrom(map) {\n\t\tmap = map.clone()\n\t\tconst { width, height, data } = map.image\n\t\tconst { type } = map\n\n\t\tthis.size.set(width, height)\n\n\t\treturn new Promise(resolve => {\n\t\t\tthis.worker?.terminate()\n\n\t\t\tthis.worker = new Worker(workerUrl)\n\n\t\t\tthis.worker.postMessage({ width, height, isFloatType: type === FloatType, flipY: map.flipY, data })\n\t\t\tthis.worker.onmessage = ({ data: { totalSumValue, marginalDataArray, conditionalDataArray } }) => {\n\t\t\t\tthis.dispose()\n\n\t\t\t\tconst { marginalWeights, conditionalWeights } = this\n\t\t\t\tmarginalWeights.image = { width: height, height: 1, data: marginalDataArray }\n\t\t\t\tmarginalWeights.needsUpdate = true\n\n\t\t\t\tconditionalWeights.image = { width, height, data: conditionalDataArray }\n\t\t\t\tconditionalWeights.needsUpdate = true\n\n\t\t\t\tconst totalSumWhole = ~~totalSumValue\n\t\t\t\tconst totalSumDecimal = totalSumValue - totalSumWhole\n\t\t\t\tthis.totalSumWhole = totalSumWhole\n\t\t\t\tthis.totalSumDecimal = totalSumDecimal\n\n\t\t\t\tthis.map = map\n\n\t\t\t\tthis.worker = null\n\n\t\t\t\tresolve(map)\n\t\t\t}\n\t\t})\n\t}\n}\n","/* eslint-disable camelcase */\nimport { Color, Matrix4, NoBlending, ShaderMaterial, Uniform, Vector2, Vector3 } from \"three\"\nimport vertexShader from \"../../utils/shader/basic.vert\"\nimport fragmentShader from \"../shader/ssgi.frag\"\nimport ssgi_utils from \"../shader/ssgi_utils.frag\"\nimport { useBlueNoise } from \"../../utils/BlueNoiseUtils\"\nimport gbuffer_packing from \"../../gbuffer/shader/gbuffer_packing.glsl\"\nimport { EquirectHdrInfoUniform } from \"../utils/EquirectHdrInfoUniform\"\n\nexport class SSGIMaterial extends ShaderMaterial {\n\tconstructor() {\n\t\tsuper({\n\t\t\ttype: \"SSGIMaterial\",\n\n\t\t\tuniforms: {\n\t\t\t\taccumulatedTexture: new Uniform(null),\n\t\t\t\tgBufferTexture: new Uniform(null),\n\t\t\t\tdepthTexture: new Uniform(null),\n\t\t\t\tvelocityTexture: new Uniform(null),\n\t\t\t\tdirectLightTexture: new Uniform(null),\n\t\t\t\tblueNoiseTexture: new Uniform(null),\n\t\t\t\tprojectionMatrix: new Uniform(new Matrix4()),\n\t\t\t\tprojectionMatrixInverse: new Uniform(new Matrix4()),\n\t\t\t\tcameraMatrixWorld: new Uniform(new Matrix4()),\n\t\t\t\tviewMatrix: new Uniform(new Matrix4()),\n\t\t\t\tcameraNear: new Uniform(0),\n\t\t\t\tcameraFar: new Uniform(0),\n\t\t\t\tnearMulFar: new Uniform(0),\n\t\t\t\tnearMinusFar: new Uniform(0),\n\t\t\t\tfarMinusNear: new Uniform(0),\n\t\t\t\trayDistance: new Uniform(0),\n\t\t\t\tthickness: new Uniform(0),\n\t\t\t\tframe: new Uniform(0),\n\t\t\t\tenvBlur: new Uniform(0),\n\t\t\t\tmaxEnvMapMipLevel: new Uniform(0),\n\t\t\t\tenvMapInfo: { value: new EquirectHdrInfoUniform() },\n\t\t\t\tenvMapPosition: new Uniform(new Vector3()),\n\t\t\t\tenvMapSize: new Uniform(new Vector3()),\n\t\t\t\tbackgroundColor: new Uniform(new Color()),\n\t\t\t\tresolution: new Uniform(new Vector2()),\n\t\t\t\tblueNoiseRepeat: new Uniform(new Vector2())\n\t\t\t},\n\n\t\t\tdefines: {\n\t\t\t\tsteps: 20,\n\t\t\t\trefineSteps: 5,\n\t\t\t\tCUBEUV_TEXEL_WIDTH: 0,\n\t\t\t\tCUBEUV_TEXEL_HEIGHT: 0,\n\t\t\t\tCUBEUV_MAX_MIP: 0,\n\t\t\t\tvWorldPosition: \"worldPos\"\n\t\t\t},\n\n\t\t\tfragmentShader: fragmentShader\n\t\t\t\t.replace(\"#include <ssgi_utils>\", ssgi_utils)\n\t\t\t\t.replace(\"#include <gbuffer_packing>\", gbuffer_packing),\n\t\t\tvertexShader,\n\n\t\t\tblending: NoBlending,\n\t\t\tdepthWrite: false,\n\t\t\tdepthTest: false,\n\t\t\ttoneMapped: false\n\t\t})\n\n\t\tuseBlueNoise(this)\n\t}\n}\n","import { Pass } from \"postprocessing\"\nimport { Color, FloatType, NearestFilter, WebGLRenderTarget } from \"three\"\nimport { GBufferPass } from \"../../gbuffer/GBufferPass.js\"\nimport { SSGIMaterial } from \"../material/SSGIMaterial.js\"\n\nconst blackColor = new Color(0)\nexport class SSGIPass extends Pass {\n\tdefaultFragmentShader = \"\"\n\tframe = 21483\n\n\tconstructor(ssgiEffect, options) {\n\t\tsuper(\"SSGIPass\")\n\n\t\tthis.ssgiEffect = ssgiEffect\n\t\tthis._scene = ssgiEffect._scene\n\t\tthis._camera = ssgiEffect._camera\n\n\t\tthis.fullscreenMaterial = new SSGIMaterial()\n\t\tthis.defaultFragmentShader = this.fullscreenMaterial.fragmentShader\n\n\t\t// const { mode } = options\n\n\t\tthis.renderTarget = new WebGLRenderTarget(1, 1, {\n\t\t\ttype: FloatType,\n\t\t\tminFilter: NearestFilter,\n\t\t\tmagFilter: NearestFilter,\n\t\t\tdepthBuffer: false\n\t\t})\n\n\t\tthis.renderTarget.texture.name = \"SSGIPass.Texture\"\n\n\t\t// set up basic uniforms that we don't have to update\n\t\tthis.fullscreenMaterial.uniforms.cameraMatrixWorld.value = this._camera.matrixWorld\n\t\tthis.fullscreenMaterial.uniforms.viewMatrix.value = this._camera.matrixWorldInverse\n\t\tthis.fullscreenMaterial.uniforms.projectionMatrix.value = this._camera.projectionMatrix\n\t\tthis.fullscreenMaterial.uniforms.projectionMatrixInverse.value = this._camera.projectionMatrixInverse\n\n\t\tif (ssgiEffect._camera.isPerspectiveCamera) this.fullscreenMaterial.defines.PERSPECTIVE_CAMERA = \"\"\n\n\t\tthis.fullscreenMaterial.defines.mode = [\"ssgi\", \"ssr\"].indexOf(options.mode)\n\n\t\tthis.gBufferPass = new GBufferPass(this._scene, this._camera)\n\n\t\tthis.fullscreenMaterial.uniforms.gBufferTexture.value = this.gBufferPass.texture\n\t\tthis.fullscreenMaterial.uniforms.depthTexture.value = this.gBufferPass.depthTexture\n\t}\n\n\tget texture() {\n\t\treturn this.renderTarget.texture\n\t}\n\n\tsetSize(width, height) {\n\t\tthis.renderTarget.setSize(width * this.ssgiEffect.resolutionScale, height * this.ssgiEffect.resolutionScale)\n\t\tthis.gBufferPass.setSize(width, height)\n\n\t\tthis.fullscreenMaterial.uniforms.resolution.value.set(this.renderTarget.width, this.renderTarget.height)\n\t}\n\n\tdispose() {\n\t\tsuper.dispose()\n\n\t\tthis.renderTarget.dispose()\n\t\tthis.renderTarget.dispose()\n\n\t\tthis.fullscreenMaterial.dispose()\n\t}\n\n\trender(renderer) {\n\t\tthis.frame = (this.frame + 1) % 4096\n\n\t\tconst { mask } = this._camera.layers\n\t\tconst hasSelection = this.ssgiEffect.selection.size > 0\n\n\t\tthis._camera.layers.set(hasSelection ? this.ssgiEffect.selection.layer : 0)\n\n\t\t// render G-Buffers\n\t\tthis.gBufferPass.render(renderer)\n\n\t\tthis._camera.layers.mask = mask\n\n\t\t// update uniforms\n\t\tthis.fullscreenMaterial.uniforms.frame.value = this.frame\n\t\tthis.fullscreenMaterial.uniforms.cameraNear.value = this._camera.near\n\t\tthis.fullscreenMaterial.uniforms.cameraFar.value = this._camera.far\n\t\tthis.fullscreenMaterial.uniforms.nearMinusFar.value = this._camera.near - this._camera.far\n\t\tthis.fullscreenMaterial.uniforms.farMinusNear.value = this._camera.far - this._camera.near\n\t\tthis.fullscreenMaterial.uniforms.nearMulFar.value = this._camera.near * this._camera.far\n\t\tthis.fullscreenMaterial.uniforms.accumulatedTexture.value = this.ssgiEffect.denoiser.texture\n\t\tthis.fullscreenMaterial.uniforms.velocityTexture.value = this.ssgiEffect.velocityTexture\n\t\tconst bgColor = this._scene.background instanceof Color ? this._scene.background : blackColor\n\t\tthis.fullscreenMaterial.uniforms.backgroundColor.value.copy(bgColor)\n\n\t\trenderer.setRenderTarget(this.renderTarget)\n\t\trenderer.render(this.scene, this.camera)\n\t}\n}\n","// this shader is from: https://github.com/gkjohnson/threejs-sandbox\n/* eslint-disable camelcase */\n\nimport { Matrix3, Matrix4, ShaderChunk, ShaderMaterial, UniformsUtils, Vector2 } from \"three\"\n\n// Modified ShaderChunk.skinning_pars_vertex to handle\n// a second set of bone information from the previous frame\nconst prev_skinning_pars_vertex = /* glsl */ `\n\t\t#ifdef USE_SKINNING\n\t\t#ifdef BONE_TEXTURE\n\t\t\tuniform sampler2D prevBoneTexture;\n\t\t\tmat4 getPrevBoneMatrix( const in float i ) {\n\t\t\t\tfloat j = i * 4.0;\n\t\t\t\tfloat x = mod( j, float( boneTextureSize ) );\n\t\t\t\tfloat y = floor( j / float( boneTextureSize ) );\n\t\t\t\tfloat dx = 1.0 / float( boneTextureSize );\n\t\t\t\tfloat dy = 1.0 / float( boneTextureSize );\n\t\t\t\ty = dy * ( y + 0.5 );\n\t\t\t\tvec4 v1 = textureLod( prevBoneTexture, vec2( dx * ( x + 0.5 ), y ), 0. );\n\t\t\t\tvec4 v2 = textureLod( prevBoneTexture, vec2( dx * ( x + 1.5 ), y ), 0. );\n\t\t\t\tvec4 v3 = textureLod( prevBoneTexture, vec2( dx * ( x + 2.5 ), y ), 0. );\n\t\t\t\tvec4 v4 = textureLod( prevBoneTexture, vec2( dx * ( x + 3.5 ), y ), 0. );\n\t\t\t\tmat4 bone = mat4( v1, v2, v3, v4 );\n\t\t\t\treturn bone;\n\t\t\t}\n\t\t#else\n\t\t\tuniform mat4 prevBoneMatrices[ MAX_BONES ];\n\t\t\tmat4 getPrevBoneMatrix( const in float i ) {\n\t\t\t\tmat4 bone = prevBoneMatrices[ int(i) ];\n\t\t\t\treturn bone;\n\t\t\t}\n\t\t#endif\n\t\t#endif\n`\n\nexport const velocity_vertex_pars = /* glsl */ `\n#define MAX_BONES 64\n \n${ShaderChunk.skinning_pars_vertex}\n${prev_skinning_pars_vertex}\n\nuniform mat4 velocityMatrix;\nuniform mat4 prevVelocityMatrix;\nvarying vec4 prevPosition;\nvarying vec4 newPosition;\n\nvarying vec2 vHighPrecisionZW;\n`\n\n// Returns the body of the vertex shader for the velocity buffer\nexport const velocity_vertex_main = /* glsl */ `\n// Get the current vertex position\ntransformed = vec3( position );\n${ShaderChunk.skinning_vertex}\nnewPosition = velocityMatrix * vec4( transformed, 1.0 );\n\n// Get the previous vertex position\ntransformed = vec3( position );\n${ShaderChunk.skinbase_vertex.replace(/mat4 /g, \"\").replace(/getBoneMatrix/g, \"getPrevBoneMatrix\")}\n${ShaderChunk.skinning_vertex.replace(/vec4 /g, \"\")}\nprevPosition = prevVelocityMatrix * vec4( transformed, 1.0 );\n\ngl_Position = newPosition;\n\nvHighPrecisionZW = gl_Position.zw;\n`\n\nexport const velocity_fragment_pars = /* glsl */ `\nvarying vec4 prevPosition;\nvarying vec4 newPosition;\n\nvarying vec2 vHighPrecisionZW;\n`\n\nexport const velocity_fragment_main = /* glsl */ `\nvec2 pos0 = (prevPosition.xy / prevPosition.w) * 0.5 + 0.5;\nvec2 pos1 = (newPosition.xy / newPosition.w) * 0.5 + 0.5;\n\nvec2 vel = pos1 - pos0;\n\nfloat fragCoordZ = 0.5 * vHighPrecisionZW[0] / vHighPrecisionZW[1] + 0.5;\n\ngl_FragColor = vec4(vel.x, vel.y, 0., 0.);\n`\n\nexport const velocity_uniforms = {\n\tprevVelocityMatrix: { value: new Matrix4() },\n\tvelocityMatrix: { value: new Matrix4() },\n\tprevBoneTexture: { value: null },\n\tboneTexture: { value: null },\n\tnormalMap: { value: null },\n\tnormalScale: { value: new Vector2(1, 1) },\n\tuvTransform: { value: new Matrix3() }\n}\n\nexport class VelocityDepthNormalMaterial extends ShaderMaterial {\n\tconstructor(camera) {\n\t\tsuper({\n\t\t\tuniforms: {\n\t\t\t\t...UniformsUtils.clone(velocity_uniforms),\n\t\t\t\t...{\n\t\t\t\t\tcameraMatrixWorld: { value: camera.matrixWorld }\n\t\t\t\t}\n\t\t\t},\n\t\t\tvertexShader: /* glsl */ `\n\t\t\t\t\t#include <common>\n\t\t\t\t\t#include <uv_pars_vertex>\n\t\t\t\t\t#include <displacementmap_pars_vertex>\n\t\t\t\t\t#include <normal_pars_vertex>\n\t\t\t\t\t#include <morphtarget_pars_vertex>\n\t\t\t\t\t#include <logdepthbuf_pars_vertex>\n\t\t\t\t\t#include <clipping_planes_pars_vertex>\n\n\t\t\t\t\tvarying vec2 vUv;\n\n\t\t\t\t\tvarying vec3 vViewPosition;\n\t\t\t\t\t\n ${velocity_vertex_pars}\n \n void main() {\n\t\t\t\t\t\tvec3 transformed;\n\n\t\t\t\t\t\t#include <uv_vertex>\n\n\t\t\t\t\t\t#include <skinbase_vertex>\n\t\t\t\t\t\t#include <beginnormal_vertex>\n\t\t\t\t\t\t#include <skinnormal_vertex>\n\t\t\t\t\t\t#include <defaultnormal_vertex>\n\n\t\t\t\t\t\t#include <morphnormal_vertex>\n\t\t\t\t\t\t#include <normal_vertex>\n\t\t\t\t\t\t#include <morphtarget_vertex>\n\t\t\t\t\t\t#include <displacementmap_vertex>\n\t\t\t\t\t\t#include <project_vertex>\n\t\t\t\t\t\t#include <logdepthbuf_vertex>\n\t\t\t\t\t\t#include <clipping_planes_vertex>\n\n\t\t\t\t\t\t${velocity_vertex_main}\n\n\t\t\t\t\t\tvViewPosition = - mvPosition.xyz;\n\n\t\t\t\t\t\tvUv = uv;\n\n }`,\n\t\t\tfragmentShader: /* glsl */ `\n\t\t\t\t\tprecision highp float;\n\t\t\t\t\tuniform mat4 cameraMatrixWorld;\n\n\t\t\t\t\tvarying vec3 vViewPosition;\n\n\t\t\t\t\t${velocity_fragment_pars}\n\t\t\t\t\t#include <packing>\n\n\t\t\t\t\t#include <uv_pars_fragment>\n\t\t\t\t\t#include <normal_pars_fragment>\n\t\t\t\t\t#include <normalmap_pars_fragment>\n\n\t\t\t\t\tvarying vec2 vUv;\n\n\t\t\t\t\t// source: https://knarkowicz.wordpress.com/2014/04/16/octahedron-normal-vector-encoding/\n\t\t\t\t\tvec2 OctWrap( vec2 v ) {\n\t\t\t\t\t\tvec2 w = 1.0 - abs( v.yx );\n\t\t\t\t\t\tif (v.x < 0.0) w.x = -w.x;\n\t\t\t\t\t\tif (v.y < 0.0) w.y = -w.y;\n\t\t\t\t\t\treturn w;\n\t\t\t\t\t}\n\n\t\t\t\t\tvec2 encodeOctWrap(vec3 n) {\n\t\t\t\t\t\tn /= (abs(n.x) + abs(n.y) + abs(n.z));\n\t\t\t\t\t\tn.xy = n.z > 0.0 ? n.xy : OctWrap(n.xy);\n\t\t\t\t\t\tn.xy = n.xy * 0.5 + 0.5;\n\t\t\t\t\t\treturn n.xy;\n\t\t\t\t\t}\n\n\t\t\t\t\tfloat packNormal(vec3 normal) {\n\t\t\t\t\t\treturn uintBitsToFloat(packHalf2x16(encodeOctWrap(normal)));\n\t\t\t\t\t}\n\n void main() {\n\t\t\t\t\t\t#define vNormalMapUv vUv\n\n\t\t\t\t\t\t#include <normal_fragment_begin>\n \t#include <normal_fragment_maps>\n\n\t\t\t\t\t\t${velocity_fragment_main}\n\t\t\t\t\t\tvec3 worldNormal = normalize((cameraMatrixWorld * vec4(normal, 0.)).xyz);\n\t\t\t\t\t\tgl_FragColor.b = packNormal(worldNormal);\n\t\t\t\t\t\tgl_FragColor.a = fragCoordZ;\n }`\n\t\t})\n\t}\n}\n","const materialProps = [\n\t\"vertexTangent\",\n\t\"vertexColors\",\n\t\"vertexAlphas\",\n\t\"vertexUvs\",\n\t\"uvsVertexOnly\",\n\t\"supportsVertexTextures\",\n\t\"instancing\",\n\t\"instancingColor\",\n\t\"side\",\n\t\"flatShading\",\n\t\"skinning\",\n\t\"doubleSided\",\n\t\"flipSided\"\n]\n\nexport const copyNecessaryProps = (originalMaterial, newMaterial) => {\n\tfor (const props of materialProps) newMaterial[props] = originalMaterial[props]\n}\n\nexport const keepMaterialMapUpdated = (mrtMaterial, originalMaterial, prop, define, useKey) => {\n\tif (useKey) {\n\t\tif (originalMaterial[prop] !== mrtMaterial[prop]) {\n\t\t\tmrtMaterial[prop] = originalMaterial[prop]\n\t\t\tmrtMaterial.uniforms[prop].value = originalMaterial[prop]\n\n\t\t\tif (originalMaterial[prop]) {\n\t\t\t\tmrtMaterial.defines[define] = \"\"\n\t\t\t} else {\n\t\t\t\tdelete mrtMaterial.defines[define]\n\t\t\t}\n\n\t\t\tmrtMaterial.needsUpdate = true\n\t\t}\n\t} else if (mrtMaterial[prop] !== undefined) {\n\t\tmrtMaterial[prop] = undefined\n\t\tmrtMaterial.uniforms[prop].value = undefined\n\t\tdelete mrtMaterial.defines[define]\n\t\tmrtMaterial.needsUpdate = true\n\t}\n}\n\nexport const getVisibleChildren = object => {\n\tconst queue = [object]\n\tconst objects = []\n\n\twhile (queue.length !== 0) {\n\t\tconst mesh = queue.shift()\n\t\tif (mesh.material) objects.push(mesh)\n\n\t\tfor (const c of mesh.children) {\n\t\t\tif (c.visible) queue.push(c)\n\t\t}\n\t}\n\n\treturn objects\n}\n","import { Pass } from \"postprocessing\"\nimport {\n\tColor,\n\tDataTexture,\n\tDepthTexture,\n\tFramebufferTexture,\n\tHalfFloatType,\n\tMatrix4,\n\tNearestFilter,\n\tRGBAFormat,\n\tVector2,\n\tWebGLRenderTarget\n} from \"three\"\nimport { VelocityDepthNormalMaterial } from \"../material/VelocityDepthNormalMaterial.js\"\nimport { copyNecessaryProps, keepMaterialMapUpdated } from \"../../gbuffer/utils/GBufferUtils.js\"\nimport { getVisibleChildren } from \"../../utils/SceneUtils.js\"\nimport { isChildMaterialRenderable } from \"../../utils/SceneUtils.js\"\n\nconst backgroundColor = new Color(0)\nconst zeroVec2 = new Vector2()\nconst tmpProjectionMatrix = new Matrix4()\nconst tmpProjectionMatrixInverse = new Matrix4()\n\nconst saveBoneTexture = (object, floatType) => {\n\tlet boneTexture = object.material.uniforms.prevBoneTexture.value\n\n\tif (boneTexture && boneTexture.image.width === object.skeleton.boneTexture.width) {\n\t\tboneTexture = object.material.uniforms.prevBoneTexture.value\n\t\tboneTexture.image.data.set(object.skeleton.boneTexture.image.data)\n\t} else {\n\t\tboneTexture?.dispose()\n\n\t\tconst boneMatrices = object.skeleton.boneTexture.image.data.slice()\n\t\tconst size = object.skeleton.boneTexture.image.width\n\n\t\tboneTexture = new DataTexture(boneMatrices, size, size, RGBAFormat, floatType)\n\t\tobject.material.uniforms.prevBoneTexture.value = boneTexture\n\n\t\tboneTexture.needsUpdate = true\n\t}\n}\n\nconst updateVelocityDepthNormalMaterialBeforeRender = (c, camera) => {\n\tif (c.skeleton?.boneTexture) {\n\t\tc.material.uniforms.boneTexture.value = c.skeleton.boneTexture\n\n\t\tif (!(\"USE_SKINNING\" in c.material.defines)) {\n\t\t\tc.material.defines.USE_SKINNING = \"\"\n\t\t\tc.material.defines.BONE_TEXTURE = \"\"\n\n\t\t\tc.material.needsUpdate = true\n\t\t}\n\t}\n\n\tc.modelViewMatrix.multiplyMatrices(camera.matrixWorldInverse, c.matrixWorld)\n\n\tc.material.uniforms.velocityMatrix.value.multiplyMatrices(camera.projectionMatrix, c.modelViewMatrix)\n}\n\nconst updateVelocityDepthNormalMaterialAfterRender = (c, camera, floatType) => {\n\tc.material.uniforms.prevVelocityMatrix.value.multiplyMatrices(camera.projectionMatrix, c.modelViewMatrix)\n\n\tif (c.skeleton?.boneTexture) saveBoneTexture(c, floatType)\n}\n\nexport class VelocityDepthNormalPass extends Pass {\n\tcachedMaterials = new WeakMap()\n\tvisibleMeshes = []\n\tneedsSwap = false\n\n\tconstructor(scene, camera, floatType = HalfFloatType) {\n\t\tsuper(\"VelocityDepthNormalPass\")\n\n\t\tthis._scene = scene\n\t\tthis._camera = camera\n\t\tthis._floatType = floatType\n\n\t\tthis.renderTarget = new WebGLRenderTarget(1, 1, {\n\t\t\ttype: floatType,\n\t\t\tminFilter: NearestFilter,\n\t\t\tmagFilter: NearestFilter\n\t\t})\n\n\t\tthis.renderTarget.texture.name = \"VelocityDepthNormalPass.Texture\"\n\n\t\tthis.renderTarget.depthTexture = new DepthTexture(1, 1)\n\t\tthis.renderTarget.depthTexture.type = floatType;\n\t}\n\n\tget texture() {\n\t\treturn this.renderTarget.texture\n\t}\n\n\tsetVelocityDepthNormalMaterialInScene() {\n\t\tthis.visibleMeshes = getVisibleChildren(this._scene)\n\n\t\tfor (const c of this.visibleMeshes) {\n\t\t\tconst originalMaterial = c.material\n\n\t\t\tlet [cachedOriginalMaterial, velocityDepthNormalMaterial] = this.cachedMaterials.get(c) || []\n\n\t\t\tif (originalMaterial !== cachedOriginalMaterial) {\n\t\t\t\tvelocityDepthNormalMaterial = new VelocityDepthNormalMaterial(this._camera)\n\n\t\t\t\tcopyNecessaryProps(originalMaterial, velocityDepthNormalMaterial)\n\n\t\t\t\tc.material = velocityDepthNormalMaterial\n\n\t\t\t\tif (c.skeleton?.boneTexture) saveBoneTexture(c, this._floatType);\n\n\t\t\t\tthis.cachedMaterials.set(c, [originalMaterial, velocityDepthNormalMaterial])\n\t\t\t}\n\n\t\t\tc.material = velocityDepthNormalMaterial\n\n\t\t\tc.visible = isChildMaterialRenderable(c, originalMaterial)\n\n\t\t\tkeepMaterialMapUpdated(\n\t\t\t\tvelocityDepthNormalMaterial,\n\t\t\t\toriginalMaterial,\n\t\t\t\t\"normalMap\",\n\t\t\t\t\"USE_NORMALMAP_TANGENTSPACE\",\n\t\t\t\ttrue\n\t\t\t)\n\t\t\tvelocityDepthNormalMaterial.uniforms.normalMap.value = originalMaterial.normalMap\n\n\t\t\tconst map =\n\t\t\t\toriginalMaterial.map ||\n\t\t\t\toriginalMaterial.normalMap ||\n\t\t\t\toriginalMaterial.roughnessMap ||\n\t\t\t\toriginalMaterial.metalnessMap\n\n\t\t\tif (map) velocityDepthNormalMaterial.uniforms.uvTransform.value = map.matrix\n\n\t\t\tupdateVelocityDepthNormalMaterialBeforeRender(c, this._camera)\n\t\t}\n\t}\n\n\tunsetVelocityDepthNormalMaterialInScene() {\n\t\tfor (const c of this.visibleMeshes) {\n\t\t\tc.visible = true\n\n\t\t\tupdateVelocityDepthNormalMaterialAfterRender(c, this._camera, this._floatType)\n\n\t\t\tc.material = this.cachedMaterials.get(c)[0]\n\t\t}\n\t}\n\n\tsetSize(width, height) {\n\t\tthis.renderTarget.setSize(width, height)\n\n\t\tthis.lastVelocityTexture?.dispose()\n\n\t\tthis.lastVelocityTexture = new FramebufferTexture(width, height, RGBAFormat)\n\t\tthis.lastVelocityTexture.type = this._floatType;\n\t\tthis.lastVelocityTexture.minFilter = NearestFilter\n\t\tthis.lastVelocityTexture.magFilter = NearestFilter\n\t}\n\n\tdispose() {\n\t\tsuper.dispose()\n\n\t\tthis.renderTarget.dispose()\n\t}\n\n\trender(renderer) {\n\t\ttmpProjectionMatrix.copy(this._camera.projectionMatrix)\n\t\ttmpProjectionMatrixInverse.copy(this._camera.projectionMatrixInverse)\n\n\t\tif (this._camera.view) this._camera.view.enabled = false\n\t\tthis._camera.updateProjectionMatrix()\n\n\t\t// in case a RenderPass is not being used, so we need to update the camera's world matrix manually\n\t\tthis._camera.updateMatrixWorld()\n\n\t\tthis.setVelocityDepthNormalMaterialInScene()\n\n\t\tconst { background } = this._scene\n\n\t\tthis._scene.background = backgroundColor\n\n\t\trenderer.setRenderTarget(this.renderTarget)\n\t\trenderer.copyFramebufferToTexture(zeroVec2, this.lastVelocityTexture)\n\n\t\trenderer.render(this._scene, this._camera)\n\n\t\tthis._scene.background = background\n\n\t\tthis.unsetVelocityDepthNormalMaterialInScene()\n\n\t\tif (this._camera.view) this._camera.view.enabled = true\n\t\tthis._camera.projectionMatrix.copy(tmpProjectionMatrix)\n\t\tthis._camera.projectionMatrixInverse.copy(tmpProjectionMatrixInverse)\n\t}\n}\n","/* eslint-disable camelcase */\nimport { Pass } from \"postprocessing\"\nimport { FloatType, NearestFilter, NoBlending, ShaderMaterial, WebGLRenderTarget } from \"three\"\nimport gbuffer_packing from \"../../gbuffer/shader/gbuffer_packing.glsl\"\nimport basicVertexShader from \"../../utils/shader/basic.vert\"\nimport ssgi_poisson_compose_functions from \"../shader/denoiser_compose_functions.glsl\"\n\nexport class DenoiserComposePass extends Pass {\n\tconstructor(camera, textures, gBufferTexture, depthTexture, options = {}) {\n\t\tsuper(\"DenoiserComposePass\")\n\n\t\tthis._camera = camera\n\n\t\tthis.renderTarget = new WebGLRenderTarget(1, 1, {\n\t\t\tdepthBuffer: false,\n\t\t\ttype: FloatType,\n\t\t\tminFilter: NearestFilter,\n\t\t\tmagFilter: NearestFilter\n\t\t})\n\n\t\tthis.renderTarget.texture.name = \"DenoiserComposePass.Texture\"\n\n\t\tlet diffuseGiTexture\n\t\tlet specularGiTexture\n\n\t\tif (options.inputType === \"diffuseSpecular\") {\n\t\t\tdiffuseGiTexture = textures[0]\n\t\t\tspecularGiTexture = textures[1]\n\t\t} else if (options.inputType === \"diffuse\") {\n\t\t\tdiffuseGiTexture = textures[0]\n\t\t} else if (options.inputType === \"specular\") {\n\t\t\tspecularGiTexture = textures[0]\n\t\t}\n\n\t\tthis.fullscreenMaterial = new ShaderMaterial({\n\t\t\tfragmentShader: /* glsl */ `\n varying vec2 vUv;\n uniform sampler2D sceneTexture;\n uniform highp sampler2D depthTexture;\n uniform sampler2D diffuseGiTexture;\n uniform sampler2D specularGiTexture;\n uniform mat4 cameraMatrixWorld;\n uniform mat4 projectionMatrix;\n uniform mat4 projectionMatrixInverse;\n\t\t\tuniform float cameraNear;\n\t\t\tuniform float cameraFar;\n\n #include <common>\n #include <packing>\n\n\t\t\t#define TYPE_DIFFUSE_SPECULAR 0\n\t\t\t#define TYPE_DIFFUSE 1\n\t\t\t#define TYPE_SPECULAR 2\n\n ${gbuffer_packing}\n ${ssgi_poisson_compose_functions}\n\n void main() {\n float depth = textureLod(depthTexture, vUv, 0.).r;\n\n\t\t\t\tif(depth == 1. && fwidth(depth) == 0.){\n\t\t\t\t\tdiscard;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// on Android there's a bug where using \"vec3 normal = unpackNormal(textureLod(velocityTexture, vUv, 0.).b);\" instead of\n\t\t\t\t// \"vec3 normal = unpackNormal(velocity.b);\" causes the normal to be distorted (possibly due to packHalf2x16 function)\n\n Material mat = getMaterial(gBufferTexture, vUv);\n\n vec3 viewNormal = (vec4(mat.normal, 0.) * cameraMatrixWorld).xyz;\n\n\t\t\t\tfloat viewZ = -getViewZ(depth);\n\n // view-space position of the current texel\n\t\t\t\tvec3 viewPos = getViewPosition(viewZ);\n vec3 viewDir = normalize(viewPos);\n\n vec4 diffuseGi = textureLod(diffuseGiTexture, vUv, 0.);\n vec4 specularGi = textureLod(specularGiTexture, vUv, 0.);\n\n vec3 gi = constructGlobalIllumination(diffuseGi.rgb, specularGi.rgb, viewDir, viewNormal, mat.diffuse.rgb, mat.emissive, mat.roughness, mat.metalness);\n\n\t\t\t\tgl_FragColor = vec4(gi, 1.);\n }\n `,\n\t\t\tvertexShader: basicVertexShader,\n\t\t\tuniforms: {\n\t\t\t\tsceneTexture: { value: null },\n\t\t\t\tviewMatrix: { value: camera.matrixWorldInverse },\n\t\t\t\tcameraMatrixWorld: { value: camera.matrixWorld },\n\t\t\t\tprojectionMatrix: { value: camera.projectionMatrix },\n\t\t\t\tprojectionMatrixInverse: { value: camera.projectionMatrixInverse },\n\t\t\t\tcameraNear: { value: camera.near },\n\t\t\t\tcameraFar: { value: camera.far },\n\t\t\t\tgBufferTexture: { value: gBufferTexture },\n\t\t\t\tdepthTexture: { value: depthTexture },\n\t\t\t\tdiffuseGiTexture: { value: diffuseGiTexture },\n\t\t\t\tspecularGiTexture: { value: specularGiTexture }\n\t\t\t},\n\t\t\tdefines: {\n\t\t\t\tinputType: [\"diffuseSpecular\", \"diffuse\", \"specular\"].indexOf(options.inputType) ?? 0\n\t\t\t},\n\t\t\tblending: NoBlending,\n\t\t\tdepthWrite: false,\n\t\t\tdepthTest: false,\n\t\t\ttoneMapped: false\n\t\t})\n\n\t\tif (camera.isPerspectiveCamera) this.fullscreenMaterial.defines.PERSPECTIVE_CAMERA = \"\"\n\t}\n\n\tget texture() {\n\t\treturn this.renderTarget.texture\n\t}\n\n\tdispose() {\n\t\tthis.renderTarget.dispose()\n\t}\n\n\tsetSize(width, height) {\n\t\tthis.renderTarget.setSize(width, height)\n\t}\n\n\tsetSceneTexture(texture) {\n\t\tthis.fullscreenMaterial.uniforms.sceneTexture.value = texture\n\t}\n\n\trender(renderer) {\n\t\tthis.fullscreenMaterial.uniforms.cameraNear.value = this._camera.near\n\t\tthis.fullscreenMaterial.uniforms.cameraFar.value = this._camera.far\n\n\t\trenderer.setRenderTarget(this.renderTarget)\n\t\trenderer.render(this.scene, this.camera)\n\t}\n}\n","/* eslint-disable camelcase */\nimport { Pass } from \"postprocessing\"\nimport { GLSL3, HalfFloatType, ShaderMaterial, Vector2, WebGLMultipleRenderTargets } from \"three\"\n// eslint-disable-next-line camelcase\n\nimport gbuffer_packing from \"../../gbuffer/shader/gbuffer_packing.glsl\"\nimport vertexShader from \"../../utils/shader/basic.vert\"\n\nimport { GBufferPass } from \"../../gbuffer/GBufferPass\"\nimport { unrollLoops } from \"../../ssgi/utils/Utils\"\nimport { useBlueNoise } from \"../../utils/BlueNoiseUtils\"\nimport fragmentShader from \"../shader/poisson_denoise.frag\"\n\nconst finalFragmentShader = fragmentShader.replace(\"#include <gbuffer_packing>\", gbuffer_packing)\n\nconst defaultPoissonBlurOptions = {\n\titerations: 1,\n\tradius: 3,\n\tphi: 0.5,\n\tlumaPhi: 5,\n\tdepthPhi: 2,\n\tnormalPhi: 3.25,\n\tinputType: \"diffuseSpecular\" // can be \"diffuseSpecular\", \"diffuse\" or \"specular\"\n}\n\nexport class PoissonDenoisePass extends Pass {\n\titerations = defaultPoissonBlurOptions.iterations\n\tindex = 0\n\n\tconstructor(camera, textures, options = defaultPoissonBlurOptions) {\n\t\tsuper(\"PoissonBlurPass\")\n\n\t\toptions = { ...defaultPoissonBlurOptions, ...options }\n\n\t\tthis.textures = textures\n\n\t\tlet isTextureSpecular = [false, true]\n\t\tif (options.inputType === \"diffuse\") isTextureSpecular = [false, false]\n\t\tif (options.inputType === \"specular\") isTextureSpecular = [true, true]\n\n\t\tconst textureCount = options.inputType === \"diffuseSpecular\" ? 2 : 1\n\n\t\tconst fragmentShader = unrollLoops(finalFragmentShader.replaceAll(\"textureCount\", textureCount))\n\n\t\tthis.fullscreenMaterial = new ShaderMaterial({\n\t\t\tfragmentShader,\n\t\t\tvertexShader,\n\t\t\tuniforms: {\n\t\t\t\tdepthTexture: { value: null },\n\t\t\t\tinputTexture: { value: textures[0] },\n\t\t\t\tinputTexture2: { value: textures[1] },\n\t\t\t\tgBufferTexture: { value: null },\n\t\t\t\tnormalTexture: { value: null },\n\t\t\t\tprojectionMatrix: { value: camera.projectionMatrix },\n\t\t\t\tprojectionMatrixInverse: { value: camera.projectionMatrixInverse },\n\t\t\t\tcameraMatrixWorld: { value: camera.matrixWorld },\n\t\t\t\tviewMatrix: { value: camera.matrixWorldInverse },\n\t\t\t\tradius: { value: defaultPoissonBlurOptions.radius },\n\t\t\t\tphi: { value: defaultPoissonBlurOptions.phi },\n\t\t\t\tlumaPhi: { value: defaultPoissonBlurOptions.lumaPhi },\n\t\t\t\tdepthPhi: { value: defaultPoissonBlurOptions.depthPhi },\n\t\t\t\tnormalPhi: { value: defaultPoissonBlurOptions.normalPhi },\n\t\t\t\troughnessPhi: { value: defaultPoissonBlurOptions.roughnessPhi },\n\t\t\t\tspecularPhi: { value: defaultPoissonBlurOptions.specularPhi },\n\t\t\t\tresolution: { value: new Vector2() }\n\t\t\t},\n\t\t\tdefines: {\n\t\t\t\tisTextureSpecular: \"bool[2](\" + isTextureSpecular.join(\",\") + \")\"\n\t\t\t},\n\t\t\tglslVersion: GLSL3\n\t\t})\n\n\t\tuseBlueNoise(this.fullscreenMaterial)\n\n\t\tconst renderTargetOptions = {\n\t\t\ttype: HalfFloatType, // using HalfFloatType as FloatType with bilinear filtering isn't supported on some Apple devices\n\t\t\tdepthBuffer: false\n\t\t}\n\n\t\tthis.renderTargetA = new WebGLMultipleRenderTargets(1, 1, textureCount, renderTargetOptions)\n\t\tthis.renderTargetB = new WebGLMultipleRenderTargets(1, 1, textureCount, renderTargetOptions)\n\n\t\t// give the textures of renderTargetA and renderTargetB names\n\t\tthis.renderTargetB.texture[0].name = \"PoissonDenoisePass.\" + (isTextureSpecular[0] ? \"specular\" : \"diffuse\")\n\n\t\tif (textureCount > 1) {\n\t\t\tthis.renderTargetB.texture[1].name = \"PoissonDenoisePass.\" + (isTextureSpecular[1] ? \"specular\" : \"diffuse\")\n\t\t}\n\n\t\tconst { uniforms } = this.fullscreenMaterial\n\n\t\tuniforms[\"depthPhi\"].value = options.depthPhi\n\t\tuniforms[\"normalPhi\"].value = options.normalPhi\n\t}\n\n\tsetSize(width, height) {\n\t\tthis.renderTargetA.setSize(width, height)\n\t\tthis.renderTargetB.setSize(width, height)\n\n\t\tthis.fullscreenMaterial.uniforms.resolution.value.set(width, height)\n\t}\n\n\tget texture() {\n\t\treturn this.renderTargetB.texture\n\t}\n\n\t// can either be a GBufferPass or a VelocityDepthNormalPass\n\tsetGBufferPass(gBufferPass) {\n\t\tif (gBufferPass instanceof GBufferPass) {\n\t\t\tthis.fullscreenMaterial.uniforms.gBufferTexture.value = gBufferPass.texture\n\t\t\tthis.fullscreenMaterial.defines.GBUFFER_TEXTURE = \"\"\n\t\t} else {\n\t\t\tthis.fullscreenMaterial.uniforms.normalTexture.value = gBufferPass.texture\n\t\t}\n\n\t\tthis.fullscreenMaterial.uniforms.depthTexture.value = gBufferPass.renderTarget.depthTexture\n\t}\n\n\tsetnNormalTexture(texture) {\n\t\tthis.fullscreenMaterial.uniforms.normalTexture.value = texture\n\t}\n\n\tsetDepthTexture(texture) {\n\t\tthis.fullscreenMaterial.uniforms.depthTexture.value = texture\n\t}\n\n\tdispose() {\n\t\tsuper.dispose()\n\n\t\tthis.renderTargetA.dispose()\n\t\tthis.renderTargetB.dispose()\n\t\tthis.fullscreenMaterial.dispose()\n\t}\n\n\trender(renderer) {\n\t\tfor (let i = 0; i < 2 * this.iterations; i++) {\n\t\t\tconst horizontal = i % 2 === 0\n\t\t\tconst inputRenderTarget = horizontal ? this.renderTargetB : this.renderTargetA\n\n\t\t\tthis.fullscreenMaterial.uniforms[\"inputTexture\"].value = i === 0 ? this.textures[0] : inputRenderTarget.texture[0]\n\t\t\tthis.fullscreenMaterial.uniforms[\"inputTexture2\"].value =\n\t\t\t\ti === 0 ? this.textures[1] : inputRenderTarget.texture[1]\n\n\t\t\tconst renderTarget = horizontal ? this.renderTargetA : this.renderTargetB\n\n\t\t\trenderer.setRenderTarget(renderTarget)\n\t\t\trenderer.render(this.scene, this.camera)\n\t\t}\n\t}\n}\n\nPoissonDenoisePass.DefaultOptions = defaultPoissonBlurOptions\n","import { TemporalReprojectPass } from \"../temporal-reproject/TemporalReprojectPass\"\nimport { VelocityDepthNormalPass } from \"../temporal-reproject/pass/VelocityDepthNormalPass\"\nimport { DenoiserComposePass } from \"./pass/DenoiserComposePass\"\nimport { PoissonDenoisePass } from \"./pass/PoissonDenoisePass\"\n\nconst defaultDenosierOptions = {\n\tdenoiseMode: \"full\", // can be \"full\" | \"full_temporal\" | \"denoised\" | \"temporal\"\n\tinputType: \"diffuseSpecular\", // can be \"diffuseSpecular\" | \"diffuse\" | \"specular\"\n\tgBufferPass: null,\n\tvelocityDepthNormalPass: null\n}\n\n// a spatio-temporal denoiser\n// temporal: temporal reprojection to reproject previous frames\n// spatial: poisson denoiser to denoise the current frame recurrently\nexport default class Denoiser {\n\tconstructor(scene, camera, texture, options = defaultDenosierOptions) {\n\t\toptions = { ...defaultDenosierOptions, ...options }\n\t\tthis.options = options\n\n\t\tthis.velocityDepthNormalPass = options.velocityDepthNormalPass ?? new VelocityDepthNormalPass(scene, camera)\n\t\tthis.isOwnVelocityDepthNormalPass = !options.velocityDepthNormalPass\n\n\t\tconst textureCount = options.inputType === \"diffuseSpecular\" ? 2 : 1\n\n\t\tthis.temporalReprojectPass = new TemporalReprojectPass(\n\t\t\tscene,\n\t\t\tcamera,\n\t\t\tthis.velocityDepthNormalPass,\n\t\t\ttexture,\n\t\t\ttextureCount,\n\t\t\t{\n\t\t\t\tfullAccumulate: true,\n\n\t\t\t\tlogTransform: true,\n\t\t\t\tcopyTextures: !options.denoise,\n\t\t\t\treprojectSpecular: [false, true],\n\t\t\t\tneighborhoodClamp: [true, true],\n\t\t\t\tneighborhoodClampRadius: 2,\n\t\t\t\tneighborhoodClampIntensity: 0.5,\n\t\t\t\t...options\n\t\t\t}\n\t\t)\n\n\t\tconst textures = this.temporalReprojectPass.renderTarget.texture.slice(0, textureCount)\n\n\t\tif (this.options.denoiseMode === \"full\" || this.options.denoiseMode === \"denoised\") {\n\t\t\tthis.denoisePass = new PoissonDenoisePass(camera, textures, options)\n\t\t\tthis.denoisePass.setGBufferPass(options.gBufferPass ?? this.velocityDepthNormalPass)\n\n\t\t\tthis.temporalReprojectPass.overrideAccumulatedTextures = this.denoisePass.renderTargetB.texture\n\t\t}\n\n\t\tconst composerInputTextures = this.denoisePass?.texture ?? textures\n\n\t\tif (options.denoiseMode.startsWith(\"full\")) {\n\t\t\tthis.denoiserComposePass = new DenoiserComposePass(\n\t\t\t\tcamera,\n\t\t\t\tcomposerInputTextures,\n\t\t\t\toptions.gBufferPass.texture,\n\t\t\t\toptions.gBufferPass.renderTarget.depthTexture,\n\t\t\t\toptions\n\t\t\t)\n\t\t}\n\t}\n\n\tget texture() {\n\t\tswitch (this.options.denoiseMode) {\n\t\t\tcase \"full\":\n\t\t\tcase \"full_temporal\":\n\t\t\t\treturn this.denoiserComposePass.texture\n\t\t\tcase \"denoised\":\n\t\t\t\treturn this.denoisePass.texture\n\t\t\tcase \"temporal\":\n\t\t\t\treturn this.temporalReprojectPass.texture\n\t\t}\n\t}\n\n\treset() {\n\t\tthis.temporalReprojectPass.reset()\n\t}\n\n\tsetSize(width, height) {\n\t\tthis.velocityDepthNormalPass.setSize(width, height)\n\t\tthis.temporalReprojectPass.setSize(width, height)\n\t\tthis.denoisePass?.setSize(width, height)\n\t\tthis.denoiserComposePass?.setSize(width, height)\n\t}\n\n\tdispose() {\n\t\tthis.velocityDepthNormalPass.dispose()\n\t\tthis.temporalReprojectPass.dispose()\n\t\tthis.denoisePass?.dispose()\n\t\tthis.denoiserComposePass?.dispose()\n\t}\n\n\trender(renderer, inputBuffer = null) {\n\t\tif (this.isOwnVelocityDepthNormalPass) this.velocityDepthNormalPass.render(renderer)\n\t\tthis.temporalReprojectPass.render(renderer)\n\n\t\tif (this.options.inputType !== \"diffuseSpecular\") {\n\t\t\tthis.denoiserComposePass?.setSceneTexture(inputBuffer.texture)\n\t\t}\n\n\t\tthis.denoisePass?.render(renderer)\n\t\tthis.denoiserComposePass?.render(renderer)\n\t}\n}\n","/* eslint-disable camelcase */\nimport { Pass } from \"postprocessing\"\nimport { FloatType, NearestFilter, NoBlending, ShaderMaterial, WebGLRenderTarget } from \"three\"\nimport basicVertexShader from \"../../utils/shader/basic.vert\"\nimport gbuffer_packing from \"../shader/gbuffer_packing.glsl\"\n\nexport class GBufferDebugPass extends Pass {\n\tconstructor(gBufferTexture) {\n\t\tsuper(\"GBufferDebugPass\")\n\n\t\tthis.renderTarget = new WebGLRenderTarget(1, 1, {\n\t\t\tdepthBuffer: false,\n\t\t\ttype: FloatType,\n\t\t\tminFilter: NearestFilter,\n\t\t\tmagFilter: NearestFilter\n\t\t})\n\n\t\tthis.renderTarget.texture.name = \"GBufferDebugPass.Texture\"\n\n\t\tthis.fullscreenMaterial = new ShaderMaterial({\n\t\t\tfragmentShader: /* glsl */ `\n varying vec2 vUv;\n uniform highp sampler2D depthTexture;\n\t\t\tuniform int mode;\n\n #include <common>\n #include <packing>\n\n ${gbuffer_packing}\n\n void main() {\n highp float depth = textureLod(depthTexture, vUv, 0.).r;\n\n\t\t\t\tif(depth == 0.){\n\t\t\t\t\tgl_FragColor = vec4(0.);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n Material mat = getMaterial(gBufferTexture, vUv);\n\n if (mode == 0) {\n gl_FragColor = vec4(mat.diffuse.rgb, 1.);\n } else if (mode == 1) {\n gl_FragColor = vec4(mat.diffuse.aaa, 1.);\n } else if (mode == 2) {\n gl_FragColor = vec4(mat.normal, 1.);\n } else if (mode == 3) {\n gl_FragColor = vec4(vec3(mat.roughness), 1.);\n } else if (mode == 4) {\n gl_FragColor = vec4(vec3(mat.metalness), 1.);\n } else {\n gl_FragColor = vec4(mat.emissive, 1.);\n }\n }\n `,\n\t\t\tvertexShader: basicVertexShader,\n\t\t\tuniforms: {\n\t\t\t\tgBufferTexture: { value: gBufferTexture },\n\t\t\t\tmode: { value: 0 }\n\t\t\t},\n\t\t\tblending: NoBlending,\n\t\t\tdepthWrite: false,\n\t\t\tdepthTest: false,\n\t\t\ttoneMapped: false\n\t\t})\n\t}\n\n\tget texture() {\n\t\treturn this.renderTarget.texture\n\t}\n\n\tdispose() {\n\t\tthis.renderTarget.dispose()\n\t}\n\n\tsetSize(width, height) {\n\t\tthis.renderTarget.setSize(width, height)\n\t}\n\n\trender(renderer) {\n\t\trenderer.setRenderTarget(this.renderTarget)\n\t\trenderer.render(this.scene, this.camera)\n\t}\n}\n","/* eslint-disable max-len */\n/**\n * Options of the SSGI effect\n * @typedef {Object} SSGIOptions\n * @property {Number} [distance] maximum distance a SSGI ray can travel to find what it reflects\n * @property {Number} [thickness] maximum depth difference between a ray and the particular depth at its screen position before refining with binary search; higher values will result in better performance\n * @property {Number} [envBlur] higher values will result in lower mipmaps being sampled which will cause less noise but also less detail regarding environment lighting\n * @property {Number} [importanceSampling] whether to use importance sampling for the environment map\n * @property {Number} [denoiseIterations] how many times the denoise filter runs, more iterations will denoise the frame better but need more performance\n * @property {Number} [radius] the radius of the denoiser, higher values will result in less noise on less detailled surfaces but more noise on detailled surfaces\n * @property {Number} [depthPhi] depth factor of the denoiser, higher values will use neighboring areas with different depth values more resulting in less noise but loss of details\n * @property {Number} [normalPhi] normals factor of the denoiser, higher values will use neighboring areas with different normals more resulting in less noise but loss of details and sharpness\n * @property {Number} [roughnessPhi] roughness factor of the denoiser setting how much the denoiser should only apply the blur to rougher surfaces, a value of 0 means the denoiser will blur mirror-like surfaces the same as rough surfaces\n * @property {Number} [specularPhi] specular factor of the denoiser setting how much the denoiser will blur specular reflections\n * @property {Number} [lumaPhi] luminance factor of the denoiser setting how aggressive the denoiser is on areas with different luminance\n * @property {Number} [steps] number of steps a SSGI ray can maximally do to find an object it intersected (and thus reflects)\n * @property {Number} [refineSteps] once we had our ray intersect something, we need to find the exact point in space it intersected and thus it reflects; this can be done through binary search with the given number of maximum steps\n * @property {boolean} [missedRays] if there should still be SSGI for rays for which a reflecting point couldn't be found; enabling this will result in stretched looking SSGI which can look good or bad depending on the angle\n * @property {Number} [resolutionScale] resolution of the SSGI effect, a resolution of 0.5 means the effect will be rendered at half resolution\n */\n\n/**\n * The options of the SSGI effect\n * @type {SSGIOptions}\n */\nexport const defaultSSGIOptions = {\n\tmode: \"ssgi\",\n\tdistance: 10,\n\tthickness: 10,\n\tdenoiseIterations: 1,\n\tdenoiseKernel: 2,\n\tdenoiseDiffuse: 10,\n\tdenoiseSpecular: 10,\n\tradius: 3,\n\tphi: 0.5,\n\tlumaPhi: 5,\n\tdepthPhi: 2,\n\tnormalPhi: 50,\n\troughnessPhi: 50,\n\tspecularPhi: 50,\n\tenvBlur: 0.5,\n\timportanceSampling: true,\n\tsteps: 20,\n\trefineSteps: 5,\n\tresolutionScale: 1,\n\tmissedRays: false,\n\toutputTexture: null\n}\n","import { Effect, RenderPass, Selection } from \"postprocessing\"\nimport {\n\tColor,\n\tFloatType,\n\tLinearFilter,\n\tLinearMipMapLinearFilter,\n\tSRGBColorSpace,\n\tShaderChunk,\n\tUniform,\n\tWebGLRenderTarget\n} from \"three\"\nimport { CubeToEquirectEnvPass } from \"./pass/CubeToEquirectEnvPass.js\"\nimport { SSGIPass } from \"./pass/SSGIPass.js\"\n/* eslint-disable camelcase */\nimport Denoiser from \"../denoise/Denoiser.js\"\nimport { GBufferDebugPass } from \"../gbuffer/debug/GBufferDebugPass.js\"\nimport { getVisibleChildren } from \"../gbuffer/utils/GBufferUtils.js\"\nimport { isChildMaterialRenderable } from \"../utils/SceneUtils.js\"\nimport { defaultSSGIOptions } from \"./SSGIOptions\"\nimport ssgi_compose from \"./shader/ssgi_compose.frag\"\nimport { createGlobalDisableIblRadianceUniform, getMaxMipLevel } from \"./utils/Utils.js\"\n\nconst { render } = RenderPass.prototype\n\nconst globalIblRadianceDisabledUniform = createGlobalDisableIblRadianceUniform()\n\nexport class SSGIEffect extends Effect {\n\tselection = new Selection()\n\tisUsingRenderPass = true\n\n\tconstructor(composer, scene, camera, options) {\n\t\toptions = { ...defaultSSGIOptions, ...options }\n\n\t\tlet fragmentShader = ssgi_compose.replace(\n\t\t\t\"#include <fog_pars_fragment>\",\n\t\t\tShaderChunk.fog_pars_fragment.replace(\"varying\", \"\")\n\t\t)\n\n\t\t// delete the line starting with gl_FragColor using a regex\n\t\tfragmentShader = fragmentShader.replace(\n\t\t\t\"#include <fog_fragment>\",\n\t\t\tShaderChunk.fog_fragment.replace(/.*gl_FragColor.*/g, \"\")\n\t\t)\n\n\t\tconst defines = new Map()\n\t\tif (scene.fog) defines.set(\"USE_FOG\", \"\")\n\t\tif (scene.fog?.isFogExp2) defines.set(\"FOG_EXP2\", \"\")\n\n\t\tsuper(\"SSGIEffect\", fragmentShader, {\n\t\t\ttype: \"FinalSSGIMaterial\",\n\t\t\tuniforms: new Map([\n\t\t\t\t[\"inputTexture\", new Uniform(null)],\n\t\t\t\t[\"sceneTexture\", new Uniform(null)],\n\t\t\t\t[\"depthTexture\", new Uniform(null)],\n\t\t\t\t[\"isDebug\", new Uniform(false)],\n\t\t\t\t[\"fogColor\", new Uniform(new Color())],\n\t\t\t\t[\"fogNear\", new Uniform(0)],\n\t\t\t\t[\"fogFar\", new Uniform(0)],\n\t\t\t\t[\"fogDensity\", new Uniform(0)],\n\t\t\t\t[\"cameraNear\", new Uniform(0)],\n\t\t\t\t[\"cameraFar\", new Uniform(0)]\n\t\t\t]),\n\t\t\tdefines: new Map([[\"PERSPECTIVE_CAMERA\", camera.isPerspectiveCamera ? \"1\" : \"0\"], ...defines])\n\t\t})\n\n\t\tthis._scene = scene\n\t\tthis._camera = camera\n\t\tthis.composer = composer\n\n\t\tif (options.mode === \"ssr\") {\n\t\t\toptions.reprojectSpecular = true\n\t\t\toptions.neighborhoodClamp = true\n\t\t\toptions.inputType = \"specular\"\n\t\t} else if (options.mode === \"ssgi\") {\n\t\t\toptions.reprojectSpecular = [false, true]\n\t\t\toptions.neighborhoodClamp = [false, true]\n\t\t}\n\n\t\tif (typeof options.preset === \"string\") {\n\t\t\tswitch (options.preset) {\n\t\t\t\tcase \"low\":\n\t\t\t\t\toptions.steps = 10\n\t\t\t\t\toptions.refineSteps = 2\n\t\t\t\t\toptions.denoiseMode = \"full_temporal\"\n\t\t\t\t\tbreak\n\n\t\t\t\tcase \"medium\":\n\t\t\t\t\toptions.steps = 20\n\t\t\t\t\toptions.refineSteps = 4\n\t\t\t\t\toptions.denoiseMode = \"full\"\n\t\t\t\t\tbreak\n\n\t\t\t\tcase \"medium\":\n\t\t\t\t\toptions.steps = 40\n\t\t\t\t\toptions.refineSteps = 4\n\t\t\t\t\toptions.denoiseMode = \"full\"\n\t\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\n\t\tthis.ssgiPass = new SSGIPass(this, options)\n\t\tthis.denoiser = new Denoiser(scene, camera, this.ssgiPass.texture, {\n\t\t\tgBufferPass: this.ssgiPass.gBufferPass,\n\t\t\tvelocityDepthNormalPass: options.velocityDepthNormalPass,\n\t\t\t...options\n\t\t})\n\n\t\tthis.lastSize = {\n\t\t\twidth: options.width,\n\t\t\theight: options.height,\n\t\t\tresolutionScale: options.resolutionScale\n\t\t}\n\n\t\tthis.sceneRenderTarget = new WebGLRenderTarget(1, 1, {\n\t\t\tcolorSpace: SRGBColorSpace\n\t\t})\n\n\t\tthis.renderPass = new RenderPass(this._scene, this._camera)\n\t\tthis.renderPass.renderToScreen = false\n\n\t\tthis.setSize(options.width, options.height)\n\n\t\tconst th = this\n\t\tconst ssgiRenderPass = this.renderPass\n\t\t// eslint-disable-next-line space-before-function-paren\n\t\tRenderPass.prototype.render = function (...args) {\n\t\t\tif (this !== ssgiRenderPass) {\n\t\t\t\tconst wasUsingRenderPass = th.isUsingRenderPass\n\t\t\t\tth.isUsingRenderPass = true\n\n\t\t\t\tif (wasUsingRenderPass != th.isUsingRenderPass) th.updateUsingRenderPass()\n\t\t\t}\n\n\t\t\trender.call(this, ...args)\n\t\t}\n\n\t\tthis.makeOptionsReactive(options)\n\n\t\tthis.outputTexture = this.denoiser.texture\n\t\t// this.outputTexture = this.denoiser.denoisePass.textures[1]\n\t}\n\n\tupdateUsingRenderPass() {\n\t\tif (this.isUsingRenderPass) {\n\t\t\tthis.ssgiPass.fullscreenMaterial.defines.useDirectLight = \"\"\n\t\t} else {\n\t\t\tdelete this.ssgiPass.fullscreenMaterial.defines.useDirectLight\n\t\t}\n\n\t\tthis.ssgiPass.fullscreenMaterial.needsUpdate = true\n\t}\n\n\treset() {\n\t\tthis.denoiser.reset()\n\t}\n\n\tmakeOptionsReactive(options) {\n\t\tlet needsUpdate = false\n\n\t\tconst ssgiPassFullscreenMaterialUniforms = this.ssgiPass.fullscreenMaterial.uniforms\n\t\tconst ssgiPassFullscreenMaterialUniformsKeys = Object.keys(ssgiPassFullscreenMaterialUniforms)\n\n\t\tfor (const key of Object.keys(options)) {\n\t\t\tObject.defineProperty(this, key, {\n\t\t\t\tget() {\n\t\t\t\t\treturn options[key]\n\t\t\t\t},\n\t\t\t\tset(value) {\n\t\t\t\t\tif (options[key] === value && needsUpdate) return\n\n\t\t\t\t\toptions[key] = value\n\n\t\t\t\t\tswitch (key) {\n\t\t\t\t\t\t// denoiser\n\t\t\t\t\t\tcase \"denoiseIterations\":\n\t\t\t\t\t\t\tif (this.denoiser.denoisePass) this.denoiser.denoisePass.iterations = value\n\t\t\t\t\t\t\tbreak\n\n\t\t\t\t\t\tcase \"radius\":\n\t\t\t\t\t\tcase \"phi\":\n\t\t\t\t\t\tcase \"lumaPhi\":\n\t\t\t\t\t\tcase \"depthPhi\":\n\t\t\t\t\t\tcase \"normalPhi\":\n\t\t\t\t\t\tcase \"roughnessPhi\":\n\t\t\t\t\t\tcase \"specularPhi\":\n\t\t\t\t\t\t\tif (this.denoiser.denoisePass?.fullscreenMaterial.uniforms[key]) {\n\t\t\t\t\t\t\t\tthis.denoiser.denoisePass.fullscreenMaterial.uniforms[key].value = value\n\t\t\t\t\t\t\t\tthis.reset()\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak\n\n\t\t\t\t\t\tcase \"denoiseIterations\":\n\t\t\t\t\t\tcase \"radius\":\n\t\t\t\t\t\t\tif (this.denoiser.denoisePass) this.denoiser.denoisePass[key] = value\n\t\t\t\t\t\t\tbreak\n\n\t\t\t\t\t\t// SSGI\n\t\t\t\t\t\tcase \"resolutionScale\":\n\t\t\t\t\t\t\tthis.setSize(this.lastSize.width, this.lastSize.height)\n\t\t\t\t\t\t\tthis.reset()\n\t\t\t\t\t\t\tbreak\n\n\t\t\t\t\t\tcase \"steps\":\n\t\t\t\t\t\tcase \"refineSteps\":\n\t\t\t\t\t\t\tthis.ssgiPass.fullscreenMaterial.defines[key] = parseInt(value)\n\t\t\t\t\t\t\tthis.ssgiPass.fullscreenMaterial.needsUpdate = needsUpdate\n\t\t\t\t\t\t\tthis.reset()\n\n\t\t\t\t\t\t\tbreak\n\n\t\t\t\t\t\tcase \"importanceSampling\":\n\t\t\t\t\t\tcase \"missedRays\":\n\t\t\t\t\t\t\tif (value) {\n\t\t\t\t\t\t\t\tthis.ssgiPass.fullscreenMaterial.defines[key] = \"\"\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tdelete this.ssgiPass.fullscreenMaterial.defines[key]\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tthis.ssgiPass.fullscreenMaterial.needsUpdate = needsUpdate\n\t\t\t\t\t\t\tthis.reset()\n\t\t\t\t\t\t\tbreak\n\n\t\t\t\t\t\tcase \"distance\":\n\t\t\t\t\t\t\tssgiPassFullscreenMaterialUniforms.rayDistance.value = value\n\t\t\t\t\t\t\tthis.reset()\n\t\t\t\t\t\t\tbreak\n\n\t\t\t\t\t\tcase \"outputTexture\":\n\t\t\t\t\t\t\tif (!this.outputTexture) {\n\t\t\t\t\t\t\t\treturn\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (typeof value === \"string\") {\n\t\t\t\t\t\t\t\tif (this.gBufferDebugPass === undefined) {\n\t\t\t\t\t\t\t\t\tthis.gBufferDebugPass = new GBufferDebugPass(this.ssgiPass.gBufferPass.texture)\n\t\t\t\t\t\t\t\t\tthis.gBufferDebugPass.setSize(this.lastSize.width, this.lastSize.height)\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tconst modes = [\"diffuse\", \"alpha\", \"normal\", \"roughness\", \"metalness\", \"emissive\"]\n\t\t\t\t\t\t\t\tconst mode = modes.indexOf(value)\n\t\t\t\t\t\t\t\tthis.gBufferDebugPass.fullscreenMaterial.uniforms.mode.value = mode\n\n\t\t\t\t\t\t\t\tthis.outputTexture = this.gBufferDebugPass.texture\n\t\t\t\t\t\t\t} else if (this.gBufferDebugPass !== undefined && this.outputTexture !== this.gBufferDebugPass.texture) {\n\t\t\t\t\t\t\t\tthis.gBufferDebugPass.dispose()\n\t\t\t\t\t\t\t\tdelete this.gBufferDebugPass\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tthis.uniforms.get(\"isDebug\").value = this.outputTexture !== this.denoiser.texture\n\n\t\t\t\t\t\t\tbreak\n\n\t\t\t\t\t\t// must be a uniform\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tif (ssgiPassFullscreenMaterialUniformsKeys.includes(key)) {\n\t\t\t\t\t\t\t\tssgiPassFullscreenMaterialUniforms[key].value = value\n\t\t\t\t\t\t\t\tthis.reset()\n\t\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t})\n\n\t\t\t// apply all uniforms and defines\n\t\t\tthis[key] = options[key]\n\t\t}\n\n\t\tneedsUpdate = true\n\t}\n\n\tinitialize(renderer, ...args) {\n\t\tsuper.initialize(renderer, ...args)\n\t\tthis.ssgiPass.initialize(renderer, ...args)\n\t}\n\n\tsetSize(width, height, force = false) {\n\t\tif (width === undefined && height === undefined) return\n\t\tif (\n\t\t\t!force &&\n\t\t\twidth === this.lastSize.width &&\n\t\t\theight === this.lastSize.height &&\n\t\t\tthis.resolutionScale === this.lastSize.resolutionScale\n\t\t) {\n\t\t\treturn\n\t\t}\n\n\t\tthis.ssgiPass.setSize(width, height)\n\t\tthis.denoiser.setSize(width, height)\n\t\tthis.gBufferDebugPass?.setSize(width, height)\n\t\tthis.sceneRenderTarget.setSize(width, height)\n\t\tthis.cubeToEquirectEnvPass?.setSize(width, height)\n\n\t\tthis.lastSize = {\n\t\t\twidth,\n\t\t\theight,\n\t\t\tresolutionScale: this.resolutionScale\n\t\t}\n\t}\n\n\tdispose() {\n\t\tsuper.dispose()\n\n\t\tthis.ssgiPass.dispose()\n\t\tthis.denoiser.dispose()\n\t\tthis.cubeToEquirectEnvPass?.dispose()\n\n\t\tRenderPass.prototype.render = render\n\t}\n\n\tkeepEnvMapUpdated(renderer) {\n\t\tconst ssgiMaterial = this.ssgiPass.fullscreenMaterial\n\n\t\tlet environment = this._scene.environment\n\n\t\tif (environment) {\n\t\t\tif (ssgiMaterial.uniforms.envMapInfo.value.mapUuid !== environment.uuid) {\n\t\t\t\t// if the environment is a cube texture, convert it to an equirectangular texture so we can sample it in the SSGI pass and use MIS\n\t\t\t\tif (environment.isCubeTexture) {\n\t\t\t\t\tif (!this.cubeToEquirectEnvPass) this.cubeToEquirectEnvPass = new CubeToEquirectEnvPass()\n\n\t\t\t\t\tenvironment = this.cubeToEquirectEnvPass.generateEquirectEnvMap(renderer, environment)\n\t\t\t\t\tenvironment.uuid = this._scene.environment.uuid\n\t\t\t\t}\n\n\t\t\t\tif (!environment.generateMipmaps) {\n\t\t\t\t\tenvironment.generateMipmaps = true\n\t\t\t\t\tenvironment.minFilter = LinearMipMapLinearFilter\n\t\t\t\t\tenvironment.magFilter = LinearFilter\n\t\t\t\t\tenvironment.needsUpdate = true\n\t\t\t\t}\n\n\t\t\t\tif (environment.type === FloatType) {\n\t\t\t\t\tconsole.warn(\n\t\t\t\t\t\t\"SSGI: Environment map is FloatType, this causes the environment map to be black in the SSGI pass for many modern Apple devices. Please use HalfFloatType instead.\"\n\t\t\t\t\t)\n\t\t\t\t}\n\n\t\t\t\tssgiMaterial.uniforms.envMapInfo.value.mapUuid = environment.uuid\n\n\t\t\t\tconst maxEnvMapMipLevel = getMaxMipLevel(environment)\n\t\t\t\tssgiMaterial.uniforms.maxEnvMapMipLevel.value = maxEnvMapMipLevel\n\n\t\t\t\tssgiMaterial.uniforms.envMapInfo.value.map = environment\n\n\t\t\t\tssgiMaterial.defines.USE_ENVMAP = \"\"\n\t\t\t\tdelete ssgiMaterial.defines.importanceSampling\n\n\t\t\t\tif (this.importanceSampling) {\n\t\t\t\t\tssgiMaterial.uniforms.envMapInfo.value.updateFrom(environment, renderer).then(() => {\n\t\t\t\t\t\tssgiMaterial.defines.importanceSampling = \"\"\n\t\t\t\t\t\tssgiMaterial.needsUpdate = true\n\t\t\t\t\t})\n\t\t\t\t} else {\n\t\t\t\t\tssgiMaterial.uniforms.envMapInfo.value.map = environment\n\t\t\t\t}\n\n\t\t\t\tthis.reset()\n\n\t\t\t\tssgiMaterial.needsUpdate = true\n\t\t\t}\n\t\t} else if (\"USE_ENVMAP\" in ssgiMaterial.defines) {\n\t\t\tdelete ssgiMaterial.defines.USE_ENVMAP\n\t\t\tdelete ssgiMaterial.defines.importanceSampling\n\n\t\t\tssgiMaterial.needsUpdate = true\n\t\t}\n\t}\n\n\tget depthTexture() {\n\t\treturn this.ssgiPass.gBufferPass.depthTexture\n\t}\n\n\tupdate(renderer, inputBuffer) {\n\t\tthis.keepEnvMapUpdated(renderer)\n\n\t\tconst sceneBuffer = this.isUsingRenderPass ? inputBuffer : this.sceneRenderTarget\n\n\t\tconst hideMeshes = []\n\n\t\tif (!this.isUsingRenderPass) {\n\t\t\tconst children = []\n\n\t\t\tfor (const c of getVisibleChildren(this._scene)) {\n\t\t\t\tif (c.isScene) return\n\n\t\t\t\tc.visible = !isChildMaterialRenderable(c)\n\n\t\t\t\tc.visible ? hideMeshes.push(c) : children.push(c)\n\t\t\t}\n\n\t\t\tthis.renderPass.render(renderer, this.sceneRenderTarget)\n\n\t\t\tfor (const c of children) c.visible = true\n\t\t\tfor (const c of hideMeshes) c.visible = false\n\t\t}\n\n\t\tthis.ssgiPass.fullscreenMaterial.uniforms.directLightTexture.value = sceneBuffer.texture\n\n\t\tthis.ssgiPass.render(renderer)\n\t\tthis.gBufferDebugPass?.render(renderer)\n\t\tthis.denoiser.render(renderer, inputBuffer)\n\n\t\tthis.uniforms.get(\"inputTexture\").value = this.outputTexture[0] ?? this.outputTexture\n\t\tthis.uniforms.get(\"sceneTexture\").value = sceneBuffer.texture\n\t\tthis.uniforms.get(\"depthTexture\").value = this.ssgiPass.gBufferPass.depthTexture\n\n\t\t// update the fog uniforms\n\t\tif (this._scene.fog) {\n\t\t\tthis.uniforms.get(\"fogColor\").value = this._scene.fog.color\n\t\t\tthis.uniforms.get(\"fogNear\").value = this._scene.fog.near\n\t\t\tthis.uniforms.get(\"fogFar\").value = this._scene.fog.far\n\t\t\tthis.uniforms.get(\"fogDensity\").value = this._scene.fog.density\n\n\t\t\tthis.uniforms.get(\"cameraNear\").value = this._camera.near\n\t\t\tthis.uniforms.get(\"cameraFar\").value = this._camera.far\n\t\t}\n\n\t\tfor (const c of hideMeshes) c.visible = true\n\n\t\tglobalIblRadianceDisabledUniform.value = true\n\n\t\tcancelAnimationFrame(this.rAF2)\n\t\tcancelAnimationFrame(this.rAF)\n\t\tcancelAnimationFrame(this.usingRenderPassRAF)\n\n\t\tthis.rAF = requestAnimationFrame(() => {\n\t\t\tthis.rAF2 = requestAnimationFrame(() => {\n\t\t\t\tglobalIblRadianceDisabledUniform.value = false\n\t\t\t})\n\t\t})\n\t\tthis.usingRenderPassRAF = requestAnimationFrame(() => {\n\t\t\tconst wasUsingRenderPass = this.isUsingRenderPass\n\t\t\tthis.isUsingRenderPass = false\n\n\t\t\tif (wasUsingRenderPass != this.isUsingRenderPass) this.updateUsingRenderPass()\n\t\t})\n\t}\n}\n\nSSGIEffect.DefaultOptions = defaultSSGIOptions\n","/* eslint-disable camelcase */\n\nimport { Effect } from \"postprocessing\"\nimport { NoColorSpace, NearestFilter, RepeatWrapping, TextureLoader, Uniform, Vector2 } from \"three\"\nimport motion_blur from \"./shader/motion_blur.frag\"\n\nimport blueNoiseImage from \"./../utils/blue_noise_rgba.png\"\nimport { setupBlueNoise } from \"../utils/BlueNoiseUtils\"\n\n// https://www.nvidia.com/docs/io/8230/gdc2003_openglshadertricks.pdf\n// http://john-chapman-graphics.blogspot.com/2013/01/per-object-motion-blur.html\n// reference code: https://github.com/gkjohnson/threejs-sandbox/blob/master/motionBlurPass/src/CompositeShader.js\n\nconst defaultOptions = { intensity: 1, jitter: 1, samples: 16 }\n\nexport class MotionBlurEffect extends Effect {\n\tpointsIndex = 0\n\n\tconstructor(velocityPass, options = defaultOptions) {\n\t\toptions = { ...defaultOptions, ...options }\n\n\t\tconst { fragmentShader, uniforms } = setupBlueNoise(motion_blur)\n\n\t\t// convert the uniforms from type { uniform: value,... } to type [\"uniform\", value,...]\n\t\tconst formattedUniforms = []\n\t\tfor (const key of Object.keys(uniforms)) {\n\t\t\tformattedUniforms.push([key, uniforms[key]])\n\t\t}\n\n\t\tsuper(\"MotionBlurEffect\", fragmentShader, {\n\t\t\ttype: \"MotionBlurMaterial\",\n\t\t\tuniforms: new Map([\n\t\t\t\t...formattedUniforms,\n\t\t\t\t[\"inputTexture\", new Uniform(null)],\n\t\t\t\t[\"velocityTexture\", new Uniform(velocityPass.texture)],\n\t\t\t\t[\"resolution\", new Uniform(new Vector2())],\n\t\t\t\t[\"intensity\", new Uniform(1)],\n\t\t\t\t[\"jitter\", new Uniform(1)],\n\t\t\t\t[\"frame\", new Uniform(0)],\n\t\t\t\t[\"deltaTime\", new Uniform(0)]\n\t\t\t]),\n\t\t\tdefines: new Map([\n\t\t\t\t[\"samples\", options.samples.toFixed(0)],\n\t\t\t\t[\"samplesFloat\", options.samples.toFixed(0) + \".0\"]\n\t\t\t])\n\t\t})\n\n\t\tthis.makeOptionsReactive(options)\n\t}\n\n\tmakeOptionsReactive(options) {\n\t\tfor (const key of Object.keys(options)) {\n\t\t\tObject.defineProperty(this, key, {\n\t\t\t\tget() {\n\t\t\t\t\treturn options[key]\n\t\t\t\t},\n\t\t\t\tset(value) {\n\t\t\t\t\toptions[key] = value\n\n\t\t\t\t\tswitch (key) {\n\t\t\t\t\t\tcase \"intensity\":\n\t\t\t\t\t\tcase \"jitter\":\n\t\t\t\t\t\t\tthis.uniforms.get(key).value = value\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t})\n\n\t\t\tthis[key] = options[key]\n\t\t}\n\t}\n\n\tinitialize(renderer, ...args) {\n\t\tsuper.initialize(renderer, ...args)\n\n\t\tnew TextureLoader().load(blueNoiseImage, blueNoiseTexture => {\n\t\t\tblueNoiseTexture.minFilter = NearestFilter\n\t\t\tblueNoiseTexture.magFilter = NearestFilter\n\t\t\tblueNoiseTexture.wrapS = RepeatWrapping\n\t\t\tblueNoiseTexture.wrapT = RepeatWrapping\n\t\t\tblueNoiseTexture.colorSpace = NoColorSpace\n\n\t\t\tthis.uniforms.get(\"blueNoiseTexture\").value = blueNoiseTexture\n\t\t})\n\t}\n\n\tupdate(renderer, inputBuffer, deltaTime) {\n\t\tthis.uniforms.get(\"inputTexture\").value = inputBuffer.texture\n\t\tthis.uniforms.get(\"deltaTime\").value = Math.max(1 / 1000, deltaTime)\n\n\t\tconst frame = renderer.info.render.frame % 4096\n\t\tthis.uniforms.get(\"frame\").value = frame\n\n\t\tthis.uniforms.get(\"resolution\").value.set(window.innerWidth, window.innerHeight)\n\n\t\tconst noiseTexture = this.uniforms.get(\"blueNoiseTexture\").value\n\t\tif (noiseTexture && noiseTexture.source.data) {\n\t\t\tconst { width, height } = noiseTexture.source.data\n\n\t\t\tthis.uniforms.get(\"blueNoiseSize\").value.set(width, height)\n\t\t}\n\t}\n}\n","import { Effect, NormalPass } from \"postprocessing\"\nimport { Color, Uniform } from \"three\"\nimport { PoissonDenoisePass } from \"../denoise/pass/PoissonDenoisePass\"\n// eslint-disable-next-line camelcase\nimport ao_compose from \"./shader/ao_compose.frag\"\nimport { TRAAEffect } from \"../traa/TRAAEffect\"\n\nconst defaultAOOptions = {\n\tresolutionScale: 1,\n\tspp: 8,\n\tdistance: 2,\n\tdistancePower: 1,\n\tpower: 2,\n\tbias: 40,\n\tthickness: 0.075,\n\tcolor: new Color(\"black\"),\n\tuseNormalPass: false,\n\tvelocityDepthNormalPass: null,\n\tnormalTexture: null,\n\t...PoissonDenoisePass.DefaultOptions\n}\n\nclass AOEffect extends Effect {\n\tlastSize = { width: 0, height: 0, resolutionScale: 0 }\n\n\tconstructor(composer, camera, scene, aoPass, options = defaultAOOptions) {\n\t\tsuper(\"AOEffect\", ao_compose, {\n\t\t\ttype: \"FinalAOMaterial\",\n\t\t\tuniforms: new Map([\n\t\t\t\t[\"inputTexture\", new Uniform(null)],\n\t\t\t\t[\"depthTexture\", new Uniform(null)],\n\t\t\t\t[\"power\", new Uniform(0)],\n\t\t\t\t[\"color\", new Uniform(new Color(\"black\"))]\n\t\t\t])\n\t\t})\n\n\t\tthis.composer = composer\n\t\tthis.aoPass = aoPass\n\t\toptions = { ...defaultAOOptions, ...options }\n\n\t\t// set up depth texture\n\t\tif (!composer.depthTexture) composer.createDepthTexture()\n\n\t\tthis.aoPass.fullscreenMaterial.uniforms.depthTexture.value = composer.depthTexture\n\t\tthis.uniforms.get(\"depthTexture\").value = composer.depthTexture\n\n\t\t// set up optional normal texture\n\t\tif (options.useNormalPass || options.normalTexture) {\n\t\t\tif (options.useNormalPass) this.normalPass = new NormalPass(scene, camera)\n\n\t\t\tconst normalTexture = options.normalTexture ?? this.normalPass.texture\n\n\t\t\tthis.aoPass.fullscreenMaterial.uniforms.normalTexture.value = normalTexture\n\t\t\tthis.aoPass.fullscreenMaterial.defines.useNormalTexture = \"\"\n\t\t}\n\n\t\tthis.PoissonDenoisePass = new PoissonDenoisePass(camera, this.aoPass.texture, composer.depthTexture, {\n\t\t\tnormalInRgb: true\n\t\t})\n\n\t\tthis.makeOptionsReactive(options)\n\t}\n\n\tmakeOptionsReactive(options) {\n\t\tfor (const key of Object.keys(options)) {\n\t\t\tObject.defineProperty(this, key, {\n\t\t\t\tget() {\n\t\t\t\t\treturn options[key]\n\t\t\t\t},\n\t\t\t\tset(value) {\n\t\t\t\t\tif (value === null || value === undefined) return\n\n\t\t\t\t\toptions[key] = value\n\n\t\t\t\t\tswitch (key) {\n\t\t\t\t\t\tcase \"spp\":\n\t\t\t\t\t\t\tthis.aoPass.fullscreenMaterial.defines.spp = value.toFixed(0)\n\n\t\t\t\t\t\t\tthis.aoPass.fullscreenMaterial.needsUpdate = true\n\t\t\t\t\t\t\tbreak\n\n\t\t\t\t\t\tcase \"distance\":\n\t\t\t\t\t\t\tthis.aoPass.fullscreenMaterial.uniforms.aoDistance.value = value\n\t\t\t\t\t\t\tbreak\n\n\t\t\t\t\t\tcase \"resolutionScale\":\n\t\t\t\t\t\t\tthis.setSize(this.lastSize.width, this.lastSize.height)\n\t\t\t\t\t\t\tbreak\n\n\t\t\t\t\t\tcase \"power\":\n\t\t\t\t\t\t\tthis.uniforms.get(\"power\").value = value\n\t\t\t\t\t\t\tbreak\n\n\t\t\t\t\t\tcase \"color\":\n\t\t\t\t\t\t\tthis.uniforms.get(\"color\").value.copy(new Color(value))\n\t\t\t\t\t\t\tbreak\n\n\t\t\t\t\t\t// denoiser\n\t\t\t\t\t\tcase \"iterations\":\n\t\t\t\t\t\tcase \"radius\":\n\t\t\t\t\t\tcase \"rings\":\n\t\t\t\t\t\tcase \"samples\":\n\t\t\t\t\t\t\tthis.PoissonDenoisePass[key] = value\n\t\t\t\t\t\t\tbreak\n\n\t\t\t\t\t\tcase \"lumaPhi\":\n\t\t\t\t\t\tcase \"depthPhi\":\n\t\t\t\t\t\tcase \"normalPhi\":\n\t\t\t\t\t\t\tthis.PoissonDenoisePass.fullscreenMaterial.uniforms[key].value = Math.max(value, 0.0001)\n\t\t\t\t\t\t\tbreak\n\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tif (key in this.aoPass.fullscreenMaterial.uniforms) {\n\t\t\t\t\t\t\t\tthis.aoPass.fullscreenMaterial.uniforms[key].value = value\n\t\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tconfigurable: true\n\t\t\t})\n\n\t\t\t// apply all uniforms and defines\n\t\t\tthis[key] = options[key]\n\t\t}\n\t}\n\n\tsetSize(width, height) {\n\t\tif (width === undefined || height === undefined) return\n\t\tif (\n\t\t\twidth === this.lastSize.width &&\n\t\t\theight === this.lastSize.height &&\n\t\t\tthis.resolutionScale === this.lastSize.resolutionScale\n\t\t) {\n\t\t\treturn\n\t\t}\n\n\t\tthis.normalPass?.setSize(width, height)\n\t\tthis.aoPass.setSize(width * this.resolutionScale, height * this.resolutionScale)\n\n\t\tthis.PoissonDenoisePass.setSize(width, height)\n\n\t\tthis.lastSize = {\n\t\t\twidth,\n\t\t\theight,\n\t\t\tresolutionScale: this.resolutionScale\n\t\t}\n\t}\n\n\tget texture() {\n\t\tif (this.iterations > 0) {\n\t\t\treturn this.PoissonDenoisePass.texture\n\t\t}\n\n\t\treturn this.aoPass.texture\n\t}\n\n\tupdate(renderer) {\n\t\t// check if TRAA is being used so we can animate the noise\n\t\tconst hasTRAA = this.composer.passes.some(pass => {\n\t\t\treturn pass.enabled && !pass.skipRendering && pass.effects?.some(effect => effect instanceof TRAAEffect)\n\t\t})\n\n\t\t// set animated noise depending on TRAA\n\t\tif (hasTRAA && !(\"animatedNoise\" in this.aoPass.fullscreenMaterial.defines)) {\n\t\t\tthis.aoPass.fullscreenMaterial.defines.animatedNoise = \"\"\n\t\t\tthis.aoPass.fullscreenMaterial.needsUpdate = true\n\t\t} else if (!hasTRAA && \"animatedNoise\" in this.aoPass.fullscreenMaterial.defines) {\n\t\t\tdelete this.aoPass.fullscreenMaterial.defines.animatedNoise\n\t\t\tthis.aoPass.fullscreenMaterial.needsUpdate = true\n\t\t}\n\n\t\tthis.uniforms.get(\"inputTexture\").value = this.texture\n\n\t\tthis.normalPass?.render(renderer)\n\t\tthis.aoPass.render(renderer)\n\n\t\tthis.PoissonDenoisePass.render(renderer)\n\t}\n}\n\nAOEffect.DefaultOptions = defaultAOOptions\n\nexport { AOEffect }\n","import { Plugin, Viewer } from \"@xviewer.js/core\";\nimport { EffectComposer, EffectPass, Pass, RenderPass } from \"postprocessing\";\nimport { VelocityDepthNormalPass } from \"./realism-effects\";\nimport { HalfFloatType } from \"three\";\n\nexport class EffectComposerPlugin extends Plugin {\n\n static Instance(viewer: Viewer) {\n return viewer.getPlugin(EffectComposerPlugin, true);\n }\n\n get multisampling() {\n return this._composer.multisampling;\n }\n set multisampling(v: number) {\n this._composer.multisampling = v;\n }\n\n private _composer: EffectComposer;\n private _renderPass: RenderPass;\n private _outputPass: EffectPass;\n\n constructor(props: ConstructorParameters<typeof EffectComposer>[1]) {\n super();\n this.install = () => {\n const { renderer, scene, camera } = this.viewer;\n\n this._renderPass = new RenderPass(scene, camera);\n this._outputPass = new EffectPass(camera);\n\n this._composer = new EffectComposer(renderer, Object.assign({ frameBufferType: HalfFloatType }, props));\n this._composer.addPass(this._renderPass);\n this._composer.addPass(this._outputPass);\n\n this.viewer._onResize = (width: number, height: number) => this._composer.setSize(width, height);\n this.viewer._onRender = (dt: number) => this._composer.render(dt);\n }\n this.uninstall = () => {\n this._composer.dispose();\n }\n }\n\n getPass<T extends Pass>(constructor: (new (...args) => T) | Function) {\n return this._composer.passes.find(v => v.constructor === constructor) as T;\n }\n\n addPass<T extends Pass>(pass: T) {\n this._composer.addPass(pass, this._composer.passes.length - 1);\n this._checkOutputPass();\n return pass;\n }\n\n removePass(pass: Pass) {\n this._composer.removePass(pass);\n this._checkOutputPass();\n }\n\n activePass(pass: Pass, v: boolean) {\n pass.enabled = v;\n this._checkOutputPass();\n return pass;\n }\n\n getVelocityDepthNormalPass(autoAdd: boolean = false) {\n let vdnPass = this.getPass(VelocityDepthNormalPass);\n if (vdnPass === undefined && autoAdd) {\n vdnPass = this.addPass(new VelocityDepthNormalPass(this.viewer.scene, this.viewer.camera));\n }\n return vdnPass;\n }\n\n private _checkOutputPass() {\n const vdnPass = this.getVelocityDepthNormalPass();\n const count = this._composer.passes.filter(v => v.enabled && v !== vdnPass && v !== this._outputPass).length;\n this._outputPass.enabled = this._composer.multisampling > 0 && count === 1;\n this._setRenderToScreen();\n }\n\n private _setRenderToScreen() {\n const vdnPass = this.getVelocityDepthNormalPass();\n const passes = this._composer.passes;\n\n for (let k = 0, i = passes.length; i--;) {\n let pass = passes[i];\n if (pass.enabled && pass !== vdnPass && k === 0) {\n k = i;\n }\n pass.renderToScreen = k === i;\n }\n }\n\n}","/******************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n/* global Reflect, Promise, SuppressedError, Symbol */\n\nvar extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n};\n\nexport function __extends(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nexport var __assign = function() {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n return t;\n }\n return __assign.apply(this, arguments);\n}\n\nexport function __rest(s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n}\n\nexport function __decorate(decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\n\nexport function __param(paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n}\n\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\n var _, done = false;\n for (var i = decorators.length - 1; i >= 0; i--) {\n var context = {};\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\n if (kind === \"accessor\") {\n if (result === void 0) continue;\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\n if (_ = accept(result.get)) descriptor.get = _;\n if (_ = accept(result.set)) descriptor.set = _;\n if (_ = accept(result.init)) initializers.unshift(_);\n }\n else if (_ = accept(result)) {\n if (kind === \"field\") initializers.unshift(_);\n else descriptor[key] = _;\n }\n }\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\n done = true;\n};\n\nexport function __runInitializers(thisArg, initializers, value) {\n var useValue = arguments.length > 2;\n for (var i = 0; i < initializers.length; i++) {\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\n }\n return useValue ? value : void 0;\n};\n\nexport function __propKey(x) {\n return typeof x === \"symbol\" ? x : \"\".concat(x);\n};\n\nexport function __setFunctionName(f, name, prefix) {\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\n};\n\nexport function __metadata(metadataKey, metadataValue) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\n}\n\nexport function __awaiter(thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n}\n\nexport function __generator(thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n}\n\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n});\n\nexport function __exportStar(m, o) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\n}\n\nexport function __values(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\n\nexport function __read(o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n}\n\n/** @deprecated */\nexport function __spread() {\n for (var ar = [], i = 0; i < arguments.length; i++)\n ar = ar.concat(__read(arguments[i]));\n return ar;\n}\n\n/** @deprecated */\nexport function __spreadArrays() {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n}\n\nexport function __spreadArray(to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n}\n\nexport function __await(v) {\n return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\n\nexport function __asyncGenerator(thisArg, _arguments, generator) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\n function fulfill(value) { resume(\"next\", value); }\n function reject(value) { resume(\"throw\", value); }\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\n}\n\nexport function __asyncDelegator(o) {\n var i, p;\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\n}\n\nexport function __asyncValues(o) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var m = o[Symbol.asyncIterator], i;\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\n}\n\nexport function __makeTemplateObject(cooked, raw) {\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n return cooked;\n};\n\nvar __setModuleDefault = Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n};\n\nexport function __importStar(mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n}\n\nexport function __importDefault(mod) {\n return (mod && mod.__esModule) ? mod : { default: mod };\n}\n\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\n\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n}\n\nexport function __classPrivateFieldIn(state, receiver) {\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\n}\n\nexport function __addDisposableResource(env, value, async) {\n if (value !== null && value !== void 0) {\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\n var dispose;\n if (async) {\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\n dispose = value[Symbol.asyncDispose];\n }\n if (dispose === void 0) {\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\n dispose = value[Symbol.dispose];\n }\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\n env.stack.push({ value: value, dispose: dispose, async: async });\n }\n else if (async) {\n env.stack.push({ async: true });\n }\n return value;\n}\n\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n var e = new Error(message);\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n};\n\nexport function __disposeResources(env) {\n function fail(e) {\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\n env.hasError = true;\n }\n function next() {\n while (env.stack.length) {\n var rec = env.stack.pop();\n try {\n var result = rec.dispose && rec.dispose.call(rec.value);\n if (rec.async) return Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\n }\n catch (e) {\n fail(e);\n }\n }\n if (env.hasError) throw env.error;\n }\n return next();\n}\n\nexport default {\n __extends,\n __assign,\n __rest,\n __decorate,\n __param,\n __metadata,\n __awaiter,\n __generator,\n __createBinding,\n __exportStar,\n __values,\n __read,\n __spread,\n __spreadArrays,\n __spreadArray,\n __await,\n __asyncGenerator,\n __asyncDelegator,\n __asyncValues,\n __makeTemplateObject,\n __importStar,\n __importDefault,\n __classPrivateFieldGet,\n __classPrivateFieldSet,\n __classPrivateFieldIn,\n __addDisposableResource,\n __disposeResources,\n};\n","import { Plugin, property } from \"@xviewer.js/core\";\nimport { Pass } from \"postprocessing\";\nimport { EffectComposerPlugin } from \"./EffectComposerPlugin\";\n\nexport class PassPlugin<T extends Pass> extends Plugin {\n\n @property\n get enable() {\n return this.pass.enabled;\n }\n set enable(v: boolean) {\n this.setEnable(v);\n }\n\n get composer() {\n return EffectComposerPlugin.Instance(this.viewer);\n }\n\n pass: T;\n\n setEnable(v: boolean) {\n this.composer.activePass(this.pass, v);\n }\n\n}","import { property } from \"@xviewer.js/core\";\nimport { EffectPass, ToneMappingEffect, ToneMappingMode } from \"postprocessing\";\nimport { PassPlugin } from \"./PassPlugin\";\n\nexport class ToneMappingPlugin extends PassPlugin<EffectPass> {\n\n @property({ value: ToneMappingMode })\n get mode() {\n return this.effect.mode;\n }\n\n set mode(v: ToneMappingMode) {\n this.effect.mode = v;\n }\n\n effect: ToneMappingEffect;\n\n constructor(props: ConstructorParameters<typeof ToneMappingEffect>[0]) {\n super();\n this.install = () => {\n this.effect = new ToneMappingEffect(props);\n this.pass = this.composer.addPass(new EffectPass(this.viewer.camera, this.effect));\n }\n this.uninstall = () => {\n this.composer.removePass(this.pass);\n }\n }\n}","import { EffectPass } from \"postprocessing\";\nimport { MotionBlurEffect } from \"./realism-effects\";\nimport { PassPlugin } from \"./PassPlugin\";\n\nexport class MotionBlurPlugin extends PassPlugin<EffectPass> {\n\n constructor() {\n super();\n this.install = () => {\n const effect = new MotionBlurEffect(this.composer.getVelocityDepthNormalPass(true));\n this.pass = this.composer.addPass(new EffectPass(this.viewer.camera, effect));\n }\n this.uninstall = () => {\n this.composer.removePass(this.pass);\n }\n }\n\n}","import { property } from \"@xviewer.js/core\";\nimport { BlendFunction, BloomEffect, EffectPass } from \"postprocessing\";\nimport { PassPlugin } from \"./PassPlugin\";\n\nexport class BloomPlugin extends PassPlugin<EffectPass> {\n\n @property({ min: 0, max: 2, step: 0.01 })\n get intensity() {\n return this.effect.intensity;\n }\n set intensity(v: number) {\n this.effect.intensity = v;\n }\n\n @property({ min: 0, max: 10, step: 0.01 })\n get luminanceThreshold() {\n return this.effect.luminanceMaterial.threshold;\n }\n set luminanceThreshold(v: number) {\n this.effect.luminanceMaterial.threshold = v;\n }\n\n @property({ min: 0, max: 10, step: 0.01 })\n get luminanceSmoothing() {\n return this.effect.luminanceMaterial.smoothing;\n }\n set luminanceSmoothing(v: number) {\n this.effect.luminanceMaterial.smoothing = v;\n }\n\n effect: BloomEffect;\n\n constructor(props?: ConstructorParameters<typeof BloomEffect>[0]) {\n super();\n this.install = () => {\n this.effect = new BloomEffect({ blendFunction: BlendFunction.ADD, ...props });\n this.pass = this.composer.addPass(new EffectPass(this.viewer.camera, this.effect));\n }\n this.uninstall = () => {\n this.composer.removePass(this.pass);\n }\n }\n\n}","import { EffectPass, FXAAEffect } from \"postprocessing\";\nimport { PassPlugin } from \"./PassPlugin\";\n\nexport class FXAAPlugin extends PassPlugin<EffectPass> {\n\n constructor() {\n super();\n this.install = () => {\n this.pass = this.composer.addPass(new EffectPass(this.viewer.camera, new FXAAEffect()));\n }\n this.uninstall = () => {\n this.composer.removePass(this.pass);\n }\n }\n}","import { property } from \"@xviewer.js/core\";\nimport { EdgeDetectionMode, EffectPass, PredicationMode, SMAAEffect, SMAAPreset } from \"postprocessing\";\nimport { PassPlugin } from \"./PassPlugin\";\n\nexport class SMAAPlugin extends PassPlugin<EffectPass> {\n private _preset: SMAAPreset = SMAAPreset.MEDIUM;\n\n @property({ value: SMAAPreset })\n get preset() {\n return this._preset;\n }\n set preset(v: SMAAPreset) {\n if (this._preset !==v) {\n this._preset = v;\n this.effect.applyPreset(v);\n }\n }\n\n @property({ value: EdgeDetectionMode })\n get edgeDetectionMode() {\n return this.effect.edgeDetectionMaterial.edgeDetectionMode;\n }\n set edgeDetectionMode(v: EdgeDetectionMode) {\n this.effect.edgeDetectionMaterial.edgeDetectionMode = v;\n }\n\n @property({ value: PredicationMode })\n get predicationMode() {\n return this.effect.edgeDetectionMaterial.predicationMode;\n }\n set predicationMode(v: PredicationMode) {\n this.effect.edgeDetectionMaterial.predicationMode = v;\n }\n\n effect: SMAAEffect;\n\n constructor(props: ConstructorParameters<typeof SMAAEffect>[0] = {}) {\n super();\n this.install = () => {\n this.effect = new SMAAEffect(props);\n this.pass = this.composer.addPass(new EffectPass(this.viewer.camera, this.effect));\n }\n this.uninstall = () => {\n this.composer.removePass(this.pass);\n }\n }\n}","import { Plugin, property } from \"@xviewer.js/core\";\nimport { EffectComposerPlugin } from \"./EffectComposerPlugin\";\n\nexport class MSAAPlugin extends Plugin {\n\n @property\n get enable() {\n return this.composer.multisampling > 0;\n }\n set enable(v: boolean) {\n this.composer.multisampling = v ? this._maxSamples : 0;\n }\n\n get composer() {\n return EffectComposerPlugin.Instance(this.viewer);\n }\n\n private _maxSamples: number = 4;\n\n constructor() {\n super();\n this.install = () => {\n const { renderer } = this.viewer;\n this._maxSamples = Math.min(4, renderer.capabilities.maxSamples);\n this.composer.multisampling = this._maxSamples;\n }\n this.uninstall = () => {\n this.composer.multisampling = 0;\n }\n }\n}","import { EffectPass } from \"postprocessing\";\nimport { TRAAEffect } from \"./realism-effects\";\nimport { PassPlugin } from \"./PassPlugin\";\n\nexport class TRAAPlugin extends PassPlugin<EffectPass> {\n private _effect: TRAAEffect;\n\n constructor(props: {\n dilation?: boolean,\n fullAccumulate?: boolean,\n neighborhoodClamp?: boolean,\n neighborhoodClampRadius?: number,\n neighborhoodClampIntensity?: number,\n } = {}) {\n super();\n this.install = () => {\n const { scene, camera } = this.viewer;\n this._effect = new TRAAEffect(scene, camera, this.composer.getVelocityDepthNormalPass(true), props);\n this.pass = this.composer.addPass(new EffectPass(camera, this._effect));\n }\n this.uninstall = () => {\n this.composer.removePass(this.pass);\n }\n }\n \n}"],"names":["g","a1","a2","base","generateR2","count","points","n","push","r2Sequence","map","a","b","jitter","width","height","camera","frame","jitterScale","x","y","length","setViewOffset","getMaxMipLevel","texture","image","Math","floor","log2","max","createGlobalDisableIblRadianceUniform","ShaderChunk","envmap_physical_pars_fragment","includes","replace","ShaderLib","physical","uniforms","globalIblRadianceDisabledUniform","value","iblRadianceDisabled","clone","UniformsUtils","result","unrollLoopPattern","unrollLoops","string","loopReplacer","match","start","end","snippet","i","parseInt","TemporalReprojectMaterial","ShaderMaterial","constructor","textureCount","finalFragmentShader","fragmentShader","reproject","gbuffer_packing","definitions","replaceAll","matches2","matchAll","key","number","matches3","type","inputTexture","Uniform","velocityTexture","depthTexture","lastVelocityTexture","neighborhoodClampIntensity","fullAccumulate","keepData","delta","invTexSize","Vector2","projectionMatrix","Matrix4","projectionMatrixInverse","cameraMatrixWorld","viewMatrix","prevViewMatrix","prevCameraMatrixWorld","prevProjectionMatrix","prevProjectionMatrixInverse","cameraPos","Vector3","prevCameraPos","cameraNear","cameraFar","maxBlend","vertexShader","blending","NoBlending","depthWrite","depthTest","toneMapped","glslVersion","GLSL3","isGroundProjectedEnv","c","material","isChildMaterialRenderable","visible","transparent","opacity","didCameraMove","lastCameraPosition","lastCameraQuaternion","position","distanceToSquared","quaternion","angleTo","getVisibleChildren","object","queue","objects","mesh","shift","children","defaultTemporalReprojectPassOptions","dilation","neighborhoodClamp","neighborhoodClampRadius","logTransform","depthDistance","worldDistance","reprojectSpecular","renderTarget","copyTextures","confidencePower","inputType","tmpProjectionMatrix","tmpProjectionMatrixInverse","tmpVec2","TemporalReprojectPass","Pass","setInputTexture","fullscreenMaterial","dispose","setSize","set","framebufferTexture","FramebufferTexture","format","minFilter","LinearFilter","magFilter","needsUpdate","accumulatedTexture","overrideAccumulatedTextures","reset","render","renderer","min","clock","getDelta","copy","_camera","view","enabled","updateProjectionMatrix","velocityDepthNormalPass","options","lastCameraTransform","near","far","setRenderTarget","scene","copyFramebufferToTexture","matrixWorld","matrixWorldInverse","unjitter","clearViewOffset","needsSwap","Clock","Quaternion","_scene","WebGLRenderTarget","NearestFilter","depthBuffer","textures","forEach","index","name","defines","isPerspectiveCamera","PERSPECTIVE_CAMERA","toPrecision","indexOf","opt","Array","fill","join","TRAAEffect","Effect","temporalReprojectPass","update","inputBuffer","get","unjitteredProjectionMatrix","traa_compose","Map","DefaultOptions","CubeToEquirectEnvPass","generateEquirectEnvMap","cubeMap","maxWidth","w","source","data","widthEquirect","ceil","heightEquirect","pixelBuffer","Float32Array","readRenderTargetPixels","equirectEnvMap","DataTexture","RGBAFormat","FloatType","wrapS","ClampToEdgeWrapping","wrapT","LinearMipMapLinearFilter","mapping","EquirectangularReflectionMapping","basicVertexShader","blueNoiseSize","highestSignedInt","blueNoiseTexture","TextureLoader","load","blueNoiseImage","RepeatWrapping","colorSpace","NoColorSpace","setupBlueNoise","blueNoiseIndex","startIndex","random","v","blue_noise","useBlueNoise","GBufferMaterial","MeshPhysicalMaterial","onBeforeCompile","shader","resolution","cameraNotMovedFrames","gBufferMaterial","createGBufferMaterial","originalMaterial","copyAllPropsToGBufferMaterial","props","Object","keys","filter","startsWith","undefined","propsPrimitive","copyPropsToGBufferMaterial","prop","backgroundColor","Color","GBufferPass","initGBufferRenderTarget","DepthTexture","setGBufferMaterialInScene","visibleMeshes","cameraMoved","cachedOriginalMaterial","cachedMaterials","unsetGBufferMaterialInScene","background","WeakMap","workerOnMessage","isFloatType","flipY","_tables","_generateTables","buffer","ArrayBuffer","floatView","uint32View","Uint32Array","baseTable","shiftTable","e","mantissaTable","exponentTable","offsetTable","m","fromHalfFloat","val","colorToLuminance","r","binarySearchFindClosestIndexOf","array","targetValue","offset","lower","upper","mid","gatherData","marginalDataArray","conditionalDataArray","h","newY","ogIndex","newIndex","pdfConditional","cdfConditional","pdfMarginal","cdfMarginal","totalSumValue","cumulativeWeightMarginal","cumulativeRowWeight","weight","l","dist","row","col","newData","postMessage","blob","Blob","workerUrl","URL","createObjectURL","EquirectHdrInfoUniform","marginalWeights","conditionalWeights","updateFrom","size","Promise","resolve","worker","terminate","Worker","onmessage","totalSumWhole","totalSumDecimal","whiteTex","generateMipmaps","RedFormat","SSGIMaterial","gBufferTexture","directLightTexture","nearMulFar","nearMinusFar","farMinusNear","rayDistance","thickness","envBlur","maxEnvMapMipLevel","envMapInfo","envMapPosition","envMapSize","blueNoiseRepeat","steps","refineSteps","CUBEUV_TEXEL_WIDTH","CUBEUV_TEXEL_HEIGHT","CUBEUV_MAX_MIP","vWorldPosition","ssgi_utils","blackColor","SSGIPass","ssgiEffect","resolutionScale","gBufferPass","mask","layers","hasSelection","selection","layer","denoiser","bgColor","defaultFragmentShader","mode","prev_skinning_pars_vertex","velocity_vertex_pars","skinning_pars_vertex","velocity_vertex_main","skinning_vertex","skinbase_vertex","velocity_fragment_pars","velocity_fragment_main","velocity_uniforms","prevVelocityMatrix","velocityMatrix","prevBoneTexture","boneTexture","normalMap","normalScale","uvTransform","Matrix3","VelocityDepthNormalMaterial","materialProps","copyNecessaryProps","newMaterial","keepMaterialMapUpdated","mrtMaterial","define","useKey","zeroVec2","saveBoneTexture","floatType","skeleton","boneMatrices","slice","updateVelocityDepthNormalMaterialBeforeRender","USE_SKINNING","BONE_TEXTURE","modelViewMatrix","multiplyMatrices","updateVelocityDepthNormalMaterialAfterRender","VelocityDepthNormalPass","setVelocityDepthNormalMaterialInScene","velocityDepthNormalMaterial","_floatType","roughnessMap","metalnessMap","matrix","unsetVelocityDepthNormalMaterialInScene","updateMatrixWorld","HalfFloatType","DenoiserComposePass","setSceneTexture","sceneTexture","diffuseGiTexture","specularGiTexture","ssgi_poisson_compose_functions","defaultPoissonBlurOptions","iterations","radius","phi","lumaPhi","depthPhi","normalPhi","PoissonDenoisePass","renderTargetA","renderTargetB","setGBufferPass","GBUFFER_TEXTURE","normalTexture","setnNormalTexture","setDepthTexture","horizontal","inputRenderTarget","isTextureSpecular","inputTexture2","roughnessPhi","specularPhi","renderTargetOptions","WebGLMultipleRenderTargets","defaultDenosierOptions","denoiseMode","Denoiser","denoiserComposePass","denoisePass","isOwnVelocityDepthNormalPass","denoise","composerInputTextures","GBufferDebugPass","defaultSSGIOptions","distance","denoiseIterations","denoiseKernel","denoiseDiffuse","denoiseSpecular","importanceSampling","missedRays","outputTexture","RenderPass","prototype","SSGIEffect","updateUsingRenderPass","isUsingRenderPass","ssgiPass","useDirectLight","makeOptionsReactive","ssgiPassFullscreenMaterialUniforms","ssgiPassFullscreenMaterialUniformsKeys","defineProperty","lastSize","gBufferDebugPass","modes","initialize","args","force","sceneRenderTarget","cubeToEquirectEnvPass","keepEnvMapUpdated","ssgiMaterial","environment","mapUuid","uuid","isCubeTexture","console","warn","USE_ENVMAP","then","sceneBuffer","hideMeshes","isScene","renderPass","fog","color","density","cancelAnimationFrame","rAF2","rAF","usingRenderPassRAF","requestAnimationFrame","wasUsingRenderPass","composer","ssgi_compose","fog_pars_fragment","fog_fragment","isFogExp2","Selection","preset","SRGBColorSpace","renderToScreen","th","ssgiRenderPass","call","defaultOptions","intensity","samples","MotionBlurEffect","deltaTime","info","window","innerWidth","innerHeight","noiseTexture","velocityPass","motion_blur","formattedUniforms","toFixed","pointsIndex","defaultAOOptions","spp","distancePower","power","bias","useNormalPass","AOEffect","aoPass","aoDistance","configurable","normalPass","hasTRAA","passes","some","pass","skipRendering","effects","effect","animatedNoise","ao_compose","createDepthTexture","NormalPass","useNormalTexture","normalInRgb","EffectComposerPlugin","Plugin","Instance","viewer","getPlugin","multisampling","_composer","getPass","find","addPass","_checkOutputPass","removePass","activePass","getVelocityDepthNormalPass","autoAdd","vdnPass","_outputPass","_setRenderToScreen","k","install","_renderPass","EffectPass","EffectComposer","assign","frameBufferType","_onResize","_onRender","dt","uninstall","PassPlugin","enable","setEnable","property","ToneMappingPlugin","ToneMappingEffect","ToneMappingMode","MotionBlurPlugin","BloomPlugin","luminanceThreshold","luminanceMaterial","threshold","luminanceSmoothing","smoothing","BloomEffect","blendFunction","BlendFunction","ADD","step","FXAAPlugin","FXAAEffect","SMAAPlugin","_preset","applyPreset","edgeDetectionMode","edgeDetectionMaterial","predicationMode","SMAAPreset","MEDIUM","SMAAEffect","EdgeDetectionMode","PredicationMode","MSAAPlugin","_maxSamples","capabilities","maxSamples","TRAAPlugin","_effect"],"mappings":"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","x_google_ignoreList":[0,28]}
|
|
1
|
+
{"version":3,"file":"main.js","sources":["../src/EffectComposerPlugin.ts","../src/PassPlugin.ts","../src/ToneMappingPlugin.ts","../src/BloomPlugin.ts","../src/FXAAPlugin.ts","../src/SMAAPlugin.ts","../src/MSAAPlugin.ts","../src/realism-effects/temporal-reproject/utils/QuasirandomGenerator.js","../src/realism-effects/taa/TAAUtils.js","../src/realism-effects/utils/ShaderUtils.js","../src/realism-effects/temporal-reproject/material/TemporalReprojectMaterial.js","../src/realism-effects/utils/SceneUtils.js","../src/realism-effects/temporal-reproject/TemporalReprojectPass.js","../src/realism-effects/traa/TRAAEffect.js","../src/realism-effects/temporal-reproject/material/VelocityDepthNormalMaterial.js","../src/realism-effects/utils/GBufferUtils.js","../src/realism-effects/temporal-reproject/pass/VelocityDepthNormalPass.js","../src/getVelocityDepthNormalPass.ts","../src/TRAAPlugin.ts"],"sourcesContent":["import { Plugin, Viewer } from \"@xviewer.js/core\";\nimport { EffectComposer, EffectPass, Pass, RenderPass } from \"postprocessing\";\nimport { HalfFloatType } from \"three\";\n\nexport class EffectComposerPlugin extends Plugin {\n type: string = \"EffectComposerPlugin\"\n\n static Instance(viewer: Viewer) {\n return viewer.getPlugin(EffectComposerPlugin, true);\n }\n\n get multisampling() {\n return this._composer.multisampling;\n }\n set multisampling(v: number) {\n this._composer.multisampling = v;\n }\n\n private _composer: EffectComposer;\n private _renderPass: RenderPass;\n private _outputPass: EffectPass;\n\n constructor(props: ConstructorParameters<typeof EffectComposer>[1]) {\n super();\n this.install = () => {\n const { renderer, scene, camera } = this.viewer;\n\n this._renderPass = new RenderPass(scene, camera);\n this._outputPass = new EffectPass(camera);\n\n this._composer = new EffectComposer(renderer, Object.assign({ frameBufferType: HalfFloatType }, props));\n this._composer.addPass(this._renderPass);\n this._composer.addPass(this._outputPass);\n\n this.viewer._onResize = (width: number, height: number) => this._composer.setSize(width, height);\n this.viewer._onRender = (dt: number) => this._composer.render(dt);\n }\n this.uninstall = () => {\n this._composer.dispose();\n }\n }\n\n getPass<T extends Pass>(constructor: (new (...args) => T) | Function) {\n return this._composer.passes.find(v => v.constructor === constructor) as T;\n }\n\n addPass<T extends Pass>(pass: T) {\n this._composer.addPass(pass, this._composer.passes.length - 1);\n this._checkOutputPass();\n return pass;\n }\n\n removePass(pass: Pass) {\n this._composer.removePass(pass);\n this._checkOutputPass();\n }\n\n activePass(pass: Pass, v: boolean) {\n pass.enabled = v;\n this._checkOutputPass();\n return pass;\n }\n\n private _checkOutputPass() {\n const count = this._composer.passes.filter(v => v.enabled && v.name !== \"VelocityDepthNormalPass\" && v !== this._outputPass).length;\n this._outputPass.enabled = this._composer.multisampling > 0 && count === 1;\n this._setRenderToScreen();\n }\n\n private _setRenderToScreen() {\n const passes = this._composer.passes;\n for (let k = 0, i = passes.length; i--;) {\n let pass = passes[i];\n if (pass.enabled && pass.name !== \"VelocityDepthNormalPass\" && k === 0) {\n k = i;\n }\n pass.renderToScreen = k === i;\n }\n }\n\n}","import { Plugin } from \"@xviewer.js/core\";\nimport { Pass } from \"postprocessing\";\nimport { EffectComposerPlugin } from \"./EffectComposerPlugin\";\n\nexport class PassPlugin<T extends Pass> extends Plugin {\n\n get enable() {\n return this.pass.enabled;\n }\n set enable(v: boolean) {\n this.setEnable(v);\n }\n\n get composer() {\n return EffectComposerPlugin.Instance(this.viewer);\n }\n\n pass: T;\n\n setEnable(v: boolean) {\n this.composer.activePass(this.pass, v);\n }\n\n}","import { PropertyManager } from \"@xviewer.js/core\";\nimport { EffectPass, ToneMappingEffect, ToneMappingMode } from \"postprocessing\";\nimport { PassPlugin } from \"./PassPlugin\";\n\nexport class ToneMappingPlugin extends PassPlugin<EffectPass> {\n type: string = \"ToneMappingPlugin\"\n\n get mode() {\n return this.effect.mode;\n }\n\n set mode(v: ToneMappingMode) {\n this.effect.mode = v;\n }\n\n effect: ToneMappingEffect;\n\n constructor(props: ConstructorParameters<typeof ToneMappingEffect>[0]) {\n super();\n this.install = () => {\n this.effect = new ToneMappingEffect(props);\n this.pass = this.composer.addPass(new EffectPass(this.viewer.camera, this.effect));\n }\n this.uninstall = () => {\n this.composer.removePass(this.pass);\n }\n }\n}\n\nPropertyManager._getClassProperties(\"ToneMappingPlugin\")\n .property(\"enable\")\n .property(\"mode\", { value: ToneMappingMode })","import { BlendFunction, BloomEffect, EffectPass } from \"postprocessing\";\nimport { PassPlugin } from \"./PassPlugin\";\nimport { PropertyManager } from \"@xviewer.js/core\";\n\nexport class BloomPlugin extends PassPlugin<EffectPass> {\n type: string = \"BloomPlugin\";\n\n get intensity() {\n return this.effect.intensity;\n }\n set intensity(v: number) {\n this.effect.intensity = v;\n }\n\n // @property({ min: 0, max: 10, step: 0.01 })\n get luminanceThreshold() {\n return this.effect.luminanceMaterial.threshold;\n }\n set luminanceThreshold(v: number) {\n this.effect.luminanceMaterial.threshold = v;\n }\n\n // @property({ min: 0, max: 10, step: 0.01 })\n get luminanceSmoothing() {\n return this.effect.luminanceMaterial.smoothing;\n }\n set luminanceSmoothing(v: number) {\n this.effect.luminanceMaterial.smoothing = v;\n }\n\n effect: BloomEffect;\n\n constructor(props?: ConstructorParameters<typeof BloomEffect>[0]) {\n super();\n this.install = () => {\n this.effect = new BloomEffect({ blendFunction: BlendFunction.ADD, ...props });\n this.pass = this.composer.addPass(new EffectPass(this.viewer.camera, this.effect));\n }\n this.uninstall = () => {\n this.composer.removePass(this.pass);\n }\n }\n\n}\n\nPropertyManager._getClassProperties(\"BloomPlugin\")\n .property(\"enable\")\n .property(\"intensity\", { min: 0, max: 2, step: 0.01 })\n .property(\"luminanceThreshold\", { min: 0, max: 10, step: 0.01 })\n .property(\"luminanceSmoothing\", { min: 0, max: 10, step: 0.01 })","import { EffectPass, FXAAEffect } from \"postprocessing\";\nimport { PassPlugin } from \"./PassPlugin\";\nimport { PropertyManager } from \"@xviewer.js/core\";\n\nexport class FXAAPlugin extends PassPlugin<EffectPass> {\n type: string = \"FXAAPlugin\";\n\n constructor() {\n super();\n this.install = () => {\n this.pass = this.composer.addPass(new EffectPass(this.viewer.camera, new FXAAEffect()));\n }\n this.uninstall = () => {\n this.composer.removePass(this.pass);\n }\n }\n}\n\n\nPropertyManager._getClassProperties(\"FXAAPlugin\")\n .property(\"enable\")\n\n","import { EdgeDetectionMode, EffectPass, PredicationMode, SMAAEffect, SMAAPreset } from \"postprocessing\";\nimport { PassPlugin } from \"./PassPlugin\";\nimport { PropertyManager } from \"@xviewer.js/core\";\n\nexport class SMAAPlugin extends PassPlugin<EffectPass> {\n type: string = \"SMAAPlugin\"\n\n private _preset: SMAAPreset = SMAAPreset.MEDIUM;\n\n // @property({ value: SMAAPreset })\n get preset() {\n return this._preset;\n }\n set preset(v: SMAAPreset) {\n if (this._preset !== v) {\n this._preset = v;\n this.effect.applyPreset(v);\n }\n }\n\n // @property({ value: EdgeDetectionMode })\n get edgeDetectionMode() {\n return this.effect.edgeDetectionMaterial.edgeDetectionMode;\n }\n set edgeDetectionMode(v: EdgeDetectionMode) {\n this.effect.edgeDetectionMaterial.edgeDetectionMode = v;\n }\n\n // @property({ value: PredicationMode })\n get predicationMode() {\n return this.effect.edgeDetectionMaterial.predicationMode;\n }\n set predicationMode(v: PredicationMode) {\n this.effect.edgeDetectionMaterial.predicationMode = v;\n }\n\n effect: SMAAEffect;\n\n constructor(props: ConstructorParameters<typeof SMAAEffect>[0] = {}) {\n super();\n this.install = () => {\n this.effect = new SMAAEffect(props);\n this.pass = this.composer.addPass(new EffectPass(this.viewer.camera, this.effect));\n }\n this.uninstall = () => {\n this.composer.removePass(this.pass);\n }\n }\n}\n\nPropertyManager._getClassProperties(\"SMAAPlugin\")\n .property(\"enable\")\n .property(\"preset\", { value: SMAAPreset })\n .property(\"edgeDetectionMode\", { value: EdgeDetectionMode })\n .property(\"predicationMode\", { value: PredicationMode })\n","import { Plugin, PropertyManager } from \"@xviewer.js/core\";\nimport { EffectComposerPlugin } from \"./EffectComposerPlugin\";\n\nexport class MSAAPlugin extends Plugin {\n type: string = \"MSAAPlugin\"\n\n get enable() {\n return this.composer.multisampling > 0;\n }\n set enable(v: boolean) {\n this.composer.multisampling = v ? this._maxSamples : 0;\n }\n\n get composer() {\n return EffectComposerPlugin.Instance(this.viewer);\n }\n\n private _maxSamples: number = 4;\n\n constructor() {\n super();\n this.install = () => {\n const { renderer } = this.viewer;\n this._maxSamples = Math.min(4, renderer.capabilities.maxSamples);\n this.composer.multisampling = this._maxSamples;\n }\n this.uninstall = () => {\n this.composer.multisampling = 0;\n }\n }\n}\n\nPropertyManager._getClassProperties(\"MSAAPlugin\")\n .property(\"enable\")","// from: https://news.ycombinator.com/item?id=17876741\n// reference: http://extremelearning.com.au/unreasonable-effectiveness-of-quasirandom-sequences/\n\n// eslint-disable-next-line no-unused-vars\nconst harmoniousNumber = (n = 2, value = 0, depth = 100) => {\n\tif (depth === 0) return value\n\n\treturn (1 + harmoniousNumber(n, value, depth - 1)) ** (1 / n)\n}\n\nconst g = 1.32471795724474602596090885447809 // Plastic number\nconst a1 = 1.0 / g\nconst a2 = 1.0 / (g * g)\nconst base = 1.1127756842787055 // harmoniousNumber(7), yields better coverage compared to using 0.5\n\nexport const generateR2 = count => {\n\tconst points = []\n\n\tfor (let n = 0; n < count; n++) {\n\t\tpoints.push([(base + a1 * n) % 1, (base + a2 * n) % 1])\n\t}\n\n\treturn points\n}\n\nexport const getR2Index = n => {\n\treturn [(base + a1 * n) % 1, (base + a2 * n) % 1]\n}\n\nexport const getR3Index = n => {\n\tconst g = 1.2207440846057596\n\tconst a1 = 1.0 / g\n\tconst a2 = 1.0 / (g * g)\n\tconst a3 = 1.0 / (g * g * g)\n\n\treturn [(base + a1 * n) % 1, (base + a2 * n) % 1, (base + a3 * n) % 1]\n}\n\nexport const generateR3 = count => {\n\tconst g = 1.32471795724474602596090885447809 // Plastic number\n\tconst a1 = 1.0 / g\n\tconst a2 = 1.0 / (g * g)\n\tconst a3 = 1.0 / (g * g * g)\n\tconst base = 1.1127756842787055 // harmoniousNumber(7), yields better coverage compared to using 0.5\n\n\tconst points = []\n\n\tfor (let n = 0; n < count; n++) {\n\t\tpoints.push([(base + a1 * n) % 1, (base + a2 * n) % 1, (base + a3 * n) % 1])\n\t}\n\n\treturn points\n}\n","import { generateR2 } from \"../temporal-reproject/utils/QuasirandomGenerator\"\n\nexport const r2Sequence = generateR2(256).map(([a, b]) => [a - 0.5, b - 0.5])\n\nexport function jitter(width, height, camera, frame, jitterScale = 1) {\n\tconst [x, y] = r2Sequence[frame % r2Sequence.length]\n\n\tif (camera.setViewOffset) {\n\t\tcamera.setViewOffset(width, height, x * jitterScale, y * jitterScale, width, height)\n\t}\n}","// source: https://github.com/mrdoob/three.js/blob/b9bc47ab1978022ab0947a9bce1b1209769b8d91/src/renderers/webgl/WebGLProgram.js#L228\n// Unroll Loops\n\nconst unrollLoopPattern =\n\t/#pragma unroll_loop_start\\s+for\\s*\\(\\s*int\\s+i\\s*=\\s*(\\d+)\\s*;\\s*i\\s*<\\s*(\\d+)\\s*;\\s*i\\s*\\+\\+\\s*\\)\\s*{([\\s\\S]+?)}\\s+#pragma unroll_loop_end/g\n\nexport function unrollLoops(string) {\n\treturn string.replace(unrollLoopPattern, loopReplacer)\n}\n\nfunction loopReplacer(match, start, end, snippet) {\n\tlet string = \"\"\n\n\tfor (let i = parseInt(start); i < parseInt(end); i++) {\n\t\tstring += snippet.replace(/\\[\\s*i\\s*\\]/g, \"[ \" + i + \" ]\").replace(/UNROLLED_LOOP_INDEX/g, i)\n\t}\n\n\treturn string\n}\n","/* eslint-disable camelcase */\nimport { GLSL3, Matrix4, NoBlending } from \"three\"\nimport { Vector3 } from \"three\"\nimport { ShaderMaterial, Uniform, Vector2 } from \"three\"\nimport vertexShader from \"../../utils/shader/basic.vert\"\nimport fragmentShader from \"../shader/temporal_reproject.frag\"\nimport reproject from \"../shader/reproject.frag\"\nimport gbuffer_packing from \"../../utils/shader/gbuffer_packing.glsl\"\nimport { unrollLoops } from \"../../utils/ShaderUtils\"\n\nexport class TemporalReprojectMaterial extends ShaderMaterial {\n\tconstructor(textureCount = 1) {\n\t\tlet finalFragmentShader = fragmentShader\n\t\t\t.replace(\"#include <reproject>\", reproject)\n\t\t\t.replace(\"#include <gbuffer_packing>\", gbuffer_packing)\n\n\t\tlet definitions = \"\"\n\t\tfor (let i = 0; i < textureCount; i++) {\n\t\t\tdefinitions += /* glsl */ `\n\t\t\t\tuniform sampler2D accumulatedTexture${i};\n\n\t\t\t\tlayout(location = ${i}) out vec4 gOutput${i};\n\t\t\t`\n\t\t}\n\n\t\tfinalFragmentShader = definitions + finalFragmentShader.replaceAll(\"textureCount\", textureCount)\n\t\tfinalFragmentShader = unrollLoops(finalFragmentShader)\n\n\t\tconst matches2 = finalFragmentShader.matchAll(/accumulatedTexture\\[\\s*[0-9]+\\s*]/g)\n\n\t\tfor (const [key] of matches2) {\n\t\t\tconst number = key.replace(/[^0-9]/g, \"\")\n\t\t\tfinalFragmentShader = finalFragmentShader.replace(key, \"accumulatedTexture\" + number)\n\t\t}\n\n\t\tconst matches3 = finalFragmentShader.matchAll(/gOutput\\[\\s*[0-9]+\\s*]/g)\n\n\t\tfor (const [key] of matches3) {\n\t\t\tconst number = key.replace(/[^0-9]/g, \"\")\n\t\t\tfinalFragmentShader = finalFragmentShader.replace(key, \"gOutput\" + number)\n\t\t}\n\n\t\tsuper({\n\t\t\ttype: \"TemporalReprojectMaterial\",\n\t\t\tuniforms: {\n\t\t\t\tinputTexture: new Uniform(null),\n\t\t\t\tvelocityTexture: new Uniform(null),\n\t\t\t\tdepthTexture: new Uniform(null),\n\t\t\t\tlastVelocityTexture: new Uniform(null),\n\t\t\t\tneighborhoodClampIntensity: new Uniform(0),\n\t\t\t\tfullAccumulate: new Uniform(false),\n\t\t\t\tkeepData: new Uniform(1),\n\t\t\t\tdelta: new Uniform(0),\n\t\t\t\tinvTexSize: new Uniform(new Vector2()),\n\t\t\t\tprojectionMatrix: new Uniform(new Matrix4()),\n\t\t\t\tprojectionMatrixInverse: new Uniform(new Matrix4()),\n\t\t\t\tcameraMatrixWorld: new Uniform(new Matrix4()),\n\t\t\t\tviewMatrix: new Uniform(new Matrix4()),\n\t\t\t\tprevViewMatrix: new Uniform(new Matrix4()),\n\t\t\t\tprevCameraMatrixWorld: new Uniform(new Matrix4()),\n\t\t\t\tprevProjectionMatrix: new Uniform(new Matrix4()),\n\t\t\t\tprevProjectionMatrixInverse: new Uniform(new Matrix4()),\n\t\t\t\tcameraPos: new Uniform(new Vector3()),\n\t\t\t\tprevCameraPos: new Uniform(new Vector3()),\n\t\t\t\tcameraNear: new Uniform(0),\n\t\t\t\tcameraFar: new Uniform(0),\n\t\t\t\tmaxBlend: new Uniform(0)\n\t\t\t},\n\t\t\tvertexShader,\n\t\t\tfragmentShader: finalFragmentShader,\n\t\t\tblending: NoBlending,\n\t\t\tdepthWrite: false,\n\t\t\tdepthTest: false,\n\t\t\ttoneMapped: false,\n\t\t\tglslVersion: GLSL3\n\t\t})\n\n\t\tfor (let i = 0; i < textureCount; i++) {\n\t\t\tthis.uniforms[\"inputTexture\" + i] = new Uniform(null)\n\t\t\tthis.uniforms[\"accumulatedTexture\" + i] = new Uniform(null)\n\t\t}\n\t}\n}\n","export const isGroundProjectedEnv = c => {\n\treturn c.material.fragmentShader?.includes(\n\t\t\"float intersection2 = diskIntersectWithBackFaceCulling( camPos, p, h, vec3( 0.0, 1.0, 0.0 ), radius );\"\n\t)\n}\n\nexport const isChildMaterialRenderable = (c, material = c.material) => {\n\treturn (\n\t\tmaterial.visible &&\n\t\tmaterial.depthWrite &&\n\t\tmaterial.depthTest &&\n\t\t(!material.transparent || material.opacity > 0) &&\n\t\t!isGroundProjectedEnv(c)\n\t)\n}\n\nexport const didCameraMove = (camera, lastCameraPosition, lastCameraQuaternion) => {\n\tif (camera.position.distanceToSquared(lastCameraPosition) > 0.000001) {\n\t\treturn true\n\t}\n\n\tif (camera.quaternion.angleTo(lastCameraQuaternion) > 0.001) {\n\t\treturn true\n\t}\n\n\treturn false\n}\n\nexport const getVisibleChildren = object => {\n\tconst queue = [object]\n\tconst objects = []\n\n\twhile (queue.length !== 0) {\n\t\tconst mesh = queue.shift()\n\t\tif (mesh.material) objects.push(mesh)\n\n\t\tfor (const c of mesh.children) {\n\t\t\tif (c.visible) queue.push(c)\n\t\t}\n\t}\n\n\treturn objects\n}\n","import { Pass } from \"postprocessing\"\nimport {\n\tClock,\n\tFramebufferTexture,\n\tLinearFilter,\n\tMatrix4,\n\tNearestFilter,\n\tQuaternion,\n\tVector2,\n\tVector3,\n\tWebGLRenderTarget\n} from \"three\"\nimport { jitter } from \"../taa/TAAUtils\"\nimport { TemporalReprojectMaterial } from \"./material/TemporalReprojectMaterial\"\nimport { didCameraMove } from \"../utils/SceneUtils\"\n\nexport const defaultTemporalReprojectPassOptions = {\n\tdilation: false,\n\tfullAccumulate: false,\n\tneighborhoodClamp: false,\n\tneighborhoodClampRadius: 1,\n\tneighborhoodClampIntensity: 1,\n\tmaxBlend: 1,\n\tlogTransform: false,\n\tdepthDistance: 2,\n\tworldDistance: 4,\n\treprojectSpecular: false,\n\trenderTarget: null,\n\tcopyTextures: true,\n\tconfidencePower: 0.75,\n\tinputType: \"diffuse\"\n}\n\nconst tmpProjectionMatrix = new Matrix4()\nconst tmpProjectionMatrixInverse = new Matrix4()\nconst tmpVec2 = new Vector2()\n\nexport class TemporalReprojectPass extends Pass {\n\tneedsSwap = false\n\n\toverrideAccumulatedTextures = []\n\tclock = new Clock()\n\tr2Sequence = []\n\tframe = 0\n\tlastCameraTransform = {\n\t\tposition: new Vector3(),\n\t\tquaternion: new Quaternion()\n\t}\n\n\tconstructor(\n\t\tscene,\n\t\tcamera,\n\t\tvelocityDepthNormalPass,\n\t\ttexture,\n\t\ttextureCount,\n\t\toptions = defaultTemporalReprojectPassOptions\n\t) {\n\t\tsuper(\"TemporalReprojectPass\")\n\n\t\tthis._scene = scene\n\t\tthis._camera = camera\n\t\tthis.textureCount = textureCount\n\t\toptions = { ...defaultTemporalReprojectPassOptions, ...options }\n\n\t\tthis.renderTarget = new WebGLRenderTarget(1, 1, {\n\t\t\tcount: textureCount,\n\t\t\tminFilter: NearestFilter,\n\t\t\tmagFilter: NearestFilter,\n\t\t\ttype: texture.type,\n\t\t\tdepthBuffer: false\n\t\t})\n\n\t\tthis.renderTarget.textures.forEach(\n\t\t\t(texture, index) => (texture.name = \"TemporalReprojectPass.accumulatedTexture\" + index)\n\t\t)\n\n\t\tthis.fullscreenMaterial = new TemporalReprojectMaterial(textureCount)\n\t\tthis.fullscreenMaterial.defines.textureCount = textureCount\n\n\t\tif (options.dilation) this.fullscreenMaterial.defines.dilation = \"\"\n\t\tif (options.neighborhoodClamp) this.fullscreenMaterial.defines.neighborhoodClamp = \"\"\n\t\tif (options.logTransform) this.fullscreenMaterial.defines.logTransform = \"\"\n\t\tif (camera.isPerspectiveCamera) this.fullscreenMaterial.defines.PERSPECTIVE_CAMERA = \"\"\n\t\tthis.fullscreenMaterial.defines.neighborhoodClampRadius = parseInt(options.neighborhoodClampRadius)\n\n\t\tthis.fullscreenMaterial.defines.depthDistance = options.depthDistance.toPrecision(5)\n\t\tthis.fullscreenMaterial.defines.worldDistance = options.worldDistance.toPrecision(5)\n\n\t\tthis.fullscreenMaterial.uniforms.fullAccumulate.value = options.fullAccumulate\n\t\tthis.fullscreenMaterial.uniforms.neighborhoodClampIntensity.value = options.neighborhoodClampIntensity\n\t\tthis.fullscreenMaterial.uniforms.maxBlend.value = options.maxBlend\n\n\t\tthis.fullscreenMaterial.uniforms.projectionMatrix.value = camera.projectionMatrix.clone()\n\t\tthis.fullscreenMaterial.uniforms.projectionMatrixInverse.value = camera.projectionMatrixInverse.clone()\n\t\tthis.fullscreenMaterial.uniforms.cameraMatrixWorld.value = camera.matrixWorld\n\t\tthis.fullscreenMaterial.uniforms.viewMatrix.value = camera.matrixWorldInverse\n\t\tthis.fullscreenMaterial.uniforms.cameraPos.value = camera.position\n\n\t\tthis.fullscreenMaterial.uniforms.prevViewMatrix.value = camera.matrixWorldInverse.clone()\n\t\tthis.fullscreenMaterial.uniforms.prevCameraMatrixWorld.value = camera.matrixWorld.clone()\n\t\tthis.fullscreenMaterial.uniforms.prevProjectionMatrix.value = camera.projectionMatrix.clone()\n\t\tthis.fullscreenMaterial.uniforms.prevProjectionMatrixInverse.value = camera.projectionMatrixInverse.clone()\n\n\t\tthis.fullscreenMaterial.uniforms.velocityTexture.value = velocityDepthNormalPass.renderTarget.texture\n\t\tthis.fullscreenMaterial.uniforms.depthTexture.value = velocityDepthNormalPass.depthTexture\n\n\t\tthis.fullscreenMaterial.defines.inputType =\n\t\t\t[\"diffuseSpecular\", \"diffuse\", \"specular\"].indexOf(options.inputType) ?? 1\n\n\t\tfor (const opt of [\"reprojectSpecular\", \"neighborhoodClamp\"]) {\n\t\t\tlet value = options[opt]\n\n\t\t\tif (typeof value !== \"array\") value = Array(textureCount).fill(value)\n\n\t\t\tthis.fullscreenMaterial.defines[opt] = /* glsl */ `bool[](${value.join(\", \")})`\n\t\t}\n\n\t\tthis.fullscreenMaterial.defines.confidencePower = options.confidencePower.toPrecision(5)\n\n\t\tthis.options = options\n\t\tthis.velocityDepthNormalPass = velocityDepthNormalPass\n\n\t\tthis.fullscreenMaterial.uniforms.inputTexture.value = texture\n\t}\n\n\tsetInputTexture(texture) {\n\t\tthis.fullscreenMaterial.uniforms.inputTexture.value = texture\n\t}\n\n\tdispose() {\n\t\tsuper.dispose()\n\n\t\tthis.renderTarget.dispose()\n\t\tthis.fullscreenMaterial.dispose()\n\t}\n\n\tsetSize(width, height) {\n\t\tthis.renderTarget.setSize(width, height)\n\n\t\tthis.fullscreenMaterial.uniforms.invTexSize.value.set(1 / width, 1 / height)\n\n\t\tthis.framebufferTexture?.dispose()\n\n\t\tconst inputTexture = this.fullscreenMaterial.uniforms.inputTexture.value\n\n\t\tthis.framebufferTexture = new FramebufferTexture(width, height, inputTexture.format)\n\t\tthis.framebufferTexture.type = inputTexture.type\n\t\tthis.framebufferTexture.minFilter = LinearFilter\n\t\tthis.framebufferTexture.magFilter = LinearFilter\n\n\t\tthis.framebufferTexture.needsUpdate = true\n\n\t\tfor (let i = 0; i < this.textureCount; i++) {\n\t\t\tconst accumulatedTexture = this.overrideAccumulatedTextures[i] ?? this.framebufferTexture\n\t\t\tthis.fullscreenMaterial.uniforms[\"accumulatedTexture\" + i].value = accumulatedTexture\n\t\t}\n\t}\n\n\tget texture() {\n\t\treturn this.renderTarget.texture;\n\t}\n\n\treset() {\n\t\tthis.fullscreenMaterial.uniforms.keepData.value = 0\n\t}\n\n\trender(renderer) {\n\t\tthis.frame = (this.frame + 1) % 4096\n\n\t\tconst delta = Math.min(1 / 10, this.clock.getDelta())\n\t\tthis.fullscreenMaterial.uniforms.delta.value = delta\n\n\t\ttmpProjectionMatrix.copy(this._camera.projectionMatrix)\n\t\ttmpProjectionMatrixInverse.copy(this._camera.projectionMatrixInverse)\n\n\t\tif (this._camera.view) this._camera.view.enabled = false\n\t\tthis._camera.updateProjectionMatrix()\n\n\t\tthis.fullscreenMaterial.uniforms.projectionMatrix.value.copy(this._camera.projectionMatrix)\n\t\tthis.fullscreenMaterial.uniforms.projectionMatrixInverse.value.copy(this._camera.projectionMatrixInverse)\n\t\tthis.fullscreenMaterial.uniforms.lastVelocityTexture.value = this.velocityDepthNormalPass.lastVelocityTexture\n\n\t\tthis.fullscreenMaterial.uniforms.fullAccumulate.value =\n\t\t\tthis.options.fullAccumulate &&\n\t\t\t!didCameraMove(this._camera, this.lastCameraTransform.position, this.lastCameraTransform.quaternion)\n\n\t\tthis.lastCameraTransform.position.copy(this._camera.position)\n\t\tthis.lastCameraTransform.quaternion.copy(this._camera.quaternion)\n\n\t\tif (this._camera.view) this._camera.view.enabled = true\n\t\tthis._camera.projectionMatrix.copy(tmpProjectionMatrix)\n\t\tthis._camera.projectionMatrixInverse.copy(tmpProjectionMatrixInverse)\n\n\t\tthis.fullscreenMaterial.uniforms.cameraNear.value = this._camera.near\n\t\tthis.fullscreenMaterial.uniforms.cameraFar.value = this._camera.far\n\n\t\trenderer.setRenderTarget(this.renderTarget)\n\t\trenderer.render(this.scene, this.camera)\n\n\t\tthis.fullscreenMaterial.uniforms.keepData.value = 1\n\n\t\tif (this.overrideAccumulatedTextures.length === 0) {\n\t\t\tthis.framebufferTexture.needsUpdate = true\n\t\t\trenderer.copyFramebufferToTexture(tmpVec2, this.framebufferTexture)\n\t\t}\n\n\t\t// save last transformations\n\t\tthis.fullscreenMaterial.uniforms.prevCameraMatrixWorld.value.copy(this._camera.matrixWorld)\n\t\tthis.fullscreenMaterial.uniforms.prevViewMatrix.value.copy(this._camera.matrixWorldInverse)\n\n\t\tthis.fullscreenMaterial.uniforms.prevProjectionMatrix.value.copy(\n\t\t\tthis.fullscreenMaterial.uniforms.projectionMatrix.value\n\t\t)\n\t\tthis.fullscreenMaterial.uniforms.prevProjectionMatrixInverse.value.copy(\n\t\t\tthis.fullscreenMaterial.uniforms.projectionMatrixInverse.value\n\t\t)\n\n\t\tthis.fullscreenMaterial.uniforms.prevCameraPos.value.copy(this._camera.position)\n\t}\n\n\tjitter(jitterScale = 1) {\n\t\tthis.unjitter()\n\n\t\tjitter(this.renderTarget.width, this.renderTarget.height, this._camera, this.frame, jitterScale)\n\t}\n\n\tunjitter() {\n\t\tif (this._camera.clearViewOffset) this._camera.clearViewOffset()\n\t}\n}\n","import { Effect } from \"postprocessing\"\nimport { Uniform } from \"three\"\nimport {\n\tTemporalReprojectPass,\n\tdefaultTemporalReprojectPassOptions\n} from \"../temporal-reproject/TemporalReprojectPass.js\"\n// eslint-disable-next-line camelcase\nimport traa_compose from \"./shader/traa_compose.frag\"\n\nexport class TRAAEffect extends Effect {\n\tconstructor(scene, camera, velocityDepthNormalPass, options = defaultTemporalReprojectPassOptions) {\n\t\tsuper(\"TRAAEffect\", traa_compose, {\n\t\t\ttype: \"FinalTRAAEffectMaterial\",\n\t\t\tuniforms: new Map([[\"accumulatedTexture\", new Uniform(null)]])\n\t\t})\n\n\t\tthis._scene = scene\n\t\tthis._camera = camera\n\t\tthis.velocityDepthNormalPass = velocityDepthNormalPass\n\n\t\toptions = {\n\t\t\t...options,\n\t\t\t...{\n\t\t\t\tmaxBlend: 0.9,\n\t\t\t\tneighborhoodClamp: true,\n\t\t\t\tneighborhoodClampIntensity: 1,\n\t\t\t\tneighborhoodClampRadius: 1,\n\t\t\t\tlogTransform: true,\n\t\t\t\tconfidencePower: 4\n\t\t\t}\n\t\t}\n\n\t\tthis.options = { ...defaultTemporalReprojectPassOptions, ...options }\n\n\t\tthis.setSize(options.width, options.height)\n\t}\n\n\tsetSize(width, height) {\n\t\tthis.temporalReprojectPass?.setSize(width, height)\n\t}\n\n\tdispose() {\n\t\tsuper.dispose()\n\n\t\tthis.temporalReprojectPass.dispose()\n\t}\n\n\treset() {\n\t\tthis.temporalReprojectPass.reset()\n\t}\n\n\tupdate(renderer, inputBuffer) {\n\t\tif (!this.temporalReprojectPass) {\n\t\t\tthis.temporalReprojectPass = new TemporalReprojectPass(\n\t\t\t\tthis._scene,\n\t\t\t\tthis._camera,\n\t\t\t\tthis.velocityDepthNormalPass,\n\t\t\t\tinputBuffer.texture,\n\t\t\t\t1,\n\t\t\t\tthis.options\n\t\t\t)\n\t\t\tthis.temporalReprojectPass.setSize(inputBuffer.width, inputBuffer.height)\n\n\t\t\tthis.uniforms.get(\"accumulatedTexture\").value = this.temporalReprojectPass.texture\n\t\t}\n\n\t\tthis.temporalReprojectPass.setInputTexture(inputBuffer.texture);\n\n\t\tthis.temporalReprojectPass.unjitter()\n\t\tthis.unjitteredProjectionMatrix = this._camera.projectionMatrix.clone()\n\n\t\tthis._camera.projectionMatrix.copy(this.unjitteredProjectionMatrix)\n\n\t\tthis.temporalReprojectPass.jitter()\n\n\t\tthis.temporalReprojectPass.render(renderer)\n\t}\n}\n\nexport const defaultTRAAOptions = defaultTemporalReprojectPassOptions\n","// this shader is from: https://github.com/gkjohnson/threejs-sandbox\n/* eslint-disable camelcase */\n\nimport { Matrix3, Matrix4, ShaderChunk, ShaderMaterial, UniformsUtils, Vector2 } from \"three\"\n\n// Modified ShaderChunk.skinning_pars_vertex to handle\n// a second set of bone information from the previous frame\nconst prev_skinning_pars_vertex = /* glsl */ `\n\t\t#ifdef USE_SKINNING\n\t\t#ifdef BONE_TEXTURE\n\t\t\tuniform sampler2D prevBoneTexture;\n\t\t\tmat4 getPrevBoneMatrix( const in float i ) {\n\t\t\t\tfloat j = i * 4.0;\n\t\t\t\tfloat x = mod( j, float( boneTextureSize ) );\n\t\t\t\tfloat y = floor( j / float( boneTextureSize ) );\n\t\t\t\tfloat dx = 1.0 / float( boneTextureSize );\n\t\t\t\tfloat dy = 1.0 / float( boneTextureSize );\n\t\t\t\ty = dy * ( y + 0.5 );\n\t\t\t\tvec4 v1 = textureLod( prevBoneTexture, vec2( dx * ( x + 0.5 ), y ), 0. );\n\t\t\t\tvec4 v2 = textureLod( prevBoneTexture, vec2( dx * ( x + 1.5 ), y ), 0. );\n\t\t\t\tvec4 v3 = textureLod( prevBoneTexture, vec2( dx * ( x + 2.5 ), y ), 0. );\n\t\t\t\tvec4 v4 = textureLod( prevBoneTexture, vec2( dx * ( x + 3.5 ), y ), 0. );\n\t\t\t\tmat4 bone = mat4( v1, v2, v3, v4 );\n\t\t\t\treturn bone;\n\t\t\t}\n\t\t#else\n\t\t\tuniform mat4 prevBoneMatrices[ MAX_BONES ];\n\t\t\tmat4 getPrevBoneMatrix( const in float i ) {\n\t\t\t\tmat4 bone = prevBoneMatrices[ int(i) ];\n\t\t\t\treturn bone;\n\t\t\t}\n\t\t#endif\n\t\t#endif\n`\n\nexport const velocity_vertex_pars = /* glsl */ `\n#define MAX_BONES 64\n \n${ShaderChunk.skinning_pars_vertex}\n${prev_skinning_pars_vertex}\n\nuniform mat4 velocityMatrix;\nuniform mat4 prevVelocityMatrix;\nvarying vec4 prevPosition;\nvarying vec4 newPosition;\n\nvarying vec2 vHighPrecisionZW;\n`\n\n// Returns the body of the vertex shader for the velocity buffer\nexport const velocity_vertex_main = /* glsl */ `\n// Get the current vertex position\ntransformed = vec3( position );\n${ShaderChunk.skinning_vertex}\nnewPosition = velocityMatrix * vec4( transformed, 1.0 );\n\n// Get the previous vertex position\ntransformed = vec3( position );\n${ShaderChunk.skinbase_vertex.replace(/mat4 /g, \"\").replace(/getBoneMatrix/g, \"getPrevBoneMatrix\")}\n${ShaderChunk.skinning_vertex.replace(/vec4 /g, \"\")}\nprevPosition = prevVelocityMatrix * vec4( transformed, 1.0 );\n\ngl_Position = newPosition;\n\nvHighPrecisionZW = gl_Position.zw;\n`\n\nexport const velocity_fragment_pars = /* glsl */ `\nvarying vec4 prevPosition;\nvarying vec4 newPosition;\n\nvarying vec2 vHighPrecisionZW;\n`\n\nexport const velocity_fragment_main = /* glsl */ `\nvec2 pos0 = (prevPosition.xy / prevPosition.w) * 0.5 + 0.5;\nvec2 pos1 = (newPosition.xy / newPosition.w) * 0.5 + 0.5;\n\nvec2 vel = pos1 - pos0;\n\nfloat fragCoordZ = 0.5 * vHighPrecisionZW[0] / vHighPrecisionZW[1] + 0.5;\n\ngl_FragColor = vec4(vel.x, vel.y, 0., 0.);\n`\n\nexport const velocity_uniforms = {\n\tprevVelocityMatrix: { value: new Matrix4() },\n\tvelocityMatrix: { value: new Matrix4() },\n\tprevBoneTexture: { value: null },\n\tboneTexture: { value: null },\n\tnormalMap: { value: null },\n\tnormalScale: { value: new Vector2(1, 1) },\n\tuvTransform: { value: new Matrix3() }\n}\n\nexport class VelocityDepthNormalMaterial extends ShaderMaterial {\n\tconstructor(camera) {\n\t\tsuper({\n\t\t\tuniforms: {\n\t\t\t\t...UniformsUtils.clone(velocity_uniforms),\n\t\t\t\t...{\n\t\t\t\t\tcameraMatrixWorld: { value: camera.matrixWorld }\n\t\t\t\t}\n\t\t\t},\n\t\t\tvertexShader: /* glsl */ `\n\t\t\t\t\t#include <common>\n\t\t\t\t\t#include <uv_pars_vertex>\n\t\t\t\t\t#include <displacementmap_pars_vertex>\n\t\t\t\t\t#include <normal_pars_vertex>\n\t\t\t\t\t#include <morphtarget_pars_vertex>\n\t\t\t\t\t#include <logdepthbuf_pars_vertex>\n\t\t\t\t\t#include <clipping_planes_pars_vertex>\n\n\t\t\t\t\tvarying vec2 vUv;\n\n\t\t\t\t\tvarying vec3 vViewPosition;\n\t\t\t\t\t\n ${velocity_vertex_pars}\n \n void main() {\n\t\t\t\t\t\tvec3 transformed;\n\n\t\t\t\t\t\t#include <uv_vertex>\n\n\t\t\t\t\t\t#include <skinbase_vertex>\n\t\t\t\t\t\t#include <beginnormal_vertex>\n\t\t\t\t\t\t#include <skinnormal_vertex>\n\t\t\t\t\t\t#include <defaultnormal_vertex>\n\n\t\t\t\t\t\t#include <morphnormal_vertex>\n\t\t\t\t\t\t#include <normal_vertex>\n\t\t\t\t\t\t#include <morphtarget_vertex>\n\t\t\t\t\t\t#include <displacementmap_vertex>\n\t\t\t\t\t\t#include <project_vertex>\n\t\t\t\t\t\t#include <logdepthbuf_vertex>\n\t\t\t\t\t\t#include <clipping_planes_vertex>\n\n\t\t\t\t\t\t${velocity_vertex_main}\n\n\t\t\t\t\t\tvViewPosition = - mvPosition.xyz;\n\n\t\t\t\t\t\tvUv = uv;\n\n }`,\n\t\t\tfragmentShader: /* glsl */ `\n\t\t\t\t\tprecision highp float;\n\t\t\t\t\tuniform mat4 cameraMatrixWorld;\n\n\t\t\t\t\tvarying vec3 vViewPosition;\n\n\t\t\t\t\t${velocity_fragment_pars}\n\t\t\t\t\t#include <packing>\n\n\t\t\t\t\t#include <uv_pars_fragment>\n\t\t\t\t\t#include <normal_pars_fragment>\n\t\t\t\t\t#include <normalmap_pars_fragment>\n\n\t\t\t\t\tvarying vec2 vUv;\n\n\t\t\t\t\t// source: https://knarkowicz.wordpress.com/2014/04/16/octahedron-normal-vector-encoding/\n\t\t\t\t\tvec2 OctWrap( vec2 v ) {\n\t\t\t\t\t\tvec2 w = 1.0 - abs( v.yx );\n\t\t\t\t\t\tif (v.x < 0.0) w.x = -w.x;\n\t\t\t\t\t\tif (v.y < 0.0) w.y = -w.y;\n\t\t\t\t\t\treturn w;\n\t\t\t\t\t}\n\n\t\t\t\t\tvec2 encodeOctWrap(vec3 n) {\n\t\t\t\t\t\tn /= (abs(n.x) + abs(n.y) + abs(n.z));\n\t\t\t\t\t\tn.xy = n.z > 0.0 ? n.xy : OctWrap(n.xy);\n\t\t\t\t\t\tn.xy = n.xy * 0.5 + 0.5;\n\t\t\t\t\t\treturn n.xy;\n\t\t\t\t\t}\n\n\t\t\t\t\tfloat packNormal(vec3 normal) {\n\t\t\t\t\t\treturn uintBitsToFloat(packHalf2x16(encodeOctWrap(normal)));\n\t\t\t\t\t}\n\n void main() {\n\t\t\t\t\t\t#define vNormalMapUv vUv\n\n\t\t\t\t\t\t#include <normal_fragment_begin>\n \t#include <normal_fragment_maps>\n\n\t\t\t\t\t\t${velocity_fragment_main}\n\t\t\t\t\t\tvec3 worldNormal = normalize((cameraMatrixWorld * vec4(normal, 0.)).xyz);\n\t\t\t\t\t\tgl_FragColor.b = packNormal(worldNormal);\n\t\t\t\t\t\tgl_FragColor.a = fragCoordZ;\n }`\n\t\t})\n\t}\n}\n","const materialProps = [\n\t\"vertexTangent\",\n\t\"vertexColors\",\n\t\"vertexAlphas\",\n\t\"vertexUvs\",\n\t\"uvsVertexOnly\",\n\t\"supportsVertexTextures\",\n\t\"instancing\",\n\t\"instancingColor\",\n\t\"side\",\n\t\"flatShading\",\n\t\"skinning\",\n\t\"doubleSided\",\n\t\"flipSided\"\n]\n\nexport const copyNecessaryProps = (originalMaterial, newMaterial) => {\n\tfor (const props of materialProps) newMaterial[props] = originalMaterial[props]\n}\n\nexport const keepMaterialMapUpdated = (mrtMaterial, originalMaterial, prop, define, useKey) => {\n\tif (useKey) {\n\t\tif (originalMaterial[prop] !== mrtMaterial[prop]) {\n\t\t\tmrtMaterial[prop] = originalMaterial[prop]\n\t\t\tmrtMaterial.uniforms[prop].value = originalMaterial[prop]\n\n\t\t\tif (originalMaterial[prop]) {\n\t\t\t\tmrtMaterial.defines[define] = \"\"\n\t\t\t} else {\n\t\t\t\tdelete mrtMaterial.defines[define]\n\t\t\t}\n\n\t\t\tmrtMaterial.needsUpdate = true\n\t\t}\n\t} else if (mrtMaterial[prop] !== undefined) {\n\t\tmrtMaterial[prop] = undefined\n\t\tmrtMaterial.uniforms[prop].value = undefined\n\t\tdelete mrtMaterial.defines[define]\n\t\tmrtMaterial.needsUpdate = true\n\t}\n}\n\nexport const getVisibleChildren = object => {\n\tconst queue = [object]\n\tconst objects = []\n\n\twhile (queue.length !== 0) {\n\t\tconst mesh = queue.shift()\n\t\tif (mesh.material) objects.push(mesh)\n\n\t\tfor (const c of mesh.children) {\n\t\t\tif (c.visible) queue.push(c)\n\t\t}\n\t}\n\n\treturn objects\n}\n","import { Pass } from \"postprocessing\"\nimport {\n\tColor,\n\tDataTexture,\n\tDepthTexture,\n\tFramebufferTexture,\n\tHalfFloatType,\n\tMatrix4,\n\tNearestFilter,\n\tRGBAFormat,\n\tVector2,\n\tWebGLRenderTarget\n} from \"three\"\nimport { VelocityDepthNormalMaterial } from \"../material/VelocityDepthNormalMaterial.js\"\nimport { copyNecessaryProps, keepMaterialMapUpdated } from \"../../utils/GBufferUtils.js\"\nimport { getVisibleChildren } from \"../../utils/SceneUtils.js\"\nimport { isChildMaterialRenderable } from \"../../utils/SceneUtils.js\"\n\nconst backgroundColor = new Color(0)\nconst zeroVec2 = new Vector2()\nconst tmpProjectionMatrix = new Matrix4()\nconst tmpProjectionMatrixInverse = new Matrix4()\n\nconst saveBoneTexture = (object, floatType) => {\n\tlet boneTexture = object.material.uniforms.prevBoneTexture.value\n\n\tif (boneTexture && boneTexture.image.width === object.skeleton.boneTexture.width) {\n\t\tboneTexture = object.material.uniforms.prevBoneTexture.value\n\t\tboneTexture.image.data.set(object.skeleton.boneTexture.image.data)\n\t} else {\n\t\tboneTexture?.dispose()\n\n\t\tconst boneMatrices = object.skeleton.boneTexture.image.data.slice()\n\t\tconst size = object.skeleton.boneTexture.image.width\n\n\t\tboneTexture = new DataTexture(boneMatrices, size, size, RGBAFormat, floatType)\n\t\tobject.material.uniforms.prevBoneTexture.value = boneTexture\n\n\t\tboneTexture.needsUpdate = true\n\t}\n}\n\nconst updateVelocityDepthNormalMaterialBeforeRender = (c, camera) => {\n\tif (c.skeleton?.boneTexture) {\n\t\tc.material.uniforms.boneTexture.value = c.skeleton.boneTexture\n\n\t\tif (!(\"USE_SKINNING\" in c.material.defines)) {\n\t\t\tc.material.defines.USE_SKINNING = \"\"\n\t\t\tc.material.defines.BONE_TEXTURE = \"\"\n\n\t\t\tc.material.needsUpdate = true\n\t\t}\n\t}\n\n\tc.modelViewMatrix.multiplyMatrices(camera.matrixWorldInverse, c.matrixWorld)\n\n\tc.material.uniforms.velocityMatrix.value.multiplyMatrices(camera.projectionMatrix, c.modelViewMatrix)\n}\n\nconst updateVelocityDepthNormalMaterialAfterRender = (c, camera, floatType) => {\n\tc.material.uniforms.prevVelocityMatrix.value.multiplyMatrices(camera.projectionMatrix, c.modelViewMatrix)\n\n\tif (c.skeleton?.boneTexture) saveBoneTexture(c, floatType)\n}\n\nexport class VelocityDepthNormalPass extends Pass {\n\tcachedMaterials = new WeakMap()\n\tvisibleMeshes = []\n\tneedsSwap = false\n\n\tconstructor(scene, camera, floatType = HalfFloatType) {\n\t\tsuper(\"VelocityDepthNormalPass\")\n\n\t\tthis._scene = scene\n\t\tthis._camera = camera\n\t\tthis._floatType = floatType\n\n\t\tthis.renderTarget = new WebGLRenderTarget(1, 1, {\n\t\t\ttype: floatType,\n\t\t\tminFilter: NearestFilter,\n\t\t\tmagFilter: NearestFilter\n\t\t})\n\n\t\tthis.renderTarget.texture.name = \"VelocityDepthNormalPass.Texture\"\n\n\t\tthis.renderTarget.depthTexture = new DepthTexture(1, 1)\n\t\tthis.renderTarget.depthTexture.type = floatType;\n\t}\n\n\tget texture() {\n\t\treturn this.renderTarget.texture\n\t}\n\n\tsetVelocityDepthNormalMaterialInScene() {\n\t\tthis.visibleMeshes = getVisibleChildren(this._scene)\n\n\t\tfor (const c of this.visibleMeshes) {\n\t\t\tconst originalMaterial = c.material\n\n\t\t\tlet [cachedOriginalMaterial, velocityDepthNormalMaterial] = this.cachedMaterials.get(c) || []\n\n\t\t\tif (originalMaterial !== cachedOriginalMaterial) {\n\t\t\t\tvelocityDepthNormalMaterial = new VelocityDepthNormalMaterial(this._camera)\n\n\t\t\t\tcopyNecessaryProps(originalMaterial, velocityDepthNormalMaterial)\n\n\t\t\t\tc.material = velocityDepthNormalMaterial\n\n\t\t\t\tif (c.skeleton?.boneTexture) saveBoneTexture(c, this._floatType);\n\n\t\t\t\tthis.cachedMaterials.set(c, [originalMaterial, velocityDepthNormalMaterial])\n\t\t\t}\n\n\t\t\tc.material = velocityDepthNormalMaterial\n\n\t\t\tc.visible = isChildMaterialRenderable(c, originalMaterial)\n\n\t\t\tkeepMaterialMapUpdated(\n\t\t\t\tvelocityDepthNormalMaterial,\n\t\t\t\toriginalMaterial,\n\t\t\t\t\"normalMap\",\n\t\t\t\t\"USE_NORMALMAP_TANGENTSPACE\",\n\t\t\t\ttrue\n\t\t\t)\n\t\t\tvelocityDepthNormalMaterial.uniforms.normalMap.value = originalMaterial.normalMap\n\n\t\t\tconst map =\n\t\t\t\toriginalMaterial.map ||\n\t\t\t\toriginalMaterial.normalMap ||\n\t\t\t\toriginalMaterial.roughnessMap ||\n\t\t\t\toriginalMaterial.metalnessMap\n\n\t\t\tif (map) velocityDepthNormalMaterial.uniforms.uvTransform.value = map.matrix\n\n\t\t\tupdateVelocityDepthNormalMaterialBeforeRender(c, this._camera)\n\t\t}\n\t}\n\n\tunsetVelocityDepthNormalMaterialInScene() {\n\t\tfor (const c of this.visibleMeshes) {\n\t\t\tc.visible = true\n\n\t\t\tupdateVelocityDepthNormalMaterialAfterRender(c, this._camera, this._floatType)\n\n\t\t\tc.material = this.cachedMaterials.get(c)[0]\n\t\t}\n\t}\n\n\tsetSize(width, height) {\n\t\tthis.renderTarget.setSize(width, height)\n\n\t\tthis.lastVelocityTexture?.dispose()\n\n\t\tthis.lastVelocityTexture = new FramebufferTexture(width, height, RGBAFormat)\n\t\tthis.lastVelocityTexture.type = this._floatType;\n\t\tthis.lastVelocityTexture.minFilter = NearestFilter\n\t\tthis.lastVelocityTexture.magFilter = NearestFilter\n\t}\n\n\tdispose() {\n\t\tsuper.dispose()\n\n\t\tthis.renderTarget.dispose()\n\t}\n\n\trender(renderer) {\n\t\ttmpProjectionMatrix.copy(this._camera.projectionMatrix)\n\t\ttmpProjectionMatrixInverse.copy(this._camera.projectionMatrixInverse)\n\n\t\tif (this._camera.view) this._camera.view.enabled = false\n\t\tthis._camera.updateProjectionMatrix()\n\n\t\t// in case a RenderPass is not being used, so we need to update the camera's world matrix manually\n\t\tthis._camera.updateMatrixWorld()\n\n\t\tthis.setVelocityDepthNormalMaterialInScene()\n\n\t\tconst { background } = this._scene\n\n\t\tthis._scene.background = backgroundColor\n\n\t\trenderer.setRenderTarget(this.renderTarget)\n\t\trenderer.copyFramebufferToTexture(zeroVec2, this.lastVelocityTexture)\n\n\t\trenderer.render(this._scene, this._camera)\n\n\t\tthis._scene.background = background\n\n\t\tthis.unsetVelocityDepthNormalMaterialInScene()\n\n\t\tif (this._camera.view) this._camera.view.enabled = true\n\t\tthis._camera.projectionMatrix.copy(tmpProjectionMatrix)\n\t\tthis._camera.projectionMatrixInverse.copy(tmpProjectionMatrixInverse)\n\t}\n}\n","import { Viewer } from \"@xviewer.js/core\";\nimport { VelocityDepthNormalPass } from \"./realism-effects\";\nimport { EffectComposerPlugin } from \"./EffectComposerPlugin\";\n\nexport function getVelocityDepthNormalPass(viewer: Viewer, autoAdd: boolean = true) {\n const composer = EffectComposerPlugin.Instance(viewer);\n let vdnPass = composer.getPass(VelocityDepthNormalPass);\n if (vdnPass === undefined && autoAdd) {\n vdnPass = composer.addPass(new VelocityDepthNormalPass(viewer.scene, viewer.camera));\n }\n return vdnPass;\n}","import { EffectPass } from \"postprocessing\";\nimport { TRAAEffect } from \"./realism-effects\";\nimport { PassPlugin } from \"./PassPlugin\";\nimport { getVelocityDepthNormalPass } from \"./getVelocityDepthNormalPass\";\nimport { PropertyManager } from \"@xviewer.js/core\";\n\nexport class TRAAPlugin extends PassPlugin<EffectPass> {\n type: string = \"TRAAPlugin\"\n\n private _effect: TRAAEffect;\n\n constructor(props: {\n dilation?: boolean,\n fullAccumulate?: boolean,\n neighborhoodClamp?: boolean,\n neighborhoodClampRadius?: number,\n neighborhoodClampIntensity?: number,\n } = {}) {\n super();\n this.install = () => {\n const { scene, camera } = this.viewer;\n this._effect = new TRAAEffect(scene, camera, getVelocityDepthNormalPass(this.viewer), props);\n this.pass = this.composer.addPass(new EffectPass(camera, this._effect));\n }\n this.uninstall = () => {\n this.composer.removePass(this.pass);\n }\n }\n}\n\nPropertyManager._getClassProperties(\"TRAAPlugin\")\n .property(\"enable\")"],"names":["EffectComposerPlugin","Plugin","Instance","viewer","getPlugin","multisampling","_composer","v","getPass","constructor","passes","find","addPass","pass","length","_checkOutputPass","removePass","activePass","enabled","count","filter","name","_outputPass","_setRenderToScreen","k","i","renderToScreen","props","type","install","renderer","scene","camera","_renderPass","RenderPass","EffectPass","EffectComposer","Object","assign","frameBufferType","HalfFloatType","_onResize","width","height","setSize","_onRender","dt","render","uninstall","dispose","PassPlugin","enable","setEnable","composer","ToneMappingPlugin","mode","effect","ToneMappingEffect","PropertyManager","_getClassProperties","property","value","ToneMappingMode","BloomPlugin","intensity","luminanceThreshold","luminanceMaterial","threshold","luminanceSmoothing","smoothing","BloomEffect","blendFunction","BlendFunction","ADD","min","max","step","FXAAPlugin","FXAAEffect","SMAAPlugin","preset","_preset","applyPreset","edgeDetectionMode","edgeDetectionMaterial","predicationMode","SMAAPreset","MEDIUM","SMAAEffect","EdgeDetectionMode","PredicationMode","MSAAPlugin","_maxSamples","Math","capabilities","maxSamples","g","a1","a2","base","generateR2","points","n","push","r2Sequence","map","a","b","jitter","frame","jitterScale","x","y","setViewOffset","unrollLoopPattern","unrollLoops","string","replace","loopReplacer","match","start","end","snippet","parseInt","TemporalReprojectMaterial","ShaderMaterial","textureCount","finalFragmentShader","fragmentShader","reproject","gbuffer_packing","definitions","replaceAll","matches2","matchAll","key","number","matches3","uniforms","inputTexture","Uniform","velocityTexture","depthTexture","lastVelocityTexture","neighborhoodClampIntensity","fullAccumulate","keepData","delta","invTexSize","Vector2","projectionMatrix","Matrix4","projectionMatrixInverse","cameraMatrixWorld","viewMatrix","prevViewMatrix","prevCameraMatrixWorld","prevProjectionMatrix","prevProjectionMatrixInverse","cameraPos","Vector3","prevCameraPos","cameraNear","cameraFar","maxBlend","vertexShader","blending","NoBlending","depthWrite","depthTest","toneMapped","glslVersion","GLSL3","isGroundProjectedEnv","c","material","includes","isChildMaterialRenderable","visible","transparent","opacity","didCameraMove","lastCameraPosition","lastCameraQuaternion","position","distanceToSquared","quaternion","angleTo","getVisibleChildren","object","queue","objects","mesh","shift","children","defaultTemporalReprojectPassOptions","dilation","neighborhoodClamp","neighborhoodClampRadius","logTransform","depthDistance","worldDistance","reprojectSpecular","renderTarget","copyTextures","confidencePower","inputType","tmpProjectionMatrix","tmpProjectionMatrixInverse","tmpVec2","TemporalReprojectPass","Pass","setInputTexture","texture","fullscreenMaterial","set","framebufferTexture","FramebufferTexture","format","minFilter","LinearFilter","magFilter","needsUpdate","accumulatedTexture","overrideAccumulatedTextures","reset","clock","getDelta","copy","_camera","view","updateProjectionMatrix","velocityDepthNormalPass","options","lastCameraTransform","near","far","setRenderTarget","copyFramebufferToTexture","matrixWorld","matrixWorldInverse","unjitter","clearViewOffset","needsSwap","Clock","Quaternion","_scene","WebGLRenderTarget","NearestFilter","depthBuffer","textures","forEach","index","defines","isPerspectiveCamera","PERSPECTIVE_CAMERA","toPrecision","clone","indexOf","opt","Array","fill","join","TRAAEffect","Effect","temporalReprojectPass","update","inputBuffer","get","unjitteredProjectionMatrix","traa_compose","Map","prev_skinning_pars_vertex","velocity_vertex_pars","ShaderChunk","skinning_pars_vertex","velocity_vertex_main","skinning_vertex","skinbase_vertex","velocity_fragment_pars","velocity_fragment_main","velocity_uniforms","prevVelocityMatrix","velocityMatrix","prevBoneTexture","boneTexture","normalMap","normalScale","uvTransform","Matrix3","VelocityDepthNormalMaterial","UniformsUtils","materialProps","copyNecessaryProps","originalMaterial","newMaterial","keepMaterialMapUpdated","mrtMaterial","prop","define","useKey","backgroundColor","Color","zeroVec2","saveBoneTexture","floatType","image","skeleton","data","boneMatrices","slice","size","DataTexture","RGBAFormat","updateVelocityDepthNormalMaterialBeforeRender","USE_SKINNING","BONE_TEXTURE","modelViewMatrix","multiplyMatrices","updateVelocityDepthNormalMaterialAfterRender","VelocityDepthNormalPass","setVelocityDepthNormalMaterialInScene","visibleMeshes","cachedOriginalMaterial","velocityDepthNormalMaterial","cachedMaterials","_floatType","roughnessMap","metalnessMap","matrix","unsetVelocityDepthNormalMaterialInScene","updateMatrixWorld","background","WeakMap","DepthTexture","getVelocityDepthNormalPass","autoAdd","vdnPass","undefined","TRAAPlugin","_effect"],"mappings":"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"}
|